基于 SemiDrive E3 平台外部 Flash 加密介绍

关键字 :E3Flash加密

一、Flash 加密概述

1、外置Flash的信息安全机制

存储在外部 Flash 的数据,存在通过硬件手段读取到数据的风险, E3 系列芯片提供自研的串行 Flash 控制 XSPI(支持1/2/4/8线,支持SDR/DDR)中,加入了如下安全机制,提高外部 Flash 数据的安全性。

  • 内嵌运行时解密模块 - 支持在CPU在Flash取指令或数据时实时的进行解密,在保证安全的同时不影响性能
  • 支持AES128对称密码 - 提供足够的加密等级,保证 Flash 内的内容无法破解。
  • 加密密码烧写到芯片内部 eFuse 并可锁定。


2
RFD64Byte

用于控制 Flash 的加密区域,在加密启动时使用,RFD存储在 Flash 中。


3
Fuse 相关位

加密密码烧写到芯片内部 eFuse 并可锁定,锁定后用户和软件不可见。

MISC_CFG0:使能 XSPI1A falsh 加密


FDK/PVK0: PVK 模式密码


MISC_CFG1: 使能使用 PVK 模式

 

二、Flash 加密测试

1、步骤一:生成 RFD

1.1 加密信息

加密数据区域 1

开始地址:0x0

结束地址:0x20000(4kb 对齐)

加密数据区域 2

开始地址:0x400000

结束地址:0x600000(4kb 对齐)

 

1.2 生成 RFD

生成工具:.\SDToolBox_R2.23.1601\App\Misc\atb_sign\atb_signer

 

生成命令:

atb_signer xspi_wrap --rfd pvk0=112233445566778899aabbccddeeff00 iv=abcdef start=0x0 end=0x20000 --rfd pvk1=ffeeddccbbaa99887766554433221100 iv=abcdef start=0x400000 end=0x600000 of=./new.rfd


RFD 数据:

 

2、步骤二:数据加密

1.1 加密概述

加密数据区域  与数据区域 0,加密前加密后数据大小一致

 

1.2 加密数据

加密工具:.\SDToolBox_R2.23.1601\App\Misc\atb_sign\atb_signer

 

加密命令:

atb_signer xspi_enc pvk0=112233445566778899aabbccddeeff00 iv=abcdef if=normal.bin of=normal_pvk0_enc.bin

atb_signer xspi_enc pvk1=ffeeddccbbaa99887766554433221100 iv=abcdef if=normal.bin of=normal_pvk1_enc.bin

3、步骤三:USB 刷写数据

new.rfd 烧入RFD区域

readback_APP_PVK0_ENC.bin 烧入(0x0:0x20000)

readback_APP_PVK1_ENC.bin 烧入(0x40000:0x60000)

 

4、步骤四:XSPI EB 配置

开启 RFD 解密功能,需在 EB MCAL FLS 配置中开启 FlsRFDEnable,开启后 Fls 读取加密区域数据则为明文。

 

5、步骤五:测试代码

除了真烧 Fuse 以外,还可以通过写 Shadow 影子寄存器实现 Fuse 功能(影子寄存器功能与 Fuse 对应位一致)

    /*Flash Decryption Key(fdk)*/
// pvk0 112233445566778899aabbccddeeff00
writel(0xDDEEFF00, APB_EFUSEC_BASE + 0x1120);
writel(0x99AABBCC, APB_EFUSEC_BASE + 0x1124);
writel(0x55667788, APB_EFUSEC_BASE + 0x1128);
writel(0x11223344, APB_EFUSEC_BASE + 0x112c);

// pvk1 ffeeddccbbaa99887766554433221100
writel(0x33221100, APB_EFUSEC_BASE + 0x1130);
writel(0x77665544, APB_EFUSEC_BASE + 0x1134);
writel(0xBBAA9988, APB_EFUSEC_BASE + 0x1138);
writel(0xFFEEDDCC, APB_EFUSEC_BASE + 0x113c);

// XSPI1A_SILE烧写为1,使能解密功能
writel(0x00008000, APB_EFUSEC_BASE + 0x12C0);

// XSPIA_REGION0_ECE、XSPIA_REGION1_ECE 分别烧写为1,使能 RFD0,RFD1
writel(0x00000433, APB_EFUSEC_BASE + 0x12C4);

 

6、步骤六:读取解密数据

Fls 驱动 XSPIA 读取 Flash 上数据是 HSM 模块会自动解密加密区域,从而实现无感加密功能。

读取 Bank A 0x0-0x20000 加密区域 Region0 RFD0 PVK0

读取 Bank B 0x400000-0x600000 加密区域 Region1 RFD1 PVK1

 

三、参考资料

《E3400_E3600_MCU_TRM_Rev01.00.pdf》

《SEMIDRIVE_eHSM_开发指南_Rev1.1.pdf》

《Semidrive_E3信息安全_Rev1.0.pdf》

[芯驰科技 SemiDrive] https://www.semidrive.com

★博文内容均由个人提供,与平台无关,如有违法或侵权,请与网站管理员联系。

★文明上网,请理性发言。内容一周内被举报5次,发文人进小黑屋喔~

评论