2. TPM基础
TPM(Trusted Platform Module,可信平台模块)是嵌入在主板或作为独立芯片存在的安全协处理器,它为平台提供可信根(Root of Trust)。理解TPM 1.2与TPM 2.0的差异、内部组件、密钥层次以及PCR与NV存储机制,是后续开发度量与密钥管理功能的基础。
一、TPM 1.2 与 TPM 2.0 架构对比
TPM 1.2 规范由 TCG 于 2003 年发布,其算法固定为 SHA-1 与 RSA,密钥结构受限于单一算法体系。TPM 2.0 规范于 2014 年发布,最大的变化是引入算法敏捷性(Algorithm Agility):同一芯片可同时支持 SHA-1/SHA-256/SM3、RSA/ECC 等多种算法,并通过统一的命令接口进行调度。TPM 2.0 还引入了授权策略(Policy)、增强授权(Enhanced Authorization)和更灵活的层级结构。
| 对比项 | TPM 1.2 | TPM 2.0 |
|---|---|---|
| 算法支持 | 固定 SHA-1 + RSA | 算法敏捷,支持 SHA-256、ECC、SM 系列 |
| 密钥层次 | SRK 单一根 | Endorsement / Storage / Platform / Null 四层 |
| 授权模型 | OIAP/OSAP 简单授权 | Policy 策略授权,支持多条件组合 |
| NV 存储 | 索引固定,容量小 | 灵活索引,支持多种属性与授权 |
| 命令接口 | 命令码分散 | 统一 TPM2_* 命令族 |
二、TPM 2.0 核心组件与密钥层次
TPM 2.0 内部由随机数发生器、SHA 引擎、RSA/ECC 引擎、HMAC 引擎、PCR 寄存器、NV 存储、授权会话管理器和命令调度器组成。密钥层次是理解 TPM 的关键:
- Endorsement Hierarchy(背书层次):根为 EK(Endorsement Key),由厂商烧录,用于证明芯片身份。
- Storage Hierarchy(存储层次):根为 SRK(Storage Root Key),用于保护用户密钥。
- Platform Hierarchy(平台层次):由固件控制,用于平台启动阶段。
- Null Hierarchy(空层次):无持久化,用于临时会话。
每个层次内部又分为种子(Seed)、主密钥(Primary Key)和子密钥(Child Key)。主密钥由种子经 KDF 派生,子密钥由父密钥加密保护,形成树状结构。这种设计使得密钥不需要明文存储在外部,而是以密文 blob 形式保存,使用时由 TPM 内部解密。
三、PCR 与 NV 存储的基本原理
PCR(Platform Configuration Register)是 TPM 内部的一组寄存器,用于记录平台启动过程中的度量值。PCR 的更新不是简单写入,而是扩展(Extend)操作:
PCR_new = Hash(PCR_old || measurement)
例如:
PCR[0] = SHA256(0x00...00 || BIOS_measurement)
PCR[0] = SHA256(PCR[0] || OptionROM_measurement)
这种单向扩展保证了度量序列不可篡改,任何一步变化都会导致最终 PCR 值不同。TPM 2.0 通常有 24 个 PCR,其中 PCR 0~15 用于启动度量,PCR 16 用于调试,PCR 17~22 用于动态信任根(DRTM)。
NV 存储(Non-Volatile Storage)是 TPM 内部的持久化空间,用于保存密钥、证书、计数器或自定义数据。每个 NV 索引具有属性:
- TPMA_NV_PPWRITE / OWNERWRITE:控制写权限。
- TPMA_NV_POLICY_DELETE:删除是否需要策略授权。
- TPMA_NV_READ_STCLEAR:读一次后清除。
- TPMA_NV_WRITEDEFINE:写一次后锁定。
NV 索引常用于存储 EK 证书、平台证书、BitLocker 恢复密钥或单调计数器。与 PCR 不同,NV 存储是持久化的,掉电不丢失。
四、典型场景与常见误区
在 Windows BitLocker 场景中,TPM 2.0 会使用 PCR[7](Secure Boot 策略)和 PCR[11](BitLocker 访问控制)来密封恢复密钥。如果固件更新导致 PCR 值变化,BitLocker 会要求输入恢复密钥。在 Linux 上,systemd-cryptenroll 可将 LUKS 密钥绑定到 PCR[7]+PCR[11]。
1. 认为 PCR 可以随意写入——PCR 只能扩展,不能直接赋值。
2. 认为 NV 存储可以无限写入——NV 索引有写寿命限制,频繁写入会损坏芯片。
3. 混淆 EK 与 SRK——EK 用于身份证明,SRK 用于密钥保护,二者用途不同。
掌握 TPM 2.0 的层次结构、PCR 扩展机制和 NV 存储属性后,就可以进一步学习密钥创建、密封/解封、远程证明等高级功能。这些基础概念将贯穿后续所有开发章节。