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 一张图看懂硬件信任根体系

下面这张图,展示了从根密钥到安全启动的完整链路:

硬件信任根体系结构图 硬件信任根(RoT)体系结构 根密钥存储 eFuse / OTP 硬件信任根芯片 HSM / TPM / SE 信任根执行 Boot ROM / 安全启动代码 链式验证(Secure Boot Chain) Bootloader → OS Kernel → 应用 每一级验证都依赖上一级的签名,而最顶级的签名密钥存储在 eFuse/OTP 中

4.6 实际项目中的选型建议

说了这么多,到底怎么选?我根据自己的经验,给几个参考:

  • 低成本传感器节点(MCU + 少量Flash):直接用芯片内部的 eFuse 存储根公钥,配合 Boot ROM 做验签。不需要额外芯片。
  • 中端网关/路由器(Linux 系统):建议加一颗 TPM 或 SE。TPM 做平台度量,SE 存设备私钥。
  • 高安全场景(金融支付、车联网):必须用独立 HSM 或车规级 SE,且 eFuse 里要烧录多级密钥。

避坑指南:我曾经在一个项目里,把根密钥写进了 Flash 的「保留区域」,以为没人能读到。结果被一个搞硬件逆向的哥们,用电压毛刺直接读出来了。从那以后,我再也不敢把根密钥放 Flash 里。eFuse 或者 OTP,才是正经的根密钥存储方案。

4.7 小结

硬件信任根,是整个安全启动的「锚点」。没有它,后面所有的签名、验签、度量都是空中楼阁。

记住三个层次:

  1. 存储层:eFuse/OTP 锁住根密钥。
  2. 芯片层:HSM/TPM/SE 提供隔离执行环境。
  3. 执行层:Boot ROM 从根密钥出发,启动链式验证。