4、硬件信任根(RoT):信任链的起点
聊安全启动,绕不开一个概念——信任根(Root of Trust,RoT)。
说白了,信任根就是整个安全体系的「第一块基石」。你想想看,如果连这块基石都是松的,上面盖再高的楼也没用。我入行那会儿,有个前辈跟我说过一句话,我一直记着:「安全启动的本质,就是从一个绝对可信的点出发,一步步验证,直到整个系统跑起来。」
那这个「绝对可信的点」在哪儿?它不在软件里,也不在网络上。它必须是一个物理上无法篡改的硬件单元。这就是我们今天要聊的核心——硬件信任根。
4.1 什么是信任根?
信任根,是一个必须被无条件信任的实体。它不需要外部验证,因为它本身就是验证的起点。
在IoT设备里,信任根通常承担两个职责:
- 存储根密钥:把最核心的私钥或秘密,锁在硬件里,谁也读不走。
- 执行根度量:在设备上电时,第一个执行代码,测量下一级固件的完整性。
我习惯把信任根比作「保险箱的锁芯」。你可以换保险箱的外壳,可以换密码键盘,但锁芯的物理结构一旦被攻破,整个保险箱就废了。
核心原则:信任根必须是 不可变(Immutable)且 不可伪造(Unforgeable)的。任何软件层面的修改,都不应该影响到信任根的安全性。
4.2 硬件安全模块(HSM / TPM)
先说说两个最常见的硬件信任根方案:HSM 和 TPM。
4.2.1 HSM(硬件安全模块)
HSM 是个「大家伙」。它通常是一个独立的硬件设备,专门用来生成、存储和管理密钥。我在做金融级IoT网关项目时,后端密钥管理系统就用了HSM。
HSM 的特点:
- 物理防护极强:有防拆、防侧信道攻击的设计。
- 高性能密码运算:每秒能处理上万次签名/验签。
- 适合云端或网关侧:成本高,体积大,不适合终端传感器。
4.2.2 TPM(可信平台模块)
TPM 是「缩小版」的HSM,但它更贴近普通设备。TPM 是一个焊在主板上的安全芯片,遵循 TCG(可信计算组织)的标准。
TPM 能干的事:
- 存储平台度量值(PCR寄存器)。
- 生成 RSA/ECC 密钥对,且私钥永远不出芯片。
- 提供远程证明(Remote Attestation)能力。
我记得有一次,客户要求设备启动时做「链式度量」。我们就是用 TPM 的 PCR 寄存器,逐级记录 Bootloader、OS Kernel、关键服务的哈希值。一旦某个环节被篡改,PCR 值就对不上,系统直接拒绝启动。
我的经验:TPM 虽然好,但驱动复杂。很多IoT芯片的MCU跑不了完整的 TPM 协议栈。这时候,可以考虑用「软件TPM」或者直接上安全元件(SE)。
4.3 安全元件(SE)
安全元件(Secure Element,SE),是 IoT 终端设备里最常见的硬件信任根。
SE 是一个独立的、防篡改的芯片,通常封装在 eWLB 或 SOT-23 这种小封装里。它有自己的 CPU、RAM、ROM 和硬件密码加速器。
SE 和 TPM 的区别在哪?我列个表:
| 特性 | TPM | SE |
|---|---|---|
| 标准 | TCG 标准 | Common Criteria / GlobalPlatform |
| 典型用途 | 平台完整性度量、远程证明 | 支付、身份认证、密钥存储 |
| 成本 | 中等($1-$5) | 较低($0.3-$2) |
| 防拆等级 | 中 | 高(有主动屏蔽层) |
| 典型封装 | QFN / BGA | WLCSP / SOT-23 |
SE 最大的优势是隔离性。主芯片被攻破,SE 里的密钥依然安全。我在做智能门锁项目时,指纹模板和开锁密钥就存在 SE 里。主芯片跑的是 Linux,漏洞一堆,但 SE 是独立的,黑客就算拿到 root 权限,也读不到 SE 里的密钥。
注意:SE 不是万能的。如果 SE 和主芯片之间的通信接口(比如 I2C/SPI)没有加密,攻击者可以中间人攻击,截获通信数据。我建议在 SE 和主芯片之间启用安全通道协议(如 SCP03)。
4.4 eFuse / OTP:存储根密钥的「最后一道防线」
聊完芯片级的信任根,我们得说说芯片内部怎么存密钥。
eFuse 和 OTP(一次性可编程存储器)是芯片内部用来存储根密钥的硬件单元。它们的特点是:写一次,就再也改不了。
4.4.1 eFuse 是什么?
eFuse 是一种「电子熔丝」。芯片出厂时,所有 eFuse 都是「导通」状态(逻辑 0)。通过施加高电压,可以把某些熔丝「烧断」,变成逻辑 1。一旦烧断,无法恢复。
eFuse 的典型用途:
- 存储芯片唯一 ID(UID)。
- 存储根密钥(Root Key)的哈希或部分密钥。
- 控制安全启动的开关(比如:是否允许从外部存储器启动)。
4.4.2 OTP 是什么?
OTP 是「一次性可编程存储器」。它和 eFuse 原理类似,但实现方式不同。OTP 通常基于浮栅晶体管(类似 Flash),但只能写一次。
OTP 的容量通常比 eFuse 大(几 Kb 到几十 Kb),适合存储完整的根证书或公钥。
4.4.3 为什么非要用 eFuse/OTP?
你可能会问:为什么不用 Flash 存密钥?
原因很简单:Flash 可以被擦除和重写。攻击者可以用电压毛刺、激光照射等手段,把 Flash 里的密钥读出来,甚至修改掉。但 eFuse/OTP 是物理上不可逆的,一旦写入,芯片内部的结构就永久改变了。
我遇到过最典型的案例:某款智能摄像头,根密钥存在外部 SPI Flash 里。攻击者用热风枪吹下 Flash,用编程器读出了所有数据,然后克隆了设备。后来我们改方案,把根密钥烧进芯片内部的 eFuse,这个问题才彻底解决。
关键点:eFuse/OTP 存储的根密钥,必须 在芯片制造或封装阶段 写入。写入后,芯片内部的安全逻辑会锁定这些区域,任何后续的读/写操作都会被硬件阻止。
4.5 一张图看懂硬件信任根体系
下面这张图,展示了从根密钥到安全启动的完整链路:
4.6 实际项目中的选型建议
说了这么多,到底怎么选?我根据自己的经验,给几个参考:
- 低成本传感器节点(MCU + 少量Flash):直接用芯片内部的 eFuse 存储根公钥,配合 Boot ROM 做验签。不需要额外芯片。
- 中端网关/路由器(Linux 系统):建议加一颗 TPM 或 SE。TPM 做平台度量,SE 存设备私钥。
- 高安全场景(金融支付、车联网):必须用独立 HSM 或车规级 SE,且 eFuse 里要烧录多级密钥。
避坑指南:我曾经在一个项目里,把根密钥写进了 Flash 的「保留区域」,以为没人能读到。结果被一个搞硬件逆向的哥们,用电压毛刺直接读出来了。从那以后,我再也不敢把根密钥放 Flash 里。eFuse 或者 OTP,才是正经的根密钥存储方案。
4.7 小结
硬件信任根,是整个安全启动的「锚点」。没有它,后面所有的签名、验签、度量都是空中楼阁。
记住三个层次:
- 存储层:eFuse/OTP 锁住根密钥。
- 芯片层:HSM/TPM/SE 提供隔离执行环境。
- 执行层:Boot ROM 从根密钥出发,启动链式验证。