信任根三件套: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 是两种完全不同的信任根:

TEE(SEV-SNP) TPM
信任模式 black-box:信任根归厂商 white-box:用户可直接访问
可访问性 用户够不着(API 受限) 用户可配置、可验证
强项 强隔离的执行环境 用户侧密钥/存储/认证
短板 信任是黑箱 没有执行环境

关键差异:CPU-TEE 信任根是黑盒的,只能给系统底层(固件、hypervisor、内核)用,用户够不着、验不了;TPM 是白盒的,用户可以直接访问、配置、验证,能补上 TEE 没有的用户侧能力。

三个核心挑战与对应方案:

挑战 问题 方案
Q1 怎么建立用户可控的信任体系? S1:协作信任根(TEE+TPM)
Q2 怎么弥合 TEE 和 TPM 的技术鸿沟? S2:机密 TPM(CTPM)
Q3 怎么保证 CVM 敏感数据安全? S3:复合认证

📐 核心分配:三件套怎么分工

CCxTrust 的原创设计——不搞一家独大,让 TEE 和 TPM 分工协作:

1
2
3
4
5
6
7
8
9
10
RTM(度量)  → TEE 与 TPM 并行独立,各测各的域
TEE 测:硬件/固件/启动环境(TEE 的 TCB)
TPM 测:hypervisor、guest OS、工作负载
→ 两块"账本"互不依赖,一份被攻破,另一份还在

RTR(报告) → TEE 与 TPM 协作,生成"复合认证报告"
→ 单一报告根容易被伪造/拼接攻击(见下)

RTS(存储) → 完全交给 TPM
→ 用户密钥由 TPM 密封存储,TEE 也把密钥托管给 TPM

为什么这样分?

分配 原因
RTM 并行独立 两者测的域不同、互不依赖,形成双保险(dual insurance)
RTR 协作 单一报告根容易被伪造/拼接攻击,合并成一份报告才能防拼接
RTS 归 TPM TEE 没有持久存储能力(内存加密但掉电即失),TPM 有 NVRAM + 密钥树,天生是保险库

📏 三阶段测量:RTM 的具体落地

CVM 的信任链从启动到运行分成三个阶段:

1
2
3
4
5
6
7
8
9
10
11
Stage 1:Host 静态测量(CVM 启动前)
· 测 hypervisor、host 内核、虚拟化服务
· → 保证"我住的房子是干净的"

Stage 2:CVM 启动测量
· 测 guest 固件、内核、initrd、根文件系统、镜像签名
· → 保证"住进来的这个租客是预期的"

Stage 3:运行时测量(动态)
· TEE 对 CVM 内工作负载做完整性校验
· → 保证"运行过程中没被篡改"

前两阶段偏静态(启动时测一次),第三阶段偏动态(运行中持续测)。也就是静态 + 动态信任链结合。

顺带澄清一个容易混的概念:hypervisor 不是固件。层次是:应用 → Guest OS → hypervisor(软件)→ 固件 Firmware(UEFI/BIOS、PSP 等,烧在只读存储里)→ CPU 硬件。固件启动 hypervisor,hypervisor 启动 guest。

🔗 度量分工重合吗?——这是双保险不是 bug

设计上 TEE 测固件、TPM 测 hypervisor,但现实中 TPM 的启动链本来也测固件(UEFI 启动时自己 Extend PCR)。实践中有重叠,但这是刻意为之:

1
2
3
4
5
设计意图 = 双保险(redundancy):
· 两个独立的测量源(TEE 的 PSP 侧 vs TPM 芯片侧),互不信任、互不依赖
· TEE 的测量域 = "TEE 自己的启动信任链"(PSP→SEV 固件→OVMF 等)
· TPM 的测量域 = "平台全局启动链"(UEFI→hypervisor→guest)
· 哪怕一条链被攻破/伪造,另一条链的账本仍然可信

概念上分工(各测各的域),实践上有重叠(都碰固件),重叠是刻意的冗余设计。

🔑 信任链与信任锚:固件为什么改不了

PCR 的固件逻辑强制依赖一个前提:固件本身不能被恶意修改。这靠两道防线,不是靠加载时度量一次解决:

1
2
3
4
5
6
7
8
9
10
① 物理防护(第一道,硬件级):
· dTPM 是独立芯片,固件写在一次性熔丝/受保护闪存里,
常规软件攻击根本写不进去
· fTPM 在 CPU 的 PSP 里,PSP 固件有签名校验 + 只读存储
→ "改 TPM 固件"不是软件层能做到的事,物理防护兜底

② 信任链(第二道,启动级):
从"绝对可信的起点"逐级验证:
硬件(RoT 芯片)→ 验证固件 → 固件验证 bootloader → bootloader 验证内核 → ...
每一步都由前一步验证

所以准确表述是:

防护对象 防护手段
TPM 固件本身不可改 物理防护(熔丝、受保护存储、签名校验)
系统软件(内核等)不被篡改 信任链(启动时逐级度量 + 签名校验)

信任链的起点(信任锚)是谁? 是硬件本身(RoT,Root of Trust,信任根)——它是物理上无法篡改的,比如 TPM 芯片内部逻辑、CPU 内部的 PSP ROM。信任链不是无限的,它终止于一个物理可信的锚点,这就是根(Root)的含义。

修正一个常见说法:不是加载时度量保证固件不可改——UEFI 是第一级软件,加载时已经没人能度量它了,它靠的是硬件锚点 + 物理防护。

🔩 PSP:AMD 芯片里的先于一切的安全小电脑

PSP(Platform Security Processor,平台安全处理器) 是 AMD CPU 里的独立 ARM 安全协处理器,相当于 CPU 里的一个小电脑:

1
2
3
4
5
6
7
8
AMD CPU 芯片
├── x86 主核(跑你的系统)
│
└── PSP(独立 ARM 核)
· 芯片上电先于 x86 主核
· 跑在隔离的安全环境里
· 管理:SEV 内存加密密钥、RMP 表、
固件签名校验、fTPM、DMA 保护

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
2
3
4
5
· 攻击者可能伪造 CVM 的 ID 发起攻击
· 攻击者可能做"报告拼接攻击"(report concatenation):
把 A 机器的 TPM 报告 + B 机器的 TEE 报告拼成"完整报告"
→ 验证方以为是一台可信机器的完整状态,实际是两台机器拼的
· 独立认证需要两次交互(两个数据拷贝、两次签名、两次报告返回),效率低

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! 🎉