3、硬件信任根:TPM(可信平台模块)基础、TPM 2.0 vs TPM 1.2、TPM的密钥层次结构

聊到可信启动,TPM 是个绕不开的坎儿。说白了,它就是整个信任链的物理锚点。没有它,你前面做的所有安全措施都像是空中楼阁。

我个人习惯把 TPM 理解成一个“黑盒子”——它只做一件事:保护密钥,并且只在自己肚子里做加解密运算。密钥一旦生成,就永远出不来。嗯,这里要注意,我说的“出不来”是指私钥部分,公钥是可以随便拿的。

3.1 TPM 到底是个啥?

TPM 全称 Trusted Platform Module,是一个独立的硬件安全芯片。它有自己的处理器、存储器和随机数生成器。你想想看,它跟主 CPU 是隔离的,所以就算操作系统被攻破了,TPM 里的秘密依然安全。

它的核心能力就三样:

  • 密钥生成与存储:在芯片内部生成密钥对,私钥永不离开硬件。
  • 平台度量:记录系统启动过程中的各种度量值(比如 BIOS、引导加载程序、内核的哈希值)。
  • 远程证明:向外部证明当前平台的软件状态是可信的。

我在项目中遇到过一件事:有客户觉得 TPM 太贵,想用软件模拟替代。结果呢?模拟的 TPM 密钥全存在硬盘上,一次勒索病毒攻击,整个信任链就崩了。所以,硬件信任根,必须是硬件。

核心观点: TPM 是信任链的“第一块砖”。如果这块砖是假的,后面砌的墙再高也没用。

3.2 TPM 2.0 vs TPM 1.2:到底差在哪?

很多朋友问我:“现在都 2025 年了,TPM 1.2 还能用吗?”我的回答很直接:能用,但别用。

TPM 1.2 是 2000 年代初期的标准,当时的设计思路比较保守。而 TPM 2.0 是 2014 年发布的,做了大量改进。我列个表,你一看就明白:

对比项 TPM 1.2 TPM 2.0
算法支持 仅支持 RSA、SHA-1 支持 RSA、ECC、SHA-256、SM3 等
密钥层次 单一层次,结构简单 多层次,更灵活
授权机制 仅密码 密码、策略、HMAC、生物特征等
平台数量 最多支持 8 个 无限制
命令集 约 70 条命令 约 120 条命令
向后兼容 不兼容 2.0 不兼容 1.2

为什么会这样?因为 TPM 1.2 的 SHA-1 算法已经被证明有碰撞风险了。我记得有一次做安全审计,客户还在用 TPM 1.2,我们直接建议他换主板。没办法,SHA-1 的弱点太致命了。

避坑指南: 我曾经见过有人把 TPM 1.2 的芯片焊到新主板上,结果驱动不兼容,系统直接蓝屏。TPM 版本必须跟主板固件匹配,别乱换。

TPM 2.0 还有一个好处:它支持 ECC 算法。ECC 的密钥比 RSA 短得多,但安全性更高。比如,一个 256 位的 ECC 密钥,安全强度相当于 3072 位的 RSA 密钥。这对嵌入式设备来说,简直是福音。

3.3 TPM 的密钥层次结构

这是 TPM 最核心的设计之一。我刚开始学的时候也被绕晕过,后来画了一张图才彻底搞明白。来,我直接给你看:

TPM 密钥层次结构 主密钥 (EK / SRK) EK:设备唯一身份,SRK:存储根密钥 存储密钥 (Storage Keys) 用于加密其他密钥,可有多层嵌套 身份密钥 (AIK) 用于远程证明 绑定密钥 (Binding Key) 用于加密外部数据 会话密钥 (Session Key) 临时密钥,用完即销毁 签名密钥 (Signing Key) 用于代码签名、数据签名 密钥从根向下派生,上层密钥保护下层密钥

这张图你看懂了吗?我解释一下:

  • EK(Endorsement Key):这是 TPM 的“身份证”,出厂时烧录进去的,全世界唯一。它不能用于日常加解密,只用来证明“我是我”。
  • SRK(Storage Root Key):存储根密钥,所有存储密钥的“祖宗”。它保护着整个密钥树的安全。
  • AIK(Attestation Identity Key):身份密钥,用于远程证明。我做过一个项目,用 AIK 向服务器证明客户端的 BIOS 没有被篡改过,效果很好。
  • 会话密钥:临时生成的,用完就销毁。比如你每次开机,TPM 都会生成一个新的会话密钥来加密内存中的敏感数据。
小技巧: 在实际部署中,我建议把 SRK 的授权策略设得严格一些。比如,要求平台度量值必须匹配才能使用 SRK。这样就算有人物理拿到了 TPM,也解不开里面的密钥。

你可能会问:“这么多密钥,怎么管理?”其实 TPM 内部有一套完整的密钥管理机制。每个密钥都有一个唯一的句柄(Handle),你可以通过句柄来引用它。密钥的父密钥是谁,子密钥是谁,都记录在 TPM 的 NV(非易失性)存储中。

我记得有一次调试一个可信启动的问题,发现 PCR 值总是不对。查了半天,原来是 SRK 被重置了,导致整个密钥树失效。从那以后,我每次部署都会先检查 SRK 的状态。

避坑指南: 我曾经遇到过 TPM 的 NV 存储空间被写满的情况。TPM 的 NV 空间是有限的(通常 1KB 到 64KB 不等),别把日志啥的都往里塞。定期清理无用的 NV 索引。

最后说一句:TPM 的密钥层次结构,本质上是一个“信任传递”的过程。根密钥在硬件里,子密钥在软件里。只要根密钥安全,整个链条就安全。这就是硬件信任根的精髓。

可可精品资料库