Trusted Computing Base(可信计算基)
Trusted Computing Base(可信计算基)初步理解
也可以看看这篇https://zhuanlan.zhihu.com/p/636986528
1. 定义:TCB 到底是什么?
-
标准定义(DoD 5200.28-STD,即“橘皮书”):
“TCB 是硬件、固件、软件的集合,它们共同负责执行安全策略;系统对安全策略的信任完全依赖于这个集合的正确性。” -
一句话记忆:TCB 是“可信根”的放大版——除了根本身,还加上所有必须被信任的组件(操作系统内核、具有特权的驱动、安全协处理器、BIOS/UEFI、虚拟化层等)。
-
关键属性
-
必须在最小化原则下构建(越小越容易验证)。
-
必须提供隔离、引用监控机(Reference Monitor)、完整性度量、身份鉴别四个机制。
-
2. 作用:为什么非要 TCB?
| 攻击面 | 无 TCB 的后果 | TCB 的防护方式 |
|---|---|---|
| 内核 Rootkit | 全系统沦陷 | 内核代码段只读、运行时完整性度量 |
| 恶意设备驱动 | 提权、DMA 攻击 | 驱动数字签名、IOMMU 隔离 |
| 供应链篡改 | 固件/微码植入后门 | 启动链度量(Boot Guard、DRTM) |
| 虚拟化逃逸 | 云租户互窜 | 虚拟机监控器作为 TCB 一部分,强制 VM Exit 检查 |
一句话总结:TCB 是“安全假设”的边界;边界外的代码可以出错,边界内的代码不能出错,否则安全模型崩塌。
3. 典型架构:怎么落地 TCB?
-
硬件层
-
Intel TXT / AMD SVM:提供 Dynamic Root of Trust for Measurement (DRTM)。
-
ARM TrustZone:把 SoC 切分为 Normal World / Secure World。
-
TPM 2.0 / TPCM:安全存储度量值、密钥、策略。
-
-
固件层
-
BIOS/UEFI + Boot Guard ACM:度量到 OS Loader。
-
S-CRTM(Static Core Root of Trust for Measurement):上电即开始度量。
-
-
内核 / 虚拟化层
-
微内核设计(seL4、MINIX 3、Qubes OS):
内核仅提供 IPC、调度、页表;驱动、文件系统全部用户态。 -
虚拟机监控器(Xen, KVM, Hyper-V):把“VM 逃逸”风险缩小到 VMM 本身。
-
-
应用层
-
Intel SGX / AMD SEV-SNP:把 TCB 缩小到一个 enclave 或 VM 内部。
-
Google OpenTitan、Apple T2:专用安全芯片把 TCB 外移到独立硅片。
-
4. 开发 & 评估:如何“证明”TCB 可信?
| 方法 | 说明 | 对应标准 |
|---|---|---|
| 形式化验证 | 用数学证明内核或关键函数无缺陷 | seL4 已证明内存安全;CC EAL7 |
| 渗透测试 + 模糊测试 | 找实现缺陷 | US DoD STIG、NIST SP 800-53 |
| 供应链签名 | 固件/驱动/微码来源可追溯 | UEFI Secure Boot、Reproducible Build |
| 漏洞赏金 | 把未知缺陷转化为已知缺陷 | Microsoft SGX Bounty、Apple Security Research Device |
5. 2024-2025 年热点
-
CXL 2.0/3.0 安全扩展:把内存池化也纳入 TCB 边界,防止“跨主机的 DMA 攻击”。
-
机密计算联盟(CCC):推动 TCB 向“可验证远程执行”演进(attestation、TEE)。
-
AI 加速器 TCB:GPU/NPU 驱动、固件也被纳入可信边界,防止模型窃取。
-
RISC-V 开放 TCB:基于 OpenTitan + CVA6,打造可审计的硬件 TCB。
速查表(便于 PPT/报告)
-
定义公式:TCB = {CPU 微码,固件,内核,VMM,驱动,可信外设} ∩ {必须被信任的代码}
-
设计原则:最小化、可验证、不可绕过、防篡改。
-
验证三板斧:形式化证明 + 运行度量 + 远程证明。
“硬件 → 固件 → 内核 → 系统服务 → 应用” 五条纵深链路
下面把 Trusted Computing Base(TCB)拆成 “硬件 → 固件 → 内核 → 系统服务 → 应用” 五条纵深链路,逐条、逐寄存器、逐代码段地展开。读完以后,你能:
-
在 x86/ARM/TPM 上把 TCB 边界画到寄存器级;
-
用 30 行以内的伪代码写出一个最小可启动的“可信链”;
-
在 CC/CSfC/FIPS 三个评估框架里挑一条路径把系统送测。
1. 硬件层:把“硅”当成第一条 TCB 语句
1.1 x86 启动链寄存器快照
| 阶段 | 关键寄存器/结构 | 安全意义 | 攻击示例 |
|---|---|---|---|
| Reset Vector | 0xFFFFFFF0 → 跳转到 Boot ROM |
第一条指令必须来自不可写闪存 | “Boot Guard” 关闭后跳转到恶意闪存 |
| FIT (Firmware Interface Table) | 0xFFFFFF80 开始的 16 字节条目 |
指向 ACM(Authenticated Code Module) | FIT 指针被改 ⇒ ACM 不被加载 |
| ACM | 0x1000 开始的 128 KB 代码 |
度量 BIOS → PCR[0] | 旧版 ACM 已知漏洞 |
| TPM PCR0 | 收到 SHA256(BIOS) | 以后任何 PCR 扩展都依赖它 | BIOS 升级后未重新密封 BitLocker |
1.2 两条可信根对比
-
Static CRTM:上电即开始度量,缺点是不能改;
-
Dynamic CRTM(DRTM):
GETSEC[SENTER]/SKINIT指令在 OS 运行时重新建立根,用于“Late Launch”。
1.3 ARM TrustZone 寄存器级视图
-
SCR.NS位:决定 CPU 处于 Secure World(0)还是 Normal World(1)。 -
TZASC(TrustZone Address Space Controller):把 DDR 切成安全/非安全两块,粒度 4 KB。 -
BPMP(Boot and Power Management Processor)里的TZRAM保存密钥,通电即有 TCB 属性。
2. 固件层:把 BIOS/UEFI 拆成 5 个可度量模块
| 模块 | 度量顺序 | 存储 | 典型大小 | 备注 |
|---|---|---|---|---|
| SEC (Security) | 1 | ROM | 4 KB | 第一条指令 |
| PEI (Pre-EFI Init) | 2 | ROM → RAM | 64 KB | 初始化内存 |
| DXE (Driver eXecution Env) | 3 | RAM | 512 KB | 加载 Option ROM |
| BDS (Boot Device Select) | 4 | RAM | 256 KB | 选择启动项 |
| OS Loader | 5 | 硬盘/SSD | 1-2 MB | 最终控制权移交 |
伪代码:UEFI 里的度量钩子
c
VOID TcgMeasurePeImage(IN EFI_HANDLE ImageHandle) {
EFI_IMAGE_DOS_HEADER *Dos = LoadImage(ImageHandle);
EFI_IMAGE_NT_HEADERS *Nt = (EFI_IMAGE_NT_HEADERS*)((UINT8*)Dos + Dos->e_lfanew);
UINT8 Hash[SHA256_DIGEST_SIZE];
sha256(Dos, Nt->OptionalHeader.SizeOfImage, Hash);
Tpm2PcrExtend(TPM2_PCR_KERNEL, Hash);
}
如果你把
Tpm2PcrExtend 换成 Tpm2PcrEvent 还能把“度量日志”留给 OS 解析。3. 内核 / VMM:把 Linux 裁成 2.5 MB 的 TCB
3.1 最小 TCB 内核配置(x86_64)
CONFIG_EMBEDDED=y
CONFIG_TINY_RCU=y
CONFIG_EXPERT=y
# 驱动全部 =m,只有以下 =y
CONFIG_DRM_VIRTIO_GPU=y # 显示
CONFIG_VIRTIO_NET=y # 网络
CONFIG_VIRTIO_BLK=y # 块设备
CONFIG_SECURITY_SELINUX=y # MAC
CONFIG_IMA=y # Integrity Measurement Architecture
CONFIG_EVM=y # Extended Verification Module
编译后:
用
make tinyconfig && make -j$(nproc) → bzImage 2.5 MB。用
eu-readelf -S vmlinux | grep .text 可以看到 .text 只有 1.2 MB。3.2 形式化验证路线
-
seL4:已证明 C 代码级“内存安全 + 信息流转” → 可直接作为 TCB。
-
Linux 部分验证:
-
Data61:验证
eBPFJIT 无越界; -
Meta-elfverify:用 CBMC 验证
copy_to_user()无越权写。
-
4. 系统服务:把 systemd 拆成最小 initrd
-
initrd 内容:
-
/init→ BusyBox 静态链接 800 KB; -
/lib/modules/5.x/virtio.ko200 KB; -
/etc/ima/ima-policy3 行规则:measure func=FILE_CHECK mask=MAY_READ uid=0 measure func=MMAP_CHECK mask=MAY_EXEC uid=0 measure func=BPRM_CHECK mask=MAY_EXEC uid=0
-
-
TPM 2.0 密封密钥:bash
systemd-cryptsetup attach luks0 /dev/vda2 - tpm2-device=auto依赖 PCR7(Secure Boot 状态)+ PCR9(initrd 度量值)。
5. 应用层:把 SGX enclave 当 TCB 子集
5.1 最小 enclave(C 伪代码)
c
// enclave.edl
enclave {
trusted {
public int add(int a, int b);
};
};
// enclave.cpp
int add(int a, int b) { return a + b; }
编译:
bash
sgx_edger8r enclave.edl --trusted
g++ enclave_t.c enclave.cpp -lsgx_trts -o enclave.so
度量值(MRENCLAVE)固定 32 字节;用
sgx_sign 生成 SIGSTRUCT。5.2 远程证明流程(简化 8 步)
-
客户端生成 ECDH 临时密钥对;
-
向 enclave 发送
ECDH_PubKey,enclave 内生成共享密钥; -
enclave 发送
REPORT→ Quoting Enclave →QUOTE; -
客户端把
QUOTE发送给 SP(Service Provider); -
SP 用 IAS(Intel Attestation Service)验证;
-
IAS 返回
AVR(Attestation Verification Report); -
SP 用共享密钥派生会话密钥;
-
双方建立 TLS 1.3 通道,TCB 边界缩小到 enclave 内 100 KB 代码。
6. 评估与合规:三条可落地的认证路径
| 框架 | 目标 | 关键文档 | 典型周期 | 备注 |
|---|---|---|---|---|
| Common Criteria | 国际通用 | CC EAL4+ / EAL7 | 12-24 月 | 需形式化证明到 EAL7 |
| NIST FIPS 140-3 | 密码模块 | IG 7.15 对 TCB 定义 | 6-9 月 | 只测加密边界 |
| CSfC | 美国国家安全 | Component List + MDM | 9-12 月 | 需双 TCB 冗余 |
7. 30 行伪代码:一条“最小可信链”
c
// 1. 硬件复位
asm volatile("cli");
write_msr(IA32_FEATURE_CONTROL, 0x7); // 开启 VMX/SMX
// 2. DRTM Launch
asm volatile("GETSEC[SENTER]");
// 3. ACM 度量 BIOS
tpm_extend(PCR0, hash_blob(BIOS_START, BIOS_END));
// 4. OS Loader 度量内核
tpm_extend(PCR9, hash_blob(KERNEL_START, KERNEL_END));
// 5. 内核度量 initrd
tpm_extend(PCR9, hash_blob(INITRD_START, INITRD_END));
// 6. 远程证明
quote = tpm_quote(PCR0|PCR9, nonce);
send_to_verifier(quote);
TCB out of data是怎么回事,怎么解决
“TCB out of data” 不是内存溢出,也不是文件损坏,而是 Intel SGX 远程证明(attestation)流程里的一个专用错误码,表示
“平台当前可信计算基(TCB)的版本低于 Intel 目前已签发的最新 PCK 证书所要求的最低版本,因而被判定为过期。”
在日志里通常长这样:
ERROR: sgx_qe_get_quote … 0xe019 /* SGX_QL_TCB_OUT_OF_DATE */
一、为什么会出现 TCB out of date
-
Intel 定期发布 微码(microcode)/ ME / uCode 更新,用来修补漏洞(如 INTEL-SA-00615、00657)。
-
这些补丁会提高 PCESVN / TCB SVN 的值。
-
远程验证方(IAS / DCAP QVL)拿到平台的 QUOTE 后,会比对 TCB Info。
-
如果平台 PCESVN < 最新 PCK 证书里的要求 ⇒ 抛出 TCB_OUT_OF_DATE。
-
二、快速自检 3 步
| 检查项 | 命令/方法 | 期望结果 |
|---|---|---|
| 微码版本 | dmesg | grep microcode |
≥ Intel 最新发布值 |
| PSW / DCAP 版本 | apt list --installed | grep sgx |
≥ Intel 发布页最新 |
| PCESVN | PCKIDRetrievalTool | grep "certPceSvn" |
≥ 官方 TCB Info.json 所列 |
三、一次性根治 4 步曲
以 Ubuntu 20.04 + DCAP 为例,其他发行版同理。
-
升级 BIOS / 微码bash
sudo apt update sudo apt install intel-microcode # 或到主板/OEM 官网下载 BIOS sudo reboot -
升级 SGX 软件栈bash
sudo apt install sgx-dcap-client sgx-aesm-service # 版本参考 Intel 官网 release notes -
重新获取 PCK 证书bash
# 生成新的 PCK 证书请求 sudo PCKIDRetrievalTool -f pckid.csv # 上传到 Intel PCS 或 Azure THIM,拿到新的 PCK cert chain -
验证bash
sudo QuoteGenerationSample # 应该返回 0x0000 (success),不再出现 0xe019
四、常见坑 & 对策
| 场景 | 症状 | 解决 |
|---|---|---|
| 云厂商 VM(Azure DCsv3) | 无法直连 Intel PCS | 改用 THIM(Azure 提供的缓存服务),见官方 Quickstart |
| PCESVN 只差 1 | 已升级微码仍报 TCB_OUT_OF_DATE | 确认 BIOS 里 “SGX TME”/“Total Memory Encryption” 是否启用,某些 BIOS 选项会锁 PCESVN |
| 老主板无新 BIOS | 无法升级 | 只能关闭 SGX 远程证明或申请 “Out-of-Date TCB Allow List”(Intel 商务流程,周期长) |
五、一句话速记
“TCB out of date = 平台固件太旧,配不上 Intel 的最新身份证。”
“升 BIOS → 升微码 → 升 PSW/DCAP → 重抓 PCK,99% 问题解决。”
TCB out of date影响
一句话结论:
把 “TCB out of date” 理解成 “平台固件过期 → 远程证明失败 → 机密数据/密钥拒绝下发” 即可;程序本身不会崩溃,但所有依赖 SGX 保密性的功能会立即不可用。
把 “TCB out of date” 理解成 “平台固件过期 → 远程证明失败 → 机密数据/密钥拒绝下发” 即可;程序本身不会崩溃,但所有依赖 SGX 保密性的功能会立即不可用。
1. 对程序的 5 种直接影响
| 场景 | 具体表现 | 错误码/日志 |
|---|---|---|
| 首次启动 | 远程证明失败,enclave 无法获得密钥 | sgx_qe_get_quote 0xe019
|
| 密钥密封 | BitLocker / LUKS-SGX 无法解开磁盘 | failed to unseal disk key |
| 机密容器 | Docker --security-opt=sgx 启动即退出 |
tcbStatus=OutOfDate |
| AI 推理 | 大模型权重拒绝加载到 enclave | model service unavailable |
| 密钥轮换 | 旧密封 blob 无法迁移到新机器 | migration blocked |
2. 对运维 / 业务的 4 级连锁反应
-
服务 SLA 下跌
云函数或微服务因启动失败触发冷启动重试,P99 延迟飙升。 -
合规审计红灯
金融/政务系统无法提供“有效远程证明报告”,直接打回。 -
自动扩缩容卡住
Kubernetes HPA 发现新 Pod 一直CrashLoopBackOff,不再扩容。 -
灰度发布受阻
新镜像的 enclave 度量值与老 TCB 不匹配,金丝雀流量为 0。
3. 临时止血 vs. 根治
| 目标 | 方案 | 时长 | 副作用 |
|---|---|---|---|
| 立刻恢复业务 | 在验证端 允许 Out-of-Date TCB(需 Intel/云厂商白名单) | 5 min | 合规风险高 |
| 根治 | 升 BIOS → 升微码 → 升 PSW/DCAP → 重抓 PCK 证书 | 30 min-2 h | 需重启节点 |
| 优雅降级 | 把机密计算流量切到非 SGX 实例 | 1 min | 性能/安全性下降 |
4. 一句话总结
“TCB out of date” 不会导致程序崩溃,但会让任何依赖 SGX 远程证明、密钥密封或机密计算的流程全部停摆,等于把 SGX 降级成普通 CPU。
线上环境请优先“升级固件+微码”根治,测试环境可临时放宽验证策略
Intel 官方文档给出的 TCB 生命周期(TCB-Recovery)
Intel 把 TCB 的“失效 → 修复 → 再信任”过程称为 TCB-Recovery,分为 3 个阶段 :
| 阶段 | 官方动作 | 客户侧动作 | 交付物 |
|---|---|---|---|
| Vulnerability Handling | PSIRT 评估 CVE → 打补丁(微码 / BIOS / PSW) | 订阅 Intel-SA 通告 | 新版 MCU、BIOS、PSW |
| Deployment & Disclosure | 发布 Best Known Configuration (BKC) | 按 BKC 升级 | GitHub 微码包 + RDC 文档 |
| Remote Attestation | 更新 TCB Info & PCK Cert | 重新获取 PCK 证书 | 新版 TCBInfo.json |
Grace Period:Intel 会预留一个“宽限期”,在此期间未打补丁的平台仍被视为可信,但宽限期结束后远程证明会返回TCB_OUT_OF_DATE。Intel 官方把 TCB 定义为“达到 SGX/TDX 安全目标所必须全部硬件-固件-软件集合”,并通过“TCB-Recovery”机制定期发布微码/BKC,确保平台始终满足远程证明要求。
以上结果来自Kimi

浙公网安备 33010602011771号