信任根与信任链:硬件信任根(RoT)、信任链的建立与传递、TPM/TEE在信任链中的作用
聊到设备安全,我经常被问到同一个问题:“到底从哪开始信任?”
你想想看,一个系统从上电到跑起操作系统,中间经历了多少步?Bootloader、内核、驱动、服务……每一步都可能被篡改。如果连第一步都不安全,后面全是白搭。
这就是我们今天要聊的核心——信任根(Root of Trust, RoT)和信任链(Chain of Trust)。说白了,就是给设备找一个“绝对可信的起点”,然后一级一级把信任传递下去。
3.1 硬件信任根(RoT)——信任的起点
信任根是什么?我个人的理解是:一个不可篡改、不可绕过的安全锚点。它必须是硬件层面的,因为纯软件可以被改写、被注入。
核心原则:信任根必须满足三个条件——不可伪造、不可篡改、不可绕过。缺一个,整个信任链就塌了。
常见的硬件信任根有几种形态:
- Boot ROM:芯片出厂时固化在只读存储器里,物理上无法修改。上电后CPU第一条指令就从这里开始执行。
- eFuse / OTP:一次性可编程存储,用来存放根密钥、芯片唯一ID。写进去就改不了。
- 独立安全芯片:比如TPM、安全元件(SE),它们有自己的CPU、存储、密码加速器,和主系统物理隔离。
我在一个IoT网关项目里遇到过这么个事:客户说“我们用软件校验Bootloader就够了”。结果呢?攻击者直接物理短接Flash引脚,跳过了校验逻辑。从那以后,我坚持所有量产设备必须用硬件信任根——哪怕只是一个OTP fuse。
我的建议:选型时优先看芯片是否提供不可修改的Boot ROM,以及是否有独立的密钥存储区域。别指望“软件防物理攻击”,那是自欺欺人。
3.2 信任链的建立与传递——一级一级往上“扛”
有了信任根,下一步就是怎么把信任“传”下去。这个过程我习惯叫它“接力赛”:
- 阶段1:Boot ROM → Bootloader
Boot ROM先校验Bootloader的签名或哈希。校验通过,才把控制权交给它。 - 阶段2:Bootloader → OS Kernel
Bootloader校验内核镜像的完整性。我见过很多方案只校验了头部,没校验整个镜像——结果被人从中间插入了恶意代码。 - 阶段3:Kernel → 系统服务 / 应用
内核在加载驱动、启动服务时,逐级验证签名。这一步通常依赖内核的完整性测量机制(比如IMA)。
每一级只信任上一级,上一级只把控制权交给经过验证的下一级。这就是信任链。
注意:信任链有一个致命弱点——单点失效。如果信任根本身被物理破解(比如通过激光切割读取OTP),整个链就断了。所以高端设备会用多层物理防护,比如主动屏蔽层、电压/温度检测。
我曾经帮一个客户调试启动失败问题。现象是Bootloader校验总是不通过,但镜像明明没改过。查了两天,发现是NAND Flash的坏块管理把签名区域重映射到了错误位置。嗯,信任链不仅要考虑“谁校验谁”,还得考虑存储介质的可靠性。
3.3 TPM在信任链中的作用
TPM(Trusted Platform Module)是个好东西。它本质上是一个专用的安全协处理器,有自己的非易失性存储、RNG、RSA/ECC引擎、哈希引擎。
在信任链里,TPM主要干三件事:
| 功能 | 说明 | 我见过的坑 |
|---|---|---|
| 平台配置寄存器(PCR) | 存储启动过程的哈希度量值。每次度量都“扩展”进去,不可逆。 | 有人忘了扩展PCR,导致度量值永远一样——等于没度量。 |
| 密封存储(Sealing) | 把密钥“绑定”到特定PCR值。只有系统状态符合预期,才能解开。 | 固件升级后PCR值变了,密钥解不开——需要提前规划升级策略。 |
| 远程证明(Remote Attestation) | 用TPM的私钥签名PCR值,发给远程服务器验证。 | 签名用的AK(Attestation Key)证书链没配好,服务器不认。 |
TPM的PCR扩展机制很有意思。它不是简单的“写值”,而是 新PCR = SHA256(旧PCR || 新度量值)。这意味着你无法通过伪造某个阶段的度量值来“覆盖”之前的记录。顺序一旦定了,就改不了。
关键点:TPM本身不参与信任链的“执行”,它只做“记录”和“报告”。真正决定“是否继续启动”的,是CPU和Boot ROM。TPM更像一个公证人,而不是法官。
3.4 TEE在信任链中的作用
TEE(Trusted Execution Environment)和TPM不同。TPM是独立芯片,TEE是在同一个CPU上隔离出的安全世界。ARM的TrustZone、Intel的SGX/TDX、RISC-V的MultiZone都属于TEE。
在信任链里,TEE的角色更“主动”:
- 安全启动的延伸:TEE可以接管信任链的后半段,在安全世界里加载和运行可信应用(TA)。
- 运行时隔离:即使Rich OS(比如Linux)被攻破,TEE里的密钥和敏感操作依然安全。
- 安全存储:TEE可以用硬件绑定的密钥加密数据,存到普通Flash里。解密只能在TEE内完成。
我做过一个项目,需要在设备上存储云端证书。客户一开始想用文件系统加密。我说不行,密钥本身存在哪?最后还是用TEE的安全存储,密钥由芯片硬件唯一密钥派生,攻击者就算dump了整个Flash也拿不到。
经验之谈:TPM和TEE不是二选一的关系。高端设备往往是“TPM做启动度量 + TEE做运行时保护”。TPM管“你是谁”,TEE管“你正在做什么”。
3.5 信任链的完整视图
下面这张图是我自己画的一个典型信任链流程,涵盖了硬件信任根、TPM和TEE的协作关系:
从这张图可以清楚看到:信任从Boot ROM开始,经过Bootloader、Kernel,一直延伸到TEE里的可信应用。每一步的度量值都被TPM记录下来,形成一个不可伪造的“启动日志”。
3.6 避坑指南——我踩过的几个坑
做了这么多年安全,有些坑我至今记忆犹新。分享出来,希望大家别重蹈覆辙:
- 坑1:信任链“断链”
我曾经在一个项目里,Bootloader校验了内核,但内核加载驱动时没做任何校验。攻击者替换了一个驱动文件,轻松绕过整个信任链。记住:信任链必须覆盖到最后一个可执行实体。 - 坑2:PCR扩展顺序搞反
有次调试TPM远程证明,发现PCR值总对不上。查了半天,发现固件团队把度量顺序写反了——先扩展了内核,再扩展Bootloader。顺序一错,整个信任链的“证据”就废了。 - 坑3:TEE和REE共用内存没隔离
一个合作伙伴在TEE里处理密钥,但密钥输入缓冲区是REE(普通世界)直接传过来的指针。攻击者通过DMA直接修改了缓冲区内容。TEE再安全,入口没守住也是白搭。
血的教训:信任链不是“配了就行”,而是“配对了才行”。每一个环节的校验算法、度量顺序、存储位置,都必须经过严格的安全评审。我建议在项目早期就画好完整的信任链流程图,逐级评审。
3.7 小结
信任根和信任链是设备安全的基石。没有它们,远程证明、身份绑定都是空中楼阁。
记住几个关键点:
- 信任根必须是硬件层面的,不可篡改
- 信任链要覆盖从Boot ROM到应用的每一级
- TPM负责记录和报告启动状态,TEE负责运行时保护
- 两者配合,才能构建一个完整的可信执行环境