Edit online

方案介绍

本节介绍了 SPI Flash 防抄板方案的详细配置说明,适用于 D21x 平台。

本方案通过使用 D21x 的 SPIENC 总线加密功能以及安全启动功能来实现防抄板,结合实际使用的需求,提供对应的软件方案。

Edit online

SPIENC 总线加密

SPIENC 总线加密功能是一个芯片硬件支持的安全功能。芯片使能了 SPIENC 后,内部的 SPIENC 模块对 SPI 总线上传输的数据进行实时的加密或解密,即对写出去的数据进行 AES 加密,读回来的数据进行 AES 解密, 使得保存在 Flash 上的数据总是密文。

SPIENC 进行加解密时,使用芯片 eFuse 中特定密钥区域中的密钥对数据进行加密和解密,该密钥区域可以做到烧录后 CPU 不可读写,在芯片内部也仅有 SPIENC 模块能够访问,因此可以做到硬件安全保密。

启用 SPIENC 需要:
  1. 在芯片中烧录特有的的 AES 密钥,并且将相关密钥区域设置为仅 SPIENC 可访问。

  2. 提供对应的加密固件。

  3. 对 AES 密钥进行妥善管理,防止泄露。

此时芯片和对应的固件就被绑定在一起,提供出去的固件,只能运行在烧录了对应加密密钥的芯片上; 烧录了密钥的芯片,也只能运行使用对应密钥加密后的固件。

Edit online

安全启动

安全启动功能是通过 RSA 签名和验签的方式,保证芯片只运行经过合法签名的固件,非法固件无法在开启安全启动的芯片上执行。 在防抄板方案中,安全启动可以预防攻击者通过其它手段,运行非法程序读取 Flash 中的固件内容。

Edit online

SPI ENC 功能对应的 eFuse 烧录信息

D21x 使能 SPIENC 功能,需要烧录的 eFuse 信息如下:
  • SECURE 区域中的 SPI_ENC_EN 位。

  • SECURE 区域中的 SECURE_BOOT_EN 位。

  • SPI_ENC KEY 区域中的密钥内容。

  • SPI_ENC NONCE 区域中的密钥内容。

  • DIS RD/DIS WR 区域中,关于 SPI_ENC KEY/ NONCE 的读写禁止位。

  • DIS WR 区域中,关于 ROTPK 的读写禁止位

  • SECURE 区域中的 JTAG_LOCK 位 (可选,关闭 JTAG 更安全)。

注:

相关信息可参考芯片用户手册 > 安全 > SID 章节。

1. eFuse 空间划分
用途 位数 地址 禁止位 禁写 禁读 归属 备注
DIS RD 64 0~7 0~1 V CSTM eFuse 读禁止配置区域
DIS WR 64 8~F 2~3 eFuse 写禁止配置区域
BROM 64 30~37 12~13 V CSTM BROM 参数配置区域
SECURE 64 38~3F 14~15 V CSTM 安全和调试功能开关
ROTPK 128 40~4F 16~19 V CSTM 安全,RSA 公钥的 MD5 Hash 值
SPI_ENC KEY 128 A0~AF 40~43 V V CSTM 安全,连接到 SPI_ENC,对称密钥
SPI_ENC NONCE 64 B0~B7 44~45 V V CSTM 安全,连接到 SPI_ENC,随机数
2. SECURE 区域定义
比特位 名称 描述
31:25 - -
24 PBP_ENC_EN BROM 读取使用,使能 PBP 程序加密功能
23:20 - -
19 SPI_ENC_EN BROM 读取使用,使能 SPI 总线数据加密功能
18 - -
17 ENCRYPT_BOOT_EN BROM 读取使用,使能固件加密启动功能
16 SECURE_BOOT_EN BROM 读取使用,使能安全启动功能
15:1 - -
0 JTAG_LOCK 逻辑组合后连接到 CPU 屏蔽 TDO,关闭 JTAG 调试功能,在安全方案中烧录为 1