信任根与信任链:硬件信任根(RoT)、信任链的建立、从Boot到OS的度量过程

聊远程证明,绕不开一个最基础的问题:凭什么相信一个设备是它自己?

你想想看,一个设备从按下电源键到操作系统跑起来,中间要经历多少步?引导加载程序、内核、驱动、服务……每一步都可能被篡改。如果第一步就不安全,后面所有的证明都是空中楼阁。

所以,我们需要一个信任根,然后沿着启动过程一级一级建立信任链。这是我做物联网安全项目时,最常跟团队强调的底线思维。

1. 硬件信任根(RoT):一切信任的起点

信任根,说白了就是一个绝对可信的锚点。它必须是一个不可篡改、不可绕过的硬件实体。我个人习惯把它比喻成「保险箱的锁芯」——锁芯本身必须是安全的,否则整个保险箱都是摆设。

核心要求:信任根必须满足三个条件——不可伪造、不可篡改、不可绕过。

在实际项目中,常见的硬件信任根有这几种:

类型 载体 典型应用 我的经验
TPM 独立安全芯片 PC、服务器 兼容性好,但成本高
TEE SoC内置安全区 手机、IoT设备 性能好,但依赖芯片厂商
eFuse / OTP 芯片内一次性存储 低成本MCU 烧录后不可改,适合存储根密钥
HSM 专用硬件加密模块 金融、工业控制 安全性最高,但体积和功耗大

嗯,这里要注意:信任根不只是一个芯片,而是一个完整的硬件安全边界。我曾经在一个智能门锁项目里,客户坚持用软件模拟TPM,结果被侧信道攻击直接提取了私钥。从那以后,我对「纯软件信任根」一直持保留态度。

2. 信任链的建立:从Boot到OS的度量过程

有了信任根,下一步就是怎么把信任传递下去。这个过程叫信任链,也叫安全启动链。

它的核心逻辑很简单:前一级度量并验证后一级的完整性,验证通过后才把控制权交给后一级。每一级都像接力赛一样,把信任棒交给下一棒。

避坑指南:我曾经在一个网关项目里,只度量了Bootloader和内核,跳过了设备树和固件配置分区。结果攻击者篡改了设备树中的内存映射,绕过了内核的安全检查。记住:信任链必须覆盖所有可执行代码和关键配置数据。

2.1 典型的度量流程

以ARM TrustZone + TPM的典型架构为例,信任链的建立大致分这几步:

  1. ROM Code(不可变):芯片上电后,首先执行固化在ROM中的代码。它度量Bootloader的第一阶段(BL1)的哈希值,与存储在eFuse中的黄金哈希比对。
  2. BL1(第一阶段引导):验证通过后,控制权交给BL1。BL1度量BL2(第二阶段引导)的完整性。
  3. BL2(第二阶段引导):BL2度量Bootloader(如U-Boot)的完整性。
  4. Bootloader:Bootloader度量内核镜像、设备树、initramfs的完整性。
  5. 内核:内核度量关键内核模块、安全策略、关键服务的完整性。
  6. 操作系统:操作系统度量用户空间的关键服务(如SSH、认证服务)的完整性。

你看,每一级都只信任前一级,而前一级又只信任更前一级。最终,所有信任都归结到那个不可篡改的硬件信任根上。

2.2 度量什么?怎么度量?

度量不是简单算个哈希就完事。我建议至少包含以下内容:

  • 代码完整性:可执行文件的哈希值
  • 配置完整性:关键配置文件的哈希值
  • 版本信息:防止回滚攻击
  • 度量日志:记录所有度量事件的顺序和结果

度量结果通常存储在TPM的平台配置寄存器(PCR)中。PCR有一个重要特性:只能扩展,不能重置。这意味着攻击者无法伪造度量历史。

警告:千万不要把度量日志和PCR值放在同一个存储区域。我曾经见过一个设计,度量日志和PCR值都存储在同一个Flash分区,攻击者篡改日志后,直接重置了PCR值。正确的做法是:PCR值存储在TPM内部,度量日志存储在外部,但日志的完整性由PCR值保护。

3. 信任链的SVG流程图

下面这张图展示了从硬件信任根到操作系统的完整信任链建立过程。我特意把每个阶段的度量动作和控制流分开画,方便你理解。

信任链建立流程:从硬件信任根到操作系统 硬件信任根 (RoT) ROM Code (不可变) BL1 (第一阶段引导) BL2 (第二阶段引导) Bootloader (U-Boot) 内核 + 操作系统 度量 BL1 哈希 度量 BL2 哈希 度量 Bootloader 哈希 度量内核/设备树哈希 度量关键服务哈希 说明: 每一级度量通过后,才将控制权 交给下一级。度量失败则停止启动。 度量结果存储在TPM的PCR中。

4. 信任链的常见陷阱与应对

做了这么多年安全,我总结了几条信任链设计中的「坑」,分享给你:

陷阱 表现 我的建议
度量不全 只度量代码,忽略配置和数据 建立完整的度量清单,覆盖所有可执行区域
回滚攻击 攻击者用旧版本替换新版本 在度量中加入版本号,PCR扩展时包含版本信息
日志篡改 攻击者修改度量日志掩盖攻击 日志的完整性由PCR值保护,日志与PCR分离存储
信任根泄露 硬件信任根的私钥被提取 使用防篡改封装,启用物理安全机制(如主动屏蔽层)

个人经验:我在一个车联网项目里,发现攻击者通过JTAG接口直接读取了信任根的密钥。解决方案很简单:量产时熔断JTAG保险丝。这个操作成本极低,但很多团队会忽略。

5. 信任链与远程证明的关系

你可能会问:信任链和远程证明有什么关系?

关系大了。远程证明的核心就是向验证方证明设备的当前状态是可信的。而这个「可信」的基础,就是信任链在启动过程中建立的度量证据。

具体来说:

  • 信任链负责在本地建立信任(启动时度量)
  • 远程证明负责向远程验证方展示信任(提供度量证据)

没有信任链,远程证明就是无源之水。你拿什么证明你的设备是干净的?