2、信任根(RoT)基础:硬件信任锚点、Boot ROM、eFuse与OTP
聊启动链安全,绕不开一个概念——信任根。说白了,信任根就是整个安全体系的「原点」。你想想看,如果这个原点都不靠谱,那后面再多的加密、校验都是白搭。我这些年做安全启动方案,踩过最大的坑,往往不是算法选错了,而是信任根没扎牢。
2.1 硬件信任锚点:为什么必须是硬件?
信任锚点,就是整个信任链的起点。它必须满足一个条件:不可篡改。
软件层面的信任,说白了就是「自己证明自己」。比如一段代码去校验另一段代码,那谁来校验这段代码本身?这就成了鸡生蛋蛋生鸡的问题。所以,信任锚点必须落在硬件上。
硬件信任锚点的核心特性:
- 物理不可变性——一旦出厂,无法通过软件修改
- 唯一性——每颗芯片的信任锚点都不同
- 隔离性——普通软件无法直接访问
我在一个IoT项目里见过一个「经典」翻车案例:某厂商把公钥存在Flash里,结果攻击者直接替换了公钥,用自己的固件签了个名,整个安全体系瞬间崩塌。嗯,这就是信任锚点没落在硬件上的后果。
2.2 Boot ROM:第一段不可更改的代码
Boot ROM,就是芯片上电后执行的第一段代码。它固化在芯片的只读存储器里,出厂后谁也改不了。
为什么Boot ROM这么重要?因为它是信任链的物理起点。
芯片上电后,CPU直接跳到一个固定地址开始执行——这个地址就在Boot ROM里。Boot ROM负责做三件事:
- 初始化硬件——时钟、内存、外设的基本配置
- 验证下一级Bootloader——用硬件信任锚点里的密钥去校验签名
- 跳转执行——校验通过后,把控制权交给下一级
我个人的习惯:在设计Boot ROM时,一定要把验证逻辑做得足够简单。越简单越容易审计,越不容易藏后门。我曾经review过一个Boot ROM,里面居然有2000多行代码,光看就看了两周——这种复杂度本身就是安全隐患。
Boot ROM的另一个关键点是:它必须能处理「恢复模式」。如果下一级Bootloader校验失败怎么办?是死循环?还是进入一个安全的恢复接口?这个决策直接影响产品的可维护性。
2.3 eFuse与OTP:一次性编程的「熔丝」
eFuse和OTP,是硬件信任锚点的「存储介质」。它们都是一次性可编程的——写进去就改不了。
eFuse这个名字挺形象,它最早来自IBM的技术:通过大电流把芯片里的「熔丝」烧断,从而实现永久性的状态改变。OTP(One-Time Programmable)则是更广义的说法,包括eFuse、反熔丝等技术。
| 特性 | eFuse | OTP(反熔丝) |
|---|---|---|
| 编程原理 | 熔断金属连线 | 击穿绝缘层形成导通 |
| 初始状态 | 默认导通(0) | 默认断开(0) |
| 编程后状态 | 断开(1) | 导通(1) |
| 面积开销 | 较大 | 较小 |
| 可靠性 | 较高,不易误烧 | 较低,有漏电风险 |
在实际项目中,eFuse用得更多一些。我记得有一次做车规级芯片,客户要求eFuse的误烧率低于10^-9,我们折腾了三个月才把工艺调稳。
2.4 信任根在启动链中的位置
把上面几个概念串起来,就形成了信任根的完整结构。我画了一张图,你看一眼就明白了:
这个结构里,信任根就是最顶层的硬件信任锚点 + Boot ROM。它们俩谁也改不了,所以是整个安全体系的基石。
2.5 实际部署中的避坑指南
做信任根设计,有几个坑我替你们踩过了:
我曾经犯过的错:
- eFuse位不够用——有个项目只规划了128位eFuse,结果密钥、配置、版本号全往里塞,最后不够用,只能砍功能。建议至少预留256位以上。
- Boot ROM里留了调试接口——出厂时忘了熔断JTAG,结果被攻击者通过调试接口直接读走了eFuse内容。嗯,这个教训很深刻。
- 信任根没有回退机制——有一次固件签名密钥丢了,整批芯片变砖。后来我学乖了,eFuse里至少留一个「恢复密钥」的位,关键时刻能救命。
我的建议:在设计阶段就把eFuse的位分配表画清楚。哪些位存根密钥,哪些位存配置,哪些位留作未来扩展。这个表要写进芯片的硬件手册里,不然三年后换了个工程师,谁也看不懂当初为什么这么分配。
2.6 信任根的演进方向
传统的信任根方案,说白了就是「一把锁一把钥匙」。但现在的攻击手段越来越复杂,比如侧信道攻击、故障注入攻击,都能绕过信任根。
所以业界开始推一些新方案:
- PUF(物理不可克隆函数)——利用芯片制造过程中的随机差异生成唯一密钥,不需要eFuse存储
- 多信任根架构——不止一个信任根,多个信任根互相校验
- 可编程信任根——允许在安全环境下更新信任根逻辑,但需要物理访问权限
我个人比较看好PUF的方向。它不需要eFuse,也就没有「烧录」这个环节,生产流程能简化不少。不过PUF的稳定性还是问题——温度一变,生成的密钥可能就不一样了。这个技术还得再成熟几年。
好了,信任根的基础就聊到这儿。记住一句话:信任根是安全启动的「命门」,设计时多花点心思,后面能省十倍的事。