4. TPM核心概念
TPM 的可信能力并不是凭空产生的,它依赖一组彼此咬合的核心概念:平台配置寄存器(PCR)记录平台状态,度量启动在启动过程中逐级采集证据,信任链把信任从不可变的硬件根逐层传递到操作系统与应用,而根信任与信任边界则界定了“信任从哪里开始、到哪里为止”。理解这五个概念之间的关系,是掌握 TPM 系统工程的关键。
一、PCR:平台状态的“指纹寄存器”
平台配置寄存器(Platform Configuration Register,PCR)是 TPM 内部一组特殊的寄存器,通常有 24 个(PCR 0~23),每个寄存器保存 20 字节(SHA-1)或 32 字节(SHA-256)的摘要值。PCR 的关键特性是只能被扩展(Extend),不能被直接写入。扩展操作定义为:
PCR_new = Hash(PCR_old || 度量值)
例如 SHA-256:
PCR[4]_new = SHA256( PCR[4]_old || SHA256(被度量组件) )
这意味着 PCR 值不仅取决于当前被度量的组件,还取决于扩展的顺序和历史。任何一次启动过程中组件的变化,都会导致最终 PCR 值不同。因此 PCR 是平台状态的一种“累积指纹”,可用于远程证明、密封数据、策略判断等场景。
PCR 的使用有约定俗成的分工,常见分配如下表所示:
| PCR | 典型用途 | 说明 |
|---|---|---|
| PCR 0 | 固件(UEFI/BIOS)代码 | CRTM 之后度量的第一段固件 |
| PCR 1 | 固件配置 | UEFI 设置、启动项等 |
| PCR 2 | Option ROM | 扩展卡固件 |
| PCR 4 | 引导加载程序 | Bootloader 代码与配置 |
| PCR 7 | 安全启动策略 | Secure Boot 状态与密钥 |
| PCR 8~15 | 操作系统使用 | 由 OS 决定度量内容 |
| PCR 16 | 调试 | 可重置,用于测试 |
| PCR 17~22 | 动态根信任 | DRTM 场景使用 |
| PCR 23 | 应用支持 | 由应用自定义 |
二、度量启动:把启动过程变成可验证的证据
度量启动(Measured Boot)的核心思想是:在每一段代码执行之前,先计算其摘要并扩展到 PCR,然后再把控制权交给它。这样,即使某段代码后来被篡改,PCR 中也会留下痕迹。典型的度量启动流程如下:
- 上电后,CPU 从固件中的 CRTM(Core Root of Trust for Measurement)开始执行。
- CRTM 度量 UEFI/BIOS 固件,扩展至 PCR 0。
- 固件度量自身配置、Option ROM,扩展至 PCR 1、PCR 2。
- 固件度量 Bootloader,扩展至 PCR 4。
- Bootloader 度量操作系统内核与 initrd,扩展至 PCR 8、PCR 9。
- 操作系统继续度量关键组件,形成完整的启动度量日志。
度量启动只负责“记录”,并不阻止篡改。它提供的是可验证性:验证方可以通过比对 PCR 值与预期基线,判断平台是否处于可信状态。
三、信任链:从硬件根到应用的逐级传递
信任链(Chain of Trust)是度量启动的逻辑结构。它的起点是根信任,即系统中不可被篡改的最小可信单元。根信任通常由硬件实现,例如 TPM 芯片本身、CPU 中的微码、或固件中的 CRTM 模块。信任链的传递遵循“先度量、后执行”的原则:每一级组件在被信任之前,必须先被上一级度量并验证。
信任链可以分为三个层次:
- 静态信任链(SRTM):从 CRTM 开始,覆盖固件、Bootloader、OS,适用于普通启动场景。
- 动态信任链(DRTM):通过 CPU 指令(如 Intel TXT、AMD SKINIT)在运行时建立新的信任环境,PCR 17~22 用于记录。
- 应用信任链:操作系统或应用继续度量自身组件,扩展至 PCR 8~15 或 PCR 23。
信任链的本质是传递性:如果根信任可信,且每一级都正确度量了下一级,那么最终运行的环境也可被信任。但要注意,信任链只保证“度量过程可信”,并不保证“被度量对象安全”。
四、根信任与信任边界
根信任(Root of Trust,RoT)是信任链的起点,通常分为三类:
- RTS(Root of Trust for Storage):保护密钥和敏感数据,由 TPM 内部存储实现。
- RTR(Root of Trust for Reporting):负责签名和报告 PCR 值,由 TPM 的签名密钥实现。
- RTM(Root of Trust for Measurement):执行第一次度量,通常由 CRTM 承担。
信任边界(Trust Boundary)则界定了“哪些组件在 TPM 信任范围内、哪些不在”。TPM 本身是信任边界的核心,但 CPU、内存、总线等组件并不在 TPM 的直接保护范围内。因此,系统设计时必须明确:哪些数据需要密封到 PCR,哪些操作需要 TPM 授权,哪些路径可能被绕过。
五、综合关系图
下图展示了 PCR、度量启动、信任链、根信任与信任边界之间的整体关系。左侧是启动阶段,右侧是 TPM 内部结构,中间通过度量与扩展操作连接。
六、案例与误区复盘
Windows BitLocker 默认将卷主密钥密封到 PCR 7(Secure Boot 状态)和 PCR 11(BitLocker 自身度量)。如果攻击者修改 Bootloader 或关闭 Secure Boot,PCR 7 值变化,TPM 拒绝释放密钥,系统进入恢复模式。这正是“度量启动 + PCR 密封”的典型应用。
- 误区一:PCR 值等于组件哈希。PCR 是累积扩展结果,不是单个组件的哈希。必须结合度量日志才能还原启动路径。
- 误区二:度量启动能阻止篡改。度量启动只记录证据,不阻止执行。阻止篡改需要 Secure Boot、IMA 等机制配合。
- 误区三:信任链越长越安全。信任链越长,攻击面越大。应尽量缩短信任链,并明确每一级的验证责任。
- 误区四:TPM 保护整个系统。TPM 只保护密钥和度量报告,CPU、内存、总线不在其保护范围内,信任边界必须清晰界定。
总结来说,PCR 是平台状态的累积指纹,度量启动是采集证据的过程,信任链是信任传递的路径,根信任是这一切的起点,而信任边界则决定了 TPM 能力的适用范围。五者共同构成了 TPM 可信计算的基础模型。在实际工程中,应先明确信任边界与根信任,再设计 PCR 分配与度量策略,最后通过远程证明或本地密封策略落地验证。