TPM 硬件架构详解:芯片内部结构、总线接口、PCR与密钥存储

好,咱们进入正题。TPM 芯片到底长什么样?它怎么跟 CPU 通信?那些 PCR 寄存器又是干嘛的?

我当年第一次拆开 TPM 模块时,第一反应是——这玩意儿真小。但别看它小,里面的门道可不少。今天我就把 TPM 硬件架构掰开揉碎了讲给你听。

TPM 芯片内部结构:一个微型安全计算机

说白了,TPM 就是一个自带防护的微型计算机。它有自己的 CPU、内存、存储,甚至还有硬件随机数发生器。我习惯把它分成三大块:

  • 计算引擎:一个低功耗 32 位微控制器,专门跑密码运算
  • 安全存储:非易失性存储器(NVM),存放密钥和证书
  • I/O 接口:通过 LPC 或 SPI 总线跟主板通信

你想想看,为什么不用主 CPU 直接做这些事?因为主 CPU 跑在操作系统上,容易被攻击。TPM 是独立硬件,攻击者想动它,得先物理拆机。

核心要点:TPM 内部有一个独立的随机数发生器(TRNG)。我在项目中遇到过客户质疑“软件随机数够用吗?”——不够。软件随机数可预测,TRNG 基于物理噪声,这才是真随机。

来看一张内部结构图,我画了张 SVG 帮你理解:

TPM 芯片内部架构 TPM 安全芯片边界 计算引擎 32位微控制器 密码协处理器 SHA-256 / RSA / ECC 硬件 TRNG 安全存储 NVM(非易失性存储器) 密钥存储区 PCR 寄存器 平台配置数据 I/O 接口 LPC 总线 SPI 总线 中断控制 DMA 安全防护层 防篡改检测 | 电压/温度监控 | 总线加密 | 访问控制 外部接口 LPC/SPI 总线 → 连接南桥/CPU GPIO → 物理存在信号(Physical Presence)

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 密钥存储层级 EK(背书密钥) SRK(存储根密钥) 签名密钥(AIK) 加密密钥 EK 只用于身份证明,日常操作使用 SRK 派生的子密钥

最后说一句:TPM 硬件架构的精髓,就是“隔离”二字。计算引擎隔离、存储隔离、总线隔离。理解了这一点,你就能明白为什么 TPM 能成为可信计算的基石。