传统虚拟化:Guest 信任 Host。机密计算反转信任模型——Guest 不信任 Host/Hypervisor,硬件保证隔离。
一、先看图
flowchart TD
GUEST[Guest OS<br/>机密 VM] --> HW[硬件加密<br/>内存加密引擎]
HOST[Host / Hypervisor] -.->|无法读取| HW
GUEST --> ATT[远程认证<br/>Attestation]
ATT --> VERIFY[验证方<br/>确认 Guest 完整性]
classDef trusted fill:#3fb95022,stroke:#3fb950,color:#adbac7;
classDef untrusted fill:#f8514922,stroke:#f85149,color:#adbac7;
class GUEST,HW,ATT,VERIFY trusted
class HOST untrusted
二、威胁模型
传统:信任 hypervisor → 只防 Guest 攻击 Host。
机密计算:不信任 hypervisor:
- Host 管理员可能恶意
- 云提供商可能被入侵
- 物理访问攻击
硬件保证:Guest 内存加密 → Host 无法读取。
三、AMD SEV / SEV-SNP
3.1 SEV(Secure Encrypted Virtualization)
每个 VM 有独立的内存加密密钥 → AES-128 加密。
3.2 SEV-ES(Encrypted State)
加密 vCPU 寄存器 → VM-exit 时 Host 看不到寄存器内容。
3.3 SEV-SNP(Secure Nested Paging)
完整性保护 → 防止 Host 重放/重映射 Guest 内存页。
# QEMU 启动 SEV-SNP Guest
qemu-system-x86_64 \
-object sev-snp-guest,id=sev0,policy=0x30000 \
-machine memory-encryption=sev0,vmport=off四、Intel TDX
Trust Domain Extensions:
- TD(Trust Domain)= 机密 VM
- SEAM 模块 = TDX 的 hypervisor 扩展
- 内存加密 + 完整性
- 与 KVM 集成
五、ARM CCA
Confidential Compute Architecture:
- Realm = 机密执行环境
- RMM(Realm Management Monitor)
- 与 TrustZone 共存但独立
六、远程认证(Attestation)
1. Guest 启动 → 硬件度量 Guest 固件和内核
2. 度量值签名(硬件密钥)
3. 发送给验证方
4. 验证方确认 Guest 运行的是预期的代码
认证链:硬件 → 固件 → Guest OS → 应用。
七、COCONUT-SVSM
Secure VM Service Module:
Guest OS → COCONUT-SVSM → 硬件
在 Guest 和硬件之间提供安全服务:
- vTPM(虚拟 TPM)
- 安全启动
- 密钥管理
- 运行在 VMPL0(最高特权级)
八、I/O 挑战
机密 VM 的 I/O 必须经过 Host → 数据可能泄露:
| 方案 | 说明 |
|---|---|
| bounce buffer | Guest 加密 → Host 传输 → Guest 解密 |
| TIO(Trusted I/O) | 硬件保护的 DMA |
| virtio 加密 | 传输层加密 |
九、生产使用
| 云厂商 | 技术 |
|---|---|
| Azure | SEV-SNP |
| GCP | SEV-SNP / TDX |
| AWS | Nitro Enclaves(不同架构) |
| 阿里云 | TDX |
十、小结
- 机密计算反转信任模型 → Guest 不信任 Host
- AMD SEV-SNP / Intel TDX / ARM CCA 提供硬件保护
- 远程认证验证 Guest 完整性
- COCONUT-SVSM 提供安全服务
- I/O 是当前最大的性能和安全挑战
参考文献
- AMD, “SEV-SNP: Strengthening VM Isolation.” 2020
- Intel, “Trust Domain Extensions.” 2023
- ARM, “Confidential Compute Architecture.” 2021
- COCONUT-SVSM project (github.com/coconut-svsm)
工具
- QEMU SEV-SNP/TDX 支持
snphost/snpguesttdx-tools
上一篇:Rust for Linux 下一篇:可拆分 OS
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【操作系统百科】内存回收
Linux 内存回收是 VM 最复杂的子系统之一。本文讲 active/inactive LRU、kswapd 与 direct reclaim、watermark 三线、swappiness 的真实含义、MGLRU 改造、memcg 回收与 PSI。
【操作系统百科】交换
swap 还值得开吗?本文讲 swap area 基础、swap cache、zram 压缩内存、zswap 前端压缩池、swappiness 的真实含义、容器里的 swap 策略,以及为什么现代 Android 全靠 zram 不靠磁盘。
【操作系统百科】Slab/SLUB 分配器
buddy 只管页粒度(4K+),内核大多数对象只有几十到几百字节。slab/SLUB 在 buddy 之上做对象级缓存。本文讲 slab 历史、SLUB 接手、SLOB 退场、kmem_cache、per-CPU cache、KASAN 集成。
【操作系统百科】用户态分配器
glibc malloc、tcmalloc、jemalloc、mimalloc 各有哲学。本文讲 arena、thread cache、size class、madvise 返还策略、碎片与 RSS 膨胀、如何根据负载选分配器。