4、信任根与安全存储:信任根(RoT)的概念、OTP(一次性可编程)存储、eFuse与安全密钥的烧录策略
好,咱们今天聊点硬核的——信任根和安全存储。说实话,这是整个安全启动体系的基石。你想想看,如果连最底层的信任都建立不起来,上面再花哨的校验都是空中楼阁。
4.1 信任根(RoT)到底是什么?
信任根,英文叫 Root of Trust,简称 RoT。说白了,它就是整个系统里绝对可信的那个起点。就像你信任你的父母一样,不需要任何理由。
在嵌入式系统里,RoT 通常是一个硬件模块。它负责做三件事:
- 度量:测量下一级代码的完整性
- 存储:保管最核心的密钥
- 报告:向外界证明自己的身份
我个人习惯把 RoT 比作「保安队长」。他手里拿着唯一一把真正的钥匙,其他人要进大楼,都得先过他这一关。我在项目中遇到过一种情况:某芯片厂商把 RoT 做在了软件里,结果被攻击者用电压毛刺攻击直接绕过。嗯,从那以后我坚决要求 RoT 必须硬件化。
核心原则:信任根必须是不可篡改的、不可绕过的、不可伪造的。这三个「不可」缺一不可。
4.2 OTP 存储——一次写,终生读
OTP 是 One-Time Programmable 的缩写。一次可编程,写进去就改不了。这玩意儿在安全领域太重要了。
为什么需要 OTP?因为密钥不能存在 Flash 里。Flash 可以被擦除、被读出来、被篡改。而 OTP 一旦烧录,物理上就锁死了。
常见的 OTP 实现方式有几种:
| 类型 | 原理 | 特点 |
|---|---|---|
| 熔丝型 | 烧断金属丝 | 不可逆,物理破坏 |
| 反熔丝型 | 击穿绝缘层 | 面积小,可靠性高 |
| eFuse | 电迁移效应 | 可编程,精度高 |
我记得有一次做项目,客户要求密钥必须 100% 不可恢复。我们最后选了反熔丝型 OTP,因为它的物理破坏程度最高,即使做芯片逆向也读不出来。
注意:OTP 烧录是一次性的。一旦烧错,芯片就废了。所以烧录前的验证流程必须严格。我曾经见过一个团队,因为脚本写错了,把测试密钥烧进了量产芯片,结果 10 万片全部报废。
4.3 eFuse——更灵活的 OTP
eFuse 是 IBM 发明的一种技术。它利用电迁移效应,让金属丝在电流作用下断裂。和传统熔丝比,eFuse 有几个优势:
- 可以在封装后编程
- 支持多次验证(先读再烧)
- 精度更高,可以按位控制
但 eFuse 也有坑。它需要较大的编程电流,而且烧录后电阻值会漂移。我在项目中遇到过一个问题:某批次芯片的 eFuse 烧录后,过了一段时间电阻值回升,导致读出的数据出错。后来查出来是工艺偏差,只能加严测试标准。
eFuse 的典型应用场景:
- 芯片唯一 ID:每颗芯片烧录不同的序列号
- 密钥存储:烧录根密钥,用于安全启动
- 配置锁定:锁定芯片的调试接口、JTAG 等
- 版本控制:记录芯片的版本号、修订号
4.4 安全密钥的烧录策略
好,到了最关键的环节——密钥怎么烧进去?
你想想看,如果密钥在烧录过程中被截获了,那整个安全体系就形同虚设。所以烧录策略必须精心设计。
4.4.1 烧录环境
密钥烧录必须在安全环境中进行。我建议:
- 使用专用的烧录设备,不能和产线共用
- 烧录过程全程加密传输
- 烧录完成后,密钥从主机内存中立即擦除
4.4.2 密钥分层
不要把所有鸡蛋放在一个篮子里。密钥也要分层:
| 层级 | 名称 | 存储位置 | 用途 |
|---|---|---|---|
| L0 | 根密钥 | OTP/eFuse | 验证 BootROM |
| L1 | 设备密钥 | OTP 或安全 RAM | 验证 Bootloader |
| L2 | 应用密钥 | 加密后存 Flash | 验证应用固件 |
这样做的好处是:即使应用密钥泄露了,根密钥还在,系统依然可控。
4.4.3 烧录流程
我推荐一个经过验证的烧录流程:
1. 芯片上电,进入烧录模式
2. 主机发送加密的密钥包
3. 芯片用内置的硬件解密引擎解密
4. 将解密后的密钥写入 OTP/eFuse
5. 回读验证,确认烧录正确
6. 锁定 OTP 区域,防止再次写入
7. 主机清除所有临时密钥数据
小技巧:烧录完成后,一定要做「读回验证」。我曾经遇到过烧录器接触不良,导致某几位没烧进去,结果芯片在产线上全挂了。后来我们加了一道「烧录后校验」的工序,问题就解决了。
4.5 避坑指南
做安全存储这么多年,我踩过的坑不少。分享几个典型的:
- 坑一:OTP 容量不够。设计初期没算好,密钥太大放不下。后来只能压缩密钥长度,降低了安全性。建议留 20% 的余量。
- 坑二:烧录时序不对。eFuse 对时序要求很严,电压不稳就会烧失败。我建议在烧录时监控电源,用示波器抓一下波形。
- 坑三:密钥备份问题。OTP 烧坏了怎么办?没有备份。后来我们设计了一个「双 OTP 区域」的方案,主区域烧坏了还有备用区域。
- 坑四:测试密钥混入量产。这个前面提过,一定要用独立的密钥管理系统,测试和量产严格隔离。
4.6 总结
信任根和安全存储,说白了就是给系统装上一把「打不开的锁」。OTP 和 eFuse 是这把锁的材料,密钥烧录策略是锁的构造。材料选对了,构造合理了,系统才能真正安全。
我个人觉得,做安全最怕的就是「差不多就行」。差一点,可能就差了一个安全漏洞。所以,该花的成本要花,该做的验证要做。别等到产品上市了才发现问题,那时候就晚了。
下一章,咱们聊聊安全启动的具体实现。到时候我会拿一个实际芯片的启动流程来拆解,保证干货满满。