TPM 硬件架构详解:芯片内部结构、总线接口、PCR与密钥存储
好,咱们进入正题。TPM 芯片到底长什么样?它怎么跟 CPU 通信?那些 PCR 寄存器又是干嘛的?
我当年第一次拆开 TPM 模块时,第一反应是——这玩意儿真小。但别看它小,里面的门道可不少。今天我就把 TPM 硬件架构掰开揉碎了讲给你听。
TPM 芯片内部结构:一个微型安全计算机
说白了,TPM 就是一个自带防护的微型计算机。它有自己的 CPU、内存、存储,甚至还有硬件随机数发生器。我习惯把它分成三大块:
- 计算引擎:一个低功耗 32 位微控制器,专门跑密码运算
- 安全存储:非易失性存储器(NVM),存放密钥和证书
- I/O 接口:通过 LPC 或 SPI 总线跟主板通信
你想想看,为什么不用主 CPU 直接做这些事?因为主 CPU 跑在操作系统上,容易被攻击。TPM 是独立硬件,攻击者想动它,得先物理拆机。
核心要点:TPM 内部有一个独立的随机数发生器(TRNG)。我在项目中遇到过客户质疑“软件随机数够用吗?”——不够。软件随机数可预测,TRNG 基于物理噪声,这才是真随机。
来看一张内部结构图,我画了张 SVG 帮你理解:
LPC 与 SPI 总线接口:TPM 怎么跟 CPU 说话
TPM 跟 CPU 通信,主要走两条路:LPC 和 SPI。我最早接触的是 LPC,后来 SPI 慢慢成了主流。
| 特性 | LPC 总线 | SPI 总线 |
|---|---|---|
| 引脚数 | 7-13 根 | 4-6 根 |
| 最大速率 | 33 MHz | 50-100 MHz |
| 历史 | ISA 总线替代品,2000 年代主流 | 现代主板首选,2015 年后普及 |
| 典型场景 | 老款笔记本、工控主板 | 新款 PC、服务器、嵌入式设备 |
我个人习惯用 SPI 接口做新设计。为什么?速度快、引脚少、布线简单。但 LPC 有个好处——它支持 DMA,对某些实时性要求高的场景更友好。
避坑指南:我曾经在一个项目中选了 LPC 接口的 TPM,结果发现主板南桥不支持 LPC 复用。最后只能飞线改 SPI 版本。所以选型前一定先查主板 datasheet,确认总线支持情况。
PCR 寄存器:平台的“指纹记录仪”
PCR(Platform Configuration Register)是 TPM 里最核心的概念之一。它就像平台的指纹记录仪——每次启动,系统会把关键组件的哈希值“扩展”进 PCR。
什么叫“扩展”?不是简单的覆盖,而是:
PCR_new = SHA256( PCR_old || new_measurement )
嗯,这里要注意:PCR 只能扩展,不能直接写。你想重置?只能重启机器。这个设计保证了测量链的完整性。
TPM 2.0 规范定义了 24 个 PCR 寄存器,每个 32 字节。我习惯把它们分成几组:
- PCR 0-7:固件和 BIOS 测量,系统启动早期使用
- PCR 8-15:操作系统加载器、内核驱动
- PCR 16-23:应用程序和用户自定义数据
你想想看,如果攻击者改了 BIOS,PCR 值就会变。远程验证方一比对,立刻发现异常。这就是远程证明(Remote Attestation)的基础。
注意:PCR 是易失性寄存器,断电就清零。所以每次冷启动后,PCR 值都是从 0 开始重新构建。如果你需要持久化某些度量值,得用 NVRAM 来存。
密钥存储:TPM 的保险柜
TPM 内部有专门的密钥存储区,放在 NVM 里。密钥分两种:
| 密钥类型 | 存储位置 | 用途 |
|---|---|---|
| 持久密钥(Persistent) | TPM NVM 内部 | EK(背书密钥)、SRK(存储根密钥) |
| 临时密钥(Transient) | TPM 易失性内存 | 会话密钥、签名密钥(用完即销毁) |
EK 是 TPM 的“身份证”,出厂时写入,全球唯一。SRK 是密钥树的根,所有用户密钥都受它保护。我建议你永远不要直接使用 EK 做日常操作——它太敏感了,暴露了就等于暴露了 TPM 身份。
实战建议:用 SRK 派生一个“别名密钥”来做签名和加密。这样即使别名密钥泄露,也不会牵连到 EK。我在做金融终端项目时,就是这么设计的——EK 只用于远程证明,日常操作全走派生密钥。
密钥存储的层级结构,我画了张图:
最后说一句:TPM 硬件架构的精髓,就是“隔离”二字。计算引擎隔离、存储隔离、总线隔离。理解了这一点,你就能明白为什么 TPM 能成为可信计算的基石。