2、硬件信任根设计:基于eFuse/OTP的密钥存储、安全元件(SE)与TPM选型、硬件防篡改机制
各位同学,咱们接着聊。上一章讲了安全启动的整个链路,但有个核心问题没解决——信任的起点在哪?
说白了,你总得有个东西是「天生可信」的。不能靠软件自己证明自己,那叫循环论证。我当年刚接触安全领域时,就犯过这个错——以为在Flash里存个密钥就万事大吉。结果呢?被人家用电压毛刺攻击直接读出来了。嗯,从那以后,我就彻底明白了硬件信任根的重要性。
2.1 eFuse与OTP:芯片自带的「保险箱」
先讲最基础的。eFuse和OTP,本质上都是一次性可编程存储。写进去就改不了,想擦除?只能物理破坏芯片。
我个人习惯把eFuse比作芯片的「出生证明」。芯片出厂时是空白的,你在产线上把根密钥、芯片ID、使能位等信息烧进去,从此这些数据就焊死在硅片上了。
关键区别:
- eFuse:基于电迁移效应,通过熔断金属连线来存储数据。优点是密度高、可做冗余设计。缺点是烧录时需要大电流,对电源有要求。
- OTP:基于栅氧化层击穿原理,用高电压击穿MOS管的栅极。优点是功耗低、工艺成熟。缺点是面积大,且一旦击穿就不可逆。
我在项目中遇到过最头疼的事——eFuse烧录到一半断电了。结果芯片直接变砖,整批报废。所以后来我强制要求:所有eFuse烧录必须搭配电容储能,保证烧录期间不掉电。
2.1.1 密钥存储策略
eFuse里存什么?不是把整个密钥文件扔进去。你想想看,eFuse空间很金贵,一般只有几百字节到几KB。正确的做法是:
- 存根密钥(Root Key):通常是一个256位的AES密钥或ECDSA私钥。这是整个信任链的源头。
- 存配置位:比如JTAG是否锁定、安全调试是否开启、哪些Flash区域需要加密。
- 存芯片唯一ID:用于设备身份认证,防止密钥克隆。
我的经验:千万别把应用层密钥存到eFuse里。eFuse只存「用来派生其他密钥的根密钥」。应用密钥应该由根密钥通过KDF(密钥派生函数)生成,这样即使某个应用密钥泄露,根密钥依然安全。
2.1.2 烧录与锁定流程
这里有个坑,我踩过。eFuse烧录不是一次写完就完事了,它有个编程-校验-锁定三步走:
// 伪代码示例:eFuse烧录流程
1. 写入密钥数据到eFuse寄存器
2. 启动编程电压(通常1.8V→2.5V)
3. 等待编程完成(约10μs)
4. 回读校验:读取eFuse值与原始值比对
5. 如果校验失败,重试(最多3次)
6. 锁定eFuse控制寄存器(防止再次写入)
7. 熔断JTAG/调试接口(可选)
我曾经遇到一个案例:某厂商为了省成本,跳过了校验步骤。结果10%的芯片eFuse值有误,导致安全启动失败。嗯,省了3毛钱,赔了300万。
2.2 安全元件(SE)与TPM选型
eFuse虽然好,但有个硬伤——它焊死在主芯片上。如果主芯片被物理破解,eFuse里的密钥也就暴露了。这时候就需要独立的安全芯片出场了。
安全元件(SE)和TPM,说白了都是独立的加密协处理器。它们有自己的CPU、RAM、ROM和防攻击电路。密钥存在里面,主芯片只能通过命令调用,永远拿不到明文。
| 特性 | 安全元件(SE) | TPM 2.0 |
|---|---|---|
| 典型应用 | 移动支付、SIM卡 | PC主板、服务器 |
| 接口 | ISO 7816、I2C、SPI | LPC、SPI、I2C |
| 密钥存储 | 内部OTP + 安全文件系统 | 内部NVRAM + PCR寄存器 |
| 防篡改等级 | CC EAL5+ 以上 | CC EAL4+ 常见 |
| 成本 | 较高($1-$5) | 中等($0.5-$2) |
| 典型厂商 | NXP、ST、Infineon | Infineon、Nuvoton、Microchip |
选型警告:别只看安全等级证书。我见过某款号称EAL6+的SE,实际测试时用激光照射特定区域就能触发故障注入。证书是实验室环境下的,实战是另一回事。
2.2.1 内窥镜场景下的选型建议
做内窥镜系统,你得考虑几个特殊点:
- 体积:内窥镜手柄空间极小,SE/TPM封装最好选QFN 3x3mm或WLCSP。
- 功耗:电池供电,待机电流要低于1μA。有些TPM待机就吃100μA,直接劝退。
- 温度范围:内窥镜要过134℃高温高压灭菌,普通SE扛不住。得选工业级或汽车级。
我个人习惯用NXP的SE050系列。它支持I2C接口,封装小,而且有现成的MCU驱动库。我在一个项目里用它做密钥协商,配合主芯片的TEE,实现了端到端的加密通道。嗯,效果不错,至今没出过安全问题。
2.3 硬件防篡改机制
最后聊点硬核的。密钥存好了,芯片选好了,但攻击者可以直接拿探针去戳你的总线啊!
硬件防篡改,说白了就是让攻击者一碰就死——要么触发自毁,要么让数据瞬间消失。
2.3.1 主动防护层(Active Shield)
这是最常用的技术。在芯片顶层金属上布一层蛇形走线,形成一个「防护网」。攻击者想用FIB(聚焦离子束)修改电路?必须先切断这些走线。而一旦走线断开,芯片内部的比较器就会检测到电阻/电容变化,立刻触发安全响应。
我记得有一次,客户送来的样机被第三方做逆向。对方用化学方法逐层腐蚀芯片,结果在主动防护层就卡住了——每腐蚀一层,防护走线就断一根,芯片直接擦除了所有密钥。最后他们只拿到了一颗「白片」。
2.3.2 电压与温度监测
攻击者常用的手段是电压毛刺——在芯片正常工作时瞬间拉高或拉低电压,让CPU执行错误的指令。比如跳过安全启动的校验分支。
怎么防?加监测电路:
- 电压监测器:设定一个窗口(比如1.7V-1.9V),超出范围立刻复位或触发中断。
- 温度监测器:有些攻击会用液氮降温来冻结SRAM数据。温度低于-40℃时,芯片自动擦除敏感区。
避坑指南:我曾经遇到过电压监测器太灵敏,导致正常上电时频繁误触发。后来加了100μs的滤波延时,问题解决。记住:防护要有效,但不能影响正常功能。
2.3.3 自毁与零化机制
当检测到篡改行为时,芯片必须在纳秒级时间内擦除密钥。这不能靠软件,得靠硬件逻辑直接控制。
常见的做法:
- 密钥存储使用易失性SRAM,由电池或电容供电。一旦检测到篡改,切断供电,SRAM数据瞬间消失。
- 或者使用反熔丝技术,正常状态下密钥存在,一旦触发高压脉冲,反熔丝结构被击穿,密钥物理性损坏。
我参与过的一个高端内窥镜项目,用了三层防护:主动防护层 + 电压监测 + 自毁SRAM。攻击者即使切开封装,只要一碰内部走线,密钥就没了。那款产品至今没被破解过。
小结
硬件信任根,是整个安全体系的基石。eFuse/OTP负责存储根密钥,SE/TPM提供独立的安全执行环境,防篡改机制则确保攻击者无法物理获取密钥。
选型时记住一句话:没有绝对的安全,只有足够的安全。你的防护等级,取决于你的攻击者愿意花多少钱。对于内窥镜这种医疗设备,做到CC EAL5+级别,配合完善的防篡改设计,基本就能挡住99%的攻击者了。
下一章,咱们聊聊安全启动的软件实现——如何用代码把信任链跑起来。