硬件信任根(RoT):TPM、HSM、eFuse——信任的起点
各位同学,我们开始第二讲。
上一章我们聊了信任传递链的整体轮廓。说白了,整个链条的起点就是——硬件信任根。没有它,后面所有的签名校验、安全启动都是空中楼阁。
我经常跟团队说一句话:“信任不能凭空产生,必须有一个物理锚点。” 这个锚点,就是今天我们要讲的三个硬件模块:TPM、HSM、eFuse。
2.1 信任根到底解决什么问题?
先想一个问题:CPU 上电后执行的第一条指令,怎么知道它是安全的?
你可能会说:“代码是写在 ROM 里的,改不了啊。” 没错,但 ROM 里的代码怎么验证下一级固件?它需要一把公钥。这把公钥存在哪?如果存在 Flash 里,攻击者可以替换。存在寄存器里?掉电就没了。
所以,我们需要一个不可篡改、不可伪造、物理隔离的存储和计算环境。这就是硬件信任根。
核心定义:硬件信任根(Root of Trust, RoT)是一个在物理上受保护的模块,它提供可信的度量、存储和报告能力。它是整个安全体系的“原点”。
2.2 三大硬件信任根详解
我按自己的理解,把它们分成三类。你想想看,它们各自解决不同层面的问题。
2.2.1 eFuse——一次性可编程的“物理熔丝”
eFuse 是最底层的信任根。它本质上是一根根硅上的熔丝,通过大电流烧断来存储信息。烧断后不可恢复。
它存什么?
- 芯片唯一 ID
- 根密钥的哈希值
- 安全启动的配置位(比如:是否强制校验签名)
- 调试接口的锁定状态
我在项目中遇到过一件事:某款芯片的 eFuse 空间只有 128 位,但我们需要存储 256 位的根密钥哈希。怎么办?最后方案是把密钥哈希截断到 128 位,配合芯片唯一 ID 做派生。嗯,这是妥协,但硬件限制摆在那。
注意:eFuse 烧录是一次性的。一旦烧错,芯片就废了。我见过有人把调试锁定位烧反了,整批 5000 片芯片无法调试,只能报废。所以量产烧录前,务必做三次模拟验证。
2.2.2 TPM——专用安全芯片
TPM(Trusted Platform Module)是一个独立的安全协处理器。它有自己的 CPU、ROM、SRAM、非易失性存储,甚至还有真随机数发生器。
TPM 的核心能力:
- 平台配置寄存器(PCR): 存储度量值的哈希链,用于记录系统状态
- 背书密钥(EK): 芯片出厂时注入的唯一身份凭证
- 存储根密钥(SRK): 保护用户数据的加密密钥
- 远程证明: 向远程服务器证明“我是一台干净的机器”
我个人习惯把 TPM 看作“系统的黑匣子”。它不参与主 CPU 的计算,只负责记录和报告。攻击者即使控制了操作系统,也无法篡改 PCR 里的值——因为 PCR 只能扩展(extend),不能重置(除非物理复位)。
| 特性 | TPM 2.0 | eFuse | HSM |
|---|---|---|---|
| 可编程性 | 可多次写入(PCR扩展) | 一次性烧录 | 可编程,但受策略控制 |
| 密钥存储量 | 有限(通常 24 个 PCR + 少量 NV 索引) | 极少(几十到几百位) | 大(可存储数千个密钥) |
| 计算能力 | 有(支持 RSA/ECC/SHA) | 无 | 强(支持硬件加速加密) |
| 典型应用 | PC、服务器、IoT 网关 | SoC 内部、嵌入式设备 | 金融、CA、云端密钥管理 |
| 成本 | 中等($1-$5) | 极低(芯片内集成) | 高($100-$10000+) |
2.2.3 HSM——企业级“保险柜”
HSM(Hardware Security Module)是 TPM 的“大哥”。它通常是一个独立的硬件设备,有防篡改外壳、温度/电压传感器,甚至有的型号内部灌了环氧树脂——想拆开?芯片会自毁。
HSM 主要用于:
- CA 根证书的签名
- 支付系统的密钥管理
- 云端 KMS(密钥管理服务)的硬件后端
我曾经帮一家银行部署 HSM,他们的要求是:密钥一旦写入 HSM,任何人(包括管理员)都无法导出明文。所有签名操作必须在 HSM 内部完成。这就是所谓的“密钥不出硬件”。
一个小技巧:如果你在做产品选型,记住这个原则——eFuse 管“根”,TPM 管“链”,HSM 管“服务”。eFuse 保护最底层的根密钥,TPM 负责启动过程中的度量链,HSM 负责运行时的密钥服务。三者可以协同工作。
2.3 信任链的起点:从 eFuse 到 TPM
现在我们把三个模块串起来,看看实际启动流程中它们如何配合。
// 伪代码:信任链初始化流程
void boot_chain_init() {
// 1. CPU 从 ROM 启动,读取 eFuse
hash_t root_hash = efuse_read(EFUSE_ROOT_KEY_HASH);
// 2. 验证 BootROM 自身的完整性(自检)
if (!sha256_verify(rom_code, rom_signature, root_hash)) {
panic("BootROM integrity check failed!");
}
// 3. 度量下一级(SPL/BL1),将度量值扩展到 TPM PCR
tpm_pcr_extend(0, sha256(bl1_code));
// 4. 用 eFuse 中的密钥验证 BL1 签名
if (!rsa_verify(bl1_code, bl1_signature, root_hash)) {
panic("BL1 signature verification failed!");
}
// 5. 跳转到 BL1,继续传递信任
jump_to(bl1_entry);
}
你看,eFuse 提供了最原始的“根密钥哈希”,BootROM 用它验证自己,然后度量下一级。每一级都把自己的哈希扩展到 TPM 的 PCR 里。这样,系统启动后的任何时刻,你都可以通过读取 PCR 值来知道“系统是从哪个状态启动的”。
2.4 一张图看懂信任根体系
下面这张图展示了 eFuse、TPM、HSM 在信任链中的位置和关系。
2.5 避坑指南:我踩过的三个坑
做信任根设计,有些坑是共通的。我分享三个亲身经历。
- eFuse 空间不够用——某次设计只给了 64 位 eFuse,但我们需要存 256 位哈希。最后方案是存哈希的前 64 位,配合芯片唯一 ID 做密钥派生。但这样安全性降到了 64 位。所以,选型时 eFuse 空间宁大勿小。
- TPM PCR 使用顺序搞反——PCR 的扩展顺序决定了度量链。我曾经把 BL1 和 BL2 的度量顺序写反了,导致远程证明时 PCR 值对不上。排查了两天才发现。后来我养成了习惯:先画 PCR 分配表,再写代码。
- HSM 的密钥备份策略——有一次 HSM 硬件故障,里面的根密钥差点取不出来。幸好我们做了密钥分片备份(Shamir 秘密共享),用 5 个管理员各自保管一个分片,任意 3 个就能恢复。嗯,HSM 不是万能的,备份策略必须提前设计。
2.6 小结
硬件信任根是整个安全体系的基石。eFuse 提供不可篡改的根存储,TPM 负责度量和报告,HSM 提供企业级的密钥服务。三者各司其职,共同构建了从芯片上电到系统启动的信任起点。
记住一句话:没有硬件信任根,软件安全就是空中楼阁。