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 2Option ROM扩展卡固件
PCR 4引导加载程序Bootloader 代码与配置
PCR 7安全启动策略Secure Boot 状态与密钥
PCR 8~15操作系统使用由 OS 决定度量内容
PCR 16调试可重置,用于测试
PCR 17~22动态根信任DRTM 场景使用
PCR 23应用支持由应用自定义

二、度量启动:把启动过程变成可验证的证据

度量启动(Measured Boot)的核心思想是:在每一段代码执行之前,先计算其摘要并扩展到 PCR,然后再把控制权交给它。这样,即使某段代码后来被篡改,PCR 中也会留下痕迹。典型的度量启动流程如下:

  1. 上电后,CPU 从固件中的 CRTM(Core Root of Trust for Measurement)开始执行。
  2. CRTM 度量 UEFI/BIOS 固件,扩展至 PCR 0。
  3. 固件度量自身配置、Option ROM,扩展至 PCR 1、PCR 2。
  4. 固件度量 Bootloader,扩展至 PCR 4。
  5. Bootloader 度量操作系统内核与 initrd,扩展至 PCR 8、PCR 9。
  6. 操作系统继续度量关键组件,形成完整的启动度量日志。

度量启动只负责“记录”,并不阻止篡改。它提供的是可验证性:验证方可以通过比对 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 分配与密钥策略。

五、综合关系图

下图展示了 PCR、度量启动、信任链、根信任与信任边界之间的整体关系。左侧是启动阶段,右侧是 TPM 内部结构,中间通过度量与扩展操作连接。

PCR、度量启动、信任链与信任边界关系图 启动阶段(度量启动) CRTM(根信任起点) 不可篡改的度量根 UEFI / BIOS 固件 度量后扩展至 PCR 0、1 Bootloader 度量后扩展至 PCR 4 OS 内核与 initrd 度量后扩展至 PCR 8、9 应用与关键组件 扩展至 PCR 23 或自定义 度量日志(Event Log) 记录每次扩展的原始数据 度量与扩展 Hash(组件) → 扩展至 PCR PCR_new = Hash(PCR_old || 度量值) 顺序敏感 · 不可逆 累积形成平台指纹 TPM 内部结构 PCR 0~23 平台状态寄存器组 只可扩展,不可直接写 RTS 存储根信任 保护密钥与敏感数据 密封数据到指定 PCR RTR 报告根信任 签名 PCR 值(Quote) 供远程证明使用 授权与策略 PCR 策略 · 口令 · 密钥 决定何时释放密钥 信任边界:TPM 保护范围 信任链:CRTM → 固件 → Bootloader → OS → 应用;每一级先度量后执行,信任逐级传递

六、案例与误区复盘

案例:BitLocker 与 PCR 7
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 分配与度量策略,最后通过远程证明或本地密封策略落地验证。