机密计算: HCC 细节
Hopper 100 是NVIDIA推出的具备机密计算功能的GPGPU,支持单卡的CC模式和多卡基于NVLINK互联的CC模式。
HCC方案需要支持可信扩展的CPU。这些CPU可以满足对设备的访问控制检查、分页控制、地址转换和内存加密技术,从而加强对计算设备数据的保护
概览
HCC TEE方案包括:
- 物理连接的PCIe出入口均有256位AES-GCM加密,同时可以以此进行数字签名,确保数据来源的安全性
- 96位滚动初始化向量(IV)保证同明文不会重复密文,可以缓解重放攻击
- 禁用 JTAG 以及约束 BMC 的访问权限,缓解侧信道攻击
- 在开发者模式之外,禁用性能分析,缓解侧信道攻击
- GPU提供ECC-384密钥对签名和设备标识符PDI实现认证, IK(设备唯一私有密钥)存放在反熔丝中
性能
HCC对计算性能有部分影响:
- 在HCC模式下,以下性能基本要素与非机密模式相当:
- GPU原始计算性能,计算引擎对驻留在GPU内存中的未加密数据执行未加密代码。
- GPU内存带宽,封装上的HBM被认为是安全的,可以抵御常见的物理攻击工具,例如中间层,并且没有加密。
以下性能受到额外的加密和解密开销的影响:
- CPU-GPU互连带宽受CPU加密性能限制,约为4Gb/秒。
- 通过非安全互连进行的数据传输吞吐,会导致通过不受保护的内存中的加密缓冲区进行传输的延迟开销。
- 多GPU用例中的GPU对端内存带宽,直接连接多GPU NVLINK拓扑在未受保护的GPU内存中使用加密缓冲区,从而降低吞吐量。
内存管理
CPU Memory:
- CVM = 机密虚拟机
- 默认情况下,所有客户虚拟机内存均由存储在 CPU 寄存器中的 CVM 私钥加密
- NVIDIA 驱动程序在共享内存区域分配反弹缓冲区,并使用会话密钥加密这些缓冲区中的数据
GPU Memory:
- 大多数 GPU 内存配置为计算保护区 (CPR),受硬件防火墙保护
- 一小部分 GPU 内存位于 CPR 之外,用于
- 加密 CUDA 命令缓冲区
- NVLINK P2P 加密反弹缓冲区
CUDA 运行
- CPU 和 GPU 内存之间的所有通信均经过加密,包括数据传输、命令和 CUDA 内核
- 反弹缓冲区加密由虚拟机内的 NVIDIA 驱动程序执行,对应用程序透明
- 对于 H2D 的数据传输
- 驱动程序对 CPU 进行加密以在共享内存中反弹缓冲区
- DMA 引擎从反弹缓冲区读取并解密到受保护的 GPU 内存
- 对于 D2H 的数据传输
- DMA 引擎加密并通过 PCIe 写入反弹缓冲区
- 驱动程序将 CPU 解密到机密的虚拟机内存
- 命令缓冲区和 CUDA 内核的安全工作启动路径
数据保护
当 Hopper GPU 以机密模式启动时,它会阻止 GPU 内存的计算保护区 (CPR) 的进出
- PCIe 防火墙阻止 CPU 访问大多数寄存器和所有 GPU CPR 内存
- NVLINK 防火墙阻止 NVLINK 对等 GPU 访问 GPU CPR 内存
- DMA 引擎只能在启用加密的情况下在 CPR 之外读取或写入
- 所有其他引擎(例如计算 SM)都被阻止在 CPR 之外读取或写入
通过这种方式,内存的计算保护区是安全的,以便 GPU 可以在其高带宽内存中全速处理数据。 当 CC=On 时,所有 GPU 性能计数器都被禁用,以防止侧信道攻击
GPU 初始化
启用CC模式
- BMC 发出带外请求以选择 CC 模式并写入 EEPROM,或主机发出带内请求以选择 CC 模式并写入 EEPROM
- 主机触发 GPU 重置以使模式生效
GPU Boot
- GPU 固件清理 GPU 状态和内存
- GPU 固件配置防火墙以防止未经授权的访问,然后启用 PCIE
租户初始化
- GPU 驱动程序使用 SPDM 进行会话建立和证明报告
- 租户证明服务使用 NVML API 收集 GPU 证明报告和设备证书,验证在本地完成或传输到远程服务
- 允许使用 GPU 的 CUDA 程序
卸载 GPU
VM 和 NVIDIA 驱动程序退出后,GPU 将被锁定,直到下次重置。在 CC 模式下,驱动程序以持久模式运行,因为每次 GPU 启动只允许加载一个驱动程序。GPU 的清理在下次启动时完成,并按照之前的步骤 2、3、4 进行操作
- 主机触发 GPU 重置以使模式生效
- GPU 固件清理 GPU 状态、内存和机密
- GPU 固件配置防火墙以防止未经授权的访问,然后启用 PCIE
请注意,PCIE BAR 完全被阻止,直到 GPU 清理完成,与 CC 模式无关
认证 GPU
当 GPU 以机密模式启动且驱动程序正在加载时,会生成 GPU 证明报告。VM 内的用户可以随时请求 GPU 证明报告
- 某些测量是静态的;其他是动态的,可以在启动后发生变化
用户可以通过多种方式请求 GPU 证明报告:
- NVIDIA 验证程序、NVIDIA-SMI、NVML API
NVIDIA 验证程序代表用户执行多项任务:
- 从驱动程序获取 GPU 设备证书,该证书从 EEPROM 中的 IK Public 构建
- 通过 NVIDIA OCSP 服务验证 GPU 证书链
- 从 GPU 请求证明报告并根据 GPU 证书链对其进行身份验证
- 并将其与预期的“Golden RIM”结果进行比较,以生成正确 CC 配置的通过/失败报告
GPU 证明遵守可信计算组 RIM 的黄金测量规范
- RIM = 参考完整性清单
测量组 | 细节 | |
---|---|---|
静态硬件配置 | 在制造过程中配置的状态定义了设备的个性和身份 | 负责安全设置的保险丝,例如调试启用、微代码撤销、CC 启用/功能 |
固件/VBIOS | 软件组件闪存至 EEPROM | ● 从 VBIOS 加载的所有固件的签名及其执行环境 ● 设备初始化数据表 |
驱动程序微码 | 从驱动程序包加载的微代码 | 安全区域等引擎的微代码签名和执行环境 |
硬件初始化状态 | ● 初始化由 VBIOS 和物理功能驱动程序在启动期间完成,主要由安全区域完成 ● 建立和维护 GPU TEE 所需的配置 |
启动时初始化,如 PCI-E 防火墙、调试接口状态等 |
运行时状态 | ● 运行时由可信 GPU 软件配置的硬件状态 ● 根据 CC 配置编程的硬件和软件状态 |
● CC policies(例如,生产与开发) ● 硬件引擎的安全/不安全模式 ● TEE 之间的资源隔离 |
动态状态 | 由驱动程序或其他软件编程的软件引擎状态 | |
报告信息 | 签名的纯文本元数据用于协助认证报告验证 | ● CC VM 配置,如安全内存大小 ● 设备配置,如 SKU 类型、MIG 状态 ● SW 版本(驱动程序版本、VBIOS 版本) ● 事件日志 |
多卡机密计算
多 GPU 机密 GPU VM 实例中的所有 GPU 之间都需要 NVLINK
- 机密模式下不支持 PCIe P2P
- CUDA API 和硬件防火墙不允许对等 GPU 内存进行直接指针取消引用
GPU DMA 引擎配备了用于 NVLINK 对等传输的共享会话密钥 cudaMemcpyDeviceToDevice() 调用会导致通过反弹缓冲区进行加密传输
- 源 GPU 中的 DMA 引擎加密数据,通过不受信任的 NVLINK 传输到目标 GPU 的不受保护的内存
- 目标 GPU 中的 DMA 引擎将数据解密到受保护的 GPU 内存中
MIG
带有 vGPU 的 CC 可实现机密 MIG 分区:
- TEE = 机密 GPU 实例 + 机密 VM
- 每个 TEE 与虚拟机管理程序/主机和其他租户隔离
- 虚拟机管理程序创建 TEE 实例但无法访问状态
- CC=On 时,MIG 分区之间有额外的硬件保护措施,可防止内存攻击
MIG 上的机密计算基于:
- NVIDIA vGPU – 多个 VM 共享一个 NVIDIA GPU
- 多实例 GPU (MIG) – 将 GPU 分区为实例
- SR-IOV – PCIE 设备公开 VF 以供 VM 直接控制
总结
- 片上信任根
- AES-GCM, 美国联邦密码模组安全标准 FIPS 140-3 2 级加密,DH 密钥交换
- NVIDIA RISCV 微控制器
- 唯一身份密钥对
- 设备证书
- 硬件故障注入对策
- PKC 固件认证
- 加密固件
- 安全启动
- 测量启动
- 固件撤销
- 用于安全 MIG 的 SR-IOV