SecureBoot 经常被概括成一句话:设备启动之前先验证固件,验证通过才允许执行。
这句话没有错,但真正进入一个量产 ECU 工程后,很快会遇到一连串更具体的问题:谁先启动?谁负责验证?验证对象是整个镜像,还是一张描述镜像的清单?数字签名验证和 Hash 比较为什么会同时存在?为什么系统还要把一份 Reference Hash 存进 NvM?Reference Hash 第一次又是谁建立的?如果它丢失了,系统应该重新认证,还是直接“学习”当前内容?
这些问题如果没有放到完整启动链里理解,很容易在阅读 SecureBoot 代码时陷入局部:看到 HashAvailable,却不知道它为什么存在;看到 SignatureVerify,却不知道它在整条信任链中的位置;看到一个“让 ECU 恢复启动”的补丁,也很难判断它只是修复了状态机,还是同时改变了信任建立规则。
