1. 可信计算概述:TPM/TCM起源、核心思想、信任根与信任链
各位同学,咱们今天聊聊可信计算的起源。说实话,这玩意儿刚出来的时候,我也觉得它挺玄乎的。什么叫“可信”?芯片还能判断我是不是“可信”的?
后来我在一个安全启动项目里栽了跟头——固件被篡改,系统启动后门大开,客户数据泄露。从那以后,我才真正理解了可信计算的价值。它不是玄学,是实打实的硬件级安全防线。
1.1 TPM与TCM的起源
TPM,全称Trusted Platform Module,可信平台模块。这概念最早是1999年由几家IT巨头(Intel、IBM、微软等)搞出来的。他们成立了一个叫TCG(Trusted Computing Group)的组织,专门推这个标准。
说白了,TPM就是一个独立的硬件安全芯片,焊在主板上。它有自己的处理器、存储、加密引擎,跟CPU和内存是隔离的。你想想看,就算操作系统被攻破了,攻击者也拿不到TPM里的密钥——因为物理上就不在一个地盘上。
那TCM呢?TCM是中国的自主标准,全称Trusted Cryptography Module,可信密码模块。2006年左右,国家密码管理局牵头,基于国密算法(SM2、SM3、SM4)搞了一套自己的规范。我在一个政务云项目里就遇到过强制要求用TCM的场景——涉密系统,必须用国密,没得商量。
核心区别一句话:TPM是国际标准(TCG制定),TCM是中国标准(国密算法)。功能上类似,但算法体系不同。
1.2 核心思想:度量、存储、报告
可信计算的核心思想,我总结为三个词:度量、存储、报告。
- 度量:在系统启动或运行过程中,对关键代码和数据进行哈希计算,生成一个“指纹”。
- 存储:把这些指纹安全地存到TPM/TCM的PCR(平台配置寄存器)里,防止被篡改。
- 报告:当远程验证方问“你的系统可信吗?”,TPM/TCM就把PCR里的值签个名发过去,证明自己的状态。
嗯,这里要注意:度量不是一次性的。从BIOS到Bootloader,再到OS内核,每一级都要度量上一级。这就是后面要讲的信任链。
1.3 信任根:一切信任的起点
信任根,Root of Trust,是整个可信计算的基石。它必须是一个绝对可信的实体,不能被篡改。通常分为三种:
| 信任根类型 | 英文 | 作用 |
|---|---|---|
| 度量信任根 | RTM | 负责执行第一次度量,通常是CPU执行的第一段代码(如BIOS的Core Root of Trust for Measurement) |
| 存储信任根 | RTS | 负责安全存储度量值,就是TPM/TCM里的PCR寄存器 |
| 报告信任根 | RTR | 负责向外部证明度量值的真实性,通常用TPM/TCM的背书密钥(EK)签名 |
我记得第一次接触信任根时,有个问题困扰了我很久:“信任根自己怎么被信任?” 答案是:信任根是硬件固化的,出厂时就烧死在芯片里,物理上不可修改。你没法改它,只能信它。
避坑指南:我曾经在一个项目里发现,某厂商的“可信启动”方案居然把信任根放在Flash里,用软件保护。结果固件升级时被刷掉了信任根,整个安全体系崩塌。记住:信任根必须是硬件不可变的,否则就是伪可信。
1.4 信任链:从根到系统
信任链,Chain of Trust,就是把信任从信任根一级一级传递下去。每一级在启动下一级之前,先度量下一级的代码,把度量值扩展到PCR里,然后才把控制权交给下一级。
典型的信任链流程如下:
- CRTM(Core Root of Trust for Measurement)度量BIOS代码,将度量值扩展到PCR[0]。
- BIOS度量Bootloader代码,将度量值扩展到PCR[1]。
- Bootloader度量OS内核代码,将度量值扩展到PCR[2]。
- OS内核度量关键驱动和应用程序,将度量值扩展到PCR[3]及以后。
如果中间任何一级的代码被篡改,它的哈希值就会变,PCR里的值就跟预期值对不上。远程验证方一看,就知道系统被动了。
注意:信任链不是无限长的。每多一级,就多一个攻击面。我见过一些设计把信任链拉到了十几级,结果中间某个环节的度量逻辑有漏洞,整个链就断了。建议控制在5级以内,越短越安全。
1.5 信任链与PCR的关系
PCR,Platform Configuration Register,平台配置寄存器。它是TPM/TCM内部的一组寄存器,专门存度量值。每个PCR有固定的用途:
| PCR索引 | 典型用途 |
|---|---|
| PCR[0] | BIOS/固件代码 |
| PCR[1] | BIOS配置 |
| PCR[2] | Option ROM代码 |
| PCR[3] | Option ROM配置 |
| PCR[4] | MBR/Bootloader代码 |
| PCR[5] | MBR/Bootloader配置 |
| PCR[6] | 状态切换和唤醒事件 |
| PCR[7] | 平台制造商控制 |
度量值不是直接覆盖写入的,而是通过扩展操作:PCR[n] = SHA256(PCR[n] || 新度量值)。这样就能记录所有度量历史的累积哈希,无法回滚。
下面这张图展示了信任链与PCR的对应关系:
1.6 为什么需要可信计算?
你可能会问:“我装个杀毒软件不就行了?干嘛要搞这么复杂?”
杀毒软件跑在操作系统之上,如果操作系统本身已经被攻破,杀毒软件看到的都是假象。这叫“软件不可信”。可信计算从硬件层面解决了这个问题——在操作系统启动之前就开始度量,确保每一级代码都是预期的、未被篡改的。
我举个例子:2017年的CCleaner供应链攻击,攻击者在软件安装包里植入了后门。如果当时有可信启动机制,安装包被篡改后,PCR值就会跟预期不符,系统可以直接拒绝启动。这就是硬件级防护的价值。
一句话总结:可信计算不是让系统“绝对安全”,而是让系统“可验证”。你能知道系统当前的状态是不是你期望的,而不是靠猜。
1.7 本章小结
- TPM是国际标准,TCM是中国标准,核心功能都是度量、存储、报告。
- 信任根是硬件不可变的起点,分为RTM、RTS、RTR三种。
- 信任链从CRTM开始,逐级度量、逐级传递信任。
- PCR是存储度量值的寄存器,通过扩展操作记录完整的历史哈希。