机密计算: HCC 细节

Hopper 100 是NVIDIA推出的具备机密计算功能的GPGPU,支持单卡的CC模式和多卡基于NVLINK互联的CC模式。

HCC方案需要支持可信扩展的CPU。这些CPU可以满足对设备的访问控制检查、分页控制、地址转换和内存加密技术,从而加强对计算设备数据的保护

HCC

概览

概览

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 内核的安全工作启动路径

Cuda 运行

数据保护

当 Hopper GPU 以机密模式启动时,它会阻止 GPU 内存的计算保护区 (CPR) 的进出

  • PCIe 防火墙阻止 CPU 访问大多数寄存器和所有 GPU CPR 内存
  • NVLINK 防火墙阻止 NVLINK 对等 GPU 访问 GPU CPR 内存
  • DMA 引擎只能在启用加密的情况下在 CPR 之外读取或写入
  • 所有其他引擎(例如计算 SM)都被阻止在 CPR 之外读取或写入

机密计算中的数据保护

通过这种方式,内存的计算保护区是安全的,以便 GPU 可以在其高带宽内存中全速处理数据。 当 CC=On 时,所有 GPU 性能计数器都被禁用,以防止侧信道攻击

GPU 初始化

启用CC模式

  1. BMC 发出带外请求以选择 CC 模式并写入 EEPROM,或主机发出带内请求以选择 CC 模式并写入 EEPROM
  2. 主机触发 GPU 重置以使模式生效

GPU Boot

  1. GPU 固件清理 GPU 状态和内存
  2. GPU 固件配置防火墙以防止未经授权的访问,然后启用 PCIE

租户初始化

  1. GPU 驱动程序使用 SPDM 进行会话建立和证明报告
  2. 租户证明服务使用 NVML API 收集 GPU 证明报告和设备证书,验证在本地完成或传输到远程服务
  3. 允许使用 GPU 的 CUDA 程序

初始化

卸载 GPU

VM 和 NVIDIA 驱动程序退出后,GPU 将被锁定,直到下次重置。在 CC 模式下,驱动程序以持久模式运行,因为每次 GPU 启动只允许加载一个驱动程序。GPU 的清理在下次启动时完成,并按照之前的步骤 2、3、4 进行操作

  1. 主机触发 GPU 重置以使模式生效
  2. GPU 固件清理 GPU 状态、内存和机密
  3. GPU 固件配置防火墙以防止未经授权的访问,然后启用 PCIE

请注意,PCIE BAR 完全被阻止,直到 GPU 清理完成,与 CC 模式无关

卸载GPU

认证 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 内存中

P2P

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 直接控制

MIG

总结

  • 片上信任根
  • AES-GCM, 美国联邦密码模组安全标准 FIPS 140-3 2 级加密,DH 密钥交换
  • NVIDIA RISCV 微控制器
  • 唯一身份密钥对
  • 设备证书
  • 硬件故障注入对策
  • PKC 固件认证
  • 加密固件
  • 安全启动
  • 测量启动
  • 固件撤销
  • 用于安全 MIG 的 SR-IOV