可信计算基础:TPM 到底是个什么东西?

好,咱们正式开始聊可信计算。很多朋友一听到“可信平台模块”这六个字,就觉得是个很高深的硬件黑盒。其实没那么玄乎。我个人习惯把它理解成:一颗焊在主板上的、专门干脏活累活的加密小芯片。

你想想看,CPU 要处理那么多通用计算任务,操作系统要管理成千上万的进程,哪有闲工夫去专门保护几把密钥?TPM 就是干这个的。它独立于主 CPU 运行,有自己的处理器、存储器和密码加速器。说白了,它就是一个硬件保险箱,外加一个密码机。

核心观点:TPM 不是用来加速计算的,它是用来建立“信任根”的。整个系统的可信度,都从这颗小芯片开始。

TPM 的核心功能:它到底能干啥?

TPM 的功能很多,但咱们这门课最关心的,是下面这三个。我在做第一个物联网网关项目时,就是靠它们解决了设备身份伪造的问题。

1. 密钥生成与安全存储

TPM 最拿手的,就是在芯片内部生成非对称密钥对(RSA 或 ECC)。注意,是在内部生成。私钥一旦生成,就永远待在 TPM 的防篡改硬件里,永远不会以明文形式出现在内存或硬盘上。

你可能会问:“那我怎么用这把私钥?”答案是:你只能通过 TPM 的接口给它发指令,让它帮你签名、解密。私钥本身,你看不到,也摸不着。

我的经验:曾经有个项目,客户非要把私钥导出到文件里做备份。我劝了半天,最后他妥协了——改用 TPM 的“可迁移密钥”机制。嗯,这里要注意:TPM 支持两种密钥——可迁移和不可迁移。生产环境里,身份密钥一定要用不可迁移的。

2. 密封存储(Sealed Storage)

这个功能很有意思。它不只是加密数据,而是把数据和系统的状态绑定在一起。你可以把某个机密数据“密封”起来,只有当你指定的 PCR(平台配置寄存器)值匹配时,才能解封。

举个例子:你可以在系统启动后,把数据库密码密封起来。如果下次启动时,有人改了内核模块或者引导加载器,PCR 值就会变化,TPM 就会拒绝解封。数据还在,但你就是拿不出来。

// 伪代码示意:密封操作
tpm2_seal(
    data: "db_password_123",
    pcr_selection: [PCR_0, PCR_2, PCR_7],  // BIOS、Option ROM、安全启动策略
    policy: "and"
);
// 只有当前 PCR 值与密封时完全一致,才能 unseal

避坑指南:我曾经遇到过一个问题——固件升级后,PCR 值变了,结果密封数据全部无法解封。后来我们引入了“迁移密钥”和“升级策略 PCR”才解决。所以,设计密封策略时,一定要考虑固件更新的场景。

3. 远程证明(Remote Attestation)

这是咱们这门课的核心。远程证明,说白了就是:你的设备向远程服务器证明“我是我,我没被篡改”。

流程大致是这样的:

  1. 服务器发送一个随机数(nonce)给设备,防止重放攻击。
  2. 设备上的 TPM 读取当前 PCR 值(系统度量值),并用 AIK(身份认证密钥)对 PCR 值和 nonce 进行签名。
  3. 设备把签名结果和 PCR 值一起发给服务器。
  4. 服务器验证签名,并比对 PCR 值是否与预期一致。

如果 PCR 值匹配,说明设备的启动链是完整的,没有被篡改。这就是“可信”的来源。

TPM 的架构与规范:一张图看懂

下面这张图,是我自己总结的 TPM 内部逻辑架构。你看完就能明白,它为什么能保证安全。

TPM 内部逻辑架构图 TPM 2.0 内部逻辑架构 TPM 芯片物理边界(防篡改封装) 密码引擎 RSA / ECC / AES SHA-1 / SHA-256 安全密钥存储 SRAM(易失) NVRAM(非易失) 平台配置寄存器 PCR[0..23] 度量值存储 I/O 接口 LPC / SPI / I²C 随机数生成器 硬件真随机数 执行引擎 固件指令处理 🔑 关键说明: • 密码引擎:所有加解密操作都在这里完成,私钥从不离开芯片。 • PCR:存储系统启动过程中的度量值,用于远程证明。 • 执行引擎:解析 TPM 命令,控制整个芯片的工作流程。

TPM 的规范演进:从 1.2 到 2.0

目前主流的是 TPM 2.0 规范。它比 1.2 强在哪?我列个表你就清楚了。

对比项 TPM 1.2 TPM 2.0
算法支持 仅 RSA + SHA-1 RSA、ECC、SM2、SHA-256、SM3 等
密钥层次 固定层次结构 灵活的三层结构(平台、存储、背书)
授权机制 仅密码 密码 + 策略 + 生物特征
命令集 固定命令 可扩展命令,支持厂商自定义
PCR 数量 固定 16 个 最多 24 个,可配置

我的建议:新项目直接上 TPM 2.0。1.2 的 SHA-1 已经不够安全了,而且算法太死板。我在一个金融项目里用过 1.2,后来为了支持国密 SM2/SM3,不得不换 2.0,折腾了两个月。别走弯路。

小结一下

TPM 不是什么黑魔法。它就是一颗专门干密码活的小芯片,帮你管好密钥、度量系统状态、向外界证明你的设备是可信的。

记住三个关键词:密钥生成、密封存储、远程证明。后面几章,我们会把远程证明这个点拆开揉碎了讲。你先把 TPM 的架构图记在脑子里,后面会轻松很多。