3. TPM架构概览
要真正用好TPM,不能只把它当成一个“加密芯片黑盒”。TPM内部是一套由密码引擎、非易失存储、平台配置寄存器、层级密钥树和资源调度器共同组成的微型可信系统。理解这些组件的分工与数据流向,是后续做密钥设计、度量策略和故障排查的基础。本节先建立整体架构视图,再逐层拆解关键部件。
一、TPM 1.2 与 2.0 的核心差异
TPM 1.2 诞生于 2003 年前后,主要围绕 RSA 与 SHA-1 设计,密钥算法固定、授权模型单一,且命令集与规范绑定较紧。TPM 2.0 则是一次架构级重构:它把算法与规范解耦,支持 RSA、ECC、AES、SHA-1/SHA-256/SM3 等多种算法,并引入授权策略(Policy)、会话、NV 索引等更灵活的能力。对系统工程师而言,最直观的差异体现在算法敏捷性、层级结构和资源管理方式上。
| 对比维度 | TPM 1.2 | TPM 2.0 |
|---|---|---|
| 算法支持 | 以 RSA、SHA-1 为主 | RSA、ECC、AES、SHA-2、SM3 等可协商 |
| 层级结构 | 单一 Owner 为主 | Owner、Platform、Endorsement、Null 四层级 |
| 授权模型 | 简单口令授权 | 口令、HMAC、Policy 策略授权 |
| NV 存储 | 索引能力有限 | NV Index 支持策略、计数器、位图 |
| 资源管理 | 对象槽位固定 | 对象上下文可换出、按需加载 |
| 命令集 | 命令与算法耦合 | 命令与算法解耦,统一命令格式 |
二、TPM 内部组件与数据流
从命令进入 TPM 到返回响应,内部大致经过接口层、执行引擎、密码引擎和存储部件。接口层负责 FIFO 或 CRB 通信;执行引擎解析命令、校验授权会话、管理对象句柄;密码引擎执行 RSA/ECC 签名、HMAC 计算、随机数生成;NV 存储与 PCR 则提供持久化状态和度量值。理解这条数据流,有助于定位“命令被拒绝”到底发生在授权、句柄还是策略阶段。
三、NV 存储与 PCR 的职责边界
NV 存储用于保存需要跨电源周期保留的数据,例如持久化密钥、证书、计数器、授权策略和位图。TPM 2.0 的 NV Index 可以设置读写授权、策略、是否可写、是否计数器等属性,因此它不仅是“小容量闪存”,更是受策略保护的安全对象。PCR 则不同,它记录的是平台启动过程中的度量摘要,通常只允许扩展(Extend)而不允许直接写入。PCR 的值可用于封印密钥:只有平台状态与预期一致时,密钥才能被解封。
四、层级结构与资源管理
TPM 2.0 的层级结构是密钥管理的骨架。Endorsement Hierarchy 通常用于隐私敏感场景,Platform Hierarchy 由固件控制,Owner Hierarchy 由操作系统或管理员使用,Null Hierarchy 则用于临时会话和易失性对象。每个层级都有自己的种子,主密钥由种子派生,子密钥再逐级派生,形成密钥树。资源管理方面,TPM 内部对象槽位有限,当对象过多时,TSS 会把对象上下文换出到主机内存,需要时再加载回来。这一机制让 TPM 可以管理远超其物理槽位数量的密钥对象。
# 查看 TPM 2.0 层级与资源状态(示意)
tpm2_getcap properties-fixed
tpm2_getcap handles-persistent
tpm2_getcap handles-transient
tpm2_getcap handles-nv-index
tpm2_pcrread sha256:0,1,2,3,7
五、案例与常见误区
某服务器在启用 TPM 2.0 后,发现持久化密钥数量受限,新增密钥时提示句柄不足。排查后发现,应用把大量密钥都持久化到 TPM 内部,而没有利用上下文换出机制。正确做法是只持久化必要的根密钥或证书,其余子密钥按需加载。另一个常见误区是认为 PCR 值可以随意重置。实际上,PCR 只能在特定条件下由平台复位或通过策略授权重置,普通软件无法直接改写。还有工程师把 NV Index 当成普通文件系统使用,忽略了授权策略和写寿命限制,导致关键计数器被误写。
掌握 TPM 内部架构后,后续设计密钥体系时就能明确:哪些密钥放在哪个层级、哪些状态用 PCR 度量、哪些数据放 NV 存储、哪些对象需要持久化。架构清晰,可信链才稳固。