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 度量到证书链验证
以一次典型的远程证明为例,流程如下:
- 平台启动时,CRTM 先度量 BIOS,将结果扩展进 PCR[0];BIOS 再度量引导加载程序,扩展进 PCR[4];逐级向上直到操作系统内核。
- 证明方读取 PCR 值,并调用 TPM 的 Quote 命令,用 AIK(Attestation Identity Key)私钥对 PCR 摘要和随机数 nonce 签名。
- 证明方把 Quote 结果、AIK 证书链和 PCR 日志发送给验证方。
- 验证方先验证证书链是否锚定到可信根 CA,再验证 Quote 签名,最后重放 PCR 日志,确认计算出的 PCR 值与签名中的值一致。
- 若全部通过,验证方确认平台处于预期状态,并可进一步用 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 度量与远程证明才具备实际安全意义。