芯片安全启动:熔丝密钥与防回滚计数要分步锁定
安全启动失败常被归因于签名算法,真正危险的窗口却在不可逆状态切换。芯片既要确保eFuse根密钥被可靠写入并锁定,也要让防回滚计数只在新镜像可启动后前进,否则一次掉电就可能永久变砖。
eFuse或OTP写入依赖局部高电压或大电流改变熔丝状态,制造条件、温度和电源压降都会影响最终阻值。一次读回为目标值,并不保证多年后仍有足够感测裕量;处在判决门限附近的单元可能随温度和老化翻转。量产流程应在规定电压与温度角复读,并利用冗余编码或多位表决降低单点边缘状态。
根密钥的生命周期比写入本身更复杂。空白器件需要开放编程路径,写入后又必须禁止普通调试口读回或覆盖;若先关闭访问再验证密钥,异常器件将失去返修入口,若长期保留开放状态,攻击面又留在出货产品。正确顺序是写入、角落条件校验、派生验证、关闭读取与重写权限,最后再锁定生命周期状态。
密钥不一定直接以明文保存在熔丝中,也可保存公钥摘要、设备秘密或密钥派生种子。无论形式如何,启动ROM必须明确感测错误的处理:把不可纠正状态当成全零继续执行,会把硬件故障变成认证绕过。安全故障通常应停止进入普通镜像,并只允许由独立授权的恢复路径处理,同时记录不可伪造的错误原因。
制造测试还要覆盖部分熔写和掉电。编程脉冲进行到一半时,多个冗余位可能处于混合状态;重试若不具备幂等规则,会把剩余备用位耗尽。工站应先读取当前生命周期和已用冗余,再决定继续、隔离或报废,不能无条件重复整套脚本。批次审计必须关联器件身份、熔写版本和锁定结果。
防回滚计数解决的是旧固件仍具有效签名的问题。攻击者可能利用旧版本中的已知漏洞,因此启动ROM要拒绝低于硬件单调版本的镜像。计数可由熔丝位、单调安全存储或受保护控制器维护,但状态只能向前,更新前必须确保目标镜像已完成签名、完整性和兼容性验证。
A/B更新中,先增加计数再写完新槽,会让旧槽立即失去资格,而新槽尚不可启动;先切换活动槽但不保护计数,又可能在回滚后重新接受漏洞版本。更稳妥的状态机是把新镜像完整写入非活动槽,验证并进行试启动,确认关键外设和数据迁移成功后再提交单调计数,最后清除旧恢复资格。每一步都要能从掉电中判定。
计数资源也有边界。按每个小版本烧一位会很快耗尽熔丝,采用编码可增加次数,却提高解码与部分写入处理复杂度。服务模式若允许安装更旧诊断镜像,必须由单独密钥和受限功能授权,不能临时降低全局计数。验证应遍历更新、失败回退、计数提交和恢复镜像之间的所有断电点。
安全验证还应区分认证拒绝与器件损坏。故意使用错误签名、旧版本、计数撕裂和边缘熔丝读值,启动ROM都应进入可判定的受限状态,不能因错误类型不同意外开放调试。量产密钥与测试密钥的生命周期必须隔离,测试模式关闭后再尝试全部制造命令,确认不存在通过异常复位回到开放态的路径。
因此,根密钥负责定义谁能签名,单调计数负责限定哪个版本仍可信。先证明不可逆写入具有裕量,再按可恢复状态机推进版本,芯片安全启动才能同时防止伪造、降级与更新中断。





