3. 安全启动链的密码学基础
NVIDIA DRIVE 的安全启动并不是“把固件加密后烧进芯片”这么简单,它本质上是一条由密码学原语串起来的信任链:每一级固件在被执行前,都要先证明自己确实由可信方签发、内容未被篡改,然后才有资格去验证下一级。理解这条链,需要先掌握四类基础机制——非对称签名与验签、哈希链、证书链、密钥派生与密钥封装,再看它们如何映射到 DRIVE 的实际启动阶段。
一、非对称签名与验签:信任的起点
非对称密码使用一对密钥:私钥签名、公钥验签。签名过程并不直接对整段固件做运算,而是先对固件做哈希,得到固定长度的摘要,再用私钥对摘要签名。验签方用公钥解出摘要,并自行对固件重新哈希,两者一致才通过。这样做的关键收益是:签名长度固定、计算量可控,且任何 1 bit 改动都会导致摘要雪崩式变化。
在 DRIVE 上,常见的算法组合是 ECDSA P-256 配 SHA-256,或 RSA-3072/4096 配 SHA-384。以 ECDSA P-256 为例,签名约 64 字节(r、s 各 32 字节),公钥约 64 字节,非常适合写入芯片内的一次性可编程(OTP)区域或只读 ROM。验签时若使用 SHA-256,摘要为 32 字节,签名验证失败通常意味着三种情况之一:固件被改动、签名与公钥不匹配、或签名本身格式/曲线参数错误。
二、哈希链:把每一级固件“锁”在一起
哈希链解决的是“下一级固件是否可信”的问题。做法是:上一级固件中保存下一级固件的哈希值(或哈希的签名),启动时先计算下一级固件的实际哈希,与保存值比对,一致才跳转执行。这样,信任从不可变的 BootROM 开始,逐级向下传递,任何一级被替换都会在进入前被拦截。
哈希链有两种常见形态:一种是“哈希表”,即一级固件里存多个组件的哈希;另一种是“链式”,即 A 的哈希签在 B 里,B 的哈希签在 C 里。DRIVE 的启动通常混合使用:BootROM 验证引导加载程序,引导加载程序再验证多个固件分区。哈希链的价值在于它把“完整性”变成了可传递的属性,而不是每级各自为政。
三、证书链:让公钥本身也可信
如果每一级固件都直接内置下一级的公钥,密钥管理会非常僵硬。证书链用“根证书—中间证书—叶证书”的层级解决这个问题:根公钥固化在芯片中,根私钥离线保存;根签发中间证书,中间证书再签发具体固件的叶证书。验签时,从叶证书逐级向上验证签名,直到根公钥。
在 DRIVE 启动中,证书链通常与签名一起打包成签名头(signed header),包含叶证书、中间证书、签名和元数据。BootROM 只信任根公钥,其余公钥通过证书链动态获得。这样,即使某台设备的中间密钥泄露,也只需吊销对应中间证书,而不必更换芯片内的根密钥。
四、密钥派生与密钥封装:从根密钥到会话密钥
安全启动不仅验证“能不能启动”,还要为后续的加密启动、安全存储、TEE 提供密钥。密钥派生(KDF)用根密钥和上下文信息(如芯片唯一 ID、固件版本、用途标签)派生出不同用途的子密钥。常见做法是 HKDF-SHA256:先提取(Extract)再扩展(Expand),保证不同用途的密钥相互独立。
密钥封装(Key Wrap)则用于保护密钥本身。例如用 AES-KW 把固件加密密钥封装后随镜像分发,设备端用派生出的密钥解封。这样,即使镜像被复制到另一台设备,由于芯片唯一 ID 不同,派生密钥不同,也无法解封。密钥派生与封装把“信任”从启动阶段延伸到了运行阶段。
五、映射到 DRIVE 启动流程
把上述机制放到 DRIVE 的实际启动顺序中,可以看到清晰的对应关系。BootROM 是信任根,内部固化根公钥和根密钥,它首先验证引导加载程序(BL/MB1)的签名头。签名头里包含叶证书、中间证书和签名,BootROM 用根公钥验证证书链,再用叶公钥验证 BL 的哈希签名。通过后,BL 获得执行权。
BL 接着验证多个固件分区,包括 TEE、安全 OS、Hypervisor 等。这里通常使用哈希表:BL 中保存各分区的哈希,逐个计算比对。同时,BL 会利用根密钥和芯片唯一 ID 通过 HKDF 派生出加密启动所需的密钥,并用 AES-KW 解封固件加密密钥,对加密镜像解密后再验签。这样,机密性和完整性同时得到保障。
进入操作系统后,安全启动的成果继续被使用:TEE 用派生出的会话密钥与安全世界通信,安全存储用另一组子密钥加密数据。整个链条中,任何一级验签失败都会导致启动终止,设备进入恢复模式,并可通过串口日志或调试接口读取失败原因。
六、工程实践中的关键参数与判断
在实际调试中,以下参数和判断点最值得关注:
| 环节 | 关键参数/对象 | 判断依据 |
|---|---|---|
| BootROM 验签 | 根公钥、叶证书、签名算法 | 证书链可回溯到根,签名验证通过 |
| BL 验证分区 | 分区哈希表、哈希算法 | 实际哈希与表中值一致 |
| 密钥派生 | 芯片唯一 ID、用途标签、HKDF 盐 | 派生密钥可解封对应镜像 |
| 加密启动 | AES-KW 封装密钥、加密镜像 | 解封成功且解密后验签通过 |
| 失败处理 | 恢复模式、日志接口 | 能定位到具体失败级别 |
理解这四类机制及其映射关系后,就能在遇到启动失败时快速定位:是签名算法不匹配、哈希链断裂、证书链过期,还是密钥派生上下文错误。安全启动的可靠性,正来自这些密码学原语在每一级启动中的严格、一致执行。