高性能异构安全内存
文献发布时间:2024-04-18 20:01:23
技术领域
本发明涉及人工智能技术领域,具体地,涉及一种高性能异构安全内存。
背景技术
经过了近几年的发展,人工智能技术已经在很多领域得到了广泛的应用,如自动驾驶、人脸识别、医疗图像等领域。海量的训练数据和高价值的人工智能模型使数据隐私问题成为人们关注的焦点。由于其广泛的资源需求,现代人工智能应用通常部署在高性能数据中心,例如ChatGPT训练的地方,使用了超过10K的NVIDIA A100GPU。因为软件栈的复杂性和潜在的漏洞(如Linux内核超过3.6亿行代码和超过3K个漏洞),以及潜在的恶意员工都威胁着人工智能应用的数据隐私。一方面,数据中心本身的平台管理员可能存在恶意行为,另一方面,现有平台通常存在非常深的软件栈,由此带来的大量软件漏洞与攻击面,一旦云平台软件系统被挟持,那么其中机器学习应用的安全性也将无法保证。即使是在企业内部的机器中进行训练,其训练过程也可能受到内部恶意员工或者攻击者的破坏。因此,如何保障机器学习应用的安全性,防止其受到被挟持操作系统的攻击,成为了一个受到学术界与工业界广泛关注的问题。
可信执行环境(TEE)被广泛用于保护应用程序免受不可信系统软件的攻击,TEE保证任何TEE外的组件都不能访问或修改TEE内部组件的数据流和控制流。目前已经存在许多构建TEE的方法,几乎所有CPU制造商,包括Intel,AMD和ARM,都引入了他们的硬件TEE扩展。然而,现代人工智能应用在很大程度上依赖于异构加速器,如GPU、NPU等,这些加速器被广泛用于加速人工智能应用的计算。然而,这些加速器并不能直接被CPU端的TEE所保护,因此,CPU端的TEE对人工智能应用的安全性提升是非常有限的。因此,为了保护人工智能应用的数据安全,需要在人工智能加速器上构建可信执行环境,保证恶意的操作系统不能访问加速器的数据和篡改加速器的计算过程,GPU是人工智能应用的常见加速器,构建GPU TEE是保护人工智能应用的有效方式。
虽然高带宽内存(HBM)被认为是安全的,不易受到物理攻击,但它昂贵、产能有限,并且在出现故障时难以替换。因此,在未来一段时间内,仍会存在使用GDDR内存的加速器。即使在2023年8月,像H100这样搭载HBM的GPU已经长时间投入市场,NVIDIA还是宣布了L40SGPU,这是一款数据中心GPU产品,但仍然使用GDDR内存。只有当未来HBM的成本和生产能力可控时,GDDR才有可能完成其历史使命。此外,大多数现有的加速器模型,包括各种GPU,仍在使用GDDR内存,同时,HBM无法解决RowHammer和RowPress问题,因此,许多学术研究是基于使用传统DDR或GDDR构建安全内存的加速器。
加速器,包括GPU,在安全内存方面与CPU有所不同。它们可以在以下两个方面存在差异:1)完整性树结构可能不同。2)加密算法可能不同。GPU具有多个内存控制器,最近设计的GPU安全内存中,每个内存分区都有自己的安全内存控制器。通过采用多个内存分区,可以提高内存的并行访问能力。每个内存控制器都使用分区内的本地地址以及用于AES加密的计数器。此外,一些多芯片模块GPU包含多个GPU和内存芯片,它们通过芯片间连接进行连接,其带宽低于芯片内连接。如果为所有内存分区使用集中式引擎,由于引擎和内存控制器之间存在芯片内或芯片间互连,性能可能不理想。因此,最近的GPU安全内存架构采用每个控制器内部的保护引擎,并且每个内存分区维护其自己的完整性树。此外,某些GPU安全内存使用不同的加密算法,例如AES-XTS。此外,CPU和GPU在内存保护的粒度上存在差异。GPU缓存行通常为128字节,而CPU缓存行为64字节。
可信执行环境(TEE)用于保护用户数据和程序,可以构造隔离区与外部在逻辑上隔离。然而,仅凭逻辑隔离并不足以防御物理攻击,硬件供应商在内存控制器中引入了内存保护引擎,以保护数据免受物理攻击。当前产品中最强的保护机制可以确保机密性、完整性和新鲜度,例如Intel SGX,该架构类似于BMT(Bonsai Merkle Tree)。基于计数器的完整性树用于确保使用正确的计数器。通过计数器值、存储在芯片上的密钥和、内存地址,可以对内存块进行加密。此外,为了保证块的完整性,还计算并存储了一个消息认证码(MAC)。完整性树的根存储在芯片上并且从未被篡改。当一个块被载入芯片时,完整性树用于计算正确的计数器,并提取MAC以验证块的完整性。当一个脏块从缓存中淘汰并写回内存时,计数器值会增加。此外,还有不同的内存寻址方式,如图1所示。假设有k个内存分区,交错粒度为g个内存块。即使对于这种随机交错的内存,它仍然确保连续的k*g个内存块来自不同的内存分区。内存保护的基本方法中,主要由一个完整性树保护计数器(counter)的完整性,然后一个counter用于一个内存块的加密,如图3所示。
NVIDIA H100GPU包含许多安全功能,可以限制不可信的软件对GPU内容的访问,其GPU内部存在有片上安全处理器,支持多种类型和级别的加密,并提供硬件保护的内存区域。NVIDIA H100GPU的机密计算功能,需要和机密虚拟机配合使用,在一个机密虚拟机被CPU端的TEE保护的情况下,一个机密虚拟机可以和若干个开启安全计算模式的H100GPU相关联,或者若干个MIG计算实例相关联。此后,GPU会和CPU上的机密虚拟机之间建立安全信道的机制,GPU和CPU的数据传输都会通过硬件加解密,同时,相关的硬件可以保证不可信的虚拟机监控器不能直接访问处于安全计算模式的GPU。NVIDIA H100GPU允许用户验证他们正在与启用机密计算的NVIDIAGPU进行通信,并且检验GPU的安全状态。然而,该技术传输速率低,根据其技术报告,CPU-GPU的传输速度仅4GB/s,同时只保护HBM内存,大量使用传统内存的GPU无法受到保护。
MMT发表在2023的HPCA大会上(Efficient Distributed Secure Memory withMigratable Merkle Tree),为了实现在分布式飞地之间实现(几乎)线性的安全数据传输速度,该工作将内存保护引擎的规模从一个节点扩展到多个节点。该内存保护引擎已经能够保护物理内存的机密性、完整性和新鲜度。通过重用硬件保护机制,无需额外的基于密码学的操作,飞地可以通过各种连接(如PCIe、RDMA等)直接向另一个飞地传输数据。本方案提出了可迁移的默克尔树(MMT),它可以在没有软件参与(例如重新加密)的情况下将数据和元数据传输到远程节点。MMT的一个关键见解是(单节点)硬件内存保护已经为不可信任的DRAM提供了机密性、完整性和新鲜度保证,可以在不可信任的网络中重复使用进行保护。为此,该工作首先将单个完整性树扩展为跨多个节点的完整性森林,并打破了仅限于CPU的加密元数据的限制。此外,改工作设计了一个新的协议:MMT closure delegation,用于保护在不可信任的网络中传输的数据。它可以安全地传输完整性子树的根、节点和数据到远程节点,以防止泄露机密信息或重放攻击。最后,该工作实现了一个微小且可信任的模块来管理飞地和可信硬件模块。它隐藏了硬件实现的细节,并负责本地和远程飞地之间的连接。然而,该技术仅能支持安全内存架构相同的节点之间的传输,在异构的场景下,CPU和GPU的安全内存的架构是不同的,无法采用该方案进行传输。
发明内容
针对现有技术中的缺陷,本发明的目的是提供一种高性能异构安全内存。
根据本发明提供的高性能异构安全内存,包括:HSMEM传输引擎、多模式保护引擎和接口;
所述HSMEM传输引擎建立一个HSMEM传输通道,实现CPU和GPU之间的高速传输,所述HSMEM传输通道位于芯片内部,并控制用于安全内存的DMA请求,它选择与要传输的内存相关的元数据,并且在不进行额外数据加密和解密的情况下传输数据,对于每次数据传输,加密预设数量个高速缓存块,在数据传输到CPU或GPU之后,多模式保护引擎位于内存控制器中,直接使用原始保护方案的传输数据;
所述多模式保护引擎支持的每种内存保护方案被称为一个模式,一个内存块通过不同的模式进行保护,在多模式保护引擎内部,有一个模式选择模块用于为内存块选择模式,还有一个数据加密模块用于数据加密和解密,以及一个完整性树模块用于维护不同模式的完整性树;
通过接口,开发人员使用预设指令明确更改内存块的模式。
优选地,在初始化时,HSMEM传输引擎与对等设备生成密钥,构建传统的安全信道,当数据将要传输时,HSMEM传输引擎准备需要与数据一起传输的元数据,此外,安全信道用于在初始化过程中交换一些基本的系统配置;
HSMEM传输引擎计算数据对应元数据的目标地址,然后HSMEM传输引擎控制DMA引擎将元数据复制到目标位置,GPU使用自己的DMA引擎进行数据传输。
优选地,在初始化时,所述HSMEM传输引擎包括初始化模块,具体为:
当系统启动或GPU插入时,CPU和GPU相互验证并建立传统的安全信道,通过安全信道,CPU和GPU协商用于内存加密的多个共享密钥,此外,CPU和GPU相互提供内存布局信息,包括完整性树格式、加密算法类型以及元数据区域的地址,GPU还向CPU提供内存控制器的数量和内存寻址方案,完成此操作后,CPU和GPU将初始化其安全内存;
安全信道还具备确保传输数据的新鲜度的能力,通过为AES-GCM加密使用递增的自初始化向量来实现。
优选地,在初始化时,所述HSMEM传输引擎包括元信息选取模块,具体为:
当数据通过HSMEM传输通道进行传输时,安全元数据与数据一起传输,对于完整性树BMT,计数器和消息认证码MAC值一同传输,每次数据传输至少覆盖整个子树,因此最小的传输粒度是单个完整性树节点所覆盖的内存大小,所选的子树满足子树根节点中的所有计数器与待传输的数据相关,父节点中的计数器对于子树根节点被称为子树根计数器,设CPU和GPU在完整性树中使用分割计数器,GPU的完整性树节点扇出为128,并且高速缓存行大小为128字节,而CPU的度数为64,高速缓存行大小为64字节,CPU-GPU传输的粒度与GPU-CPU传输的粒度不同,所覆盖的大小通过度数乘以高速缓存行大小来计算,对于CPU-GPU传输,粒度为4KB,只有完整性树的叶子节点覆盖的数据会被传输;
HSMEM传输引擎使用待传输数据的地址来确定应与数据一起传输的完整性树节点,找到一个或多个覆盖传输数据范围的子树,如果根节点中的某些计数器不属于待传输的数据,则继续向完整性树的较低级别查找子树。
优选地,所述模式选择模块包括:在CPU或GPU上,对于每个内存块,内存控制器都知道该块的当前模式,当带有安全元数据的块从CPU传输到GPU时,它仍然受到原始保护方案的保护;
模式选择模块是内存控制器中的硬件模块,用于记录此类信息,使用一个比特位来指示内存块的保护方案,GPU的高速缓存行大小为128字节,而CPU的高速缓存行大小为64字节,在GPU上,位图的大小是总内存大小的1/2^10,在CPU上,位图大小是总内存大小的1/2^9,对于1GB的GPU内存,GPU需要1MB的空间用于位图,而对于1GB的系统内存,CPU需要2MB;
使用两级检查来减少访问位图的开销,在GPU上,第一级位图的每个位表示128字节,而在第二级位图中,每个位表示128KB,第一级位图直接存储在内存控制器内部的芯片上缓冲区中,第二级位图存储在安全内存中,并且必须确保完整性,保留一个始终处于本地模式的区域来存储位图;在GPU上,该区域始终处于GPU模式,而在CPU上,则始终处于CPU模式,为第二级位图提供一个专用缓存,称为位图缓存,高速缓存行大小也为128字节,因此,每个存储在高速缓存行中的位表示128KB的内存,当从位图缓存中替换出一个高速缓存行时,检查该高速缓存行的值,如果替换出的高速缓存行中的所有位都未设置,这意味着所有的128KB处于GPU模式,则第一级位图中的位将未设置,如果位图中的任何位被设置,则第一级位图和位图中的相应位都被设置。
优选地,所述数据加密模块包括:CPU或GPU直接互相传输数据而无需重新加密,设置加密或解密内存块,加密需要地址和计数器,如果两个块使用相同的加密密钥、地址和计数器进行加密,则被视为不安全,因此,每当一个脏内存块从缓存中逐出并写入内存时,内存块的计数器会增加,如果CPU和GPU使用共享的加密密钥,则还需要为CPU或GPU上的每个内存块维护唯一的地址,因此,内存加密使用的地址与CPU或GPU上的本地物理地址不同;
将所有内存包括系统内存和加速器内存,映射到一个称为加密地址空间EAS的单个内存空间用于加密,EAS中的地址仅用于加密和解密,正常内存访问的寻址保持不变,通过为每个设备提供起始地址实现EAS,在数据传输时,接收方都需要关于用于解密传输的密文的地址的额外信息;
数据加密模块首先从模式选择模块获取模式,然后从完整性树模块获取正确的计数器,并找出正确的EAS地址,然后解密数据块;
CPU使用MAC的一半来验证自己的64字节缓存行。
优选地,GPU模式的完整性树模块包括:不同的内存控制器使用自己的完整性树,并在不与其他内存分区交互的情况下验证其数据,为了直接访问传输的数据,GPU支持CPU模式和GPU模式的保护方案,CPU模式的数据使用来自CPU的地址和计数器进行加密,当获取这样的内存块时,内存控制器获取正确的计数器值和地址以解密该块,为了支持CPU模式,完整性树的一个叶节点涉及来自不同内存分区的块,因此,设置一个模块来验证计数器,并向所有内存控制器传达正确的计数器值;
使用一个CPU模式引擎,来验证CPU模式完整性树中的计数器,CPU模式引擎是一个片上模块,并与其他内存控制器连接,传输的CPU模式加密保护的元数据存储在GPU内存中,CPU模式引擎通过直接向内存控制器发送请求来获取读取的内存,元数据将直接被获取并返回给CPU模式引擎,当内存控制器需要获取真实的计数器值时,它发送请求到CPU模式引擎,CPU模式引擎读取存储在GPU内存中的完整性树节点,并验证计数器,并将值返回给内存控制器。
优选地,CPU模式的完整性树模块包括:CPU端的引擎支持两种不同的模式,除了CPU模式计数器的根节点外,CPU上的内存控制器还留出空间来存储GPU模式下子树的根节点,这两种不同类型的完整性树直接在CPU的单个内存控制器中支持,子树的EAS地址也与缓存中的计数节点一起存储,当模式选择引擎确定一个内存块处于GPU模式时,多模保护引擎首先验证GPU模式下的计数器和传输块的EAS地址,然后解密和验证该块,为了支持GPU模式,CPU维护几个GPU模式的完整性树;
所有完整性树具有相同的形状,在初始化时,GPU提供的信息说明内存寻址方式,因此,CPU知道内存分区地址排布方式,并正确使用GPU的寻址方案来查找与内存块相对应的完整性树。
优选地,HSMEM传输信道的数据传输过程为:
步骤1:通过GPU TEE的安全通道机制,软件向GPU发送指令;
步骤2:在读取完指令后,GPU命令处理器向CPU端的HSMEM传输引擎发送一个信号,这实现为一个特殊的中断请求,它不会真正引发外部中断,而是将信号和信息传递给CPU端的HSMEM传输引擎;
步骤3:CPU端HSMEM传输引擎收到信号,将根节点读到片上并验证,同时向内存控制器发请求禁止系统向这段地址的写入;
步骤4:在选择根节点之后,HSMEM传输引擎向内存控制器发送请求,禁止对该区域进行写入,如果缓存中的某些树节点是脏的,它们应该被刷回到内存中,然后它读取要传输的子树的根节点,并通过安全通道传输根节点;
步骤5:HSMEM传输引擎确保GPU DMA引擎处于安全模式并计算元数据地址,并进行安全内存传输,这些命令给出要传输的范围的物理地址,并且此特殊内存传输绕过IOMMU的检查,元数据区域的地址是由HSMEM传输引擎在系统初始化时给出的,它直接计算元数据的地址,并控制DMA引擎提取正确的元数据,数据、MAC和完整性树节点应进行传输,以上步骤不需要重新加密;
步骤6:在从系统内存中读取元数据后,GPU向CPU发送另一个特殊信号,该信号不触发软件中断,而是由CPU端的HSMEM传输引擎处理该信号,并通过安全通道将子树的根节点和EAS地址发送给GPU;
步骤7:CPU端的HSMEM传输引擎向内存控制器发送消息,取消对该块内存的写限制在传输通道中,对于CPU-GPU或GPU-CPU的数据传输,HSMEM要求所有传输的数据处于相同的模式下,对于GPU-GPU的数据传输,采用MMT的传输方式,数据由不同的模式保护。
优选地,多模式数据保护引擎的内存访问流程为:
步骤11:通过模式选择模块,获取当前所访问块所在的模式,如果为CPU模式则进行以下步骤,如果为GPU模式则采用普通的GPU安全内存的访问模式;
步骤12:当这样的块从DRAM中获取时,它由CPU模式完整性树进行验证,并利用完整性树模块和内存加密模块验证和解密;
步骤13:解密和验证后的数据被放入cache,用于访问;
步骤14:访问结束后,如果该块没有被修改,则直接被淘汰出cache,如果被修改,则需要读取GPU模式的counter,并进行重新的加密,更新GPU模式的元数据,然后写回,当GPU需要加密块并写入内存时,它不使用CPU提供的EAS地址,而是使用自己的EAS地址来加密块;
步骤15:如果切换到GPU模式,通知模式选择模块,模式选择模块更新相应信息,标记当前的内存块变回GPU模式。
与现有技术相比,本发明具有如下的有益效果:
(1)在异构的安全内存之间实现高性能的数据传输(无需重加密),用在CPU-GPU传输的时间更少,使得应用整体的性能更高;
(2)在单个安全内存的设备上支持多种安全内存的保护模式,使得传输过去的数据(仍然使用原本的安全内存保护模式)能够直接被设备访问,无需立刻对模式进行转换;
(3)在一个安全内存的设备上,一个内存块可以在不同的安全内存的保护模式之间进行高效的切换,根据应用的需要,可以在运行时透明地转换为性能更高的安全内存保护模式,以在当前设备上实现最优的性能。
附图说明
通过阅读参照以下附图对非限制性实施例所作的详细描述,本发明的其它特征、目的和优点将会变得更明显:
图1为Intel SGX风格的内存完整性树;
图2为内存加密过程;
图3为GPU内存分区;
图4为系统架构;
图5为选取完整性树的元数据;
图6为多模式保护引擎。
具体实施方式
下面结合具体实施例对本发明进行详细说明。以下实施例将有助于本领域的技术人员进一步理解本发明,但不以任何形式限制本发明。应当指出的是,对本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变化和改进。这些都属于本发明的保护范围。
实施例1
本发明应用的系统架构或场景
HSMEM考虑了用于机密计算的异构平台。受保护的应用程序在CPU端和GPU端都运行TEE。CPU端和GPU端的TEE都使用安全内存来保护数据。HSMEM的目标是构建用于GPUTEE的DRAM安全。对于TEE的管理,HSMEM可以使用类似Gravition[OSDI’18]的机制。只有CPU和GPU的芯片内部组件是可信的。因此,离开芯片的所有数据都应该得到保护。数据的机密性、完整性和新鲜度应该得到保证。本发明考虑了使用GDDR内存的GPU或其他加速器,攻击者可以窃听CPU或GPU上的内存总线,或者PCIe总线或CPU和GPU之间的其他互连总线。攻击者还可以物理上发出指令来读取、修改或重放内存中的数据。
HSMEM的核心硬件模块包括HSMEM传输引擎和多模式保护引擎。HSMEM传输引擎建立了一个HSMEM传输通道,实现了CPU和GPU之间的高速传输。它位于芯片内部,并控制用于安全内存的特殊DMA请求。它选择与要传输的内存相关的元数据,并且可以在不进行额外数据加密和解密的情况下传输数据。对于每次数据传输,只需加密几个高速缓存块,因此可以提供接近明文传输的速度。在数据传输到CPU或GPU之后,多模式保护引擎位于内存控制器中,可以直接使用原始保护方案的传输数据。该引擎可以支持多种保护方案。在本发明中,多模式保护引擎支持的每种内存保护方案被称为一个“模式”。一个内存块可以通过不同的模式进行保护。在多模式保护引擎内部,有一个模式选择模块用于为内存块选择模式。还有一个数据加密模块用于数据加密和解密,以及一个完整性树模块用于维护不同模式的完整性树。此外,HSMEM不局限于类似于BMT的保护方案,它可以扩展到具有较松安全性要求的其他内存保护方案。HSMEM还提供接口,使开发人员可以使用专用指令明确更改内存块的模式。
本发明核心网元/装置模块/产品实现,整体的系统架构如图4所示。
HSMEM传输引擎构建了HSMEM传输通道,用于安全的直接内存访问(DMA)。HSMEM传输通道可以实现不同配备安全内存的设备之间的高速数据传输。在数据传输过程中,无需重新加密,只需传输数据和安全元数据。在初始化时,HSMEM传输引擎与对等设备生成密钥,构建传统的安全信道。这个安全信道是HSMEM传输通道的一部分。当数据将要传输时,HSMEM传输引擎准备需要与数据一起传输的元数据。此外,安全信道用于在初始化过程中交换一些基本的系统配置。HSMEM传输引擎询会计算数据对应元数据的目标地址,然后,HSMEM传输引擎控制DMA引擎将元数据复制到目标位置。GPU使用自己的DMA引擎进行数据传输。该传输引擎包含:初始化模块和元信息选取模块。
初始化模块:当系统启动或GPU插入时,CPU和GPU应相互验证并建立传统的安全信道。通过安全信道,CPU和GPU可以协商用于内存加密的多个共享密钥。此外,CPU和GPU会相互提供内存布局信息。它们应该提供完整性树格式、加密算法类型以及元数据区域的地址。GPU还应向CPU提供一些额外信息,包括内存控制器的数量和内存寻址方案。完成此操作后,CPU和GPU将初始化其安全内存。安全信道还应具备确保传输数据的新鲜度的能力。可以通过为AES-GCM加密使用递增的自初始化向量(IV)来实现。需要注意的是,维护这样一个安全信道对于HSMEM传输引擎来说并不会带来很大负担,甚至可以重用已经使用AES-GCM维护此类安全信道的PCIe安全增强功能。
元信息选取模块:当数据通过HSMEM传输通道进行传输时,一些安全元数据会与数据一起传输。对于BMT,计数器和MAC值一同传输。HSMEM要求每次数据传输至少覆盖整个子树,因此最小的传输粒度是单个完整性树节点所覆盖的内存大小。所选的子树必须满足子树根节点中的所有计数器与待传输的数据相关。本发明中,父节点中的计数器对于子树根节点被称为子树根计数器。在这里,假设CPU和GPU在完整性树中使用分割计数器(split-counters)。GPU的完整性树节点扇出为128,并且高速缓存行大小为128字节,而CPU的度数为64,高速缓存行大小为64字节。CPU-GPU传输的粒度与GPU-CPU传输的粒度不同。所覆盖的大小可以通过度数乘以高速缓存行大小来计算。对于CPU-GPU传输,粒度为4KB,这意味着只有完整性树的叶子节点覆盖的数据会被传输。首先,HSMEM传输引擎使用待传输数据的地址来确定应与数据一起传输的完整性树节点。它找到一个或多个覆盖传输数据范围的子树。它应保证所选子树的根节点中覆盖的所有数据都是为了传输的数据。如果根节点中的某些计数器不属于待传输的数据,它应继续向完整性树的较低级别查找子树,如图5所示。
GPU-CPU的数据传输使用不同的粒度。由于GPU内存的地址排布,相邻内存控制器的高速缓存行可能不是相邻的。然而,为了简化在CPU上传输数据的元数据管理,HSMEM确保至少传输一个内存控制器的完整性树,并且所有内存控制器向CPU传输相同数量的数据。因此,在CPU上维护的GPU模式完整性树是同构的,并且至少需要传输NR_MemCtrl个根节点。传输的粒度还取决于地址排布粒度。NR_MemInter是内存地址排布粒度,表示相邻的NR_MemInter字节来自同一个内存分区。复制的粒度为min(NR_MemInter,16KB)*NR_MemCtrl,也就是所有内存控制器向CPU传输相同数量的数据。假设内存地址排布粒度为2个内存块(256字节)且有16个内存控制器,则复制的粒度应为256KB。
多模式保护引擎支持在一台装备有安全内存的设备中使用多个内存保护方案。CPU和GPU的多模式保护引擎都支持两种内存保护方案。当CPU或GPU通过HSMEM传输通道接收数据时,数据首先由其原始保护方案进行保护。在读取数据时使用原始模式,在写入数据时切换到本地模式。首先本方案介绍如何在GPU上读取CPU模式的内存,以及如何在CPU上读取GPU模式的内存,然后介绍如何在两种内存模式之间进行切换。多模式保护引擎的架构如图6所示。GPU上的CPU模式完整性树和MAC被称为影子元数据。类似地,CPU上的GPU模式安全元数据也被称为影子元数据。
模式选择模块:在CPU或GPU上,对于每个内存块,内存控制器都应知道该块的当前模式。当带有安全元数据的块从CPU传输到GPU时,它仍然受到原始保护方案的保护,反之亦然。模式选择模块是内存控制器中的硬件模块,用于记录此类信息。它使用一个比特位来指示内存块的保护方案(即模式)。GPU的高速缓存行大小为128字节,而CPU的高速缓存行大小为64字节。在GPU上,位图的大小是总内存大小的1/2^10,在CPU上,位图大小是总内存大小的1/2^9。对于1GB的GPU内存,GPU需要1MB的空间用于位图,而对于1GB的系统内存,CPU需要2MB。然而,现有的CPU或GPU当前的内存范围从数十到数百GB不等。在芯片上存储所有位图是不实际的。但是,每个内存访问都应该由位图进行检查。HSMEM使用两级检查来减少访问位图的开销。在GPU上,第一级位图的每个位表示128字节,而在第二级位图中,每个位表示128KB。第一级位图直接存储在内存控制器内部的芯片上缓冲区中。第二级位图存储在安全内存中,并且必须确保完整性。HSMEM保留了一个始终处于本地模式的区域来存储位图。
在GPU上,该区域必须始终处于GPU模式,而在CPU上,则必须始终处于CPU模式。为第二级位图提供了一个专用缓存,称为位图缓存,高速缓存行大小也为128字节(1028位)。因此,每个存储在高速缓存行中的位表示128KB的内存。当从位图缓存中替换出一个高速缓存行时,会检查该高速缓存行的值。如果替换出的高速缓存行中的所有位都未设置,这意味着所有的128KB处于GPU模式,则第一级位图中的位将未设置。如果位图中的任何位被设置,则第一级位图和位图中的相应位都应被设置。GPU上的每个内存控制器都有一个模式选择模块来管理其内存分区。CPU上的模式选择模块类似,但是第一级位图中的每个位表示64字节,而第一级位图中的每个位表示64KB。
数据加密模块:HSMEM允许CPU或GPU直接互相传输数据而无需重新加密。要加密或解密内存块,加密需要地址和计数器,如图2所示。如果两个块使用相同的加密密钥、地址和计数器进行加密,则被视为不安全,因为两个块使用了相同的One-time Pad(OTP)。因此,每当一个脏内存块从缓存中逐出并写入内存时,内存块的计数器会增加。类似于MMT(见相关技术),如果CPU和GPU使用共享的加密密钥,则HSMEM还需要为CPU或GPU上的每个内存块维护唯一的地址。因此,内存加密使用的地址与CPU或GPU上的本地物理地址不同。HSMEM将系统中的所有内存,包括系统内存和加速器内存,映射到一个称为加密地址空间(EAS)的单个内存空间用于加密。EAS中的地址仅用于加密和解密,正常内存访问的寻址保持不变。通过为每个设备提供起始地址,可以轻松实现EAS。在数据传输时,接收方都需要关于用于解密传输的密文的地址的额外信息。数据加密模块应首先从模式选择模块获取模式,然后从完整性树模块获取正确的计数器,并找出正确的EAS地址。然后可以解密数据块。由于GPU的缓存行大小为128字节,是CPU缓存行大小的两倍。在CPU上的GPU模式完整性树中,两个相邻的CPU内存块使用相同的计数器。在CPU上,如果获取内存块,将验证GPU完整性树的计数器并用于对CPU的解密。EAS地址也与完整性树的节点一起存储。尽管两个CPU缓存行使用相同的GPU MAC,但CPU只能读取其中一个缓存行。这是因为HSMEM改变了GPU的MAC计算方式,GPUMAC是通过连接两个MAC生成的。每个MAC是由GPU缓存行中的64字节之一生成的。因此,CPU可以使用MAC的一半来验证自己的64字节缓存行。
完整性树模块(GPU模式):具有机密计算能力的GPU天然支持GPU模式的保护方案。对于GPU模式的完整性树,不同的内存控制器可以使用自己的完整性树,并可以在不与其他内存分区交互的情况下验证其数据。为了直接访问传输的数据,GPU应支持CPU模式和GPU模式的保护方案。CPU模式的数据使用来自CPU的地址和计数器进行加密。当获取这样的内存块时,内存控制器应获取正确的计数器值和地址以解密该块。然而,为了支持CPU模式,完整性树的一个叶节点涉及来自不同内存分区的块。因此,应该有一个模块来验证计数器,并向所有内存控制器传达正确的计数器值。HSMEM使用一个专用单元,即CPU模式保护引擎,来验证CPU模式完整性树中的计数器。CPU模式引擎是一个片上模块,并与其他内存控制器连接。传输的CPU模式加密保护的元数据存储在GPU内存中。CPU模式引擎可以通过直接向内存控制器发送请求来获取读取的内存。元数据将直接被获取并返回给CPU模式引擎。当内存控制器需要获取真实的计数器值时,它发送请求到CPU模式引擎。CPU模式引擎读取存储在GPU内存中的完整性树节点,并验证计数器,并将值返回给内存控制器。
正如之前介绍的,每次向GPU传输数据时都会传输若干子树。子树的根计数器由安全通道保护。在传输完成一个子树后,根计数器被存储在加速器的芯片上部分。多模式保护引擎逻辑上使用CPU模式完整性树来保护所有安全内存。内存块的物理地址用于确定该块与哪个CPU模式计数器相关联。当没有数据传输时,该CPU模式完整性树中没有有效节点。当数据从CPU传输时,根据传输数据的物理地址,CPU模式完整性树中对应的节点将变为有效节点。传输的子树将直接放置在相应位置。然而,由于子树没有有效的父节点,但该子树的根计数器将存储在芯片上。每个CPU模式根计数器最多需要8字节。多模式保护引擎只需要在父级计数器中存储计数器值。同时,CPU上的块地址或EAS中的块地址也会与子树的根计数器一起传输并存储在芯片上。因此,对于每个子树,只需要存储一个计数器和64位EAS地址。当需要计数器时,会验证通往根计数器的路径上的所有树节点。这会一直持续到达到芯片上缓存的第一个节点为止。在加速器上的CPU模式计数器缓存中,每个节点都与存储在芯片上的根节点的ID一起存储。当验证Counter Cache的节点时,会根据根节点的EAS地址获取其对应的EAS地址。加速器不是一个常规的处理器核心,只有关于CPU模式保护方案的固定逻辑,因此可以使用更多的芯片上存储。当GPU内存控制器获取内存块时,它可以从加速器请求EAS地址和计数器值。然后内存控制器可以验证和解密获取的内存块。然而,如果存在太多的子树,则芯片上的缓冲区无法存储这些子树的EAS地址和计数器。HSMEM提供了两种不同的方法。第一种方法是单元将中断发送给GPU命令处理器。然后GPU命令处理器将启动特殊的GPU将一个范围的内存转换为本地的GPU模式。第二种方法是,这些节点可以被逐出并保存在安全内存的一块区域中。如果在缓存中找不到节点,引擎将从受保护内存中获取节点。
完整性树模块(CPU模式):CPU端的引擎还应支持两种不同的模式。除了CPU模式计数器的根节点外,CPU上的内存控制器还应留出空间来存储GPU模式下子树的根节点。这两种不同类型的完整性树可以直接在CPU的单个内存控制器中支持。子树的EAS地址也应与缓存中的计数节点一起存储。当模式选择引擎确定一个内存块处于GPU模式时,多模保护引擎首先验证GPU模式下的计数器和传输块的EAS地址。然后可以解密和验证该块。为了支持GPU模式,CPU维护了几个GPU模式的完整性树。由于内存地址排布是固定的,CPU不需要为所有GPU模式的完整性树存储EAS地址。所有完整性树具有相同的形状,因为本方案选择了的传输粒度确保所有GPU模式的完整性树具有相同形状。在初始化时,GPU提供的信息说明了内存寻址方式。因此,CPU知道内存分区地址排布方式,并可以正确使用GPU的寻址方案来查找与内存块相对应的完整性树。
HSMEM传输信道的数据传输过程:与CPU进行交互时,除了读取或写入MMIO寄存器外,GPU内核空间驱动程序(操作系统内核中的模块)或用户空间驱动程序(CUDA驱动程序)通常通过GPU通道发送命令。使用类似Graviton的GPU-TEE机制,命令的完整性和机密性已经得到保护。当驱动程序通过GPU通道推送命令以请求与HSMEM传输引擎进行数据传输时,还应提供要传输的内存范围的地址范围。需要考虑GPU的地址转换层次结构。GPU有自己的页表,GPU内核使用的地址是GPU虚拟地址(VA)。GPUMMU将地址转换为GPU物理地址(PA)。GPU页面表中标记了GPU内存或系统中的页面。在当前的GPU中,存在两种具有不同权限的GPU通道:特权通道和非特权通道。内核空间驱动程序可以使用特权通道,并且特权通道中的命令可以直接使用物理地址。对于用户空间驱动程序,使用非特权通道。推送的命令只能使用GPUVA,但最终会被转换为GPUPA。然而,在现代计算机系统中,通常使用IOMMU来保护设备对系统内存的任意访问。GPU无法直接观察IOPA或系统地址中的物理地址。我们注意到,在现代GPU中,使用了地址转换服务(ATS)。对于某些支持CPU-GPUNVLINK互连的超级计算机(如Summit Super Computer),ATS使GPU能够使用CPU虚拟地址访问系统内存。启用ATS后,设备或GPU将向CPU侧的地址转换代理发送请求,以请求与某个地址的IOPA相对应的地址。代理将转换地址并返回IOPA给GPU。GPU使用地址转换服务(ATC)来缓存地址转换,如果在ATC中找到条目。可以直接使用IOPA,绕过IOMMU减轻IOMMU中IOTLB的压力。HSMEM传输可以直接使用ATS来确定传输数据的真实地址。安全传输请求要求传输范围连续,因此只需要第一个字节的地址。
步骤1:通过GPUTEE的安全通道机制,软件向GPU发送指令(command);
步骤2:在读取完指令后,GPU命令处理器向CPU端的HSMEM传输引擎发送一个信号。这可以实现为一个特殊的中断请求,它不会真正引发外部中断,而是将信号和信息传递给CPU端的HSMEM传输引擎;
步骤3:CPU端HSMEM传输引擎收到信号,将根节点读到片上并验证,同时向内存控制器发请求禁止系统向这段地址的写入;
步骤4:在选择了根节点之后,HSMEM传输引擎应向内存控制器发送请求,禁止对该区域进行写入,如果缓存中的某些树节点是脏的,它们应该被刷回到内存中,然后它读取要传输的子树的根节点,并通过安全通道传输根节点;
步骤5:HSMEM传输引擎确保GPUDMA引擎处于安全模式并计算元数据地址,并进行安全内存传输,这些命令给出了要传输的范围的物理地址,并且此特殊内存传输可以绕过IOMMU的检查,元数据区域的地址是由HSMEM传输引擎在系统初始化时给出的,它可以直接计算元数据的地址,并控制DMA引擎提取正确的元数据,数据、MAC和完整性树节点应进行传输,以上步骤不需要重新加密;
步骤6:在从系统内存中读取元数据后,GPU向CPU发送另一个特殊信号,该信号不会触发软件中断,而是由CPU端的HSMEM传输引擎处理该信号,并通过安全通道将子树的根节点和EAS地址发送给GPU;
步骤7:CPU端的HSMEM传输引擎向内存控制器发送消息,取消对该块内存的写限制在传输通道中,对于CPU-GPU或GPU-CPU的数据传输,HSMEM要求所有传输的数据处于相同的模式下。例如,如果GPU需要将数据传输给CPU,那么所有数据应该由GPU模式或CPU模式保护。对于GPU-GPU的数据传输,采用MMT的传输方式,数据可以由不同的模式保护,这意味着一些数据可以由CPU模式保护,一些数据可以由GPU模式保护。
多模式数据保护引擎的内存访问流程:以GPU侧为例,当一个内存块处于CPU模式时,GPU完整性树保持不变。计数器节点仍然以明文形式保留在内存中,与原始的完整性树结构一样。CPU侧实现是类似的。
步骤1:通过模式选择模块,获取当前所访问块所在的模式,如果为CPU模式,则进行以下步骤,为GPU模式则采用普通的GPU安全内存的访问模式;
步骤2:当这样的块从DRAM中获取时,它由CPU模式完整性树进行验证,并利用完整性树模块和内存加密模块验证和解密;
步骤3:解密和验证后的数据被放入cache,用于访问;
步骤4:访问结束后,如果该块没有被修改,则可以直接被淘汰出cache,如果被修改,则需要读取GPU模式的counter,并进行重新的加密,更新GPU模式的完整性树等元数据,然后写回,当GPU需要加密块并写入内存时,它不会使用CPU提供的EAS地址,而是使用自己的EAS地址来加密块;
步骤5:如果切换到了GPU模式,通知模式选择模块,模式选择模块更新相应信息,标记当前的内存块变回GPU模式。
实施例2
实施例2为实施例1的优选例。
本发明可以在使用GDDR的GPU上和CPU上进行实现,并且可以支持具有完整性树的内存保护模式,能够防御物理上的replay攻击。同时,CPU与GPU本身存在TEE机制,本方案可以构建在原有的TEE机制之上,实现高效的数据传输。同时本发明提供了特殊的指令,用户可以编写特殊的GPUKernel,使用特殊的指令主动的进行内存的转化,而不会将数据放入GPU的cache,该指令会直接向内存控制器发出请求,内存控制器会直接进行内存模式的转化,不会将转换后的结果放入cache。
同时,在不同的内存控制器中,加入了专门用于存放完整性树节点和数据MAC的cache,用于加速对于内存保护元数据的访问。在实现过程中,在同一个内存控制器中可以采用多个完整性树对内存进行保护,减少了树的深度,类似于MMT。
本实施例能够在保护安全内存的机密性、完整性和新鲜度的情况下,并且在CPU的安全内存和GPU安全内存异构时,实现CPU与GPU之间实现高性能的数据传输,并保证数据安全性。
实施例3
实施例3为实施例1的优选例。
HSMEM可以支持不同的保护方案。在实施例1和实施例2中主要使用最强的保护方案,以同时确保机密性、完整性和新鲜性,以抵御物理攻击。这可以通过基于Bonsai MerkleTree(BMT)的设计实现,例如英特尔SGX。但是,某些硬件平台可能无法提供安全保证。例如,在物理攻击下,AMD SEV不保证完整性和新鲜性,而英特尔TDX不考虑物理重放攻击。因此,在此类架构中可以删除完整性树和MAC。
通过定制多模式保护引擎,HSMEM可以扩展到其他保护方案。在这种架构中,不需要完整性树。因为地址仍然用作加密的调整值,在数据传输时,接收方仍然需要传输和记录地址。对于未使用本地EAS地址加密的传输块,多模式保护引擎应具有某种机制来找到正确的EAS地址以解密块。HSMEM使用EAS转换引擎来获取解密的EAS地址。对于大内存传输,仅记录原始EAS地址的起始地址就足够解密。因此,EAS转换引擎维护一些范围寄存器,当数据传输时,它记录数据的起始地址、结束地址和偏移量。这些信息存储在范围缓冲区中。当模式选择模块发现内存块不属于当前模式时,内存控制器会检查地址是否落在范围缓冲区中的任何范围内。然而,范围缓冲区的大小是有限的。EAS转换引擎还维护一个多级翻译表,用于EAS地址的转换。该表以4K为粒度将本地地址转换为原始EAS地址。该表的组织方式类似于页表,还可以支持类似于大页的机制。EAS转换引擎定期扫描位图,如果所有内存都切换到本地模式,则删除范围缓冲区中的条目。如果范围缓冲区没有足够的空间存储范围,它将逐出一个条目并更新映射表。引擎将检查新范围是否大于缓冲区中的现有范围,仅当新范围大于现有范围时,旧范围才会被逐出。由于数据通常以大块进行传输,即使范围缓冲区已满并且使用了翻译表,仍然可以使用大页,从而降低了开销。映射表可以引入类似TLB的缓冲区并可以和范围缓冲区结合,翻译带来的开销是有限的。
本发明还可以用于其他没有使用HBM内存的加速器。
本领域技术人员知道,除了以纯计算机可读程序代码方式实现本发明提供的系统、装置及其各个模块以外,完全可以通过将方法步骤进行逻辑编程来使得本发明提供的系统、装置及其各个模块以逻辑门、开关、专用集成电路、可编程逻辑控制器以及嵌入式微控制器等的形式来实现相同程序。所以,本发明提供的系统、装置及其各个模块可以被认为是一种硬件部件,而对其内包括的用于实现各种程序的模块也可以视为硬件部件内的结构;也可以将用于实现各种功能的模块视为既可以是实现方法的软件程序又可以是硬件部件内的结构。
以上对本发明的具体实施例进行了描述。需要理解的是,本发明并不局限于上述特定实施方式,本领域技术人员可以在权利要求的范围内做出各种变化或修改,这并不影响本发明的实质内容。在不冲突的情况下,本申请的实施例和实施例中的特征可以任意相互组合。
- 电子设备的显示控制方法、装置、电子设备和存储介质
- 电子设备控制方法及装置、电子设备及存储介质
- 图像光效处理方法和装置、电子设备、存储介质
- 一种浴室加热装置和用于控制浴室加热装置的方法、设备、电子设备及计算机可读存储介质
- 一种智能控制方法、智能控制装置、电子设备和存储介质
- 光网络单元供电控制方法、装置、存储介质和电子设备
- 用于光储微电网的供电控制方法、装置、电子设备及存储介质