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里,然后才把控制权交给下一级。

典型的信任链流程如下:

  1. CRTM(Core Root of Trust for Measurement)度量BIOS代码,将度量值扩展到PCR[0]。
  2. BIOS度量Bootloader代码,将度量值扩展到PCR[1]。
  3. Bootloader度量OS内核代码,将度量值扩展到PCR[2]。
  4. 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的对应关系:

信任链与PCR对应关系图 CRTM(信任根) BIOS Bootloader OS内核 TPM/TCM PCR寄存器组 PCR[0] ← BIOS代码 PCR[1] ← BIOS配置 PCR[2] ← Option ROM PCR[3] ← Option ROM配置 PCR[4] ← Bootloader代码 PCR[5] ← Bootloader配置 PCR[6] ← 状态切换 PCR[7] ← 平台制造商 度量值通过扩展操作写入:PCR[n] = SHA256(PCR[n] || 新度量值)

1.6 为什么需要可信计算?

你可能会问:“我装个杀毒软件不就行了?干嘛要搞这么复杂?”

杀毒软件跑在操作系统之上,如果操作系统本身已经被攻破,杀毒软件看到的都是假象。这叫“软件不可信”。可信计算从硬件层面解决了这个问题——在操作系统启动之前就开始度量,确保每一级代码都是预期的、未被篡改的。

我举个例子:2017年的CCleaner供应链攻击,攻击者在软件安装包里植入了后门。如果当时有可信启动机制,安装包被篡改后,PCR值就会跟预期不符,系统可以直接拒绝启动。这就是硬件级防护的价值。

一句话总结:可信计算不是让系统“绝对安全”,而是让系统“可验证”。你能知道系统当前的状态是不是你期望的,而不是靠猜。

1.7 本章小结

  • TPM是国际标准,TCM是中国标准,核心功能都是度量、存储、报告。
  • 信任根是硬件不可变的起点,分为RTM、RTS、RTR三种。
  • 信任链从CRTM开始,逐级度量、逐级传递信任。
  • PCR是存储度量值的寄存器,通过扩展操作记录完整的历史哈希。