SEV 是一种基于虚拟机的机密计算解决方案;它通过创建由机密虚拟机边界定义的可信执行环境,以保护正在使用的数据。SEV 为每台虚拟机分配一个密钥,以实现客户机与虚拟机管理器之间的相互隔离。这些密钥由 AMD 安全处理器进行管理。SEV 需要在客户机操作系统和虚拟机管理器中启用。通过客户机层面的变更,虚拟机可以指定内存中哪些页面需要加密。虚拟机管理器层面的变更则利用硬件虚拟化指令,并与 AMD 安全处理器进行通信,以管理内存控制器中的相应密钥。随着每一代 AMD EPYC(霄龙)服务器 CPU 的发布,AMD 不断对 SEV 进行升级,以增加新特性和新功能,从而应对不断变化的安全形势。 这些增强功能将在下文中进行说明。
加密状态 (ES) – 以前称为 SEV-ES
当虚拟机停止运行时,SEV-ES 会对所有 CPU 寄存器内容进行加密。这可以防止 CPU 寄存器中的信息泄露给虚拟机管理器等组件,甚至能够检测到对 CPU 寄存器状态的恶意修改。
安全嵌套分页 (SNP) – 以前称为 SEV-SNP
SEV-SNP 增强了内存完整性保护,有效防止基于恶意虚拟机管理器的攻击,如数据重放、内存重新映射等,从而能够创建隔离的执行环境。此外,SEV-SNP 还引入了若干可选的安全增强功能,旨在支持更多的虚拟机使用模式,对中断行为提供更强的保护,并增强对近期披露的旁路攻击的防护能力。
可信 I/O (TIO) – 以前称为 SEV-TIO
SEV-TIO 通过采用 PCI-SIG 定义的 TEE 设备接口安全协议 (TDISP),将 SEV 创建的可信执行环境 (TEE) 扩展至 PCIe 设备(网卡、加速器、存储设备)。TDISP 定义了设备的新协议和功能,使设备能够进行自我认证、防止 PCIe 架构中的流量拦截或伪装、验证其配置,并将客户机工作负载与主机驱动程序可用的设备控制功能隔离。
AMD 透明安全内存加密 (TSME)
TSME 使用单个密钥加密系统内存。密钥由 AMD 安全处理器在系统启动时生成。SME 需要在系统 BIOS 或操作系统中启用。在 BIOS 中启用时,内存加密是透明的,可以在任何操作系统上运行。
适用于每一代 AMD EPYC(霄龙)服务器 CPU 的 SEV 功能
| AMD EPYC(霄龙)服务器 CPU | 全新功能 | 新功能 |
| AMD EPYC(霄龙)7001 | 通过机密虚拟机实现加密状态 | 128 位 AES XEX 加密 128 线程 15 个密钥 |
| AMD EPYC(霄龙)7002 | 通过加密状态 (ES) 实现加密的 CPU 寄存器 | 256 个线程 509 个密钥 增强的可扩展性 |
| AMD EPYC(霄龙)7003 | 通过安全嵌套分页 (SNP) 实现虚拟机管理器隔离与客户机认证支持 | |
| AMD EPYC(霄龙)8004 和 9004 | 支持对 CXL 附加内存进行加密 | 更强大的 256 位 AES-XTS 加密技术 512 线程,1006 密钥,支持最多 63 个多主机密钥 |
| AMD EPYC(霄龙)8005 | 分段 RMP 安全 AVIC 性能计数器 (PMC) 虚拟化 客户机拦截控制 密文隐藏 |
|
| AMD EPYC(霄龙)9005 | 通过 TDISP(以前称为 SEV-TIO)进行的可信 I/O |
白皮书和规范
| 文件 | 描述 | 修订版 | 日期 |
|---|---|---|---|
| SEV-TIO 固件接口规范 | 指定 SEV 固件的可信 I/O 扩展。TIO 扩展提供一套机制,使客户机能够绑定并在自身私有地址空间内使用可信设备。 | 0.91 | 2025 年 7 月 |
| 使用 VirTEE/SEV 的 SEV-SNP 平台认证 | VirTEE/SEV 软件包提供适配 Rust 语言、简单易用的 API,用于对接第三代及更新 AMD EPYC(霄龙)处理器内置的 AMD 安全处理器。 | 1.2 | 2023 年 7 月 |
| SEV-TIO-Whitepaper | 用于提高 AMD SEV 客户机 I/O 性能和安全性的可信 I/O 技术概览 | 2023 年 3 月 | |
| 版本化芯片背书密钥 (VCEK) 证书和 KDS 接口规范 | VCEK 证书和用于检索证书的 KDS 接口简介。 | 1.00 | 2025 年 1 月 |
| 客户机虚拟机管理器通信模块 (GHCB) 标准化 | 实现客户机虚拟机管理器通信模块 (GHCB) 格式标准化,并规定 GHCB 中必须提供的退出支持及相关客户机状态,以实现虚拟机管理器与 SEV-ES 客户机之间的互操作性。 | 2.04 | 2025 年 1 月 |
| SEV 安全嵌套分页固件 ABI 规范 | 记录了主机虚拟机管理器可用于管理启用了 SNP 的客户机的 API。 | 1.58 | 2025 年 5 月 |
| SVSM 规范 | 用于 SEV 客户机的安全虚拟机服务模块 (SVSM) | 1.0 | 2023 年 7 月 |
| AMD 内存加密 | 安全内存加密 (SME) 和安全加密虚拟化 (SEV) 简介。 | 2021 年 10 月 | |
| 安全加密虚拟化 API | 记录了主机虚拟机管理器可用于管理密钥以及在主机虚拟机管理器与客户机虚拟机内存之间进行安全数据传输的 API | 3.24 | 2020 年 4 月 |
| AMD64 架构程序员手册第 2 卷 | 介绍 AMD64 架构的资源和功能,这些资源和功能由系统软件管理。注释部分
|
3.44 | 2026 年 3 月 |
| AMD SEV-SNP | 通过完整性保护等功能加强虚拟机隔离。 | 2020 年 1 月 | |
| OpenStack:libvirt 驱动程序启动 AMD SEV 加密实例 | 提出了为使 Nova 的 libvirt 驱动程序支持启动采用 AMD SEV(安全加密虚拟化)技术的 KVM 实例所需开展的工作。 | 2019 年 1 月 | |
| 使用 SEV-ES 保护虚拟机寄存器状态 | 加密状态 SEV-ES 功能的技术概览、该架构背后的原理以及为进一步隔离加密虚拟机而提供的保护机制。 | 2017 年 2 月 |
链接和下载
| 链接 | 描述 |
|---|---|
| https://github.com/AMDESE/AMDSEV | Linux 开放源代码正在开发中 |
| 机密容器 | 机密容器 (CoCO) 项目 |
| 将 AMD 安全内存加密与 Oracle Linux 配合使用 | Oracle UEK 支持 SME 和 SEV。 |
| SUSE:AMD 安全加密虚拟化 (AMD-SEV) 指南 | 介绍了 SEV 的工作原理、启用和配置方法,以及与未加密虚拟化相比,使用 SEV 时可能带来的某些限制和局限性。 |
| ask_ark_naples.cert | 适用于 EPYC(霄龙)7xx1 的 ASK/ARK 证书 (Naples) |
| ask_ark_rome.cert | 适用于 EPYC(霄龙)7xx2 的 ASK/ARK 证书 (Rome) |
| ask_ark_milan.cert | 适用于 EPYC(霄龙)7xx3 的 ASK/ARK 证书 (Milan) |
| ask_ark_genoa.cert | 适用于 EPYC(霄龙)9xx4 的 ASK/ARK 证书 (Genoa) |
| ask_ark_prod_turin.cert | 适用于 EPYC(霄龙)9xx5 的 ASK/ARK 证书 (Turin) |
| amd_sev_fam17h_model01h_0.17.49.zip | SEV 固件 | 适用于 EPYC(霄龙)7xx1 的 SEV 固件 0.17.49 [hex 00.11.31] (Naples) |
| amd_sev_fam17h_model3xh_0.24.22.zip | SEV 固件 | 适用于 EPYC(霄龙)7xx2 的 SEV 固件 0.24.22 [hex 00.18.16] (Rome) |
| amd_sev_fam19h_model0xh_1.58.02.zip | SEV 固件 | 适用于 EPYC(霄龙)7xx3 的 SEV 固件 1.58.02 [hex 1.3A.02] (Milan) |
| amd_sev_fam19h_model1xh_1.58.02.zip | SEV 固件 | 适用于 EPYC(霄龙)9xx4 的 SEV 固件 1.58.02 [hex 1.3A.02] (Genoa) |
| amd_sev_fam1ah_model0xh_1.58.06.zip | SEV 固件 | 适用于 EPYC(霄龙)9xx5 的 SEV 固件 1.58.06 [hex 1.3A.06] (Turin) |
| CEK 证书网页 | 用于获取 CEK 证书的交互式工具。也可通过 https://kdsintf.amd.com/cek/id/<GetIDValue> 获取 |
| https://github.com/AMDESE/sev-tool | 已弃用用于管理 SEV 平台证书的 AMD SEV 工具 |
技术演示
| 论坛 | 演示文稿 | 日期 |
|---|---|---|
| Linux 安全峰会 (2022) | 安全嵌套分页认证:在客户机中建立信任 | 2022 年 9 月 |
| KVM 论坛 (2022) | 利用 AMD 的安全虚拟机服务模块提供机密客户机服务 | 2022 年 9 月 |
| Linux 安全峰会 (2021) | 安全嵌套分页开发更新 | 2021 年 9 月 |
| KVM 论坛 (2021) | 使用安全嵌套分页防御恶意虚拟机管理器 | 2021 年 9 月 |
| Linux 安全峰会 (2019) | 即将推出用于防御恶意虚拟机管理器的 x86 技术 | 2019 年 11 月 |
| KVM 论坛 (2019) | 安全加密虚拟化 – 下一步计划 | 2019 年 11 月 |
| Linux 安全峰会 (2019) | Enarx – 经过 AMD SEV 认证的安全执行 | 2019 年 8 月 |
| Linux 安全峰会 (2018) | AMD 加密虚拟化更新 | 2018 年 11 月 |
| KVM 论坛 (2018) | 使用加密状态扩展安全加密虚拟化 | 2018 年 10 月 |
| Linux 安全峰会 (2017) | 使用加密状态保护虚拟机寄存器状态 | 2017 年 9 月 |
| Linux 安全峰会 (2016) | AMD x86 内存加密技术 | 2016 年 12 月 |
| KVM 论坛 (2016) | AMD 的虚拟化内存加密技术 | 2016 年 9 月 |
| Xen 峰会 | AMD 的虚拟化内存加密技术 | 2016 年 9 月 |
| Usenix 安全研讨会 | AMD x86 内存加密技术 | 2016 年 8 月 |
用户指南
| 文件 | 日期 |
|---|---|
| 将 SEV 与 AMD EPYC(霄龙)处理器配合使用 | 2023 年 10 月 |
| 使用 WinMagic 和 AMD EPYC(霄龙)硬件内存加密解决云信任问题 | 2018 年 10 月 |
| 使用 AMD EPYC(霄龙)硬件内存加密增强您的云安全性 | 2018 年 10 月 |