安全启动配置
-
密钥管理
密钥分为签名秘钥 和固件加解密的密钥。有部分密钥在出厂阶段烧录在 eFuse 相关密钥区域, 部分密钥嵌入到启动镜像中,保存在存储介质。-
签名密钥
芯片支持对启动镜像进行签名,固定使用 RSA-2048 进行签名和验证。涉及的密钥和相关数据有:
-
RSA-2048 非对称密钥对(公钥和私钥)
RSA 密钥对可由 Openssl 工具生成。RSA 私钥用于对启动镜像进行签名,在生成量产固件时使用,厂商必须严密保管以防泄露。 RSA 公钥保存为标准的 DER 公钥文件,并且保存在启动镜像中,设备启动过程中 BROM 用其对加载的启动镜像进行签名认证。
-
ROTPK
为了保证公钥的真实性,需要将 RSA 公钥的数据摘要信息 (MD5) 烧录到 eFuse 的 ROTPK 区域, BROM 在使用公钥前首先要检查其数据摘要信息与 ROTPK 中的数据摘要信息是否一致。 ROTPK 需要在出厂时设置写保护,以防被恶意修改。
-
-
AES 密钥
芯片支持使用 AES-128 算法对启动镜像的可执行代码区域进行加密,其使用的密钥在出厂阶段烧录在 eFuse 的 SSK 区域。BROM 在启动时会使用 SSK 对固件进行解密。
SSK 区域需要在出厂时设置为仅硬件加解密模块可以读访问,CPU 不可读写,以防被攻击者读取到密钥的信息。
-
-
签名验证:
-
将启动镜像加载到芯片内部 RAM 中。
-
首先计算公钥数据的数据摘要(MD5),与 ROTPK 中的值进行对比。
-
如果公钥有效,则使用公钥对镜像的签名数据进行解密,得到镜像的原始数据摘要。
-
重新计算镜像的数据摘要,并与原始数据摘要进行比较。
-
结果一致,则签名验证通过。
-
-
固件解密
-
配置硬件加解密模块 (CE),使用 SSK 对代码区域进行 AES-CBC 解密。
-
解密是原地进行的,直接覆盖原来的加密数据区域。
-
-
安全 eFuse 配置
eFuse 中与启动安全相关的区域有:
-
SECURE
-
SSK
-
ROTPK
-