CN116134421A - 向多瓦片处理系统流式传输数据 - Google Patents
向多瓦片处理系统流式传输数据 Download PDFInfo
- Publication number
- CN116134421A CN116134421A CN202180060927.2A CN202180060927A CN116134421A CN 116134421 A CN116134421 A CN 116134421A CN 202180060927 A CN202180060927 A CN 202180060927A CN 116134421 A CN116134421 A CN 116134421A
- Authority
- CN
- China
- Prior art keywords
- tile
- data
- stream
- memory
- processing system
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/04—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
- H04L63/0428—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
- H04L63/0471—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload applying encryption by an intermediary, e.g. receiving clear information at the intermediary and encrypting the received information at the intermediary before forwarding
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/606—Protecting data by securing the transmission between two devices or processes
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L63/00—Network architectures or network communication protocols for network security
- H04L63/04—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks
- H04L63/0428—Network architectures or network communication protocols for network security for providing a confidential data exchange among entities communicating through data packet networks wherein the data content is protected, e.g. by encrypting or encapsulating the payload
- H04L63/0485—Networking architectures for enhanced packet encryption processing, e.g. offloading of IPsec packet processing or efficient security association look-up
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0618—Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0891—Revocation or update of secret information, e.g. encryption key update or rekeying
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Computer Hardware Design (AREA)
- Computing Systems (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Health & Medical Sciences (AREA)
- Power Engineering (AREA)
- Storage Device Security (AREA)
Abstract
描述了一种处理系统,其包括一个或多个芯片,每个芯片包括多个瓦片。每个瓦片包括相应的处理单元和存储器,存储器存储小代码。该处理系统具有至少一个加密单元,该至少一个加密单元被配置为对经由外部计算设备在瓦片与可信计算实体之间传输的数据进行加密和解密。小代码被配置为通过从外部存储器处的多个存储器区域读取和向该多个存储器区域写入来指令瓦片传输加密数据,使得形成多个加密数据的流,每个流使用外部计算设备处的存储器区域中的单独一个存储器区域。
Description
背景技术
多瓦片(tile)处理系统越来越多地用于促进诸如机器学习之类的应用的并行计算,其中需要处理大量数据。多瓦片处理系统被部署在数据中心和其他地方,以通过允许更大的并发性来提高各种类型的算法的效率。
越来越多的人希望处理敏感代码和/或敏感数据,并保留安全和隐私。通常,大量敏感代码和/或数据需要使用资源密集型算法来处理,而在这种情况下,多瓦片处理系统是提高效率的一种选择。然而,在使用多瓦片处理系统的情况下,由于难以安全地将数据传输到多瓦片处理系统和安全地从多瓦片处理系统传输数据,因此引入了关于敏感代码和/或数据的安全性和隐私性的额外挑战。
下面描述的实施例不限于解决已知多瓦片处理系统的任何或所有缺点的实现。
发明内容
下面给出本公开的简化概要,以便向读者提供基本理解。本概要并非意图标识所要求保护的主题的关键特征或基本特征,也不意图用于限制所要求保护主题的范围。其唯一目的是以简化的形式呈现本文公开的概念的选择,作为稍后呈现的更详细描述的前奏。
在各种示例中,提供了一种处理系统,包括一个或多个芯片,每个芯片包括多个瓦片。每个瓦片包括相应的处理单元和存储小代码的存储器。给处理系统具有至少一个加密单元,被配置为加密和解密经由外部存储器在瓦片与可信计算实体之间传输的数据。该小代码已经由可信计算实体处的编译器编译,以指令瓦片通过从外部存储器处的多个存储器区域读取和向该多个存储器区域写入来传输加密数据,从而形成多个加密数据的流,每个流使用外部存储器处的存储器区域中的单独一个存储器区域。
许多附带的特征将更容易理解,因为通过参考以下具体实施方式,并结合附图考虑,可以更好地理解这些特征。
附图说明
从以下具体实施方式并结合附图将更好地理解本描述,其中:
图1是第一可信计算实体、不可信中介、以及多瓦片处理系统的示意图;
图2是用于生成要部署在多瓦片处理系统上的小代码(codelets)的编译器的示意图;
图3是包括多瓦片处理系统的数据中心的示意图;
图4是多瓦片处理系统的多瓦片处理单元的示意图;
图5是与外部存储器一起使用的多瓦片处理系统的示意图;
图5A是示出不同数据组件通过加密硬件移动至瓦片以及从瓦片移动的图示;
图5B是示出加速器子系统的处理器与主机系统之间的通信的示意图;
图6是在出口瓦片处实现的、为了使用流以安全方式向外部存储器写入检查点的过程的流程图;
图7是在入口瓦片出实现的、为了使用流以安全方式读取检查点的过程;
图8是与外部存储器一起使用的多瓦片处理系统的示意图,其中具有用于传输混洗训练数据实例的流和置换流;
图9是由多瓦片处理系统执行的、用以支持用于混洗训练数据实例的流的使用的方法的流程图。
图10示出了用于将数据分组从瓦片发送至处理单元外部的目的地的机制;
图11示出了处理器瓦片的示例;
图12示出了初始化向量的使用的示例;
图13示出了集成电路;
图14示出了初始化向量的组分;
图15示出了瓦片可以如何向主机存储器写入数据;
图16示出了当数据被写入主机存储器时数据的移动的示例;
图17示出了瓦片向作为集成电路的一部分的存储器写入和瓦片从存储器读取的示例;
图18示出了两个集成电路之间的通信的示例;
图19示出了集成电路内的数据移动的示例;
图20示出了由不同瓦片发出的多个读取或写入请求在任何一个时间都可能是未完成的;
图21示出了加密单元的示例。
在附图中,相似的附图标记用于表示相似的部件。
具体实施方式
下面结合附图提供的详细描述旨在作为本示例的描述,而不旨在表示构造或利用本示例的唯一形式。描述阐述了示例的功能以及用于构造和操作示例的操作序列。然而,相同或等效的功能和序列可以由不同示例来实现。
如背景部分所述,在使用多瓦片处理系统的情况下,由于难以安全地将数据传输到多瓦片处理系统和从多瓦片处理系统传输数据,因此引入了关于敏感代码和/或数据的安全性和隐私性的额外挑战。为了解决这些挑战,本公开教导使用流(stream)来安全地向多瓦片处理系统传输数据和从多瓦片处理系统传输数据。所传输的数据是代码和/或其他类型的数据。发明人已将特征添加到多瓦片处理器来改善流的部署。流是用于多瓦片处理系统的瓦片与多瓦片处理系统外部的存储器之间的加密数据的通信路径。在多瓦片处理系统是外围设备的一些示例中,存储器位于主机计算设备处。存储器是多瓦片处理器芯片外部的任何合适的存储器。由于用于保持传输数据安全的加密,流必须能够与加密协议配合使用,这并不简单。
通常,多瓦片处理系统用于处理大量的数据实例,其中每个数据实例将以大致相似的方式被处理。已经发现流在这样的场景中是有用的,能够将数据实例以安全的方式流式传输到多瓦片处理系统中,并到达特定的瓦片。然而,当多瓦片处理系统部分在处理大量数据实例的过程中出现故障时,就会出现问题。通过使用流,发明人已经创建了这样的多瓦片处理系统,其能够回到在故障之前完成的工作,并在数据实例流中的适当点处恢复数据实例的处理。这种恢复是安全的,因为用于实现恢复的流是安全的。下面参考图6和图7描述关于也称为安全检查点的安全恢复过程的实施例。
混洗(shuffling)运算符是机器学习架构中的一种有用的运算符。梯度下降算法广泛用于机器学习模型的训练,其会“卡”在局部极小值,而更好的解可能就在附近。跨训练迭代(历元(epoch))对数据实例(统称为数据集)进行混洗有助于训练算法“跳出”局部极小值,从而减少训练次数并提高训练精度。
使用混洗使得流的部署极其困难。特别地,混洗数据集改变了瓦片取回数据实例的顺序,以及随后验证初始化向量的顺序。为了解决该问题,瓦片可以获得由多瓦片处理器外部的混洗运算符构造的初始化向量的排列组合(permutation)。然而,重建初始化向量排列需要很大内存容量来保存已经被消耗的数据实例。这令人望而却步,因为在多瓦片处理系统中内存是稀缺资源。另一种选择是对经混洗的数据集进行加密,而不是对初始数据集进行加密。这解决了初始化向量序列问题,因为瓦片按顺序取回数据集,而初始化向量序列是静态的(在编译时已知),并且在所有训练迭代中都是相同的。然而,为了加密和存储与训练迭代次数相同次数的数据集,这带来了令人望而却步的存储要求。发明人已经创建了一种解决方案,其中第一流与被称为置换流的第二流结合使用,从而使混洗与流的使用能够以有效和实用的方一起进行。下面参考图8和图9描述关于流和混洗的使用的实施例。
在本文描述的各种示例中,多瓦片处理系统与外部存储器一起使用。外部存储器不受信任。租户具有要在多瓦片处理系统上执行的敏感代码,以便处理敏感数据。在一些示例中,一个或多个其他租户也在使用该多瓦片处理系统,但这不是必需的。在一个示例中,敏感代码是神经网络或其他机器学习模型,并且敏感数据是训练数据。在多瓦片处理系统上训练机器学习模型,并且在训练之后,将产生的经训练的模型参数从多瓦片处理系统返回给租户。然而,本技术不限于机器学习应用,并且使用任何敏感代码和敏感数据。
为了使敏感代码在多瓦片处理系统上执行,它将经由外部存储器被传输到多瓦片处理系统。然而,由于外部存储器是不可信的,因而经由外部存储器将敏感代码传输到多瓦片处理系统并不简单。敏感数据也将被传输到多瓦片处理系统,而且,在外部存储器可能是恶意的情况下,这同样是一个问题。
在各种示例中,租户是被称为客户端的计算设备,并且在图1中被称为第一可信计算实体100,其通过任何合适的通信网络与外部存储器通信。多瓦片处理系统与外部存储器通信。在多瓦片处理系统上形成可信执行环境(TEE),以用于执行敏感代码和处理敏感数据。TEE的状态和多瓦片处理系统的真实性(genuity)可以由远程实体基于多瓦片处理系统使用密钥生成和签名的证据来证明,该密钥植根于仅在多瓦片处理系统处可用的唯一设备秘密。
图1示出了三个高级别实体:第一可信计算实体100、不可信的存储器108和多瓦片处理系统112。
在一些示例中,第一可信计算实体100由租户控制,并且可以访问将在多瓦片处理系统112处处理的敏感代码102和敏感数据104。第一可信计算实体100具有加密器106,该加密器106在经由存储器108向多瓦片处理系统112传输之前对敏感代码102和敏感数据104进行加密。第一可信计算实体100具有下面参照图2更详细地描述的编译器124,以及编译器使用的运行时128和机器学习架构126。机器学习架构126是经由编译器124的应用编程接口与编译器124通信的软件。机器学习架构使应用开发者能够构建和/或部署一个或多个机器学习模型,以作为敏感代码102的一部分使用多瓦片处理系统112进行训练和/或执行。机器学习架构使应用程序开发者能够定义软件,以执行以下一项或多项:创建流、将流与密钥关联、指示何时在加密单元处加载密钥。
存储器108是经由通信网络或链路与第一可信计算实体100通信并且经由通信网络或者链路与多瓦片处理系统112通信的任何存储器。存储器110至少存储来自第一可信计算实体100的加密代码和/或数据。在一些示例中,存储器100是主机计算设备的存储器,而多瓦片处理系统112是主机计算设备的外围设备。然而,存储器110不是必须位于主机设备处。存储器是多瓦片处理系统112外部的任何存储器。
下面至少参考图4和图5详细描述多瓦片处理系统112的示例。多瓦片处理系统112具有至少一个处理器122。多瓦片处理系统能够创建用于使用敏感代码处理敏感数据的可信的执行环境。多瓦片处理系统112具有瓦片114,其用于以并行方式使用敏感代码处理敏感数据。如下面所详细描述的,瓦片114是处理器或其他计算元件。多瓦片处理系统112具有存储器116,并且它具有一个或多个加密单元118。每个加密单元118能够加密和解密数据。多瓦片处理系统112的安全微控制器单元(SMCU)120控制进程以创建可信执行环境和各种其他功能。
多瓦片处理系统112处的(多个)加密单元118和第一可信计算实体处的加密器106均被配置为使用加密协议来加密敏感代码和/或数据块,以经由不可信外部存储器108进行传输。使用密钥和初始化向量来保护敏感信息的任何加密协议都是可用的。使用包括初始化向量和密钥的对来加密单独的块。
在一些示例中,加密协议是在管理加密协议的初始化向量方面特别有效的协议。加密协议涉及第一和第二可信计算实体预先约定参数化函数,用于以非常有效的方式获取初始化向量。
现在给出了有关示例加密协议的更多信息,以帮助理解本技术。
示例加密协议用于对软件中的代码和数据进行加密,以便其能够由多瓦片处理系统上的加密单元18解密,同时保证完整性并防止诸如重新排序、丢弃或重现响应之类的攻击。防止这些攻击涉及使用初始化向量(IV)进行加密。IV受到保护以免于攻击者攻击,并且IV不会重复使用,以相同密钥加密不同的数据。
示例加密协议将输入和输出数据流划分为同等大小的帧,并将每个流中的每个帧与称为加密虚拟地址或EVA的唯一值相关联。EVA可以被视为外围组件互连(PCI)瓦片地址的扩展,它是编译器124当前可见的虚拟地址。由编译器124生成的代码通过PCI瓦片地址和EVA中的一个或多个引用外部存储器108中的帧。帧还包括IV和认证标签,诸如分别在帧的开头和结尾中。认证标签是由加密器106或加密单元118生成的。
帧认证涉及检查在解密结束时生成的标签是否与预期的认证标签匹配。后者被放置在帧的结尾处。编译器生成的代码(用于发出用于读取或写入外部存储器108的直接存储器访问DMA请求)说明标签使用的额外帧空间。对于入口流,在设备上运行的代码负责剥离标签,而对于出口流,它提供了空间,该空间将在加密期间由加密单元118填充。
帧的EVA被用作帧的加密/解密的IV。特别地,当用加密密钥加密帧时,数据加密器106、118使用(输入)帧的EVA作为IV,并且从不重复使用相同的EVA/IV来用相同的密钥加密另一帧。强制执行此不变项保证了只有一个帧使用相同的IV和加密密钥进行加密。多瓦片处理系统使用(输出)帧的EVA作为IV,同时在将帧写入外部存储器108之前对其进行加密。该协议要求在多瓦片处理系统上运行的应用程序避免重复使用相同的EVA/IV来写入两个不同的帧。
与传统的高级加密标准(AES)加密不同,其中IV是隐式的(通常来自计数器),并且是加密引擎而言是私有的,示例加密协议中的IV是显式的,这提出了一个问题,即如何使IV可用于加密引擎进行加密和解密?该协议涉及IV被包括在帧的报头中,并与数据一起以明文形式传递。对于入口流,IV由加密器106放置在报头中。对于出口流,IV由加密单元118放置在帧的报头中。然而,以明文形式传递IV会创建攻击向量,这是因为攻击者可以篡改IV,使得攻击者能够重新排序、重现或删除帧。
通过检查输入帧的真实性,然后进行检查以确保帧头中包括的IV与EVA(即,预期的IV)相匹配的组合来保持这种攻击向量中的数据完整性。对于输入流,在多瓦片处理系统的加密单元118使用显式IV和帧的结尾处的认证标签来认证帧时,运行的应用程序(下面描述的小代码(codelet))对IV进行认证,以确保帧的报头中的IV与预期的IV匹配。对于出口流,拥有密钥和预期IV序列的解密工具使用帧的预期IV和帧的结尾处的认证标签来认证帧。
IV认证涉及消费数据的实体具有预期IV的知识。对于输入流和输出流,这一要求通过设计得到满足,因为协议使用EVA作为IV,EVA由编译器生成,并可用于运行的应用程序(即,在消耗输入帧和写入输出帧的代码中编码)和流级元数据形式的加密工具。
机密数据流可用于传输根据加密协议加密的数据实例的序列。每个数据实例被划分为帧序列,并且使用流的密钥和根据具有多个字段的格式构造的128比特的IV对每个帧进行加密。多个字段包括:流类型字段,其用于指示流携带数据还是置换(permutation)流;流标识符字段,其携带与流相关联的唯一标识符;以及索引字段,其携带流内的流的索引。IV不包含任何特定于应用的属性,诸如批处理大小、与流相关联的外部存储器中的存储器区域、或向流发出读取或写入请求的瓦片数量。这些属性被存储在应用清单中。这允许数据流被加密一次并跨应用被重复使用,只要这些应用不使用具有相同密钥和流标识符的两个流,
编译器124生成代码作为处理瓦片的应用程序的一部分(包括如下所述的小代码),其生成对瓦片PCI空间(外部存储器108)和瓦片地址空间(瓦片-瓦片通信)的读取和写入请求的序列。
图2是图1的编译器124的示例的更详细的示意图。在图2中,编译器70被配置为接收机器学习模型的计算图60以及瓦片数据74。编译器70接收计算图60和瓦片数据74作为第一可信计算实体100处的敏感代码102的一部分。在一个示例中,租户使用机器学习架构126创建敏感代码,以指定要使用的机器学习模型和训练算法。计算图以及如何创建它们在机器学习领域是众所周知的。计算图的每个节点表示在其一个或多个输入边上接收的一个或更多个输入的函数,该函数的结果是输出边上提供的输出。每个函数由一个或多个参数(有时称为权重)参数化。编译器接收计算图60并将节点中的函数编译成多个小代码,这些小代码被包含在图6中标记为72的本地程序中。每个本地程序被设计成被加载到多瓦片处理系统112的特定瓦片中。每个本地程序包括一个或多个小代码72a、72b、…加上管理子程序73,每个管理子程序由指令序列形成。
小代码72a、72b和管理子程序73以安全的方式被加载到多瓦片处理系统的适当瓦片中,诸如通过使SMCU将引导代码写入瓦片中,从而引导代码能够以加密形式取回小代码。
机器学习架构126在一些情况下向编译器(图2中未示出)提供输入,如下面更详细地描述的。在一个示例中,机器学习架构向编译器提供关于小代码执行中的点的信息,在这些点处,执行被暂时停止,直到密钥被重新加载到多瓦片处理系统200的一个或多个加密单元中。机器学习架构126通过标识敏感代码中由代码指定要由加密单元使用的第一组密钥的敏感代码的区域与被指定由加密单元使用的第二组密钥的敏感代码的区域之间的过渡来确定这些点,其中第一组密钥不同于第二组密钥,并且其中一组密钥包括一个或多个密钥。
在示例中,多个多瓦片处理系统200被部署在如图3所示的数据中心300中,其中多瓦片处理系统200使用数据中心300内的通信网络互连,为了清楚起见,通信网络在图3中未被示出。包括计算设备的第一租户302具有敏感数据和/或代码的安全存储306和编译器124。第一租户302与数据中心300通信。第一租户302能够使用编译器124编译敏感代码306,以生成小代码,小代码被部署在数据中心300中的一个或多个多瓦片处理系统200上。第一租户302能够使用如下面更详细地描述的流将敏感数据传输到多瓦片处理系统,以使敏感数据在多瓦片处理系统200中被处理。
在一些示例中,存在第二租户304,其包括与数据中心300通信的计算设备。第二租户304具有敏感代码和/或数据的安全存储308。第二租户能够将敏感代码和数据复制到数据中心中的、与第一租户302相同的一个或多个多瓦片处理系统200中。使用多瓦片处理系统200中的资源隔离机制,可以维护各个租户的安全。
图3示出了数据中心的情况。然而,也可以在独立情况下或在其他类型的部署中使用图1的多瓦片处理系统。
图4示意性地示出了示例处理器122的架构。处理器122包括多个处理器瓦片114的阵列6和连接在瓦片114之间的互连34。处理器122被单独实现或作为封装在同一集成电路(IC)封装中的多个管芯之一实现。互连34在本文中也可以称为“交换结构”34,因为它使瓦片114能够彼此交换数据。每个瓦片114包括执行单元和存储器的相应实例。例如,作为示例,处理器122可以包括数百个瓦片114,或者甚至超过一千个瓦片。为了完整性,还应注意,本文所指的“阵列”不一定意味着瓦片114的任何特定数量的尺寸或物理布局。每个瓦片114具有其自身的本地存储器。瓦片114不共享存储器。
处理器122从第一可信计算实体100接收工作,第一可信计算实体100使用处理器122所属的集成电路(即芯片)上实现的多个芯片到主机链路之一,经由存储器108与处理器122通信。该工作采取由处理器122处理的输入数据的形式。当提供工作时,存储器108可以访问计算机,该计算机包括单个这样的处理器122或一组多个处理器122,这取决于来自第一可信计算实体100的工作负载。
处理器122包括交换结构34,瓦片114和链路通过若干组连接线连接到交换结构34,交换结构34是无状态的,即没有程序可见状态。每组连接线都是端对端固定的。在该示例中,一组包括32条数据线加上控制线,例如有效位。每组可以携带32比特数据分组,但请注意本文的“分组”一词是指表示数据(有时称为数据项)的一组比特,可能具有一个或多个有效比特。每组连接线都是流水线式的,并且包括一系列临时存储,例如锁存器或触发器,它们在将数据释放到下一存储之前将数据保持一个时钟周期。沿着每条线的行进时间由这些临时存储确定,每个临时存储在任意两点之间的路径上均占用一个时钟周期的时间。以此方式,瓦片114之间的数据交换可以在时间确定的基础上进行。
通过以时间确定的方式在瓦片114之间发送数据,可以在没有目的地标识符的情况下发送“分组”,这将允许唯一地标识预期的接收方。然而,分组可以包括指示通过交换结构34的至少一个行进方向的报头。
如上所述,发明人已经创建了一种便于流部署的多瓦片处理器。流是用于多瓦片处理系统的瓦片与多瓦片处理系统外部的存储器之间的加密数据的通信路径。图5示出了作为由箭头指示的通信路径的流。图5A和图5B也示出了流。在图5中,存在多瓦片处理系统516,其包括多个瓦片506、514(为了清楚起见,仅示出两个瓦片,尽管实际上可能存在更多瓦片)、交换块504和加密单元502。假设该流是用于将敏感数据和/或敏感代码读取到多瓦片处理系统中的入口流。敏感数据和/或敏感代码已经由图1中的第一可信计算实体100加密并存储在多瓦片处理系统外部的存储器108中。第一可信计算实体将敏感数据和/或代码划分为帧,并使用密钥和初始化向量对其进行加密,如下面详细描述的。加密帧被存储在存储器108的区域500中。小代码510由图1的第一可信计算实体100处的编译器创建,并部署在一个或多个瓦片(诸如,图5中的瓦片508)处。小代码510被执行以使数据在它们各自的瓦片4与存储器108之间交换。小代码向瓦片506提供关于如何执行图5所示的流的信息。为了清楚起见,图5仅示出了一个区域500和一个流,尽管实际上存在许多流,每个流在外部存储器中均具有相关联的存储器的区域。小代码被配置为通过从外部存储器处的多个存储器区域读取和向多个存储器区域写入来指令瓦片传输加密数据,从而形成多个加密数据的流,每个流使用外部存储器处的存储器区域中的单独一个存储器区域。每个流使用不与其他实时流共享的一个内存区域。实时流能够使用非实时流的存储器区域,以便有效地使用可用的内存。
位于流的端点的瓦片506被称为输入/输出瓦片(I/O瓦片)。流能够具有不止一个端点瓦片,在这种情况下,使用轮询调度(round robin)或其他分配方案依次为端点瓦片服务。
I/O瓦片能够使用如上文参照图4所述的瓦片间通信与不是I/O瓦片的其他瓦片进行通信,以便获取要写入区域500的数据或发送它从区域500接收到的数据。
图5所示的流是入口流或出口流,但并非两者都是,因为入口流和出口流具有分配给它们的不同密钥。入口流将信息从外部存储器读取到瓦片中。出口流将数据从瓦片写入到外部存储器108。小代码可以被更新,从而使特定流的I/O瓦片改变。I/O瓦片能够作为不止一个流的端点。通过流传输的数据被划分成帧,加密并放入分组中,其中用于加密数据的初始化向量以明文形式存在于分组的报头中。
作为入口流的端点的I/O瓦片被称为入口瓦片。它使用瓦片的小代码确定要读取的入口流的下一帧的预期的初始化向量。入口瓦片发出读取请求以从与流相关联的存储器区域读取流的下一帧。响应于下一帧到达入口瓦片的本地存储器中,入口瓦片检查下一帧中包含的初始化向量是否与预期的初始化向量相匹配。响应于匹配失败,入口瓦片生成安全异常。
作为出口流的端点的I/O瓦片被称为出口瓦片。出口瓦片使用关于要写入外部存储器的数据的信息来确定正从多瓦片处理系统写入外部存储器中的流之一的下一帧的大小和初始化向量。它将初始化向量写入流的当前帧中,并发出针对当前帧的写入请求,该写入请求被发出到与流相关联的外部存储器区域。一旦从外部存储器检索到的帧,第一可信计算实体(图1的100)就能够检查该帧的初始化向量。如果初始化向量如预期的那样,则使用帧;否则发生认证加密错误。
图5A示出了当数据由瓦片114a写入主机存储器70并由瓦片114b从主机存储器70读取时数据的移动的示例。在该示例中,瓦片114a、114b被示为两个独立的瓦片。然而,在其他示例中,瓦片114a、114b可以是相同的瓦片。在该示例中,为了简化附图,交换块78被省略。
瓦片114a向加密单元118发送一个或多个写入请求501。一个或多个写入请求501采用与已经讨论的请求72、73相同的形式并以相同的方式处理。一个或多个写入请求501构成传出加密帧。传出帧包括未加密数据。来自瓦片114a的传出帧包括由瓦片114a确定的初始化向量的一部分。
加密单元118通过添加计数值(该计数值针对加密帧中的每个连续明文块而递增)来完成初始化向量(IV)。初始化向量的该部分可以是96比特的长度,当附加计数值时,整个初始化向量是128比特。加密单元118使用IV来加密数据并计算MAC。MAC的计算与加密操作并行进行。在计算每个密文块之后,加密单元118产生用于确定MAC的部分散列,其中加密单元118仅在对帧的所有明文进行加密时才最终确定MAC。从加密单元118的传出帧501包括加密数据、从瓦片114a接收的初始化向量的一部分和MAC。加密单元118向主机71发送一个或多个写入请求501,主机71将加密数据、MAC和初始化向量写入主机存储器70。
响应于来自瓦片114b的读取请求,主机71在传入加密帧503中提供加密数据。传入帧503是一个或多个读取完成的形式。传入帧503包括由加密单元118发送的传出帧的内容,即,除了加密数据之外,它还包括初始化向量的部分和MAC。传入帧503被提供给加密单元118。加密单元118通过添加计数值(该计数值针对加密帧中的每个连续密文块而递增)来完成初始化向量。加密单元118使用IV来解密数据,并通过使用接收到的密文和IV重新计算MAC来检查MAC。如果MAC被确定为正确,则帧102被提供给瓦片114b。
瓦片114b检查初始化向量的一部分是否如预期的那样。瓦片114b不需要MAC,因此删除MAC。响应于确定初始化向量的部分如预期的那样,瓦片114b将解密的数据存储在其存储器中。
图5B示出了如何使用加密单元118在加速器子系统上形成可信执行环境(TEE)。加速器5400是集成电路(即,芯片)。在该示例中,加速器子系统包括多瓦片处理单元122。然而,在其他示例中,加速器子系统5400可以仅用单个瓦片54来实现。
瓦片54被配置为从设备5400外部的主机系统5410的主机存储器5411读取数据和向其写入数据。主机系统5410是不可信的,并且无法解密存储在其存储器5411中的应用数据。主机存储器5411是图1的存储器108的示例。
主机系统5410连接到数据源5420。应用数据源5420是另一数据处理系统,其被配置为经由主机系统5410与处理器54通信。应用数据源5420是可信的。应用数据源5420通过将在瓦片54上执行的经编译的可执行代以加密形式写入主机存储器5411来提供该代码。数据源5420还通过将加密的应用数据存储在主机存储器5411中来提供用于由处理单元122处理的数据。该数据由处理单元52的瓦片54读取。此外,瓦片54将其处理结果写入主机存储器5411。由于主机系统5410是不可信的,所以应用数据和结果在被存储在主机存储器5411中之前被加密。
信任根5430负责控制为在加速器5400上创建、启动和终止TEE所执行的操作。信任根5430是包括用于执行这些任务的处理电路的硬件模块。处理电路可以是用于执行保存在信任根5430的存储器中的计算机可读指令的处理器。在图5B所示的示例中,信任根5430经由另一单元5440与加速器5400通信。信任根5430向单元5440发出命令,单元5440被配置为响应于信任根543发出的命令来控制加速器5400的操作。信任根5430和相关联的单元5440之间的关系并不重要。在一些示例中,下面描述的由信任根430执行的操作可以使用单元440来实现,其中这些单元一起作为信任根运作。
在一些示例中,与向加速器5400单独提供信任根5430不同,信任根5430可以提供在加速器芯片5400上,并且可以直接控制加速器子系统5400的操作。
在启动芯片5410时,集成电路上的自动加载器硬件模块(图5B中未示出)在运行时发出写入,以将引导加载器代码(称为二级引导加载器)写入瓦片54。以这种方式,所有瓦片54最初都加载了二级引导加载器,该二级引导加载器用于发出读取请求以将可执行应用代码从主机存储器5411加载到瓦片54中。一旦加载了二级引导加载器,瓦片54就会执行二级引导加载器的指令以发出从主机存储器5411读取可执行应用代码的请求。一旦可执行应用代码被加载到瓦片54中,每个瓦片执行应用代码的指令以从主机存储器5411读取应用数据,使用该应用数据执行处理,并将处理的结果写入主机存储器541。以这种方式,在瓦片54与主机存储器5411之间存在着数据交换。
为了保护读取到瓦片54中的数据(包括应用代码和在执行代码时对其执行操作的应用数据)的机密性,数据可以在被存储在主机存储器5411中时被加密。加密单元118对从主机存储器5411读取到瓦片54的存储器中的数据执行解密操作。图5B示出了从瓦片54分派的读取请求5450。读取请求包括主机存储器5411中的地址,从该地址读取数据。读取请求5450经由接口控制器5402通过到主机5410的链路被分派。接口控制器5402可以是PCIe控制器5402。主机5410响应于读取请求5450的接收,返回一个或多个读取完成5460,该读取完成5460包括在所标识的地址处从主机存储器5411读取的数据。该数据是加密数据,并且可以采取一个或多个密文块的形式。读取完成5460在加密单元118处被接收,加密单元118使用存储在加密单元118中的密钥执行解密操作。
加密单元118还对从瓦片54写入主机存储器5411的数据执行加密操作。这保护了由瓦片54执行的处理结果的机密性。图5B示出了从瓦片54分派的一个或多个写入请求5470。写入请求5470各自均包括主机存储器5411中的地址,数据将被写入该地址。在加密单元118处接收写入请求5470,这使得写入请求547中的未加密数据被加密。加密数据可以包括从写入请求5470中包含的一个或多个明文块生成一个或多个密文块。具有加密数据的写入请求5470然后经由接口控制器5402通过链路被分派到主机5410。主机5410使加密数据被写入在写入请求5470中指示的主机存储器5411中的位置。
尽管在图5B中仅示出了一个加密单元118,但是在示例中,可以具有多个加密单元118,其中单独的加密单元118被提供用于由瓦片54读取和写入数据。
通过以上讨论的方式加密和解密数据,加密单元118确保由瓦片54处理的数据是在可信执行环境中处理的,其中该数据的机密性受到保护。
现在描述固定布局流和灵活布局流。固定布局流传输代码和/或数据,这些代码和/或者数据以固定的顺序被分解成帧以存储在外部存储器区域中。固定顺序与将使用传输的代码和/或数据的应用程序无关。相反,灵活布局流传输代码和/或数据,这些代码和/或者数据被分解成帧,以能够改变和/或取决于将使用所传输的代码和/数据的应用的顺序存储在外部存储器区域中。当帧中的内容(代码和/或数据)的顺序可以改变时,可以实现优化,因为该顺序可以与接收流的瓦片使用所传输的代码和/或数据的顺序相匹配。通过使帧中内容的顺序与接收流的瓦片所使用的顺序相匹配,瓦片在处理通过灵活的流接收的代码和/或数据时所要做的工作更少。然而,接收流的瓦片所使用的顺序通常由编译的应用程序指定,该应用程序通过使用如上所述的一个或多个小代码在瓦片处实例化。因此,很难重用灵活布局流,因为每当编译应用程序时以及每当瓦片执行不同的应用程序时,接收流的瓦片所使用的顺序都会改变。相反,由于在固定布局流的情况下没有顺序匹配,无论是在瓦片上执行的相同应用程序的不同编译之间,还是在瓦片上执行的不同应用程序之间,都可能重用固定布局流。
入口流通常(但不总是)用于将训练数据实例的流传输到多瓦片处理系统。当将训练数据实例传输到多瓦片处理系统时,流通常具有固定的布局,由此训练数据实例被映射到流的外部存储器区域500的地址空间,使用流的帧中的内容的固定顺序,尽管在多瓦片处理系统处消费流的应用程序发生变化。
固定布局流带来的好处包括加密的数据实例可以在不同的应用程序之间重复使用,这些应用程序在相同类型的数据实例上操作,而不需要对数据实例进行重新加密。在固定布局流的情况下,编译器124知晓流的全部内容。然而,流的全部内容可能比外部存储器区域500更大。因此,内容被部分复制到外部存储器区域500中,然后当内容被消费时,内容的后续部分被复制到外部存储器区域500中。
运行时128(参见图1)将接下来要消费的那些内容子集移动到瓦片能够寻址的外部存储器区域500中。瓦片可能需要的任何给定时间的给定帧(由瓦片处的一个或多个小代码)预期位于外部存储器区域500内的固定地址处。一旦这些帧已经被瓦片取回,外部存储器区域500就被释放,并且相同的存储器区域被流中随后的帧填充。由于编译器124已经编排了在瓦片和第一可信计算实体100上运行的小代码,所以这种在时间和空间上的会合是可行的。运行时128负责管理多瓦片处理系统112与存储器108之间的同步,从而用预期的数据填充存储器108。运行时128不必是可信的,因为它可以访问加密数据。如果运行时128恶意地将错误数据填充到存储器108,则多瓦片处理系统112的加密单元和/或多瓦片处理系统112的瓦片将引发安全异常。由编译器124产生的清单被提供给运行时128,以便运行时128知晓如何用流的数据填充存储器108。
出口流通常(但不总是)用于将模型权重从瓦片传输到外部存储器。可以如下面更详细地描述的那样使用检查点。检查点是特定时间点的模型权重的记录。检查点对于从多瓦片处理系统的故障中恢复非常有用,因为它们使处理能够在中断处被恢复,而不必重做工作。在实现检查点的情况下,至少一个流用于将模型权重与相关联的工作数据一起从处理系统传输到外部存储器。该流具有灵活的布局,流内容由此以取决于在多瓦片处理系统处执行的应用的方式被放入流的帧中。检查点流中的内容的顺序与一个或多个瓦片在检查点流内容被读回到多瓦片处理系统中并由应用程序消耗时将使用的顺序相匹配。灵活布局流在检查点的情况下特别有用,因为它们带来了效率,包括减少了瓦片处的计算负载和减少了瓦片所需的内存。由于省略了用于重新排列流内容的指令,因此灵活布局流能够减少在IO瓦片上运行的小代码的大小,因此瓦片处需要更少的内存。在检查点流的情况下,由于这些流被从多瓦片处理系统中传输出去,而无意于再次将相同的检查点流传输出去,因此使用灵活布局流带来了良好的效率,而没有任何缺点。
使用小代码来指示各个瓦片使用流传输加密数据被发现是特别有效的,因为它对在哪些实体之间传输数据提供了极其精细的控制,同时仍然使传输是安全的。图1中的第一可信实体100处的编译器能够使用小代码来控制哪些瓦片是哪些流的端点,以便实现负载平衡和其他效率并维持安全性。
现在给出关于编译器如何编译小代码以实现这些好处的更多细节。
编译器将逻辑密钥区域指派给流,并使流的输入/输出(I/O)请求能够由对应于一组交换块上下文的瓦片的集合生成。逻辑密钥区域是外部存储器中的连续地址范围,其中包含使用相同逻辑密钥加密的数据。交换块上下文是指派给用于访问外部存储器的瓦片的集合的交换块状态和资源。
如上面参考图2所解释的,编译器接收指定机器学习模型的计算图60和瓦片数据74作为输入。给定计算图60,编译器至少为每个流确定以下参数。
外部存储器中大小为R字节的连续区域。在一个实施例中,连续区域反映外部存储器中的小缓冲区。
小代码的执行点,在执行点处执行被暂时停止,直到与流相关联的加密密钥被加载到加密单元118。如上文参考图2所述,这些点由机器学习架构126提供给编译器。
在每个指定的执行点将哪些密钥加载到加密单元118中,执行将在这些执行点被暂时停止,直到密钥被加载。编译器决定在执行点将哪些密钥加载到加密单元118中。编译器通过使用可用密钥槽的数量的知识以及关于哪些密钥正在使用的信息来决定要加载哪些密钥。在多瓦片处理单元中,每个加密单元有指定数量的密钥槽。如果流少于密钥槽,则编译器在密钥槽之间尽可能均匀地扩展流,以达到提高的性能。
瓦片的集合将发出针对流中的帧的读取或写入请求。为了确定针对给定流的瓦片的集合,编译器至少使用流的大小。编译器可以自由决定将指派给流的密钥槽的数量。然后编译器决定将向每个密钥槽指派什么瓦片。编译器根据流的大小选择具有为流加载的密钥的瓦片中的一个或多个瓦片。如果流具有超过阈值的大小,则编译器选择较多的瓦片。如果流具有低于阈值的大小,则编译器选择较少的瓦片。通过这种方式提高了效率,因为瓦片的集合在适当时使用负载平衡。
对于集合中的每个瓦片,索引指示起点,以及起点之后要读取或写入的帧的数量。起始索引对应于特定的初始化向量,该初始化向量是流开始的初始化向量值。
编译器确定连续区域;哪些密钥在每个指定的执行点被加载到加密单元118中,其中执行将在这些执行点被暂时停止,直到密钥被加载;瓦片的集合,以及对于集合中的每个瓦片,指示起点的索引,以及在一个或多个约束下的起点之后要读取或写入的帧的数量。示例约束的非详尽列表如下:
在任何时候,分配给实时流的区域的累积大小都在阈值量内。在流的执行中的任何一点,如果超过阈值量,则触发错误。
在单个外部交换阶段可以从流读取或写入的数据量被限制为R,其中R是与流相关联的区域的大小。外部交换阶段是栅障(barrier)同步过程的一个阶段,在此阶段中,瓦片与外部存储器通信。
在一个或多个外部交换阶段的序列期间读取的帧的集合覆盖批处理中的帧。批处理是在训练步骤中使用的数据实例的子集,在训练步骤之后,更新神经网络的权重。
如果流与外部存储器中的非零区域相关联并且存在至少一个瓦片,该瓦片在外部交换阶段期间发出针对该流的请求,则该流在外部交换期间是活的。
编译器使用约束满足过程和/或规则以自动方式选择参数的值。在一些但不是所有实施例中,每个流的参数值是基于以下启发式中的一个或多个来选择的。
第一启发式包括基于一个或多个准则选择用于流的I/O瓦片和外部存储器中的空间量。要使用的准则的非详尽列表是以下一项或多项:流被访问的频率、读取或写入的数据量。诸如图像等具有较大实例的流被分配有较大数量的I/O瓦片,而诸如标签等具有较小实例的流则按比例被分配有较少数量的I/O瓦片。
第二启发式包括轮询调度分配方案。该第二启发式有助于在使用第一启发式之后已经被保留的I/O瓦片之间分布输入。根据第二启发式,流的帧以轮询调度方式在分配给该流的I/O瓦片之间划分。当使用多个处理单元时,分配扩展到分配给流的所有处理单元的I/O瓦片。使用轮询调度方案允许流被多个瓦片并行读取或写入。它还消除了当实例不适合I/O瓦片或当实例大于与外部存储器一起使用的缓冲区时对特殊情况的需要。
第三启发式包括用于在使用第一启发式之后在已经保留的I/O瓦片上分布输入的另一分配方案。根据第三启发式,选择每个瓦片的帧数N。瓦片的数量N被依次分配给每个I/O瓦片,从而这些瓦片中的第一个瓦片被赋予第一个N帧,这些瓦片中的第二个瓦片被赋予下一个N帧,依此类推。使用此分配方案允许流被多个瓦片并行读取或写入。它还能够使不适合I/O瓦片的流,或者大于与外部存储器一起使用的缓冲区的流被容纳。
如参照图2所解释的,编译器接收瓦片数据74作为输入,瓦片数据74包括关于瓦片114的数量和相对位置的信息。编译器根据编译器在指定约束内确定的多个参数来生成每个小代码,其中参数是从以下一项或多项选择的:外部存储器中指定大小的连续区域;执行点,执行在执行点处暂时停止,同时将与数据流相关联的加密密钥加载到加密单元中;瓦片的集合,该集合将向外部存储器发出读取或写入请求;针对每个瓦片,指示起点的索引,以及在起点之后要读取或写入的帧的数量。
编译器还生成密钥清单。密钥清单是包含由机器学习架构126确定的点的文件或其他记录。这些点是执行敏感代码中的点,在这些点处,当密钥被加载到多瓦片处理系统的一个或多个加密单元中时,执行被暂时停止。密钥清单描述了如何由SMCU 120对加密单元118的寄存器进行编程,以使加密单元118配置遵循流到瓦片和存储器区域的指派。
如下面更详细地描述的,加密单元118包括多个寄存器,并且处理系统包括SMCU。SMCU被配置为从编译器接收密钥清单,并使用密钥清单对寄存器进行编程,以便加密单元操作以加密和解密流的数据。
密钥清单可选地具有重新设置密钥事件的元数据。更新密钥(re-keying)事件是主机、SMCU和处理单元之间的同步事件,以允许SMCU重新编程加密单元的寄存器。SMCU使用元数据来重新编程加密单元的寄存器,以反映流的瓦片和存储器区域的新指派。
编程模型通过安全拷贝抽象向机器学习架构暴露机密流,该抽象在模型编译期间被机器学习架构插入到控制程序中。安全拷贝应用程序编程接口(API)通过以下方式被调用:(i)流内的索引,该索引被i/O瓦片用于在I/O读写期间进行IV生成和IV检查,以及(ii)密钥集合,该密钥集合将用于加密和解密相关联的机密流。后者允许编译器将流密钥指派给物理密钥上下文并交换块上下文。
一旦生成控制程序,编译器就从机器学习架构获取关于指派给物理上下文的密钥集合何时改变的知识。编译器在应用程序清单中的密钥清单中插入更新密钥事件。这允许运行时和SMCU在执行工作负载期间同步,以便SMCU可以将合法的密钥集合加载到加密单元的物理上下文。
如上所述,可以使用检查点。检查点对于能够从多瓦片处理系统处的故障中恢复而不必重新进行多瓦片处理系统已经完成的大量机器学习训练过程尤其有用。检查点是特定时间点处的模型权重的记录。可以使用一个或多个流将检查点从瓦片传输到外部存储器,从而以安全和有效的方式传输检查点。现在参考图6和图7描述实现安全检查点的实施例。图6描述了在出口瓦片处实现的过程,以便使用流以安全方式将检查点写入外部存储器。图7描述了在入口瓦片处实现的过程,以便使用流以安全方式读取检查点。
处理单元定期检查其状态,以使得能够从恢复中恢复。通过将当前由处理单元训练的模型的权重写入出口流来创建检查点。检查点还包括元数据,其包括多个机密数据流的当前偏移。元数据以明文和密文呈现。明文由主机运行时消耗。密文在加载检查点期间被解密,并由将取回机密数据流的瓦片使用。当前偏移是处理单元当前到达训练过程中的位置的指示。处理单元当前到达的训练过程中的点可以表示为训练数据项序列中的点。相反,通过使用输入流读取权重(作为检查点写入过程的结果存储在外部存储器中)并从检查点的偏移恢复机器学习训练来恢复检查点。
通过使用流,检查点被加密并受到完整性保护。特别是,瓦片加强了从先前创建的检查点恢复状态的过程的完整性。这包括防止攻击,诸如篡改检查点或试图将错误的检查点加载到处理单元。错误的检查点是指SMCU试图用与多瓦片处理系统试图加载的检查点的ID不同的ID来加载检查点。
编译器生成小代码,并将其部署在瓦片上以读取检查点流。小代码生成预期IV的序列,检查帧中返回的IV是否与预期IV相匹配,并从帧中剥离IV和认证标签。小代码由编译器生成以写入检查点流。小代码生成IV的序列,并将它们中的每一个放置在帧的报头中。
针对每个帧的IV是根据具有多个字段的格式构建的。这些字段包括:流类型字段,其用于指示流用于检查点;检查点历元计数器字段,该字段在机器学习进程在多瓦片处理器处恢复时被递增;检查点标识符字段,该字段对于第一个检查点从1开始并且对于每个后续检查点递增1;处理单元标识符字段,其具有处理单元的本地标识符;瓦片标识符字段,其具有该帧将被部署到的瓦片的标识符;索引字段,其具有该流内的帧的索引。针对第一帧的索引从0开始,并且针对每个后续帧都递增1。
读取或写入检查点的瓦片生成IV序列,如下所示:
瓦片从瓦片存储器中的预定位置获取检查点历元计数器和检查点标识符的初始值。这些值由SMCU写入瓦片存储器。在读取检查点时,瓦片使用这些初始值生成预期的IV。在读取检查点后,每个瓦片递增检查点历元计数器和检查点ID。瓦片使用检查点历元计数器和检查点ID的当前值生成针对处理单元在检查点历元内生成的所有后续检查点的IV。检查点历元表示在检查点被加载后直到新的检查点被加载的时间段。因此,检查点历元计数器表示计算重新开始的次数。在写入每个检查点之后,每个瓦片都递增检查点标识符。
通过使用检查点历元计数器和检查点标识符来生成预期的初始化向量,然后对照实际接收到的初始化向量来检查预期的初始化向量,流为检查点过程提供了安全性和完整性。
图6描述了在出口瓦片处实现的过程,以便使用一对流以安全的方式将检查点写入外部存储器,其中一个流是机密流,另一个流是明文流。机器学习架构126创建指令,该指令是控制瓦片写入检查点的控制程序。控制程序在出口瓦片处的一个或多个小代码中。控制程序包括两个副本(在外部存储器和瓦片存储器之间移动数据的指令);一个用于明文流,一个用于机密流。出口瓦片处的控制程序检查600是否生成检查点。该检查根据如下一个或多个准则而进行,包括:时间间隔、分组错误率、来自SMCU的指令、功率水平或其他准则。当出口瓦片发现通过检查600时,它访问元数据(关于训练过程已经到达的阶段)和/或模型权重,并生成包含模型权重和/或元数据的帧602。元数据(其包括多个机密数据流的偏移量)由取回机密数据流的I/O瓦片使用。元数据包括工作数据,诸如计数器的值,这些计数器的值有助于指示训练过程已达到什么阶段。因此,I/O瓦片知道如何在加载检查点后恢复数据取回。出口瓦片从其本地存储器和/或从其他瓦片访问权重和/或模型数据。如果流上有多个瓦片在工作,则在流上工作的瓦片之间存在模型权重和元数据的内部交换,以便在检查点中包含适当的数据。
出口瓦片从其本地存储器读取检查点历元计数器614的当前值和检查点标识符616的当前值。使用这些值,它生成604初始化向量。出口瓦片计算IV 606,将IV放置在帧的报头中,并形成包含帧的一个或多个分组。帧作为写入请求被发送出去,在机密流的情况下,该写入请求经过加密单元,而在明文流的情况下,该写入请求不经过加密单元。出口瓦片将分组写入608(多个)机密流的外部存储器,并对明文流的明文分组进行相同操作。出口瓦片通过检查是否有更多的权重或元数据要写入来检查610是否结束该过程。如果已经写入足够的模型权重和元数据,则瓦片处的进程移动到操作612并增加检查点标识符。如果要写入更多的模型权重或元数据,则瓦片处的进程移动到操作602并继续。当瓦片在多瓦片处理系统处的可信执行环境内时,图6的过程是安全的。图1的运行时128能够从明文流的外部存储器访问明文元数据。
图7描述了在入口瓦片处实现的过程,以便使用流以安全的方式读取检查点。入口瓦片已从故障中恢复700,这可能是多瓦片处理系统重新启动的结果。入口瓦片从编译器接收702已经以安全方式传输到多瓦片处理系统的小代码。关于数据流将从中恢复的偏移量,小代码考虑了来自检查点的机密流的元数据,其由加密单元解密并在瓦片存储器中呈现为明文。入口瓦片从其本地存储器获取704检查点历元计数器和检查点标识符的初始值。SMCU先前已将检查点历元计数器和检查点标识符值写入瓦片本地存储器。
入口瓦片使用检查点历元计数器和检查点标识符的初始值并根据上述格式生成706预期的IV。也就是说,它在流类型字段中设置一个值以指示该类型是检查点,它添加处理单元的本地标识符,它添加出口瓦片的标识符,它在该流内添加帧的索引。
入口瓦片从入口瓦片的机密流的外部存储器区域读取708检查点的帧。帧包含模型权重和/或元数据。入口瓦片检查712所读取的帧的IV是否与在操作706生成的预期的IV相匹配。如果匹配失败,则入口瓦片触发710安全异常。如果匹配通过,则入口瓦片检查是否有更多的检查点机密流的帧要读取。如果没有,则入口瓦片递增716检查点历元计数器并重置检查点ID。如果有更多的检查点机密流的帧要读取,则过程移至图7的操作706并继续。关于在加载检查点之后数据流将从其恢复的偏移的元数据,元数据以明文形式提供以供运行时128(参见图1)从检查点的明文流中消耗。
SMCU被配置为提供两个检查点密钥,一个用于加密针对新的训练历元要写入的模型权重和元数据,另一个用于解密从先前历元要读取的模型权重和元数据。一个检查点密钥用于检查点出口流,另一检查点密钥用于检查入口流。
现在给出关于SMCU如何导出两个检查点密钥的更多细节。
当从前历元e-1期间写入的检查点重新开始作业时,产生历元e。使用应用清单M来描述作业。作业的示例是机器学习培训任务。
加密和解密检查点是通过使用SMCU提供两个检查点密钥来实现的:一个用于写入新历元e的检查点,另一个用于读取前一历元e-1的检查点。SMCU使用作业参与者(s0,…,sT-1)提供的秘密共享来导出检查点密钥,如下所示。作业参与者是机器学习训练任务中使用的流,流的流标识符表示为s0至sT-1。SMCU导出特定于作业、当前历元和租户的两个秘密ste和ste-1,如下所示
st e-1=KDF[st](HASH(M)||e-1)
st e=KDF[st](HASH(M)||e)
Se-1={s0 e-1,...,sT-1 e-1}
Se={s0 e,...,sT-1 e}
其用文字表示为,租户t和历元e-1的秘密s等于应用于作为密钥材料的流标识符st和作为应用清单的散列与前一历元e-1的拼接的盐(salt)的密钥导出函数(KDF)。使用任何已知的密钥导出函数。作为租户t和历元e的秘密s的秘密ste等于应用于作为密钥材料的流标识符st和作为应用清单的散列与当前历元e的拼接的盐的密钥导出函数。
前一历元的秘密Se-1是机器学习任务的前一历元中使用的每个流的秘密的拼接。当前历元的秘密是机器学习任务当前历元中使用的每个流的秘密的拼接。
具有SMCU标识符i的SMCU导出密钥ckie-1,以用于解密在前一历元期间创建的检查点,如下所示。
cki e-1=KDF[Se-1](″CHECKPOINT″||i)
其用文字表示为,由SMCU i针对前一历元导出的检查点密钥等于应用于前一历元的秘密和作为与SMCU的索引i拼接的字符串CHECKPOINT的盐的密钥导出函数的结果。
具有SMCU标识符i的SMCU导出密钥ckie,以用于加密在当前历元期间创建的检查点,如下所示
cki e=KDF[Se](″CHECKPOINT″||i)
其用文字表示为,由SMCU i针对当前历元导出的检查点密钥等于应用于当前历元的秘密和作为与SMCU的索引i拼接的字符串CHECKPOINT的盐的密钥导出函数的结果。
如上所述,在流用于通过不可信的外部存储器或主机以保密、安全的方式传输数据和/或代码的情况下,混洗的使用使得流的部署极其困难。具体而言,混洗数据集改变了瓦片获取数据实例的序列,以及随后验证初始化向量的顺序。本发明人已经创建了一种解决方案,其中第一流与称为置换流的第二流结合使用,从而使混洗与流的使用能够以有效和实用的方式一起进行。
图8是与外部存储器108一起使用的多瓦片处理系统516的示意图,其中具有用于传输经混洗的训练数据实例的流806(称为入口流)和置换流808。外部存储器108具有单个逻辑区域800,其包括存储混洗训练实例802的区域以及置换流区域804。置换流区域存储入口流的每个帧的序列索引。通过使用置换流,训练数据实例的混洗与流的使用一起被启用。
通过针对入口流的混洗训练实例和置换流的序列索引两者使用单个逻辑区域800,可以在加密单元502处针对两个流使用相同的密钥。这样做可以在保持安全性的同时提高效率。然而,注意,对于经混洗的训练实例和序列索引两者使用相同的逻辑区域800不是必要的。
参考图8,瓦片506是用于将混洗的训练实例802读入多瓦片处理系统的入口瓦片。入口瓦片506从外部存储器108的存储器区域802读入混洗的训练实例。入口流具有清晰的(in the clear)初始化向量,与上述其他入口流的方式相同。入口瓦片506希望知晓混洗的训练实例的帧的初始化向量的顺序,以便它能够以与上述其他入口瓦片相同的方式针对预期的初始化向量执行新鲜度检查。
入口瓦片506具有来自编译器的小代码510。小代码具有标识入口流的外部存储器区域802的信息。小代码510具有用于生成入口流的预期的初始化向量而不是它们的序列的指令。小代码510还具有标识针对置换流的外部存储器区域的信息,因为与入口流使用相同的逻辑区域。
入口瓦片506从入口流中读取混洗的训练数据,并从接收到读取数据的分组中获取初始化向量。入口瓦片将对所获取的初始化向量执行新鲜度检查,因为它已经在明文中被接收。
入口瓦片506在对应于当前混洗训练数据项的序列中的位置处从置换流的外部存储器区域804读取。读取后会产生一个加密的帧。多瓦片处理系统对帧进行解密以获得序列号。入口瓦片获得清除帧中的初始化向量(用于置换流)。入口瓦片检查初始化向量与预期的初始化向量,就像检查任何其他机密流一样(以检查新鲜度)。排列流是顺序访问的,因此小代码包括用于通过增加序列索引来生成下一个IV的代码。如果检查失败,将生成错误。如果检查通过,则序列号可用于检查入口流的新鲜度。
入口瓦片使用序列号对其从入口流读取的分组执行新鲜度检查。它将序列号与小代码中的信息一起用于生成预期的IV。它将例外IV与从入口流读取的分组中接收到的IV相比较。如果存在匹配,则检查通过,并且包括训练数据实例或训练数据实例的一部分的分组中的数据被多瓦片处理系统用于机器学习。否则,如果不存在匹配,则触发错误并中止进程。
作为存储优化,置换流可以仅包含流的数据实例的第一帧的序列索引。因为小代码知道需要访问多少帧,所以小代码指示入口瓦片重新使用整个数据实例的当前索引,并在获取下一数据实例时读取当前排列帧内的下一索引。当置换流中的所有索引被消耗时,小代码访问下一个置换帧。注意,使用本段中提到的存储优化不是必要的,并且在一些实施例中,置换流包含全序列索引。
图9是适于在外部存储器处存在混洗数据实例的情况下使用的多瓦片处理器处的操作方法的流程图。在图9的过程之前,数据实例(也称为训练样本)由数据中心的租户(例如图3的第1方302)使用任何合适的混洗算法进行混洗。租户为每个历元创建一个混洗(通过对数据实例应用混洗算法),并以加密形式在外部存储器的存储器区域(区域804)中捕获混洗的IV序列。每个历元的IV序列以明文形式存储在外部存储器中。数据实例不被打乱,并且仅被上传到外部存储器(区域802)一次。运行时使用IV的明文序列来用瓦片期望获取的帧填充直接存储器访问缓冲区。
参考图9,多瓦片处理器通过从外部存储器区域802读取来从混洗的训练数据流中读取。它从读取信息的分组中获得902IV。多瓦片处理器希望检查已读取的IV的新鲜度,但必须等待这样做。
多瓦片处理器从置换流中读取904。它接着检查906从置换流读取的数据的新鲜度。新鲜度检查包括从来自置换流的读取数据的分组中获得IV并进行比较。比较是来自分组的IV(它是透明的,不需要解密)和由多瓦片处理器生成的预期IV之间的比较。如果比较成功,则多瓦片处理器继续解密910来自置换流的读取数据。如果比较发现来自分组的IV与预期IV之间的差异,则在触发安全异常之后,过程结束908。
在置换流新鲜度检查906处的比较发现匹配的情况下,多瓦片处理器在检查912处继续检查混洗的训练数据流的新鲜度。多瓦片处理器具有来自解密操作910的预期IV的序列索引,其中对置换流进行了解密。它将其与来自编译器的代码集一起使用以生成预期的IV。多瓦片处理器将来自操作902的IV与预期的IV进行比较。如果存在差异,则在触发安全异常之后,过程结束914。如果存在匹配,则该过程继续在多瓦片处理器处使用来自混洗训练数据流的数据执行机器学习训练916。
多瓦片处理器通过检查是否满足一个或多个标准来检查918机器学习训练过程是否完成。标准包括以下一项或多项:已处理指定数量的训练实例、已过指定时间间隔、机器学习模型的权重变化量低于阈值。如果机器学习训练完成,则过程结束920。如果机器学习过程要继续,则图9的方法返回到操作900并重复。
现在针对训练样本是图像的情况给出了创建和部署置换流的详细示例。该示例也可应用于其他类型的训练样本,例如音频文件、语音信号、文档和其他训练样本。
在打包阶段,租户的计算设施(例如图3的方1、302)处的软件对训练数据实例进行混洗,并为置换流创建数据。在打包阶段,租户的计算设施或其他地方的软件捕获每个训练时期的训练样本序列。根据租户或其他方指定的混洗算法生成训练样本序列。基于多瓦片处理器的加密单元118如何将训练样本分割成加密帧,将每个历元训练样本序列转换成IV索引序列。
作为示例,考虑训练作业在4个图像的数据集上运行2个时期,其中每个图像是划分为指定数量(在本示例中为67)帧的矩阵。
对于以下置换
Epoch 0:3 1 2 0
Epoch 1:0 2 3 1
并且假设数据加密工具向图像(image)指派以下IV索引。
Image 0:0,1,...64,65,66(labelled as DF0...DF66)
Image 1:67,68,...131,132,133(labelled as DF67...DF133
Image 2:134,135,...198,199,200(labelled as DF134...DF200)
Image 3:201,202,...265,266,267(labelled as DF201...DF267)
针对每个历元构造以下IV偏移的置换:
Permutation 0:201,67,134,0
Permutation 1:0,134,201,67
针对每个历元的IV偏移构建的序列被聚合成一个流,并被分割成帧序列,该序列按照多瓦片处理系统所使用的加密协议进行加密。在一个示例中,第一可信计算实体100的加密器106处的加密逻辑为每个帧构建128比特IV。
在128字节帧的情况下,每个置换流包括一个帧,该帧包含针对数据流的全部四个IV偏移。
Permutation 0->IV index:0;Data:201,67,134,0(标记为PF0)
Permutation 1->IV index:1;Data:0,134,201,67(标记为PF1)
在封装分组阶段期间,第一可信计算实体100处的编译器124被提供有表示每个处理单元上的训练循环的计算图60。计算图60中的一些节点表示从流到流的读和写操作。每个数据流与置换流相关。置换流与与其父数据流相同的流标识符和实例的大小(即IV索引的大小)相关联。这意味着对应的标签与不同的置换流相关联,尽管置换是相同的。
读取操作从置换流中读取IV,并从混洗的训练样本流中读取数据(通常是一批)。它使用前者来验证后者。在成功的IV检查后,多瓦片处理器将训练样本数据分配到跨多个瓦片映射的张量。
编译器124考虑以下内容:
确定外部存储器108中的连续区域,并使用父参数(由编译器124为混洗的训练数据流确定的参数)来确定置换流的剩余参数。为两个流分配的外部存储器区域是一个逻辑区域800,使得当多瓦片处理系统访问两个流时使用相同的加密密钥。
在一些但不是所有示例中,在多瓦片处理系统中,以循环方式在多个I/O瓦片之间划分混洗训练实例数据流的帧。
每个I/O瓦片读取置换流,因此它可以访问数据流的帧的IV偏移。
在本示例中,假设4个I/O瓦片,每个瓦片负责读取以下帧:
Tile 0:PF0,EVA[0],EVA[4]...EVA[264];PF1,EVA[268],EVA[271]...EVA[531]
Tile 1:PF0,EVA[1],EVA[5]...EVA[265];PF1,EVA[269],EVA[272]...EVA[532]
Tile 2:PF0,EVA[2],EVA[6]...EVA[266];PF1,EVA[270],EVA[273]...EVA[533]
Tile 3:PF0,EVA[3],EVA[7]...EVA[267];PF1,EVA[271],EVA[274]...EVA[534]
其中针对瓦片0用文字表示为,瓦片0负责读取置换帧0;读取混洗训练样本流帧EVA[0],其是具有加密虚拟地址0的帧;从混洗训练样本流中每隔四帧读取一次,直到第264帧,然后读取第一置换流帧,然后从混洗训练样本流中每隔四帧读取一次,直到第531帧,以此类推。
加密器106和加密单元118使用的加密协议将输入和输出数据流划分为大小相等的帧,并将每个流中的每个帧与称为加密虚拟地址或EVA的唯一值相关联。
编译器124考虑以下因素来生成I/O瓦片代码(即,小代码510)。
对于每个图像,I/O瓦片通过访问瓦片地址空间按照跨I/O瓦片的帧的静态划分来读取帧的静态序列。小代码510使用图像计数器/索引来访问置换帧内的相应IV偏移,如下所示:PermutationIndex=ImageCounter%((PermutationFrameSize-32)/IV_Index_Size)。小代码使用帧计数器重新构建帧的IV,如下所示:IV_Index=IVOffset+FrameCounter。如果置换帧中的IV偏移量耗尽,则小代码510按如下方式取回下一置换帧:PermutationFrame=ImageCounter/((PermutationFrameSize-32)/IV_Index_Size)。
当多瓦片处理系统在机密模式下运行时,其中瓦片上有可信的执行环境,流包括IV偏移的明文版本,以知道哪些数据帧被填充到外部存储器中。这允许I/O瓦片获取图像帧(遵循静态访问模式),并依赖IV偏移(动态信息)来执行IV检查。
在本示例中,以下帧被加载到映射到数据流的EVA的外部存储器中。在下面的示例中,DF表示数据帧。有一个示例具有两个置换,因为该示例显示了每次加载到EVA空间的不同数据帧。
置换0:
EVA[0...66]->DF201...DF267;
EVA[67...133]->DF67...DF133;
EVA[134...200]->DF134...DF200;
EVA[201...267]->DF0...DF66
置换1:
EVA[0...66]->DF0...DF66;
EVA[67...133]->DF134...DF200;
EVA[134...200]->DF201...DF267;
EVA[201...267]->DF67...DF133
图10示出了用于将数据分组从瓦片发送到多瓦片处理单元外部的目的地的示例性机制。该机制是非时间确定的。该机制在外部互连10072中的专用硬件逻辑中实现。数据以分组的形式通过外部互连10072发送。与通过内部互连10034发送的分组不同,这些分组具有报头:由于传输顺序可能改变,它们需要在分组报头中呈现目的地地址。外部互连10072包括用于根据数据分组的报头在不同处理器之间静态地路由数据分组的路由表。
在物理层,互连机制是有损的,但在事务层,由于链路层的架构,该机制不是有损的:如果分组未被确认,则它将由互连10072中的硬件自动重新发送。然而,在数据链路层丢失和重新发送的可能性意味着通过外部互连10072传送数据分组不是时间确定性的。此外,给定交换机的所有分组可以在时间上以任何顺序一起到达或分开,因此外部互连需要流控制和排队。此外,互连可以使用时钟数据恢复(CDR)技术来从具有足够数据信号转换的接收数据流推断时钟,以维持比特锁定。这个推断出的时钟将与发送时钟具有未知的相位关系,因此代表了非确定性的另一个来源。
如图所示,外部互连10072包括外部交换块(XB)10078。编译器提名瓦片1004之一以向交换块10078发送外部交换请求(XREQ)(操作S1)。XREQ是包括一个或多个控制分组的消息,指示瓦片1004中的哪些瓦片具有要发送的数据分组(内容)。这在图10中通过对勾和叉号进行了示意性说明:作为一个示例场景,那些标记有对勾的具有要发送到外部的数据分组,而那些标记有叉号的则没有。在操作S2中,交换块10078向瓦片1004中具有要发送到外部的数据的第一个瓦片发送交换开启(XON)控制分组。这使得第一瓦片开始经由外部互连10072向相关目的地发送其分组(操作S3)。使用外部互连10072中的路由表将在外部互连处从第一瓦片1004接收的数据分组静态地路由到目的地。如果在任何时候,XB 10078不能继续向互连发送分组(例如,由于互连中先前的分组丢失和重新传输,或者由于许多其他XB和瓦片对外部互连的过度订阅),则XB1 0078将在XB 10078队列溢出之前向该瓦片1004发送交换(XOFF)。一旦拥塞被清除并且XB 10078在其队列中再次具有足够的空间,它将向瓦片1004发送XON。一旦该瓦片1004已经发送了它的最后一个数据分组,则在操作S4中,交换块10078向该瓦片10044发送交换关闭(XOFF)控制分组,然后在操作S5中向下一瓦片1004发送另一个XON,其中包含要发送的数据分组,等等。XON和XOFF的信令被实现为外部交换块10078形式的专用硬件逻辑中的硬件机制。
每个处理器瓦片1004包括处理电路和存储器。在一些示例性示例中,处理电路是多线程处理器10010。图11示出了根据本公开的示例的处理器瓦片1004的示例。处理器瓦片1004包括桶形线程处理器10010形式的多线程处理器10011和本地存储器10011(即,在多瓦片阵列的情况下位于同一瓦片上,或者在单个处理器芯片的情况下在同一芯片上)。桶形线程处理器10010是一种多线程处理器10011,其中流水线的执行时间被划分为交织时隙的重复序列,每个时隙可以由给定线程拥有。稍后将对此进行更详细的讨论。存储器10011包括指令存储器10012和数据存储器10022(可以在不同的可寻址存储器单元或相同的可寻址存储单元的不同区域中实现)。指令存储器10012存储要由处理单元10010执行的机器代码,而数据存储器10022存储要被执行代码操作的数据和由执行代码输出的数据(例如作为这样的操作的结果)。
存储器10012存储程序的各种不同线程,每个线程包括用于执行特定任务的相应指令序列。注意,这里所指的指令是指机器代码指令,即处理器指令集的基本指令之一的实例,由单个操作码和零个或多个操作数组成。
在处理器10010内,来自指令存储器10012的多个不同线程可以通过单个执行管线10013进行交织(尽管通常在整个程序中的任何给定点只能交织存储在指令存储器中的总线程的子集)。多线程处理器10010包括:多个上下文寄存器文件10026,每个上下文寄存器文件被布置为表示要同时执行的线程中的不同相应线程的状态(上下文);共享执行管线10013,其对于并发执行的线程是公共的;以及调度器10024,用于以交织方式、优选以循环方式调度并发线程以通过共享管道执行。处理器10010连接到多个线程共用的共享指令存储器10012和多个线程同样共用的共享数据存储器10022。
执行流水线10013包括获取级10014、解码级10016和执行级10018,执行级10016包括执行单元,执行单元可以执行算术和逻辑运算、地址计算、加载和存储操作以及指令集架构所定义的其他操作。每个上下文寄存器文件10026包括用于表示相应线程的程序状态的相应寄存器集。
在某些情况下,期望提供在多瓦片处理单元上执行的数据的机密性。通常通过数据加密来提供保密性。对大量数据加密有用的一种加密算法是块密码加密,它对固定大小的数据组(称为块)进行操作。
有不同类型的块密码操作模式,其中一些使用称为初始化向量的唯一数据集。初始化向量确保通过加密算法从相同的未加密数据产生不同的加密数据。这具有防止攻击者能够识别加密数据中的模式的优点。
可以以不同的方式应用初始化向量以产生加密数据。参考图12,该图说明了使用初始化向量的一个示例。未加密数据块被称为明文块,而加密数据块则被称为密文块。从图12中可以看出,加密密钥没有直接应用于明文。相反,它是使用加密密钥加密的初始化向量。加密密钥是对称密钥。然后将加密的初始化向量与明文进行异或运算,生成密文。以这种方式使用不同的初始化向量来加密每个不同的明文块,从而在原始数据中隐藏模式。
由于图12所示操作的对称性,解密算法与加密算法相同。换句话说,为了从密文中获得明文,将密文与初始化向量的加密形式进行异或,以获得明文。
尽管图12显示了一个示例,其中初始化向量的加密形式与明文进行异或运算,但也可以采用利用初始化向量的其他块密码操作模式。例如,在另一操作模式中,明文可以首先与初始化向量进行异或。然后使用加密密钥对XOR运算的结果进行加密以产生密文。
存在不同类型的块密码加密,通过该加密,可以将密钥应用于加密数据,例如作为块密码的一部分的初始化向量。为此目的广泛使用的一个标准是高级加密标准。
因此,块密码为大量数据提供了有效的加密,从而提供了数据的机密性。为了确保数据的完整性和认证,以及提供一组加密数据,发送者还可以与加密数据一起提供消息认证码(MAC)。该MAC使用密文计算,并允许接收者确定数据的发送者并检测数据的任何变化。
该应用的实施例提供了一种用于保证加密方案的新鲜度的方法,使得数据的接收者能够防止攻击者进行的重放攻击。换句话说,接收者将知道是否多次看到相同的数据。实施例通过具有能够确定要接收的数据的预期初始化向量的处理电路来提供这一点。当处理电路接收到包括初始化向量的数据时,处理电路能够确定所接收的初始化向量是否与预期的初始化向量匹配。如果没有,数据将被拒绝。
参考图13,图13示出了可以实现实施例的示例系统100700。系统100700包括集成电路100710,多瓦片处理单元1002是该集成电路的一部分。多瓦片处理单元是包括所讨论的瓦片处理器1004的多瓦片处理器。瓦片1004被配置为向主机系统10071中的主机存储器10070读取和写入数据。主机系统10071连接到数据源100720,其提供加密的应用数据以存储在主机存储器10070中。正是该数据被应用程序的瓦片1004读取。此外,瓦片将其处理结果写入主机存储器10071。
主机系统10071是不可信的,并且不能解密存储在存储器10070中的应用数据。加密和解密数据所需的一个或多个对称密钥在应用数据源100720和集成电路100710之间共享。应用数据源100720是另一数据处理系统,其被配置为经由主机系统10071与多瓦片处理单元通信。应用数据源100720提供在多瓦片处理单元上执行的经编译的可执行代码。由于主机系统10071是不可信的,所以应用数据和结果的交换在通过主机10071发送之前被加密。
所有瓦片1004最初加载有引导加载器代码(称为辅助引导加载器),该引导加载器代码用于发出读取请求以将可执行图像从主机存储器10070加载到瓦片1004中。集成电路100710上的硬件模块在运行时发出写入,以将辅助引导加载器写入瓦片1004。瓦片1004然后执行辅助引导加载器的指令,以发出从主机存储器10070读取可执行图像的请求。
一旦可执行图像已被加载到瓦片1004中,每个瓦片执行图像的指令以从主机存储器10070读取应用数据并将处理结果写入主机存储器1007。存储在主机存储器10070中并且使用块密码加密方案加密的应用数据也与用于加密数据的初始化向量一起存储。这些初始化向量由应用数据源100720确定。瓦片1004执行它们的可执行指令以确定它们期望响应于读取请求而接收的初始化向量。当瓦片响应于读取请求接收数据和初始化向量时,它将接收到的初始化向量与预期的初始化向量进行比较,并在确定匹配时接受接收到的数据。
图13显示了瓦片1004发出读取请求10074的示例。读取请求包括存储器10070中的地址,从该地址读取数据。读取请求10074以第一分组格式(称为Tlink格式)从瓦片1004发送,并在交换块10078处接收。交换块10078将读取请求10074转换为第二分组格式(称为Elink分组格式)。Elink分组格式适合于传输到多瓦片处理单元外部的集成电路100710的其他组件。
读取请求10074被传递到加密硬件100730,该加密硬件被配置为实现加密算法。加密硬件100730可以被称为安全交换管道(加密单元)100730。加密单元100730对由瓦片1004写入主机存储器10070的数据进行加密,并对由瓦片1006从主机存储器1007读取的数据进行解密。尽管关于图13至图17描述的加密单元100730被描述为单个单元,但是在示例中,可以提供用于数据加密和解密的单独的加密单元100、730。加密单元100730可以根据高级加密标准(AES)执行加密和解密操作。
读取请求10074从加密单元100730传递到接口10075。接口10075可以是用于将读取请求转换为PCIe读取请求以分派给主机10071的PCIe复合体。在一些示例中,加密单元100730可以作为接口10075的一部分而不是如图13所示的单独实体。
读取请求10074由接口10075转换为第三格式(例如PCIe读取请求格式)并提供给主机10071。主机10071的处理器100711通过使得生成一个或多个读取完成10079来处理读取请求10074,读取完成10078包括从读取请求10073中标识的存储器10070中的区域加载的数据。该数据包括密文块形式的加密应用数据。数据还包括相关的初始化向量。该数据包括相关联的MAC。
尽管在图13的示例中,各个瓦片1004仅发出一个读取请求10074,但是瓦片1004可以响应于单个读取请求10079返回多个读取完成10079。响应于单个读取请求而返回的一个或多个读取完成一起形成加密帧。加密帧(也可以称为认证帧)包括使用单个初始化向量生成的单个密文块的数据。该加密帧可以分布在两个或更多个分组上,以允许将初始化向量和MAC包含在加密帧中的成本分摊在更大的有效载荷上,从而减少加密方案的开销。在一些示例中,在一个示例中,加密帧的总大小可以是100128字节,每个读取完成分组的大小是10064字节。
加密单元100730向交换块10078提供包括解密的应用数据的完成10079。交换块10078检查包含在完成中的瓦片标识符,并根据该标识符将完成路由到瓦片1004中识别的一个。交换块10078还将来自Elink的分组转换为Tlink分组格式,然后将其传送到所标识的一个瓦片1004。
相关瓦片1004接收完成10079,并将包含在完成10079中的初始化向量的至少一部分与由瓦片1004确定的初始化向量预期的至少部分进行比较。
参考流的概念来定义存储在主机存储器10070中的初始化向量。存储在主机存储器10070中的应用程序数据被划分为一组流,该应用程序数据可以由瓦片1004读取和写入。每个流可以例如包括图像序列(单独的静止图像或视频帧)或一个或多个音频样本的音频流,或正从主机10071发送到多瓦片处理单元的任何其他体验数据序列(例如,在线购物习惯等)。例如,这可以是基于流数据训练神经网络,或者基于已经训练的神经网络从数据中做出推断。在一个示例中,当流在从多瓦片处理单元到主机10071的方向上时,该流可以包括从机器智能算法(例如在多瓦片处理系统上运行的训练神经网络)得到的推断流。
每个流可以由流标识符来标识。流不需要连续地布置在存储器10070中,而是可以分布在不同的存储器区域中。每个流的数据被划分为不同的块,每个块具有块标识符。在单个加密帧中读取和写入每个块,即每个块与唯一的初始化向量相关联。
每个瓦片1004中的计算机代码指令使每个瓦片能够将其读取和写入的主机存储器的地址映射到块和流标识符。换言之,当瓦片1004向主机存储器10070中的特定地址读写时,瓦片1004能够确定其正在从中读写的块和流。
瓦片1004可以如下确定预期的初始化向量的一部分。预期的初始化向量的第一部分标识从中读取数据的流。预期的初始化向量的第二部分标识所请求的IO流的块。预期的初始化向量的第三部分标识瓦片1004。瓦片1004能够基于其从应用数据源100720接收的编译的可执行图像来确定所有这些组件,应用数据源也在主机存储器10070中提供加密数据。由于应用程序数据源100720提供编译的可执行图像和加密的应用程序数据,因此能够通过执行可执行指令来安排瓦片1004能够确定用于加密加密的应用数据的初始化向量。
参考图14,其示出了示例初始化向量100800的组成部分。如图所示,初始化向量100800的位0:63包括流内的所请求块的标识符。初始化向量100800的位63:74包括瓦片1004的标识符。初始化向量100800的位75:95包括流的标识符。初始化向量100800的位96:127包括计数器值。当瓦片1004接收到100128位初始化向量时,瓦片1004只需要检查初始化向量100800的前10096位。存在初始化向量100800的剩余10032位,以确保不同的数据总是使用不同的初始化向量进行加密和解密。正如将要描述的,瓦片1004可以写入主机存储器10070内的某些数据块。当他们这样做时,新的数据块应该用不同的初始化向量加密。在这种情况下,初始化向量100800中的计数器值被更新,以确保使用不同的初始化向量。
最初,当应用数据源100720将应用数据写入主机存储器10070时,可以将所有初始化向量的计数器位设置为等于相同的起始值。在实施例中,起始值可以是全零。当瓦片1004覆盖特定的数据块时,计数器值改变为新值,使得更新的数据与新的初始化向量相关联。这防止了使用相同的初始化向量对不同的数据进行加密。
参考图15,图15说明了瓦片1004如何将数据写入主机存储器10070。瓦片1004之一被示为调度一个或多个写请求10074。一个或多个写请求10074一起形成加密帧。与上述读取完成一样,根据每个加密帧的大小和分组的大小,一个或多个写入请求10074可以包括单个分组或多个分组。在每个写入请求包括10064位且每个加密帧包括100128位的情况下,将调度两个写入请求以写入主机存储器10070中的单个数据块。与读取完成一样,每帧发送多个写入请求允许包含初始化向量和MAC的成本分摊到更大的有效负载上。写入请求按给定的顺序发送。写入请求的最后一个具有被设置为向加密单元100730指示序列中最后一个分组的位(cc位),从而允许加密单元10073确定写入请求的顺序。或者,如果存在两个以上的写入请求,则每个写入请求可以具有允许加密单元100730确定顺序的多个比特。
写入请求10074中包含的数据是未加密的。一个或多个写请求10074包括要用于加密数据的初始化向量的一部分。初始化向量的部分可以是图14所示的初始化向量的前10096位。初始化向量的这一部分由发出一个或多个写请求的瓦片1004确定。
一个或多个写请求10074采用Tlink分组格式。一个或多个写请求10074被传送到交换块10078,交换块10074将一个或更多个写请求10074从Tlink分组格式转换为Elink分组格式。然后将写入请求提供给加密单元100730。
加密单元100730被配置为对包含在一个或多个写入请求10074中的数据进行加密。加密单元100730使用初始化向量对该数据进行加密,该初始化向量包括包含在一个或多个写入请求10074中的初始化向量的一部分。加密单元100730保持一个或多个计数器值,当数据被瓦片1004写入主机存储器10070时,计数器值递增。在一些实施例中,一个或多个计数器值包括每个流的不同计数器。在一些实施例中,一个或多个计数器值包括整个存储器10070的单个计数器值。在任一种情况下,加密单元100730在接收到对主机存储器10070中的数据块的一个或多个写入请求10074时增加适当的计数器值。加密单元100730在更新计数器值之后,将更新的计数器值与在写入请求10074中从瓦片1004接收的初始化向量的一部分组合,以形成完整的初始化向量。然后使用该初始化向量对数据进行加密。加密单元100730还为包括在一个或多个写入请求10074中的数据生成MAC。
如所指出的,在一个或多个写请求10074包括两个或更多个写请求的情况下,比特(例如cc比特)被包括在分组中。这使得加密单元100730能够确定分组的序列。加密单元100730使用该顺序的确定来正确地对数据进行排序以对数据进行加密,并将生成的MAC存储在多个写入请求10074中的适当位置。例如,当初始化向量存储在第一个写请求10074的有效载荷的开始时,加密单元100730可以将MAC存储在最后一个写请求的有效载荷10074的末尾。
加密单元100730向接口10075发送一个或多个写请求10074。接口10075从加密单元730接收一个或多个写请求10074,并将它们转换为PCIe写请求。接口10075使请求10074被发送到主机10071。主机处理器100711使加密数据在写入请求10074中指示的存储器地址处写入主机存储器10070。
一旦数据被写入到主存储器10070,该数据就可由瓦片1004读取。读取数据的瓦片1004可以与将数据写入主机存储器10070的瓦片1004相同或不同。由于所有瓦片1004都包括在编译时一起生成的相关指令集,因此即使一个瓦片1004向主机存储器10071写入数据块,另一瓦片1004也包括在从主机存储器1007读取该数据时验证初始化向量是否正确所需的代码。换言之,从主机存储器10071读取数据的瓦片1004可以确定初始化向量的预期部分,该预期部分与由发出写入请求10074的瓦片10040写入主机存储器10070的初始化向量的部分相匹配。
参考图16,图16示出了当数据通过瓦片1004a写入主机存储器10070并通过瓦片1004b从主机存储器1007读取时数据移动的示例。在该示例中,瓦片1004a、1004b被示为两个单独的瓦片。然而,在其他示例中,瓦片1004a、1004b可以是相同的瓦片1004。在该示例中,为了简化图,省略了交换块10078。
瓦片1004a向加密单元100730发送一个或多个写入请求100101。一个或多个写请求100101可以与请求10074相同。一个或多个写请求100101构成输出帧。传出帧包括未加密的数据。来自瓦片1004a的输出帧包括由瓦片1004a确定的部分初始化向量。
加密单元100730对数据进行加密,通过添加计数值来完成初始化向量,并计算MAC。来自加密单元100730的传出帧100101包括加密数据、完全初始化向量和MAC。加密单元100730向主机10071发送一个或多个写入请求100101,主机10071将这些写入存储器10070。
响应于来自瓦片1004b的读取请求,主机10071在传入帧100102中提供加密数据。传入帧100102是一个或多个读取完成100102的形式。传入帧100102包括由加密单元100730发送的传出帧100101的内容,即,除了加密数据之外,它还包括初始化向量和MAC。传入帧100102被提供给加密单元100730。加密单元100730使用帧100102中的初始化向量对数据进行解密,并检查MAC。如果MAC被确定为正确,则帧100102被提供给瓦片1004b。
瓦片1004b检查初始化向量的一部分是否如预期的那样。瓦片1004b不需要MAC,因此删除MAC。响应于确定初始化向量的部分如预期的那样,瓦片1004b将解密的数据存储在其存储器中。
尽管上述实施例已经将从中读取和写入的存储器10070描述为主机存储器,但是存储器不必是主机存储器,而是可以是瓦片1004外部的另一类型的存储器。
参考图17,其示出了瓦片1004向作为集成电路100710的一部分的存储器100115写入和从存储器100115读取的示例。存储器100115可以是DRAM。存储器100115被配置为存储可以由瓦片1004读取和写入的加密应用数据。因此,存储器100115以与上面讨论的主机存储器10070相同的方式使用,并且将数据存储在不同的流中,其中每个流包括多个块,每个块具有相应的初始化向量。
瓦片1004之一被示出为发送读取请求100110并作为响应接收一个或多个读取完成100111。读取请求100110和读取完成100111可以具有与上面关于图13讨论的读取请求10074和一个或多个读取完成10079相同的特征,并且可以由交换块10078和加密单元100730以相同的方式处理。然而,在这种情况下,加密单元100730在处理读取请求100110之后,使读取请求10010被分派到存储装置100115的存储器控制器100116(而不是主机10071)。作为响应,存储器控制器100116产生要返回到加密单元100730的一个或多个读取完成100111。
在图17的示例中,读取请求100110和一个或多个读取完成100111不需要转换为PCIe或从PCIe被转换,但存储器控制器100116可以被配置为处理Elink格式的分组。
图17中的另一瓦片1004显示为发出写入请求100112。写请求100112可以具有与上面关于图15讨论的写请求10012相同的特征,并且可以由交换块10078和加密单元100730以相同的方式处理。然而,在这种情况下,加密单元100730在处理写入请求100112之后,使写入请求10012被发送到存储器100115的存储器控制器100116(而不是主机10071)。作为响应,存储器控制器100116使写入请求100112的数据被写入存储器100115中的地址位置。
在图17的示例中,瓦片1004执行与图13至16的示例中相同的生成和检查初始化向量的过程。
初始化向量的检查也可用于确保在两个多瓦片处理单元之间传输的数据的新鲜度。在这种情况下,初始化向量的检查由加密单元执行,而不是由瓦片1004执行。
参考图18,图18说明了两个集成电路100710a、100710b之间的通信示例。集成电路100710a、100710b各自包括多瓦片处理单元。集成电路100710a、100710b可以包括与上面关于图13至17描述的集成电路100710相同的特征。
集成电路100710a、100710b被配置为通过集成电路10071a、10071b之间的链路100125进行通信。链路100125是点对点通信链路,使得由集成电路100710a、100710b中的一个发送的数据包的数量与在集成电路100710、100710a中的另一个接收的数据包数量相同。通信链路100125的点对点特性允许加密单元100121各自使用计数器来确定与加密数据一起接收的预期初始化向量。
图18显示了瓦片1004发送一个或多个写入请求100123。由瓦片1004产生的写入请求100123包括未加密数据。由瓦片1004产生的写入请求100123不包括初始化向量。每个写入请求100123在其报头中包括目的地标识符,该目的地标识符标识集成电路100710b上的瓦片1004中要向其传送数据的一个瓦片。写入请求100123对应于单个加密帧,对于该帧,要写入的数据将使用的单个初始化向量进行加密。一个或多个写入请求100123可以包括一个或更多个分组。在一个或多个写入请求100123包括多个分组的情况下,瓦片1004设置分组中的一个或更多个比特(例如,分组中的最后一个的cc比特),使得加密单元100121可以使用该比特来确定序列中的哪个分组是序列中的最后一个分组。
写入请求100123是Tlink分组格式。写入请求100123被传送到交换块10078。交换块10078将分组从Tlink分组格式转换为Elink分组格式。交换块10078将转换后的分组转发给加密单元100121。
在一些示例中,每个集成电路100710a、100710b包括单独的加密单元、用于与存储装置(例如,主机存储器10070或片上存储器100115)通信的至少一个加密单元730以及用于与其他集成电路100710a、100710b通信的至少一个加密单元121。在其他示例中,一个加密单元可以用于两种类型的通信。
图18显示了集成电路100710a、100710b上的两个加密单元100121中的每个加密单元均包括计数器值100126。在通过链路100125在两个多瓦片处理单元之间进行通信之前,计数器值100126被初始化为相同的值。当数据通过链路100125传输时,计数器值100126均被递增。计数器值100126用于产生初始化向量,从而允许每个加密单元100121预测从来自另一加密单元100121的帧中接收到的初始化向量。
集成电路100710a上的加密单元100121包括计数器100126,计数器100126的值针对通过链路100125接收的每帧数据和发送的每帧数据而递增。当加密单元100121接收到写入请求100123时,加密单元121更新计数器100126的值。计数器100126的递增值提供用于加密写入请求100123中包含的数据的初始化向量。计数器值的长度可以是100128比特,提供了100128比特的初始化向量。
从计数器100126获得的初始化向量用于加密写入请求100123的数据。加密单元121还根据加密数据计算MAC。加密单元100121更新写请求100123以包括MAC和初始化向量。加密单元100121将写请求100123转发到接口100122。
不同的协议可以用于通信链路100125。链路100125可以是以太网链路100125,接口100122包括被配置为将写请求分组100123转换为以太网分组的以太网协议栈。在一些示例中,接口100125可以是PCIe链路,接口100122被配置为将写请求分组100123转换为PCIe写请求。在任一情况下,链路100125都是点对点链路。接口100122使写请求100123通过链路100125发送到集成电路100710b的接口100122。
集成电路100710b的接口100122接收写请求100123。接口100122将写请求100123转换为Elink分组格式。接口100122将一个或多个写请求100123传递给加密单元100121。电路100710b的加密单元100121还包括计数器100126。当接收到一个或多个写请求100126时,加密单元121递增其计数器100126的值。在更新计数器值100126之后,值100126应与所接收的一个或多个写请求100126中的初始化向量匹配。如果加密单元100121确定不存在匹配,则一个或多个写请求被视为可能的重放攻击,并且可以被丢弃。如果加密单元100121确定存在匹配,则加密单元10011使用初始化向量来解密加密数据。加密单元100121还检查MAC。如果检查通过,则加密单元100121将包括解密数据的一个或多个写请求100123转发到交换块10078。
交换块10078将一个或多个写请求100123转换为Tlink分组格式。交换块10078将一个或多个写请求100123发送到在这些请求中标识的瓦片1004。瓦片1004接收这些一个或多个写请求,并将解密的数据存储在其存储器中。
参考图19,其示出了当数据由瓦片1004c写入另一多瓦片处理单元上的瓦片1004并由瓦片1004d从另一处理单元上另一瓦片1004接收时,集成电路100710b内数据移动的示例。在该示例中,瓦片1004c、4d被示为两个单独的瓦片。然而,在其他示例中,瓦片1004c、1004d可以是单个瓦片。在该示例中,为了简化图,省略了交换块10078。
瓦片1004c向加密单元100121发送一个或多个写入请求100131。一个或多个写请求100131构成传出帧。传出帧包括未加密的数据。
加密单元100121递增计数值100126以产生初始化向量,并使用该初始化向量来加密数据。加密单元100121还计算MAC。来自加密单元100121的传出帧100101包括加密数据、初始化向量和MAC。加密单元100121使一个或多个写请求100101被发送到另一多瓦片处理单元。
图19还显示了从另一个多瓦片处理单元接收的一个或多个写请求100132。写入请求100132以集成电路100710b上的瓦片1004d为目标。这些传入写入100132请求包括加密数据和初始化向量,其由另一多瓦片处理单元用于解密数据。
传入帧100132被提供给加密单元100121。加密单元100730递增计数器值100126以生成更新的计数器值。加密单元100121将该更新的计数器值100126与初始化向量进行比较,以确定是否存在匹配。如果存在匹配,则加密单元121使用帧100132中的初始化向量对数据进行解密,并检查MAC。如果MAC被确定为正确,则帧100132被提供给瓦片1004d。提供给瓦片1004d的帧v132可以包括MAC,但是由于瓦片1004d不需要MAC,所以瓦片1004d删除接收到的MAC值。
尽管图18和图19仅示出了每个集成电路100710a、100710b上的一个加密单元100121,但在示例中,每个电路100710b、100710a上可以有两个加密单元1001、121,每个传输方向一个。
参考图20,其示出了由不同瓦片1004发出的多个读取或写入请求100140在任何一个时间都可能是未完成的。每个瓦片1004一次只能发出一个读或写请求100140。如果瓦片1004已经发出读或写请求,则在发出另一个读或写要求之前,它需要来自其相关联的交换块10078的进一步许可。
由瓦片1004发出的读或写请求100140是向存储器100145进行读或写的请求。存储器100145可以是图13和18所示的主机存储器10070,也可以是图17所示的存储器100115。
参考图20,图20示出了可以在应用程序示例中使用的加密单元100730的示例。加密单元100730包括可用于解密数据(例如,在读取完成中)或加密数据(例如在写入请求中)的流水线。在示例中,可以提供单独的加密单元100730用于加密和解密。
如图所示,加密单元100730包括加密电路100151,其可用于执行加密帧的接收分组中的数据的加密。在这种情况下,加密电路100151负责从明文生成密文。加密电路100151还可以负责通过从密文生成明文来解密数据。
加密单元100730还包括用于生成帧的MAC的MAC生成电路100152。当在加密单元100730处接收到用于加密的未加密数据时,所生成的MAC被插入到帧的分组中。当在加密单元100730处接收到加密数据时,MAC生成电路100152负责检查帧中的MAC,以确定帧中的MAC是否如预期的那样。
加密单元100730还包括流水线控制电路100153,其控制加密/解密电路100151和MAC生成电路以执行它们所需的操作。控制电路100153控制从传入帧到加密/解密电路100151和MAC生成电路100152内的适当处理电路的数据供应。控制电路100153还从状态存储器100154加载某些状态信息以提供给加密电路100151和MAC生成电路100152。该状态信息存储在与每个电路100151、100152相关联的锁存器100156、100157中。
假设在加密/解密电路100151处接收到写入请求数据分组。写入请求是从瓦片1004接收的,并且是向存储器100145中的特定位置写入的请求。该写入请求包括加密帧的第一分组。该数据需要由电路100151进行加密。电路100151执行某些操作以生成加密数据。这些操作可以包括初始化向量的加密以及加密初始化向量的对应比特与明文之间的XOR操作。然而,由于尚未接收到完整的明文(因为仅接收到帧的第一个分组),因此无法生成完整的密文。部分生成的密文和加密的初始化向量可以构成与帧相关联的状态信息。
类似地,MAC生成电路100152可以执行一些操作以生成部分MAC,但在接收到完整帧之前无法完成这些操作。与MAC生成相关联的状态信息作为MAC生成电路100152针对帧的第一分组执行的处理的一部分而生成。
如果在加密单元100730处接收的下一个分组不属于与上述第一写入请求分组相同的加密帧,则流水线控制电路100153将与第一帧相关联的状态信息保存到状态存储器100154,并对下一个包执行处理。当稍后调度属于第一帧的剩余分组以由加密单元100730处理时,流水线控制电路从状态存储器100154加载与第一帧相关联的状态信息。电路100151使用与第一帧相关联的状态信息来完成加密处理。MAC生成电路100152使用状态信息来完成MAC生成过程。
在图21所示的加密单元100730用于解密从存储器100145提供给瓦片1004的数据的情况下,可以执行类似的过程。在示例中,提供单独的加密单元100730用于数据的解密和加密。
在数据解密的情况下,如果在加密单元处接收到读取完成,其中该读取完成是加密帧的第一分组,则在处理读取完成时,可以由解密电路100151和MAC生成电路100152生成特定状态信息。由电路100151生成的状态信息可以包括加密的初始化向量。由电路100151生成的状态信息可以包括帧的明文的一部分。由电路100151生成的状态信息可以包括与MAC的生成相关联的状态信息。
如果在加密单元100730处接收的下一分组不属于与上述第一读取完成相同的加密帧,则流水线控制电路100153将与该帧相关联的状态信息保存到状态存储器100154,并对下一分组执行处理。当在稍后时间,属于包括第一读取完成的帧的剩余分组被调度用于由加密单元100730处理时,流水线控制电路从状态存储器100154加载与第一帧相关联的状态信息。电路100151使用与分组相关联的状态信息来完成解密过程。MAC生成电路100152使用状态信息来完成MAC生成过程。
加密单元100730中的流水线的布置可以有效地减少与处理数据分组相关的等待时间,其中需要加载状态信息。一种方法可以是当数据包被调度用于处理时将所有状态信息加载到RAM中。然而,在开始处理之前加载所有状态信息可能会在处理中引入不必要的延迟。因此,根据示例,为加密/描述电路100151和MAC生成电路100152提供单独的锁存器100156、100157。当分组被调度用于处理时,控制电路100153将电路100151进行加密/解密处理所需的状态信息加载到锁存器100156中。然后,电路100151开始加密/解密处理。控制电路100153将MAC生成电路100152处理所需的状态信息加载到锁存器100157中,使得当电路100151的输出(例如密文)变得可用时,该状态可用于电路100152的MAC生成/检查处理。因此,减少了在加密单元100730的流水线中处理数据分组的总时间。
本文给出的任何范围或设备值都可以被扩展或改变而不失去所寻求的效果,这对于技术人员来说是显而易见的。
为实现本公开的实施例而描述的系统包括数据处理设备和可以借助于一个或多个数据处理器来提供的功能。集成电路的不同组件,例如加密单元,可以由这样的数据处理器提供。作为非限制性示例,数据处理器可以是适合于本地技术环境的任何类型,并且可以包括微处理器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)和基于多核处理器架构的处理器中的一个或多个。数据处理可以分布在多个数据处理模块上。
尽管本文参考附图描述的实施例的至少一些方面包括在处理系统或处理器中执行的计算机过程,但是本发明还扩展到适于将本发明付诸实践的计算机程序,特别是载体上或载体中的计算机程序。该程序可以是非暂时性源代码、目标代码、代码中间源代码和目标代码的形式,例如部分编译的形式,或者是适合用于实现根据本发明的过程的任何其他非暂时性形式。载体可以是能够承载程序的任何实体或设备。例如,载体可以包括存储介质,例如固态驱动器(SSD)或其他基于半导体的RAM;ROM,例如CD ROM或半导体ROM;磁记录介质,例如软盘或硬盘;一般而言,光学存储器设备;等等。
本文所述方法的操作可以以任何适当的顺序进行,或者在适当的情况下同时进行。此外,在不脱离本文所述主题的范围的情况下,可以从任何方法中删除各个块。上述任何示例的方面可以与所描述的任何其他示例的方面相结合,以形成进一步的示例而不损失所寻求的效果。
术语“包括”在本文中用于表示包括所表述的方法块或元素,但是这种块或元素不包括排他列表,并且方法或装置可以包含额外的块或元素。
应当理解,以上描述仅通过示例的方式给出,本领域技术人员可以进行各种修改。上述说明书、示例和数据提供了对示例性实施例的结构和使用的完整描述。尽管上述各种实施例的描述具有一定程度的特殊性或参考了一个或多个单独的实施例,但是本领域技术人员可以在不脱离本说明书的范围的情况下对所公开的实施例进行许多修改。
概念A-外部存储器通信
条款AA,一种设备,包括:处理单元;以及
至少一个加密单元,包括处理电路;
其中处理单元包括处理器,该处理器包括执行单元和至少一个存储器,该至少一个存储器存储与处理器外部的存储装置中的数据相关联的预期的初始化向量的至少一部分,其中该至少一个执行单元被配置为执行计算机可读指令以引起发出针对处理器外部的存储装置中的数据的读取请求,
其中该至少一个加密单元的处理电路被配置为:
接收与读取请求对应的至少一个读取完成,该至少一个读完成包括密文和初始化向量;以及
使用初始化向量解密密文以产生明文;以及将明文和初始化向量的至少一部分提供给处理单元,
其中该处理单元被配置为:
将预期的初始化向量的至少一部分与初始化向量的至少一部分相比较;以及
响应于确定预期的初始化向量的至少一部分与初始化向量的至少一部分匹配,接受所接收的明文。
条款AB,根据条款AA所述的设备,其中处理单元是用于充当与设备耦合的主机系统的工作加速器的子系统,其中处理器外部的存储装置是主机系统的存储器。
条款AC,根据条款AB所述的设备,其中处理单元的处理器被配置为从主机接收计算机可读指令的至少部分。
条款AD,根据条款AA所述的设备,其中该设备包括在处理单元外部的存储器,其中处理器外部的存储装置是在处理单元外部的存储器。
条款AE,根据条款AD所述的设备,其中处理单元外部的存储器是动态随机存取存储器。
条款AF,根据条款AA至AE中任一条款所述的设备,其中该设备为集成电路。
条款AG,根据条款AA至AF中任一条款所述的设备,其中处理单元包括另一处理器,该另一处理器包括另外的至少一个执行单元,该另外的至少一个执行单元被配置为在发出读取请求之前执行计算机可读指令,以引起向处理器外部的存储装置发出对数据的至少一个写入请求,写入请求包括明文和初始化向量的至少一部分,
其中至少一个加密单元的处理电路被配置为:接收至少一个写入请求;
使用初始化向量加密写入请求的明文,以产生密文;以及
使密文和初始化向量被写入处理器外部的存储装置。
条款AH,根据条款AE所述的设备,其中初始化向量的至少一部分包括初始化向量的部分,其中至少一个加密单元的处理电路被配置为:
在加密明文之前,通过更新计数器并将更新后的计数器值添加到初始化向量的部分来完成初始化向量。
条款AI,根据条款AA至AH中任一条款所述的设备,其中预期的初始化向量的至少一部分包括以下至少一项:
处理器的标识符;
数据流,读取请求的目标是从该数据流进行读取;以及数据块,读取请求的目标是从该数据块进行读取。
条款AJ,根据条款AA至AI中任一条款所述的设备,其中至少一个读取完成包括消息认证码,其中至少一个加密单元的处理电路被配置为检查消息认证码与读取请求的数据的预期消息认证码相匹配。
条款AK,根据条款AA至AJ中任一条款所述的设备,其中使用初始化向量对密文进行解密是根据高级加密标准执行的。
条款AL,一种在设备中执行的方法,该设备包括处理单元,处理单元包括处理器,该方法包括:
在处理器中存储与处理器外部的存储装置中的数据相关联的预期的初始化向量的至少一部分;
使得发出针对处理器外部的存储装置中的数据的读取请求,接收与读取请求对应的至少一个读取完成,至少一个读取完成包括密文和初始化向量;以及
使用初始化向量解密密文以产生明文;以及将明文和初始化向量的至少一部分提供给处理器,在处理器处将预期的初始化向量的至少一部分与初始化向量的至少一部分相比较;以及
响应于确定预期的初始化向量的至少一部分与初始化向量的至少一部分匹配,接受所接收的明文。
条款AM,一种计算机程序,用于由设备的处理单元的处理器执行以执行方法,该方法包括:
在处理器中存储与处理器外部的存储装置中的数据相关联的预期的初始化向量的至少一部分;
使得发出针对处理器外部的存储装置中的数据的读取请求,接收与读取请求对应的至少一个读取完成,至少一个读取完成包括明文和初始化向量的至少一部分;
将预期的初始化向量的至少一部分与初始化向量的至少一部分相比较;以及响应于确定预期的初始化向量的至少一部分与初始化向量的至少一部分匹配,接受所接收的明文。
条款AN,一种非瞬态计算机可读介质,包括如条款AM中的计算机程序。
概念B-任何存储器通信
条款BA,一种设备,包括处理电路,该处理电路被配置为:
确定加密帧的初始化向量的预期的至少一部分,加密帧包括密文和用于生成密文的初始化向量;
将加密帧的初始化向量的至少一部分与预期的初始化向量的至少一部分相比较;以及
响应于确定加密帧中的初始化向量的至少一部分与初始化向量的预期的至少一部分之间的匹配,使得通过解密密文生成的明文被存储在数据处理系统的处理器的存储器中。
条款BB,根据条款BA所述的设备,其中处理电路包括处理器的至少一个执行单元,该至少一个执行单元被配置为执行计算机可读指令以执行确定加密帧的初始化向量的预期至少一部分的步骤,
其中至少一个执行单元被配置为执行计算机可读指令,以发出读取请求来从处理器外部的存储装置读取加密帧,
其中该设备包括至少一个加密单元,该至少一个加密单元包括电路,被配置为:
在与读取请求对应的至少一个读取完成中接收加密帧;
使用加密帧中的初始化向量解密密文本以产生明文;以及
将明文和初始化向量的至少一部分提供给处理器。
条款BC,根据条款BB所述的设备,其中设备是用于充当与设备耦合的主机系统的工作加速器的子系统,其中处理器外部的存储装置是主机系统的存储器。
条款BD,根据条款BC所述的设备,其中处理器被配置为从主机接收计算机可读指令的至少一部分。
条款BE,根据条款BB所述的设备,其中处理器是多处理器处理单元的一部分,其中该设备包括在处理单元外部的存储器,其中在处理器外部的存储装置是处理单元外部的存储器。
条款BF,根据条款BE所述的设备,其中处理单元外部的存储器是动态随机存取存储器。
条款BG,根据条款BB至BF中任一条款所述的设备,其中处理器是多处理器处理单元的一部分,其中处理单元包括另一处理器,另一处理器包括另外的至少一个执行单元,该另外的至少一个执行单元被配置为在发出读取请求之前,执行计算机可读指令以使得发出至少一个写入请求来将明文写入处理器外部的存储装置,该写入请求包括明文和初始化向量的至少一部分,
其中至少一个加密单元的电路被配置为:接收至少一个写入请求;使用初始化向量加密写入请求的明文以产生密文;以及
使得密文和初始化向量被写入处理器外部的存储装置。
条款BH,根据条款BG所述的设备,其中初始化向量的至少一部分包括初始化向量的一部分,其中至少一个加密单元的电路被配置为:
在加密明文之前,通过更新计数器值并将更新后的计数器值添加到初始化向量的一部分来完成初始化向量。
条款BI,根据条款BB至BH中任一条款所述的设备,其中初始化向量的预期的至少一部分包括以下至少一项:
处理器的标识符;
数据流,读取请求的目标是从该数据流进行读取;以及数据块,读取请求的目标是从该数据块进行读取。
条款BJ,根据条款BB至BI中任一条款所述的设备,其中至少一个读取完成包括消息认证码,其中至少一个加密单元的电路被配置为检查消息认证码与读取请求的数据的预期消息认证码相匹配。
条款BK,根据条款BA所述的设备,其中该设备包括至少一个加密单元,该至少一个加密单元包括处理电路,其中处理电路被配置为:
通过点对点通信链路从另一设备接收加密帧;
更新存储在加密单元的存储装置中的计数器值,其中更新后的计数器值是针对加密帧的初始化向量的预期的至少一部分;
响应于确定加密帧中的初始化向量与初始化向量的预期的至少一部分之间的匹配,使用加密帧中的初始化向量解密密文以产生明文;以及
将明文和初始化向量的至少一部分提供给处理器。
条款BL,根据条款BK所述的设备,其中点对点通信链路包括以下之一:
外围组件互连快速链路;以及以太网链路。
条款BM,根据条款BK或条款BL所述的设备,其中处理电路被配置为在解密密文之后:
从处理器或设备的另一处理器接收写入请求,该写入请求包括另一明文;
更新存储在加密单元的存储器中的计数器值,以提供另外的更新值;
使用该另外的更新值作为初始化向量来加密所述该另一明文以产生另一密文;以及
通过点对点通信链路将另一密文与初始化向量一起提供给另一设备。
条款BN,根据条款BK至BM所述的数据处理系统,其中数据处理系统包括设备和另一设备,
其中另一设备包括另外的至少一个加密单元,该另外的至少一个加密单元包括另外的处理电路,其中另外的处理电路被配置为:
响应于从另一设备的另外的处理器接收到明文,更新存储在至少一个加密单元的存储装置中的另一计数器值;
使用更新的另一计数器值作为初始化向量来加密明文以产生密文,其中更新的另一计数值等于更新的计数器值;以及
通过点对点通信链路将加密帧提供给设备。
条款BO,根据条款BA至BN中任一条款所述的设备,其中该设备是集成电路。
条款BP,根据条款BA至BO中任一条款所述的设备,其中使用初始化向量对密文的解密是根据高级加密标准执行的。
条款BQ,根据条款BK至BP中任一条款所述的设备,其中加密帧包括消息认证码,其中至少一个加密单元的处理电路被配置为检查消息认证码是否与针对明文的预期的消息认证码匹配。
条款BR,一种用于确保数据的新鲜度的方法,该方法包括:
确定加密帧的初始化向量的预期的至少一部分,该加密帧包括密文和用于生成密文的初始化向量;
将加密帧的初始化向量的至少一部分与预期的初始化向量的至少一部分相比较;以及
响应于确定加密帧中的初始化向量的至少一部分与初始化向量的预期的至少一部分之间的匹配,使得通过解密密文而生成的明文被存储在数据处理系统的处理器的存储器中。
条款BS,一种计算机程序,当由处理电路执行时,使方法被执行,该方法包括:
确定针对加密帧的初始化向量的预期的至少一部分,该加密帧包括密文和用于生成密文的初始化向量;
将加密帧的初始化向量的至少一部分与预期的初始化向量的至少一部分相比较;以及
响应于确定加密帧中的初始化向量的至少一部分与初始化向量的预期的至少一部分之间的匹配,使得通过解密密文而生成的明文被存储在数据处理系统的处理器的存储器中。
条款BT,一种非瞬态计算机可读介质,包括如第22段中的计算机程序。
替代地或除了本文所述的其他示例之外,示例包括以下的任意组合:
条款A.一种处理系统,包括:
一个或多个芯片,每个芯片包括多个瓦片,每个瓦片包括各自的处理单元和存储小代码的存储器;
至少一个加密单元,被配置为加密和解密经由外部存储器在瓦片与可信计算实体之间传输的数据;
其中小代码已经由可信计算实体处的编译器编译,以指令瓦片通过从外部存储器处的多个存储器区域读取和向该多个存储器区域写入来传输加密数据,从而形成多个加密数据的流,每个流使用外部存储处的存储器区域中的单独一个存储器区域。
条款B.根据条款A的处理系统,其中瓦片中的至少一个瓦片是入口瓦片,入口瓦片被配置为:
使用瓦片的小代码,确定要被读取的流中的一个流的下一帧的预期的初始化向量;
发出读取请求以从与流相关联的存储器区域读取流的下一帧;
响应于下一帧到达入口瓦片的本地存储器中,检查下一帧中包含的初始化向量与预期的初始化向量匹配;以及
响应于匹配失败,生成安全异常;或者
其中瓦片中的至少一个瓦片是出口瓦片,出口瓦片被配置为:
使用关于要写入外部存储器的数据的信息,确定从处理系统向外部存储器写入的流中的一个流的下一帧的大小和初始化向量;
将初始化向量写入流的当前帧中;
发出针对当前帧的写入请求,该写入请求被发出到与流相关联的外部存储器区域。
条款C.根据条款A或条款B的处理系统,其中流中的至少一个流是用于通过将数据分成按固定顺序的帧来传输数据的固定布局流。
条款D.根据任何前述条款的处理系统,其中流中的至少一个流是灵活布局流,该灵活布局流通过将数据分成按能够改变和/或取决于将使用所传输的数据的应用程序的顺序的帧来传输数据。
条款E.根据任何前述条款的处理系统,其中每个小代码已经由编译器根据由编译器在指定约束下确定的多个参数而编译,其中参数是从以下一项或多项选择的:外部存储器中的指定大小的连续区域;哪些密钥在多个指定的执行点加载到加密单元中,执行在该多个指定的执行点被暂时停止,直到密钥被加载;瓦片的集合,该集合将向外部存储器发出读取或写入请求,针对每个瓦片:指示起点的索引、以及在起点之后要读取或写入的帧的数量。
条款F.根据条款E的处理系统,其中约束是从以下一项或多项选择的:在外部存储器处分配给实时流的存储器区域的累积大小、能够从流读取或向流写入的数据的阈值量。
条款G.根据条款E的处理系统,其中针对给定流,基于流的使用频率和与流的读取请求或写入请求相关联的数据量来选择存储器区域的大小和集合中的瓦片的数量。
条款H.根据条款E的处理系统,其中在流中传输的数据以轮询调度方式在集合中的多个瓦片之间被分配。
条款I.根据任何前述条款的处理系统,其中加密单元包括多个寄存器,并且其中处理系统包括安全微控制器单元SMCU,SMCU被配置为从编译器接收密钥清单并且使用密钥清单对寄存器进行编程,以便加密单元操作以加密和解密流的数据。
条款J.根据条款I的处理系统,其中SMCU被配置为接收密钥清单,密钥清单包括针对至少一个密钥更新事件的元数据,元数据可由SMCU用于重新编程加密单元的寄存器以反映流的瓦片和存储器区域的新指派。
条款K.根据任何前述条款的处理系统,其中流中的至少一个流是安全检查点出口流,其被称为检查点,用于在模型的训练阶段从处理系统向外部存储器写入模型权重和元数据,以使模型的训练能够从检查点重新开始,元数据包括数据流将从其被恢复的偏移;并且其中瓦片中的至少一个瓦片是安全检查点出口流的出口瓦片,出口瓦片被配置为获取检查点历元计数器和检查点标识符的初始值。
条款L.根据条款K的处理系统,其中出口瓦片被配置为将模型权重和元数据划分成帧,并生成初始化向量和向每个帧添加初始化向量,初始化向量使用小代码和检查点历元计数器和检查点标识符的当前值而被生成,并且其中出口瓦片被配置为在写入权重和元数据之后递增检查点标识符。
条款M.根据任何前述条款的处理系统,其中流中的至少一个流是用于将模型权重和元数据从外部存储器读取到处理系统中的安全检查点入口流,元数据包括入口流的当前偏移;并且其中瓦片中的至少一个瓦片是安全检查点入口流的入口瓦片,入口瓦片被配置为:获取检查点历时计数器的初始值和检查点标识符的初始值,并在读取模型权重和元数据的同时使用检查点历元计数器和检查点标识符的初始值来生成预期的初始化向量,以及在读取模型权重和元数据之后递增检查点历元计数器并重置检查点标识符。
条款N.根据任何前述条款的处理系统,其中流中的至少一个流是用于读取或写入经加密的模型权重和元数据的安全检查点流,并且其中SMCU被配置为提供两个检查点密钥,一个检查点密钥用于加密针对新的训练历元要写入的模型权重和元数据,另一检查点密钥用于解密从前一历元要读取的模型权重和元数据,并且其中安全检查点流具有包括明文形式的元数据的相关联的明文检查点流。
条款O.根据任何前述条款的处理系统,其中小代码被配置为指令瓦片中的至少一个瓦片从第一流的存储器区域读取以获取具有第一初始化向量的第一帧,并从第二存储器区域读取以获取序列号,第二存储器区域为置换流的存储器区域,并且其中瓦片被配置为根据序列号和瓦片的小代码生成预期的初始化向量,并将预期的初始化向量与第一帧的初始化向量相比较,以及响应于比较发现差异,触发错误过程。
条款P.根据条款O的处理系统,其中瓦片被配置为通过从第二存储器区域读取帧、生成预期的初始化向量以及将预期的初始化向量与帧的初始化向量相比较来获取序列号。
条款Q.根据条款O或条款P的处理系统,其中第一流的存储器区域和置换流的存储器区域是存储器的单个逻辑区域。
条款R.根据条款O至Q中任一条款的处理系统,其中置换流仅包含流的每个数据实例的第一帧的序列索引,并且入口瓦片的小代码知晓每个数据实例具有多少帧。
条款S.一种在处理系统处执行的方法,该处理系统包括一个或多个芯片,每个芯片包括多个瓦片,每个瓦片包括相应的处理单元和存储器,该方法包括:
在每个瓦片处存储小代码,每个小代码已经由可信计算实体处的编译器编译;
使用至少一个加密单元来加密和解密经由外部存储器在瓦片与可信计算实体之间传输的数据;
使用小代码来指令瓦片通过从外部存储器处的多个存储器区域读取和向多个存储器区域写入来传输加密数据,从而形成多个加密数据的流,每个流使用外部存储器处的单独一个存储器区域。
条款T.一种数据中心包括:
多个计算节点,每个计算节点包括至少一个外围设备,该外围设备包括:
多个瓦片,每个瓦片包括相应的处理单元和存储小代码的存储器;至少一个加密单元,被配置为加密和解密经由外部存储器在瓦片与可信计算实体之间传输的数据;
其中小代码已经由可信计算实体处的编译器编译,以指令瓦片通过从外部存储器处的多个存储器区域读取和向多个存储器区域写入来传输加密数据,从而形成多个加密数据的流,每个流使用外部存储器处的存储器区域中的单独一个存储器区域。
Claims (20)
1.一种处理系统,包括:
一个或多个芯片,每个芯片包括多个瓦片,每个瓦片包括相应的处理单元和存储小代码的存储器;
至少一个加密单元,被配置为加密和解密经由外部存储器在所述瓦片与可信计算实体之间传输的数据;
其中所述小代码已经由所述可信计算实体处的编译器编译,以指令所述瓦片通过从所述外部存储器处的多个存储器区域读取和向所述多个存储器区域写入来传输所述加密数据,使得形成多个加密数据的流,每个流使用所述外部存储器处的所述存储器区域中的单独一个存储器区域。
2.根据权利要求1所述的处理系统,其中所述瓦片中的至少一个瓦片是入口瓦片,所述入口瓦片被配置为:
使用所述瓦片的所述小代码,确定要被读取的所述流中的一个流的下一帧的预期的初始化向量;
发出读取请求以从与所述流相关联的所述存储器区域读取所述流的下一帧;
响应于所述下一帧到达所述入口瓦片的本地存储器中,检查所述下一帧中包含的初始化向量是否与所述预期的初始化向量匹配;以及
响应于所述匹配失败,生成安全异常;或者
其中所述瓦片中的至少一个瓦片是出口瓦片,所述出口瓦片被配置为:
使用关于要被写入所述外部存储器的数据的信息,确定从所述处理系统向所述外部存储器写入的所述流中的一个流的下一帧的大小和初始化向量;
将所述初始化向量写入所述流的当前帧中;
发出针对所述当前帧的写入请求,所述写入请求被发出到与所述流相关联的所述外部存储器区域。
3.根据权利要求1所述的处理系统,其中所述流中的至少一个流是用于通过将所述数据分成按固定顺序的帧来传输所述数据的固定布局流。
4.根据权利要求1所述的处理系统,其中所述流中的至少一个流是灵活布局流,所述灵活布局流通过将所述数据分成按一顺序的帧来传输所述数据,所述顺序能够改变和/或取决于将使用所传输的所述数据的应用。
5.根据权利要求1所述的处理系统,其中所述小代码中的每个小代码已经由所述编译器根据由所述编译器在指定约束下确定的多个参数而编译,其中所述参数是从以下一项或多项选择的:所述外部存储器中的指定大小的连续区域;哪些密钥要在多个指定的执行点处加载到加密单元中,执行在所述多个指定的执行点被暂时停止,直到密钥被加载;所述瓦片的集合,所述集合将向所述外部存储器发出读取或写入请求,针对每个瓦片:指示起点的索引、以及在所述起点之后要读取或写入的帧的数量。
6.根据权利要求5所述的处理系统,其中所述约束是从以下一项或多项选择的:在所述外部存储器处分配给实时流的存储器区域的累积大小、能够从流读取或向所述流写入的数据的阈值量。
7.根据权利要求5所述的处理系统,其中针对给定流,基于所述流的使用频率和与所述流的读取请求或写入请求相关联的数据量来选择所述存储器区域的所述大小和所述集合中的瓦片的数量。
8.根据权利要求5所述的处理系统,其中在流中传输的数据以轮询调度方式在所述集合中的多个瓦片之间被分配。
9.根据权利要求1所述的处理系统,其中所述加密单元包括多个寄存器,并且其中所述处理系统包括安全微控制器单元SMCU,所述SMCU被配置为从所述编译器接收密钥清单并且使用所述密钥清单对所述寄存器进行编程,以便所述加密单元操作以加密和解密所述流的所述数据。
10.根据权利要求9所述的处理系统,其中所述SMCU被配置为接收所述密钥清单,所述密钥清单包括针对至少一个密钥更新事件的元数据,所述元数据可由所述SMCU用于重新编程所述加密单元的所述寄存器以反映所述流的瓦片和存储器区域的新指派。
11.根据权利要求1所述的处理系统,其中所述流中的至少一个流是安全检查点出口流,其被称为检查点,用于在所述模型的训练阶段从所述处理系统向所述外部存储器写入模型权重和元数据,以使所述模型的训练能够从所述检查点重新开始,所述元数据包括所述数据流将从其被恢复的偏移;并且其中所述瓦片中的至少一个瓦片是所述安全检查点出口流的出口瓦片,所述出口瓦片被配置为获取检查点历元计数器和检查点标识符的初始值。
12.根据权利要求11所述的处理系统,其中所述出口瓦片被配置为将所述模型权重和所述元数据划分成帧,并生成初始化向量和向每个帧添加所述初始化向量,所述初始化向量使用所述小代码和所述检查点历元计数器和检查点标识符的当前值而被生成,并且其中所述出口瓦片被配置为在写入所述权重和所述元数据之后递增所述检查点标识符。
13.根据权利要求1所述的处理系统,其中所述流中的至少一个流是用于将所述模型权重和所述元数据从所述外部存储器读取到所述处理系统中的安全检查点入口流,所述元数据包括入口流的当前偏移;并且其中所述瓦片中的至少一个瓦片是所述安全检查点入口流的入口瓦片,所述入口瓦片被配置为:获取检查点历时计数器的初始值和检查点标识符的初始值,并在读取所述模型权重和所述元数据的同时使用所述检查点历元计数器和所述检查点标识符的所述初始值来生成预期的初始化向量,以及在读取所述模型权重和所述元数据之后递增所述检查点历元计数器并重置所述检查点标识符。
14.根据权利要求1所述的处理系统,其中所述流中的至少一个流是用于读取或写入经加密的模型权重和元数据的安全检查点流,并且其中所述SMCU被配置为提供两个检查点密钥,一个检查点密钥用于加密针对新的训练历元要写入的模型权重和元数据,另一检查点密钥用于解密从前一历元要读取的模型权重和元数据,并且其中所述安全检查点流具有相关联的明文检查点流,所述明文检查点流包括明文形式的元数据。
15.根据权利要求1所述的处理系统,其中所述小代码被配置为指令所述瓦片中的至少一个瓦片从第一流的存储器区域读取以获取具有第一初始化向量的第一帧,并从第二存储器区域读取以获取序列号,所述第二存储器区域为置换流的存储器区域,并且其中所述瓦片被配置为根据所述序列号和所述瓦片的小代码生成预期的初始化向量,并将所述预期的初始化向量与所述第一帧的所述初始化向量相比较,以及响应于所述比较发现差异,触发错误过程。
16.根据权利要求15所述的处理系统,其中所述瓦片被配置为通过从所述第二存储器区域读取帧、生成预期的初始化向量以及将所述预期的初始化向量与所述帧的初始化向量相比较来获取所述序列号。
17.根据权利要求15所述的处理系统,其中所述第一流的所述存储器区域和所述置换流的所述存储器区域是存储器的单个逻辑区域。
18.根据权利要求15所述的处理系统,其中所述置换流仅包含所述流的每个数据实例的第一帧的所述序列索引,并且所述入口瓦片的所述小代码知晓每个数据实例具有多少帧。
19.一种在处理系统处执行的方法,所述处理系统包括一个或多个芯片,每个芯片包括多个瓦片,每个瓦片包括相应的处理单元和存储器,所述方法包括:
在每个瓦片处存储小代码,每个小代码已经由所述可信计算实体处的编译器编译;
使用至少一个加密单元来加密和解密经由外部存储器在所述瓦片与可信计算实体之间传输的数据;
使用所述小代码来指令所述瓦片通过从所述外部存储器处的多个存储器区域读取和向所述多个存储器区域写入来传输所述加密数据,使得形成多个加密数据的流,每个流使用所述外部存储器处的所述存储器区域中的单独一个存储器区域。
20.一种数据中心,包括:
多个计算节点,每个计算节点包括至少一个外围设备,所述外围设备包括:
多个瓦片,每个瓦片包括相应的处理单元和存储小代码的存储器;
至少一个加密单元,被配置为加密和解密经由外部存储器在所述瓦片与可信计算实体之间传输的数据;
其中所述小代码已经由所述可信计算实体处的编译器编译,以指令所述瓦片通过从所述外部存储器处的多个存储器区域读取和向所述多个存储器区域写入来传输所述加密数据,使得形成多个加密数据的流,每个流使用所述外部存储器处的所述存储器区域中的单独一个存储器区域。
Applications Claiming Priority (5)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| GB2010823.9 | 2020-07-14 | ||
| GB2010816.3 | 2020-07-14 | ||
| GBGB2010823.9A GB202010823D0 (en) | 2020-07-14 | 2020-07-14 | System and method for reading and writing encryted data |
| GB2010816.3A GB2597082B (en) | 2020-07-14 | 2020-07-14 | Hardware autoloader |
| PCT/US2021/041502 WO2022015775A1 (en) | 2020-07-14 | 2021-07-13 | Streaming data to multi-tile processing system |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| CN116134421A true CN116134421A (zh) | 2023-05-16 |
Family
ID=77249898
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN202180060927.2A Pending CN116134421A (zh) | 2020-07-14 | 2021-07-13 | 向多瓦片处理系统流式传输数据 |
Country Status (4)
| Country | Link |
|---|---|
| US (2) | US12360749B2 (zh) |
| EP (1) | EP4182792A1 (zh) |
| CN (1) | CN116134421A (zh) |
| WO (1) | WO2022015775A1 (zh) |
Families Citing this family (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| GB202202815D0 (en) | 2022-03-01 | 2022-04-13 | Graphcore Ltd | Reset of a multi-node syste |
| JP7583000B2 (ja) * | 2022-09-06 | 2024-11-13 | 日立ヴァンタラ株式会社 | 計算機及びデータ処理方法 |
| GB202213607D0 (en) * | 2022-09-16 | 2022-11-02 | Graphcore Ltd | System and method for synchronising access to shared memory |
Family Cites Families (17)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US8155113B1 (en) * | 2004-12-13 | 2012-04-10 | Massachusetts Institute Of Technology | Processing data in a parallel processing environment |
| US7636838B2 (en) * | 2006-01-05 | 2009-12-22 | Broadcom Corporation | Method and system for handling operation of multiple devices within a single system-on-chip (SoC) integrated circuit (IC) |
| US8386859B2 (en) * | 2010-04-30 | 2013-02-26 | International Business Machines Corporation | On-chip non-volatile storage of a test-time profile for efficiency and performance control |
| US8738860B1 (en) * | 2010-10-25 | 2014-05-27 | Tilera Corporation | Computing in parallel processing environments |
| US9467526B2 (en) | 2014-01-15 | 2016-10-11 | Microsoft Technology Licensing, Llc | Network communication using intermediation processor |
| US20150261535A1 (en) * | 2014-03-11 | 2015-09-17 | Cavium, Inc. | Method and apparatus for low latency exchange of data between a processor and coprocessor |
| KR102208072B1 (ko) * | 2014-09-01 | 2021-01-27 | 삼성전자주식회사 | 데이터 처리 시스템 |
| US9418246B2 (en) * | 2014-12-15 | 2016-08-16 | Freescale Semiconductor, Inc. | Decryption systems and related methods for on-the-fly decryption within integrated circuits |
| US10104047B2 (en) * | 2015-04-08 | 2018-10-16 | Microsemi Solutions (U.S.), Inc. | Method and system for encrypting/decrypting payload content of an OTN frame |
| GB2569275B (en) * | 2017-10-20 | 2020-06-03 | Graphcore Ltd | Time deterministic exchange |
| US10700998B2 (en) * | 2018-08-03 | 2020-06-30 | Cavium International | VOQ-based network switch architecture using multi-stage arbitration fabric scheduler |
| KR102557993B1 (ko) * | 2018-10-02 | 2023-07-20 | 삼성전자주식회사 | 메모리 이용 효율을 향상한 보안 처리기를 포함하는 시스템 온 칩, 메모리 시스템 및 시스템 온 칩의 동작방법 |
| US10963300B2 (en) * | 2018-12-06 | 2021-03-30 | Raytheon Company | Accelerating dataflow signal processing applications across heterogeneous CPU/GPU systems |
| US11070527B2 (en) * | 2018-12-07 | 2021-07-20 | Intel Corporation | Securing platform link with encryption |
| US11106823B1 (en) * | 2019-01-18 | 2021-08-31 | Pitchly, Inc. | System and method for generating reversible anonymized record identifiers from a remote data system |
| US11582021B1 (en) * | 2019-11-20 | 2023-02-14 | Xilinx, Inc. | Protection against differential power analysis attacks involving initialization vectors |
| GB202010823D0 (en) * | 2020-07-14 | 2020-08-26 | Graphcore Ltd | System and method for reading and writing encryted data |
-
2021
- 2021-07-13 US US18/005,246 patent/US12360749B2/en active Active
- 2021-07-13 CN CN202180060927.2A patent/CN116134421A/zh active Pending
- 2021-07-13 EP EP21751921.4A patent/EP4182792A1/en active Pending
- 2021-07-13 WO PCT/US2021/041502 patent/WO2022015775A1/en not_active Ceased
-
2025
- 2025-06-13 US US19/238,321 patent/US20250306873A1/en active Pending
Also Published As
| Publication number | Publication date |
|---|---|
| US20250306873A1 (en) | 2025-10-02 |
| EP4182792A1 (en) | 2023-05-24 |
| WO2022015775A1 (en) | 2022-01-20 |
| US20230342121A1 (en) | 2023-10-26 |
| US12360749B2 (en) | 2025-07-15 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP7646625B2 (ja) | 暗号置換のための暗号アーキテクチャ | |
| US20250306873A1 (en) | Streaming data to multi-tile processing system | |
| US9996709B2 (en) | Secure computer architecture | |
| US8413153B2 (en) | Methods and systems for sharing common job information | |
| US9158810B2 (en) | Hardware message queues for intra-cluster communication | |
| US8918646B2 (en) | Data processing apparatus | |
| US7240203B2 (en) | Method and apparatus for establishing secure sessions | |
| Henecka et al. | Faster secure two-party computation with less memory | |
| JP6222802B2 (ja) | ランダム値生成方法およびシステム | |
| CN113591091A (zh) | 应用程序的处理方法、装置、云环境及存储介质 | |
| Wu et al. | Exploring dynamic task loading in SGX-based distributed computing | |
| EP4354306A1 (en) | Systems, methods, and apparatus for namespace identification for devices | |
| US20220416996A1 (en) | Block Cipher Encryption Pipeline | |
| Vaswani et al. | Confidential machine learning within graphcore ipus | |
| US20090240925A1 (en) | Device, method, and computer program product that process message | |
| US12141330B2 (en) | Multiple key management | |
| Burlachenko et al. | Federated learning is better with non-homomorphic encryption | |
| Ren et al. | Accelerating Secure Collaborative Machine Learning with {Protocol-Aware}{RDMA} | |
| CN118733517A (zh) | 使用内容对象标识符进行路由和计算的处理器核 | |
| JP7503198B2 (ja) | ハードウェアオートローダ | |
| Fan et al. | Gpu acceleration of ciphertext-policy attribute-based encryption | |
| CN119292773B (zh) | 数据处理方法、数据处理装置及其相关设备 | |
| US12452222B2 (en) | Systems, methods, and apparatus for protection for device data transfers | |
| Naser | Cryptmpi: A fast encrypted mpi library | |
| WO2023069441A2 (en) | Low-latency multi-key encryption and decryption engine and techniques |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| PB01 | Publication | ||
| PB01 | Publication | ||
| SE01 | Entry into force of request for substantive examination | ||
| SE01 | Entry into force of request for substantive examination |