外观
机密计算:AMD SEV 与 Intel TDX 简介
这篇是概念性介绍,帮你判断这项技术是否和你相关,而不是一篇可以直接照抄的操作手册——它对硬件要求很高,多数家庭实验室和小团队用不上。
为什么需要它
普通虚拟化下,宿主机(以及能登录宿主机的管理员、或者攻破了宿主机的攻击者)原则上能看到客户机的全部内存内容。对自己完全掌控的宿主机来说这不是问题;但如果虚拟机跑在你不完全信任的基础设施上(例如公有云、托管机房、多租户环境),这就是一个真实的信任缺口。
机密计算 (Confidential Computing) 的思路是:用 CPU 硬件加密客户机的内存和寄存器状态,连宿主机的 hypervisor 本身都读不出明文。AMD 和 Intel 分别用 SEV 系列和 TDX 实现这个能力,PVE 提供了对接。
这不是"更安全的默认设置"
机密计算解决的是"不信任宿主机本身"这个特定问题。如果你的宿主机就是你自己在家或者公司机房里的机器,威胁模型里没有"不信任宿主机管理员"这一条,这项技术大概率用不上,直接跳过。
两种技术分别是什么
AMD SEV 系列
| 变体 | 加密范围 | 最低要求 |
|---|---|---|
| SEV | 客户机内存(AES-128) | EPYC(较早代次即可) |
| SEV-ES | 内存 + CPU 寄存器状态 | EPYC 7002 系列起 |
| SEV-SNP | 在 SEV-ES 基础上加完整性保护,防篡改 | EPYC 7003 系列起,宿主机内核 6.11+ |
Intel TDX(PVE 9.1 起初步支持)
在支持的 Intel CPU(较新的至强可扩展系列)上,把客户机内存和寄存器状态隔离在硬件可信域 (Trust Domain) 内,宿主机拿不到明文。
Intel TDX 目前的限制(PVE 9.1 引入时的状态)
- 不支持 Windows 客户机,客户机操作系统本身要支持 TDX。
- 不支持在线迁移。
- 提供了初步的远程证明 (attestation) 支持,但相关流程仍在完善。
这些限制来自 PVE 官方发布说明,属于该功能刚引入时的状态,后续版本可能变化,用之前对照当前版本的官方文档确认。
两者共同的代价
机密计算不是"免费加的安全项"
无论 SEV 还是 TDX,用上之后都会失去一些平时依赖的能力:
- 不支持在线迁移。
- 快照和挂起要么不支持要么被官方标注为有安全风险,SEV-ES / SEV-SNP 官方文档明确写着"非常实验性"。
- SEV-SNP 不支持 EFI 磁盘,意味着依赖 UEFI 特性(比如某些 Secure Boot 场景)的客户机用不了。
- 不支持 PCI 直通。
- 宿主机侧看到的内存占用数字会不准,因为加密内存的统计方式不同。
- SEV-SNP 模式下,客户机内部执行重启操作实际效果是关机,需要从宿主机侧重新启动。
这些代价意味着机密计算目前更适合"单台运行、不迁移、不直通设备"的专用场景,而不是日常虚拟机的默认选项。
开始之前(如果你确实需要)
- 硬件:AMD EPYC(SEV-SNP 需要 7003 系列或更新,且宿主机内核 6.11 及以上)或者受支持的较新 Intel 至强(TDX)。多数消费级 CPU、二手企业级服务器不满足这个条件,先核实你的 CPU 型号是否在支持列表里。
- 需要在宿主机 BIOS 里开启对应的内存加密功能。
- 客户机固件用 OVMF(UEFI),Machine Type 用 q35。
- 客户机操作系统本身要支持对应技术,这个不是 PVE 能控制的部分。
怎么开启(了解思路,具体参数以官方文档为准)
AMD SEV 系列通过 amd-sev 选项配置:
sh
# 在宿主机 shell 执行,示例:开启标准 SEV
qm set <vmid> -amd-sev type=std,no-debug=1,no-key-sharing=1
# 示例:开启 SEV-SNP(要求前文列出的更高硬件条件)
qm set <vmid> -amd-sev type=snp,no-debug=1,kernel-hashes=1Intel TDX 通过 intel-tdx 选项配置:
sh
# 在宿主机 shell 执行,示例
qm set <vmid> -intel-tdx type=tdx,attestation=0宿主机侧也需要准备工作
两者都需要在宿主机内核层面确认对应的虚拟化扩展已启用(比如 AMD 一侧需要确认 kvm_amd.sev=1 之类的内核参数),并且需要在 BIOS 里打开内存加密。这部分因主板和 CPU 代次差异较大,操作前查对应 CPU 厂商和 PVE 官方文档的最新说明,不要照抄网上找到的、版本对不上的参数。
检查结果
宿主机侧确认内核识别到了对应特性:
sh
# 在宿主机 shell 执行
dmesg | grep -i sev # AMD SEV 系列
cat /sys/module/kvm_amd/parameters/sev # 应输出 Y客户机侧(Linux)确认自己运行在加密内存环境下:
sh
# 在虚拟机内部执行
dmesg | grep -i sev能看到对应的识别信息,说明这层保护已经生效。
常见问题
我需要机密计算吗? 如果你完全信任自己的宿主机(家庭实验室、公司自建机房、自己管理的服务器),大概率不需要。它解决的是"不信任基础设施提供方"这个问题。
开了之后虚拟机变慢了,或者内存占用数字很奇怪。 属于已知代价,内存加密本身有开销,宿主机侧的内存统计也因为加密而不准确,不是故障。
能不能同时用直通显卡又开机密计算。 不能,两者互斥,机密计算模式下不支持 PCI 直通。
能不能在线迁移开了机密计算的虚拟机。 目前不支持,这是两种技术共同的限制,做迁移相关规划时要把这类虚拟机排除在外。
参考资料
- Proxmox VE 官方文档《管理指南》"Memory Encryption" 一节(AMD SEV / SEV-ES / SEV-SNP 的完整配置与限制)
- Proxmox VE Roadmap(Intel TDX 加入 9.1 的原始发布说明)