3. TPM硬件架构与安全边界
TPM(Trusted Platform Module,可信平台模块)并不是一颗“会加密的普通芯片”,而是一个围绕密钥生命周期与平台状态度量构建的专用安全子系统。理解TPM的硬件架构,关键在于分清哪些部件负责“算”、哪些部件负责“存”、哪些部件负责“看”,以及这些部件共同依赖的物理安全假设。只有把安全边界画清楚,后续的密封存储、密钥授权和远程证明才有可靠的落脚点。
一、TPM芯片组成:从总线接口到执行引擎
一颗离散TPM通常由以下功能块构成:主机接口(LPC、SPI或I²C)、命令解析与调度单元、密码引擎(RSA/ECC/SHA/AES)、随机数发生器、非易失性存储、易失性存储、平台配置寄存器(PCR)以及电源管理与物理防护结构。主机接口负责把来自CPU的TPM命令封装成字节流;命令解析单元校验命令格式、授权会话和句柄;密码引擎执行签名、解密、密钥生成等运算;存储区保存长期密钥和状态;PCR记录平台启动链的度量值。
需要强调的是,TPM内部并不直接暴露密钥明文。密钥对象以“受保护 blob”的形式在外部存储,只有被加载进TPM内部后,才能以句柄形式参与运算。这种“密钥不落地”的设计,使TPM成为密钥保护链中的可信锚点。
二、非易失性存储:长期信任的落脚点
TPM的非易失性存储(NVRAM)保存的是“断电也不能丢”的关键对象,主要包括:背书密钥EK(Endorsement Key)、存储根密钥SRK(Storage Root Key)、所有者授权(Owner Auth)、NV索引以及单调计数器。EK是TPM的身份根,通常在制造阶段注入,私钥永不出芯片;SRK是密钥树的根,所有用户密钥都直接或间接挂在其下;NV索引可用于保存平台策略、证书或密封数据;单调计数器则用于防止重放攻击。
NVRAM的写入寿命有限,且部分区域在TPM生命周期内只允许写一次。工程上常见的误区是把大量业务数据直接塞进NV索引,导致写入耗尽或空间不足。正确做法是:NVRAM只保存“根”和“策略”,大块数据仍放在外部存储,用TPM密钥加密保护。
TPMA_NV_PPWRITE、TPMA_NV_AUTHREAD、TPMA_NV_POLICYREAD。配置前应明确“谁在什么条件下能读、能写”,否则可能造成授权绕过或数据不可用。
三、平台配置寄存器PCR:平台状态的度量账本
PCR是一组只能“扩展”(extend)而不能直接覆写的寄存器。扩展操作定义为:PCR_new = Hash(PCR_old || 度量值)。这意味着任何一次启动链上的变化都会改变最终PCR值,且无法通过简单回写伪造。典型PC平台上,PCR[0]记录固件,PCR[1]记录固件配置,PCR[2]记录Option ROM,PCR[3]记录Option ROM配置,PCR[4]记录MBR,PCR[5]记录MBR配置,PCR[6]记录状态转换,PCR[7]记录安全策略。
PCR的价值在于“密封”:把密钥或数据绑定到一组PCR值上,只有平台处于预期状态时才能解封。例如,全盘加密的密钥可以密封到PCR[0-7],一旦引导程序被篡改,PCR变化,密钥就无法释放,系统自然拒绝启动。
# 查看 PCR 值(Linux 环境)
$ cat /sys/class/tpm/tpm0/pcr-sha256/0
3d5f...a1c2
# 扩展 PCR 示例(伪代码)
TPM2_PCR_Extend(
pcrHandle = 4,
digests = [{ hashAlg = TPM_ALG_SHA256,
digest = 0x9f2c... }]
)
四、随机数发生器与物理安全假设
TPM内部集成真随机数发生器(TRNG)和确定性随机比特生成器(DRBG)。TRNG从物理噪声源采集熵,DRBG对熵进行扩展并输出高质量随机数。密钥生成、签名随机数、会话nonce都依赖RNG。如果RNG被预测或熵不足,整个密钥体系都会崩塌。因此,TPM规范要求对RNG进行健康测试,并在熵源异常时拒绝输出。
物理安全假设是TPM安全边界的基础:攻击者可以完全控制主机软件、总线和外部存储,但假设其无法无损地物理侵入TPM芯片内部。TPM通过屏蔽层、电压/频率/温度传感器、防拆网格和主动清零电路来抵抗物理攻击。一旦检测到入侵,TPM会清除内部密钥和敏感状态。需要清醒认识的是,这一假设并非绝对:侧信道攻击、故障注入和聚焦离子束等手段仍可能突破部分防护。因此,高安全场景通常要求TPM配合安全启动、远程证明和密钥轮换共同使用。
| 部件 | 主要职责 | 典型对象/参数 | 安全边界要点 |
|---|---|---|---|
| 主机接口 | 接收命令、返回响应 | LPC / SPI / I²C | 总线可被监听,命令需授权会话保护 |
| 密码引擎 | 密钥生成、签名、加解密 | RSA 2048、ECC P256、SHA-256、AES-128 | 密钥明文不出芯片 |
| NVRAM | 保存长期密钥与策略 | EK、SRK、Owner Auth、NV Index | 写入寿命有限,权限属性需严格配置 |
| PCR | 记录平台度量值 | PCR[0-23]、SHA-1/SHA-256 | 只能扩展,不可直接覆写 |
| RNG | 提供随机数 | TRNG + DRBG | 熵不足会导致密钥可预测 |
| 物理防护 | 抵抗物理入侵 | 传感器、屏蔽层、防拆网格 | 假设攻击者无法无损侵入 |
五、案例与复盘:一次密封启动失败的分析
某服务器启用TPM密封磁盘密钥后,一次固件升级导致系统无法自动解密启动。排查发现:固件升级改变了PCR[0]和PCR[1]的值,而密钥密封策略绑定的是升级前的PCR集合。TPM本身工作正常,但平台状态已不再满足解封条件。复盘结论有三点:第一,PCR策略必须与固件更新流程联动,升级前应重新密封或预留恢复密钥;第二,不能把PCR绑定当作“一劳永逸”的配置;第三,应监控PCR变化并记录基线,便于快速定位是引导链哪一环发生了变化。
综上,TPM硬件架构可以概括为:以主机接口为入口,以密码引擎和RNG为运算核心,以NVRAM保存长期信任根,以PCR记录平台状态,以物理防护维持安全边界。理解这五者的分工与依赖,是后续设计密封存储方案、配置授权策略和开展远程证明的前提。