3、硬件信任根:TPM(可信平台模块)基础、TPM 2.0 vs TPM 1.2、TPM的密钥层次结构
聊到可信启动,TPM 是个绕不开的坎儿。说白了,它就是整个信任链的物理锚点。没有它,你前面做的所有安全措施都像是空中楼阁。
我个人习惯把 TPM 理解成一个“黑盒子”——它只做一件事:保护密钥,并且只在自己肚子里做加解密运算。密钥一旦生成,就永远出不来。嗯,这里要注意,我说的“出不来”是指私钥部分,公钥是可以随便拿的。
3.1 TPM 到底是个啥?
TPM 全称 Trusted Platform Module,是一个独立的硬件安全芯片。它有自己的处理器、存储器和随机数生成器。你想想看,它跟主 CPU 是隔离的,所以就算操作系统被攻破了,TPM 里的秘密依然安全。
它的核心能力就三样:
- 密钥生成与存储:在芯片内部生成密钥对,私钥永不离开硬件。
- 平台度量:记录系统启动过程中的各种度量值(比如 BIOS、引导加载程序、内核的哈希值)。
- 远程证明:向外部证明当前平台的软件状态是可信的。
我在项目中遇到过一件事:有客户觉得 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 2.0 还有一个好处:它支持 ECC 算法。ECC 的密钥比 RSA 短得多,但安全性更高。比如,一个 256 位的 ECC 密钥,安全强度相当于 3072 位的 RSA 密钥。这对嵌入式设备来说,简直是福音。
3.3 TPM 的密钥层次结构
这是 TPM 最核心的设计之一。我刚开始学的时候也被绕晕过,后来画了一张图才彻底搞明白。来,我直接给你看:
这张图你看懂了吗?我解释一下:
- EK(Endorsement Key):这是 TPM 的“身份证”,出厂时烧录进去的,全世界唯一。它不能用于日常加解密,只用来证明“我是我”。
- SRK(Storage Root Key):存储根密钥,所有存储密钥的“祖宗”。它保护着整个密钥树的安全。
- AIK(Attestation Identity Key):身份密钥,用于远程证明。我做过一个项目,用 AIK 向服务器证明客户端的 BIOS 没有被篡改过,效果很好。
- 会话密钥:临时生成的,用完就销毁。比如你每次开机,TPM 都会生成一个新的会话密钥来加密内存中的敏感数据。
你可能会问:“这么多密钥,怎么管理?”其实 TPM 内部有一套完整的密钥管理机制。每个密钥都有一个唯一的句柄(Handle),你可以通过句柄来引用它。密钥的父密钥是谁,子密钥是谁,都记录在 TPM 的 NV(非易失性)存储中。
我记得有一次调试一个可信启动的问题,发现 PCR 值总是不对。查了半天,原来是 SRK 被重置了,导致整个密钥树失效。从那以后,我每次部署都会先检查 SRK 的状态。
最后说一句:TPM 的密钥层次结构,本质上是一个“信任传递”的过程。根密钥在硬件里,子密钥在软件里。只要根密钥安全,整个链条就安全。这就是硬件信任根的精髓。
可可精品资料库