方案 V1
本节介绍了 SPI Flash 防抄板方案 V1 的详细配置说明,以 D21x 开发板为例。
本方案通过使用 D21x 的 SPIENC 总线加密功能以及安全启动功能来实现防抄板,结合实际使用的需求,提供对应的软件方案。
SPIENC 总线加密
SPIENC 总线加密功能是一个芯片硬件支持的安全功能。芯片使能了 SPIENC 后,内部的 SPIENC 模块对 SPI 总线上传输的数据进行实时的加密或解密,即对写出去的数据进行 AES 加密,读回来的数据进行 AES 解密, 使得保存在 Flash 上的数据总是密文。
SPIENC 进行加解密时,使用芯片 eFuse 中特定密钥区域中的密钥对数据进行加密和解密,该密钥区域可以做到烧录后 CPU 不可读写,在芯片内部也仅有 SPIENC 模块能够访问,因此可以做到硬件安全保密。
-
在芯片中烧录特有的的 AES 密钥,并且将相关密钥区域设置为仅 SPIENC 可访问。
-
提供对应的加密固件。
-
对 AES 密钥进行妥善管理,防止泄露。
此时芯片和对应的固件就被绑定在一起,提供出去的固件,只能运行在烧录了对应加密密钥的芯片上; 烧录了密钥的芯片,也只能运行使用对应密钥加密后的固件。
安全启动
安全启动功能是通过 RSA 签名和验签的方式,保证芯片只运行经过合法签名的固件,非法固件无法在开启安全启动的芯片上执行。 在防抄板方案中,安全启动可以预防攻击者通过其它手段,运行非法程序读取 Flash 中的固件内容。
SPI ENC 功能对应的 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 章节。
用途 | 位数 | 地址 | 禁止位 | 禁写 | 禁读 | 归属 | 备注 |
---|---|---|---|---|---|---|---|
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,随机数 |
比特位 | 名称 | 描述 |
---|---|---|
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 |