3、TPM与TEE基础:TPM 2.0核心功能、TEE概念、SGX与TrustZone简介

聊远程证明,绕不开两个东西:TPM 和 TEE。它们就像是设备的「身份证」和「保险箱」。我最早接触 TPM 是在做一款工业网关的时候,当时客户要求设备启动时必须证明自己没被篡改。嗯,那会儿我才真正开始研究这东西。

这一节,我们就把 TPM 2.0 的核心功能、TEE 的概念,以及 Intel SGX 和 ARM TrustZone 这两大主流实现讲清楚。你想想看,没有这些硬件基础,远程证明就是空中楼阁。

3.1 TPM 2.0 核心功能

TPM,全称 Trusted Platform Module,说白了就是一个独立的密码芯片。它有自己的处理器、存储和随机数发生器,跟主 CPU 是隔离的。TPM 2.0 是 2014 年发布的标准,相比 1.2 版本,算法更灵活,支持的密码学原语也更多。

我个人习惯把 TPM 2.0 的核心功能归纳为四点:

  • 密钥生成与存储:TPM 内部可以生成 RSA、ECC、SM2 等密钥对,私钥永远不出芯片。我在项目中遇到过有人把私钥放在文件系统里,结果被拖库——有了 TPM,这种低级错误就能避免。
  • 平台配置寄存器(PCR):PCR 是 TPM 内部的一组寄存器,用来记录系统启动过程中的度量值。每次度量都会「扩展」到 PCR 里,新值 = SHA256(旧值 || 新度量值)。这个机制保证了度量链的完整性。
  • 远程证明(Remote Attestation):TPM 可以用 AIK(Attestation Identity Key)对 PCR 值签名,然后把签名结果发给验证方。验证方通过比对 PCR 的期望值,就能判断设备是否可信。
  • 密封与解封(Seal/Unseal):你可以把敏感数据「密封」到某个 PCR 状态下。只有 PCR 值匹配时,TPM 才允许解封。这相当于给数据加了一把「环境锁」。

核心要点:TPM 2.0 的本质是一个可信根(Root of Trust)。它不负责「计算」,只负责「度量」和「报告」。信任链从 TPM 开始,逐级传递到 Bootloader、OS、应用。

下面这张图展示了 TPM 在启动过程中的度量链:

TPM 启动度量链 TPM (CRTM) Bootloader OS Kernel 应用 每个阶段度量后,将哈希值扩展到 PCR[n]:PCR[n] = SHA256(PCR[n] || 新度量值) 度量 BIOS/固件 度量 Bootloader 度量 OS 组件 度量应用

避坑指南:我曾经在项目里直接用 TPM 的 SRK(Storage Root Key)做签名,后来发现 SRK 的主要用途是保护存储密钥树,频繁调用会影响性能。正确的做法是生成专用的 AIK 来做远程证明。

3.2 TEE(Trusted Execution Environment)概念

TEE 是另一个思路。它不依赖独立芯片,而是在主 CPU 内部划分出一个安全区域。这个区域有自己的内存、外设和执行环境,与普通世界(Rich OS)隔离。

说白了,TEE 就是「CPU 里的安全岛」。普通世界的 OS 和应用无法直接访问 TEE 的内存和外设,只能通过特定的安全监控器调用(SMC)来切换。

TEE 的核心特性包括:

  • 隔离执行:安全世界和普通世界共享同一个 CPU 核心,但通过硬件强制隔离。安全世界的代码和数据对普通世界完全不可见。
  • 安全存储:TEE 内部有独立的存储区域,可以用来保存密钥、证书等敏感数据。即使 OS 被攻破,这些数据也不会泄露。
  • 可信应用(TA):在 TEE 中运行的应用称为 Trusted Application。它们可以执行密码运算、身份认证等敏感操作。
  • 远程证明支持:TEE 可以生成签名,证明某个 TA 正在安全环境中运行,并且代码没有被篡改。

关键区别:TPM 是独立芯片,TEE 是 CPU 内的安全区域。TPM 适合做「度量」和「报告」,TEE 适合做「安全计算」和「安全存储」。在实际项目中,两者经常配合使用。

3.3 Intel SGX 简介

Intel SGX(Software Guard Extensions)是 Intel 在 2015 年推出的 TEE 实现。它的思路很特别——不是隔离整个安全世界,而是创建一个个「飞地」(Enclave)。

每个 Enclave 是一块被加密的内存区域,CPU 硬件保证:

  • Enclave 内的代码和数据对 OS、Hypervisor、BIOS 甚至其他 Enclave 都不可见。
  • 只有 Enclave 自己的代码才能访问其内部数据。
  • Enclave 的代码和数据在内存中是加密存储的,只有 CPU 内部才解密。

SGX 的远程证明流程大致如下:

  1. Enclave 生成一个证明请求,包含其度量值(MRENCLAVE)和公钥。
  2. Intel 的 quoting enclave 用 EPID(Enhanced Privacy ID)对度量值签名。
  3. 验证方收到签名后,向 Intel Attestation Service(IAS)验证 EPID 签名的有效性。
  4. 验证通过后,验证方就知道 Enclave 的代码是预期的,并且运行在真实的 SGX 硬件上。

注意:SGX 的远程证明依赖 Intel 的 IAS 服务。如果设备无法联网,或者 Intel 的服务不可用,证明流程就会中断。我在做边缘计算项目时遇到过这个问题,后来改用本地缓存 + 离线验证的方式做了妥协。

SGX 的典型应用场景包括:

  • 多方数据联合计算(如金融风控、医疗数据共享)
  • 数字版权管理(DRM)
  • 密码密钥保护
  • 区块链节点隐私保护

3.4 ARM TrustZone 简介

TrustZone 是 ARM 架构的 TEE 实现。它把 CPU 核心分为两个世界:安全世界(Secure World)和普通世界(Normal World)。

与 SGX 的「细粒度飞地」不同,TrustZone 是「粗粒度隔离」。整个安全世界共享一个内存空间和一套外设。切换世界需要通过安全监控器(Monitor Mode)。

TrustZone 的核心组件包括:

组件 说明
安全监控器 负责世界切换,通过 SMC 指令触发。监控器代码通常很小,驻留在安全内存中。
安全世界 OS 运行在安全世界的操作系统,如 OP-TEE、Trusty。提供安全存储、密码服务等。
可信应用(TA) 运行在安全世界的应用,通过 TEE Client API 与普通世界通信。
安全外设 通过 TrustZone 总线控制器,某些外设(如键盘、指纹传感器)可以只对安全世界可见。

TrustZone 的远程证明通常结合 TPM 或硬件唯一密钥(HUK)来实现。安全世界可以读取 HUK,生成设备唯一签名,然后通过安全通道发送给验证方。

个人经验:我在做手机支付方案时用过 TrustZone。当时最大的坑是「世界切换开销」——每次 SMC 调用大约需要几百微秒。如果频繁切换,性能会明显下降。我的建议是:把需要频繁调用的逻辑尽量放在安全世界内部完成,减少世界切换次数。

3.5 TPM vs TEE:怎么选?

很多初学者会问:TPM 和 TEE 到底选哪个?我的回答是:看场景。

维度 TPM 2.0 TEE(SGX/TrustZone)
硬件形态 独立芯片或固件 TPM CPU 内部安全区域
主要用途 度量、密钥存储、远程证明 安全计算、安全存储、可信执行
性能 密码运算较慢(专用硬件) 接近原生性能(CPU 直接执行)
隔离粒度 芯片级隔离 进程级(SGX)或系统级(TrustZone)
远程证明 基于 PCR 和 AIK 基于 Enclave 度量或安全世界签名
典型设备 PC、服务器、IoT 网关 手机、平板、边缘计算节点

在实际项目中,我经常把两者结合起来:用 TPM 做启动度量,用 TEE 做运行时安全计算。比如在工业控制器中,TPM 负责验证固件完整性,TEE 负责执行关键的加密算法和通信协议。这样既保证了信任链的完整性,又兼顾了计算性能。

一句话总结:TPM 是「可信度量根」,TEE 是「可信执行环境」。两者不是替代关系,而是互补关系。理解这一点,你就能在设计远程证明方案时做出更合理的选择。