配置和校验
开启防抄板功能
方案商开启防抄版功能需要如下步骤:
-
编译一个烧录 eFuse 的 BootLoader,该固件只完成对出货的芯片烧录相关的 eFuse 和密钥,并使能 SPIENC 和安全启动功能。
-
编译一个进行了加密的量产固件,该量产固件可以发放给生产商。
-
生产商使用方案商提供的主控进行生产,烧录方案商提供的固件。
使用 SPIENC 进行防抄板开发
使用 SPIENC 进行防抄板开发需要用到如下几个开发步骤:
- 烧录 eFuse
防抄板的核心,烧录一个客户的私有密码,SPIENC 模块借助该密码完成从 flash 上读数据的解密和写数据加密功能。
- 固件签名
对从其他总线(TF卡,USB)读数据到内存中运行的路径进行签名校验,防止从非 SPI 总线的介质启动系统。
- 固件加密
对固件进行加密,防止明文固件流转。
重要:
-
防抄板支持 SPINOR 离线烧录,不支持 SPINAND 离线烧录。
-
为调试方便而增加的调试配置在量产的时候必须关闭。
-
为安全原因,可能获取解密后固件的接口:UART,TF卡在量产固件中应该关闭。
-
AES 为对称性加密算法,只有一组秘钥,要保护好该秘钥不被泄露。
制定校验方案
烧录 eFuse 并启用 SPIENC 后 eFuse 相关域无法显示,因此需要有严格的校验方案:
- eFuse 校验
-
执行 “gen_spienc_key” 后会生成一组校验数字,存放在“crc32.txt”中
./gen_spienc_key.sh 67e86628 spi_aes.key 67e86628 all.key
-
eFuse 烧录后 SDK 会读出烧录后的秘钥值进行运算并生成一组校验数字,该数组将写入TF卡中
SPI ENC KEY crc32 value:0x67e86628 SPI ENC NONCE crc32 value:0x28c7d1ae ROTPK crc32 value:0xb543441a BROM SPIENC is ENABLED SPI ENC Key is read DISABLED SPI ENC Key is write DISABLED SPI ENC ROTPK is write DISABLED JTAG LOCK is ENABLED
-
通过该两组数字对比进行校验
-
- SPINOR 离线烧录校验
SPINOR 离线烧录加密的固件的验证因为是验证当前的SPINOR,除了前期对要烧录的固件进行严格追踪外,只能通过贴样片到开发板的方式验证。
- OTA 校验
OTA 包不经过加密,使用的是 SPIENC 逻辑加密写入到 flash,因此不需要校验。
