2. 可信计算基础

在 Measured Boot(度量启动)工程中,术语混乱往往比技术本身更容易导致设计偏差。例如把 TPM 当成“可信根”、把 PCR 当成“存储度量的硬盘”、把 TCM 与 TPM 2.0 混为一谈,都会直接影响后续的信任链建模与验证策略。本节围绕可信计算的基础概念做一次系统辨析,为后续的度量启动实现打下术语基础。

一、核心原理:可信根与信任链

可信计算的核心思想是“以不可篡改的起点,逐级验证后续组件”。这个不可篡改的起点称为可信根(Root of Trust, RoT)。可信根通常由三部分组成:

  • 可信度量根(RTM):负责对第一个被度量对象进行完整性度量,通常是固化在芯片中的微码或 ROM 代码。
  • 可信存储根(RTS):负责安全保存度量结果,通常由 TPM/TCM 内部的 PCR 与受保护存储实现。
  • 可信报告根(RTR):负责对外提供可信的度量报告,通常由 TPM/TCM 的签名与引用(Quote)能力实现。

从 RTM 开始,每一级组件在加载下一级之前先对其进行度量,把结果扩展到 PCR,再把控制权交给下一级。这样形成一条信任链(Chain of Trust):CRTM → Boot ROM → Bootloader → OS Loader → OS Kernel → 应用。信任链的本质是“度量传递 + 控制权传递”,而不是“逐级加密”。

关键区分:信任链是“度量链”,不是“加密链”。每一级并不需要解密下一级,而是先度量、再记录、再移交执行权。

二、TPM、TCM 与 TPM 2.0 的辨析

TPM(Trusted Platform Module)是可信计算平台模块的通用称呼,TCM(Trusted Cryptography Module)是中国国家密码管理局发布的可信密码模块标准,二者在功能定位上高度相似,但在算法体系、命令集和合规要求上存在差异。TPM 2.0 则是 TCG 组织发布的第二代 TPM 规范,相比 TPM 1.2 在算法敏捷性、授权模型和命令结构上有重大变化。

对比项 TPM 1.2 TPM 2.0 TCM
算法支持 以 SHA-1、RSA 为主 算法敏捷,支持 SHA-256、ECC、SM 系列等 以 SM2/SM3/SM4 国密算法为主
PCR 扩展 PCR 0~23,SHA-1 扩展 支持多算法 bank,PCR 0~23 PCR 结构与 TPM 类似,算法为国密
授权模型 OIAP/OSAP 等 基于会话的增强授权 符合国密与国内合规要求
典型场景 早期可信启动 现代 Measured Boot、远程证明 国内信创与等保合规场景

工程上常见的误区是:认为 TPM 2.0 只是 TPM 1.2 的“升级版”。实际上 TPM 2.0 的命令集、授权会话和算法协商机制都发生了结构性变化,很多 TPM 1.2 时代的代码无法直接迁移。TCM 也不能简单视为“国产 TPM 2.0”,它在算法与合规层面有独立标准。

三、PCR 与度量:度量结果如何被记录

PCR(Platform Configuration Register)是 TPM/TCM 内部的一组寄存器,用于保存度量结果的摘要。PCR 不能像普通寄存器那样直接写入,而是通过扩展(Extend)操作更新:

PCR_new = Hash(PCR_old || measured_data_digest)

这种“链式哈希”设计使得 PCR 值具有顺序敏感性:即使两个组件被度量,顺序不同,最终 PCR 值也不同。因此 PCR 不仅能反映“度量了什么”,还能反映“以什么顺序度量”。

度量(Measurement)本身是对被加载对象做哈希计算,得到摘要。度量结果并不直接等于“安全”,它只是客观记录。真正的安全判断来自后续的验证(Verification):把 PCR 值与已知良好基线(Golden Baseline)比对,或由远程挑战方通过 Quote 获取 PCR 签名值进行校验。

度量是“记录事实”,验证是“判断事实是否符合预期”。Measured Boot 只保证可度量、可报告,不保证一定阻止恶意代码运行;阻止运行通常需要结合 Secure Boot 或动态策略。

四、案例场景:一次典型的度量启动过程

以一台支持 TPM 2.0 的服务器为例,上电后的度量启动大致如下:

  1. CRTM 对 Boot ROM 度量,扩展至 PCR0。
  2. Boot ROM 对 Bootloader 度量,扩展至 PCR4。
  3. Bootloader 对 OS Loader 度量,扩展至 PCR4 或 PCR8。
  4. OS Loader 对内核与 initrd 度量,扩展至 PCR9。
  5. 内核启动后,IMA(Integrity Measurement Architecture)对应用与配置文件度量,扩展至 PCR10。
  6. 远程证明服务器发起 Quote 挑战,TPM 用 AIK 对指定 PCR 签名并返回。

在这个过程中,PCR0 通常代表固件,PCR4 代表启动加载器,PCR9 代表内核,PCR10 代表应用度量。不同平台可能略有差异,但“按阶段分配 PCR”是通用实践。

五、误区与复盘

  • 误区一:把 TPM 当作可信根。TPM 是可信存储根与可信报告根的载体,但可信度量根通常由 CRTM 承担。
  • 误区二:认为 PCR 可以随意写入。PCR 只能扩展,不能直接赋值,这保证了度量历史的不可逆性。
  • 误区三:把度量等同于验证。度量只产生摘要,验证需要基线或远程挑战方参与。
  • 误区四:忽略算法 bank。TPM 2.0 支持多算法 PCR bank,若只读取 SHA-1 bank,可能得到与 SHA-256 bank 不一致的结论。
  • 误区五:TCM 与 TPM 2.0 混用。在国密合规场景中,必须明确使用 TCM 及其对应算法与命令集。

复盘建议:在项目初期就建立术语表,明确 RTM/RTS/RTR、PCR 分配、算法 bank、验证方与证明方角色。术语清晰后,Measured Boot 的架构设计、代码实现与测试用例才能对齐,避免“度量了但不知道度量了什么、也不知道该和谁比”的常见问题。

可信计算基础概念关系图 可信根 RoT RTM 可信度量根 RTS 可信存储根 RTR 可信报告根 信任链 Chain of Trust CRTM Boot ROM Bootloader OS Loader OS Kernel 应用/IMA 度量与 PCR 扩展 被度量对象 Hash 摘要 PCR_new = Hash(PCR_old || 摘要) PCR0 固件 / PCR4 加载器 / PCR9 内核 / PCR10 应用 模块与算法辨析 TPM 1.2 SHA-1 / RSA TPM 2.0 算法敏捷 / 多 bank TCM SM2/SM3/SM4 度量 = 记录事实;验证 = 与基线或远程挑战方比对 Quote 挑战:AIK 签名 PCR → 远程证明服务器校验