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 签名值进行校验。
四、案例场景:一次典型的度量启动过程
以一台支持 TPM 2.0 的服务器为例,上电后的度量启动大致如下:
- CRTM 对 Boot ROM 度量,扩展至 PCR0。
- Boot ROM 对 Bootloader 度量,扩展至 PCR4。
- Bootloader 对 OS Loader 度量,扩展至 PCR4 或 PCR8。
- OS Loader 对内核与 initrd 度量,扩展至 PCR9。
- 内核启动后,IMA(Integrity Measurement Architecture)对应用与配置文件度量,扩展至 PCR10。
- 远程证明服务器发起 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 的架构设计、代码实现与测试用例才能对齐,避免“度量了但不知道度量了什么、也不知道该和谁比”的常见问题。