3. 密码学基础

TPM 并不是一个“加密黑盒”,它更像一套把密码学原语按可信执行顺序组合起来的硬件引擎。理解 TPM 的密钥体系与 PCR 度量,必须先分清五类基础构件各自解决什么问题:哈希负责“完整性指纹”,对称加密负责“高效保密”,非对称加密负责“密钥分发与身份”,HMAC 负责“带密钥的完整性”,数字签名与证书链负责“可验证的身份与授权”。它们在 TPM 内部并非孤立存在,而是通过密钥层级、PCR 寄存器和授权会话串联成一条完整的信任链。

一、核心原理:五类原语的分工与协作

哈希算法(如 SHA-1、SHA-256、SM3)把任意长度数据映射为固定长度摘要,具备单向性、抗碰撞性和雪崩效应。TPM 的 PCR 就是哈希链:每次扩展操作为 PCR_new = Hash(PCR_old || 度量值),因此任何一次启动阶段的微小改动都会导致后续所有 PCR 值不可预测地变化。这正是远程证明能够判断“平台是否被篡改”的基础。

对称加密(如 AES-128/256、SM4)使用同一密钥加解密,速度快、适合大数据量。TPM 内部用它保护会话传输的机密性,也用于对密钥对象进行“包装”。非对称加密(RSA、ECC)分为加密与签名两类用途:公钥可公开,私钥不出 TPM。TPM 中非对称密钥常用于密钥交换、身份认证和签名,其私钥受 TPM 内部保护,无法被导出。

HMAC 是把哈希与共享密钥结合的完整性机制,输出 HMAC(K, M)。在 TPM 的授权会话中,HMAC 用于证明“命令确实来自持有授权值的实体”,同时防止命令被篡改或重放。数字签名则用私钥对消息摘要签名,公钥验证,提供不可否认性。证书链把终端实体证书、中间 CA 证书和根 CA 证书逐级串联,使验证方能够确认某个 TPM 公钥确实属于可信厂商和可信设备。

关键区分:哈希与 HMAC 都不提供保密性;对称加密不提供身份;非对称加密不擅长大数据量;数字签名不提供机密性。TPM 的安全性来自“按需组合”,而不是依赖单一算法。

二、方法流程:从 PCR 度量到证书链验证

以一次典型的远程证明为例,流程如下:

  1. 平台启动时,CRTM 先度量 BIOS,将结果扩展进 PCR[0];BIOS 再度量引导加载程序,扩展进 PCR[4];逐级向上直到操作系统内核。
  2. 证明方读取 PCR 值,并调用 TPM 的 Quote 命令,用 AIK(Attestation Identity Key)私钥对 PCR 摘要和随机数 nonce 签名。
  3. 证明方把 Quote 结果、AIK 证书链和 PCR 日志发送给验证方。
  4. 验证方先验证证书链是否锚定到可信根 CA,再验证 Quote 签名,最后重放 PCR 日志,确认计算出的 PCR 值与签名中的值一致。
  5. 若全部通过,验证方确认平台处于预期状态,并可进一步用 TPM 公钥加密会话密钥,建立安全通道。

在这一流程中,哈希保证 PCR 日志不可伪造,HMAC 保护授权会话,非对称签名保证 Quote 不可抵赖,证书链保证 AIK 公钥可信。四者缺一不可。

三、案例与场景:TPM 密钥层级中的密码学组合

TPM 2.0 的密钥层级通常包括 Endorsement Hierarchy(EK 所在)、Storage Hierarchy(SRK 所在)和 Platform Hierarchy。EK 是厂商烧录的不可迁移密钥,其证书由 TPM 厂商签发;SRK 是存储层级的根密钥,用于保护下级密钥。当应用需要创建一个受 TPM 保护的签名密钥时,流程是:先通过 EK 和证书链证明 TPM 可信,再在 SRK 下创建子密钥,子密钥的私钥被 SRK 公钥加密后存储,使用时由 TPM 内部解密并执行签名。

密码学原语TPM 中的典型对象作用是否依赖密钥
哈希PCR、Quote 摘要、密钥名称完整性度量与绑定否
对称加密会话加密、密钥包装保密性与高效保护是
非对称加密EK、SRK、密钥交换密钥分发与身份锚点是
HMAC授权会话、命令完整性带密钥的完整性校验是
数字签名AIK、Quote、证书签名不可否认与身份证明是

四、误区与复盘:常见错误与排查思路

误区一:把 PCR 值直接当作“加密密钥”。PCR 是公开可读的度量值,不具备保密性,只能用于完整性判断。误区二:认为 HMAC 可以替代数字签名。HMAC 依赖共享密钥,验证方也能伪造,无法提供不可否认性。误区三:忽略证书链有效期和吊销状态,导致验证方接受了过期或已吊销的 AIK 证书。误区四:在 TPM 外部生成私钥再导入,破坏了“私钥不出 TPM”的安全前提。

排障提示:若 Quote 验证失败,优先检查 PCR 日志重放结果是否与签名中的 PCR 摘要一致;若证书链验证失败,检查根 CA 是否在信任库、中间证书是否完整、系统时间是否正确;若 HMAC 授权失败,检查会话 nonce 是否被重用或授权值是否匹配。

# 使用 tpm2-tools 读取 PCR 并生成 Quote 的典型命令
tpm2_pcrread sha256:0,4,7
tpm2_quote -c 0x81010001 -l sha256:0,4,7 -q $(head -c 16 /dev/urandom | xxd -p) -m quote.msg -s quote.sig -o pcr.bin
tpm2_verifysignature -c aik.pub -g sha256 -m quote.msg -s quote.sig

复盘来看,TPM 的密码学设计遵循“最小暴露”原则:私钥永不离开芯片,敏感操作在内部完成,外部只能看到签名、密文或摘要。开发者需要牢记:哈希用于度量,对称加密用于保护数据,非对称加密用于身份与密钥分发,HMAC 用于授权会话,数字签名与证书链用于建立可验证的信任锚点。只有把这些原语放在正确的层级和顺序中,PCR 度量与远程证明才具备实际安全意义。

TPM 密码学原语与信任链协作关系 哈希算法 SHA-256 / SM3 对称加密 AES / SM4 非对称加密 RSA / ECC HMAC 授权会话完整性 数字签名与证书链 AIK / EK / CA TPM 2.0 硬件密码学引擎 PCR 寄存器组 密钥层级 EK/SRK 授权会话 Quote 签名 PCR 完整性度量 Hash(PCR_old || 度量值) 远程证明 Quote AIK 私钥签名 + nonce 证书链验证 根 CA → 中间 CA → AIK 安全会话建立 对称密钥 + HMAC 保护 哈希保证完整性 · 对称加密保证保密性 · 非对称与证书链保证身份 · HMAC 保证授权 · 签名保证不可否认