信任根三件套:RTM、RTR、RTS与TEE+TPM协作
TEE 是黑盒信任根,TPM 是白盒信任根——把它们拼在一起,就拼出了 CCxTrust 协作信任的核心。
📚 基本概念速读
| 名称 | 定义 | 省流 |
|---|---|---|
| RTM | Root of Trust for Measurement,度量信任根 | 记账员:负责测量 |
| RTR | Root of Trust for Report,报告信任根 | 公证员:负责汇报 |
| RTS | Root of Trust for Storage,存储信任根 | 保险库:负责藏钥匙 |
| 黑盒信任根 | black-box RoT | TEE 的信任根,用户够不着 |
| 白盒信任根 | white-box RoT | TPM 的信任根,用户可访问可配置 |
| TCB | Trusted Computing Base,受信计算基 | 安全所依赖的最小可信组件集合 |
| 信任链 | chain of trust | 从物理锚点逐级验证的链条 |
| 信任锚 | trust anchor | 信任链的起点,物理上不可篡改 |
| PSP | Platform Security Processor,平台安全处理器 | AMD CPU 里的独立安全协处理器 |
| 复合认证 | composite attestation | TEE 和 TPM 合并出认证报告 |
🧩 信任根三件套:RTM / RTR / RTS
TCG 把”可信平台”拆成三个信任根。整个 CCxTrust 架构就是围绕这三个根怎么分配展开的:
| 信任根 | 全称 | 干什么 | 通俗类比 |
|---|---|---|---|
| RTM | Root of Trust for Measurement,度量信任根 | 负责测量系统状态,保证”测了、记了、改不了” | 记账员 |
| RTR | Root of Trust for Report,报告信任根 | 负责把测量结果可信地报出去(签名) | 公证员 |
| RTS | Root of Trust for Storage,存储信任根 | 负责保护密钥等秘密 | 保险库 |
一句话:RTM 管”测量”,RTR 管”汇报”,RTS 管”存储”。一台机器可不可信,就是”测得好、报得真、藏得牢”三件事。
⚖️ 黑盒 TEE + 白盒 TPM:各有所长
TEE 和 TPM 是两种完全不同的信任根:
1 | TEE(SEV-SNP) TPM |
关键差异:CPU-TEE 信任根是黑盒的,只能给系统底层(固件、hypervisor、内核)用,用户够不着、验不了;TPM 是白盒的,用户可以直接访问、配置、验证,能补上 TEE 没有的用户侧能力。
三个核心挑战与对应方案:
| 挑战 | 问题 | 方案 |
|---|---|---|
| Q1 | 怎么建立用户可控的信任体系? | S1:协作信任根(TEE+TPM) |
| Q2 | 怎么弥合 TEE 和 TPM 的技术鸿沟? | S2:机密 TPM(CTPM) |
| Q3 | 怎么保证 CVM 敏感数据安全? | S3:复合认证 |
📐 核心分配:三件套怎么分工
CCxTrust 的原创设计——不搞一家独大,让 TEE 和 TPM 分工协作:
1 | RTM(度量) → TEE 与 TPM 并行独立,各测各的域 |
为什么这样分?
| 分配 | 原因 |
|---|---|
| RTM 并行独立 | 两者测的域不同、互不依赖,形成”双保险”(dual insurance) |
| RTR 协作 | 单一报告根容易被伪造/拼接攻击,合并成一份报告才能防拼接 |
| RTS 归 TPM | TEE 没有持久存储能力(内存加密但掉电即失),TPM 有 NVRAM + 密钥树,天生是保险库 |
📏 三阶段测量:RTM 的具体落地
CVM 的信任链从启动到运行分成三个阶段:
1 | ┌─────────────────────────────────────────────────────────────┐ |
前两阶段偏静态(启动时测一次),第三阶段偏动态(运行中持续测)。也就是”静态 + 动态信任链结合”。
顺带澄清一个容易混的概念:hypervisor 不是固件。层次是:应用 → Guest OS → hypervisor(软件)→ 固件 Firmware(UEFI/BIOS、PSP 等,烧在只读存储里)→ CPU 硬件。固件启动 hypervisor,hypervisor 启动 guest。
🔗 度量分工重合吗?——这是”双保险”不是 bug
设计上”TEE 测固件、TPM 测 hypervisor”,但现实中 TPM 的启动链本来也测固件(UEFI 启动时自己 Extend PCR)。实践中有重叠,但这是刻意为之:
1 | 设计意图 = 双保险(redundancy): |
概念上分工(各测各的域),实践上有重叠(都碰固件),重叠是刻意的冗余设计。
🔑 信任链与信任锚:固件为什么改不了
PCR 的”固件逻辑强制”依赖一个前提:固件本身不能被恶意修改。这靠两道防线,不是靠”加载时度量”一次解决:
1 | ① 物理防护(第一道,硬件级): |
所以准确表述是:
| 防护对象 | 防护手段 |
|---|---|
| TPM 固件本身不可改 | 物理防护(熔丝、受保护存储、签名校验) |
| 系统软件(内核等)不被篡改 | 信任链(启动时逐级度量 + 签名校验) |
信任链的起点(信任锚)是谁? 是硬件本身(RoT,Root of Trust,信任根)——它是物理上无法篡改的,比如 TPM 芯片内部逻辑、CPU 内部的 PSP ROM。信任链不是无限的,它终止于一个”物理可信”的锚点,这就是”根(Root)“的含义。
修正一个常见说法:不是”加载时度量保证固件不可改”——UEFI 是第一级软件,加载时已经没人能度量它了,它靠的是硬件锚点 + 物理防护。
🔩 PSP:AMD 芯片里的”先于一切”的安全小电脑
PSP(Platform Security Processor,平台安全处理器) 是 AMD CPU 里的独立 ARM 安全协处理器,相当于”CPU 里的一个小电脑”:
1 | ┌─────────────────────────────┐ |
PSP 的核心角色:
| 场景 | PSP 干什么 |
|---|---|
| “TEE 通过 PSP 进行信任初始化” | PSP 是 TEE 信任链的起点(锚点) |
| 内存加密 | PSP 生成和管理内存加密密钥 |
| RMP 归属分配 | PSP 固件执行 RMPUPDATE,锁定页归属 |
| fTPM | AMD 的 fTPM 就跑在 PSP 里 |
一句话:PSP 是 AMD 芯片里”先于一切、独立于一切”的安全小电脑,TEE 的信任锚就是它。 类似地,Intel 有 Intel ME/CSE,ARM 有 TrustZone 的 secure world。
🔭 展望:RTR 协作 = 复合认证
本篇已建立完整骨架,最后预告 CCxTrust 最核心的一环——RTR 协作。
为什么独立认证不够:TEE 和 TPM 各自单独出认证报告时:
1 | · 攻击者可能伪造 CVM 的 ID 发起攻击 |
CCxTrust 的解法:复合认证协议——把 TEE 报告嵌进 TPM Quote(或反过来),生成一份不可拆分的复合报告,一次交互完成认证。拼接攻击的根基(两份独立报告)被直接消灭,认证效率还提升了 24%。
⚠️ 常见误区
| 误区 | 正解 |
|---|---|
| RTM/RTR/RTS 是 CCxTrust 发明的 | 是 TCG 标准术语,CCxTrust 的创新在于”怎么分配” |
| TEE 比 TPM 强,全都用 TEE | TEE 是黑盒、无持久存储、用户够不着;TPM 是白盒、有存储,两者互补 |
| 度量分工必须严格不重合 | 实践中有重叠,这是刻意的双保险冗余设计 |
| 固件不可篡改靠启动时度量 | 固件本身靠物理防护(熔丝/受保护存储),度量管的是系统软件 |
| 信任链可以无限延伸 | 信任链终止于物理锚点(TPM 芯片、PSP),根不需要被验证 |
| hypervisor 是底层固件 | hypervisor 是软件层,固件在它下面一层 |
| TEE 和 TPM 各自出报告就行 | 独立报告可被拼接攻击利用,复合认证才能防拼接 |
✅ 总结
信任根三件套中,RTM 管测量、RTR 管报告、RTS 管存储;CCxTrust 让 TEE 和 TPM 分工协作——RTM 并行独立(双保险)、RTR 复合认证(防拼接)、RTS 归 TPM(用白盒补黑盒),通过三阶段测量覆盖从启动到运行的完整信任链,信任锚则落在 PSP 等物理硬件上。这就是 CCxTrust 协作信任的全貌。
Happy Hacking! 🎉