一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于已编码指针的数据加密的制作方法

2022-07-02 11:03:00 来源:中国专利 TAG:


1.本公开总体上涉及计算机系统的领域,更具体地说,涉及基于已编码指针的数据加密。


背景技术:

2.保护计算机系统中的存储器免受软件错误和安全漏洞是重大关注点。当程序将数据写入缓冲区并超限缓冲区的边界以使得相邻存储器位置被盖写时,可能影响存储器安全的缓冲区上溢发生。相似地,越过缓冲区的末尾读入另一页可能触发存取违规或故障。另一存储器安全违规称为悬空指针。悬空指针是未解析为有效目的地的引用。当解除分配存储器而不修改指向已解除分配的(或已释放的)存储器的现有指针的值时,这种情况可能发生。如果系统重新分配释放的存储器并且悬空指针用以存取重新分配的存储器,则不可预测的行为(包括系统失败)可能发生。当前计算技术已经使用架构和元数据以提供数据保护。例如,在先前解决方案中,处理器将使用查找表以对用于所有权、存储器大小、位置、类型、版本等的策略或关于数据的数据进行编码。然而,该元数据需要附加存储(存储器开销)并负面影响性能,特别是对于带有精细粒度元数据的实现方式。因此,需要不同的方法以对计算系统提供存储器安全。
附图说明
3.为了更完整地理解本公开及其特征和优点,结合附图参考以下描述,其中,相同的附图标记代表相同的部分,其中:
4.图1是根据本公开的至少一个实施例的被配置有安全存储器存取逻辑的示例计算设备的简化框图;
5.图2a是示出根据本公开的至少一个实施例的将广义化的已编码指针绑定到由该指针引用的数据的加密的过程的流程图;
6.图2b是示出根据本公开的至少一个实施例的对绑定到广义化的已编码指针的数据进行解密的过程的流程图;
7.图3示出根据本公开的至少一个实施例的密码式已编码指针;
8.图4示出根据本公开的至少一个实施例的带有各种上下文信息的密码式已编码指针;
9.图5示出根据本公开的至少一个实施例的带有包括完整性比特的上下文信息的密码式已编码指针;
10.图6是根据本公开的至少一个实施例的用于对密码式已编码指针进行解密以产生线性地址的环境的图;
11.图7是示出根据本公开的至少一个实施例的将又一密码式已编码指针绑定到由该指针引用的数据的加密的示例过程的流程图;
12.图8是示出根据至少一个实施例的示例密码式计算环境的框图。
13.图9是示出根据至少一个实施例的示例处理器的框图;
14.图10a是示出根据特定实施例的示例性有序流水线和示例性寄存器重命名、无序发放/执行流水线二者的框图;
15.图10b是示出根据特定实施例的包括于处理器中的有序架构内核的示例性实施例和示例性寄存器重命名、无序发放/执行架构内核二者的框图;
16.图11是根据至少一个实施例的示例计算机架构的框图;以及
17.图12是根据本公开的实施例的对比使用软件指令转换器以将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。
具体实施方式
18.本公开提供用于可以在密码式计算的上下文中使用的存储器写入指令的实现方式的各种可能的实施例或示例。通常,密码式计算可以指代在处理器组件内部采用密码式机制作为其计算的部分的计算机系统安全解决方案。一些密码式计算系统可以使用所加密的存储器存取指令在处理器内核中实现指针地址(或其部分)、密钥、数据和代码的加密和解密。因此,可以通过支持这些加密和解密操作的这样的方式配置处理器内核的微架构流水线。
19.本技术中公开的实施例涉及在强制存储器内的存储器区域的密码式隔离的同时主动阻止对存储器的越界存取。密码式隔离可以指代因用一个或多个不同参数对存储器的不同区域或区块进行加密而导致的隔离。参数可以包括密钥和/或细调。所隔离的存储器区域可以由包括软件实体(例如,虚拟机(vm)、应用、函数、线程)的数据结构和/或代码的对象组成。因此,可以按任意等级的粒度性(例如,比如,虚拟机之间的隔离、应用之间的隔离、函数之间的隔离、线程之间的隔离或数据结构(例如,少数字节结构)之间的隔离)支持隔离。
20.可以通过使用与特定存储器区域关联的密钥的密码式算法执行与该存储器区域关联的数据或代码的加密和解密操作。在至少一些实施例中,密码式算法也可以(或替代地)使用细调作为输入。通常,例如“密钥”和“细调”之类的参数旨在表示可以是秘密的和/或唯一的并且由加密或解密过程使用以分别产生所加密的输出值或所解密的输出值的输入值。至少在受密码式隔离的存储器区域或子区域当中,密钥可以是唯一值。例如,可以在可通过指令集扩展存取的处理器寄存器或处理器存储器(例如,处理器缓存、内容可寻址存储器(cam)等)中维护密钥。细调可以从已编码指针(例如,嵌入其中的安全上下文信息)导出到存储或将要存储受加密/解密的数据或代码的存储器地址,并且至少在一些场景中,可以还包括与存储器区域关联的安全上下文信息。
21.包括读取和写入操作的本说明书中公开的至少一些实施例涉及基于指针的数据加密和解密,其中,指向用于数据或代码的存储器位置的指针用标签和/或其他元数据(例如,安全上下文信息)加以编码,并且可以用以导出对数据或代码密码式(例如,加密和解密)算法的细调输入的至少一部分。因此,可以在密码式寻址层与数据/代码加密和解密之间创建密码式绑定。这样隐含地强制边界,因为远离超出对象(例如,数据)的末尾的指针很可能对于该相邻对象使用不正确的标签值。在一个或多个实施例中,用指向存储器位置的线性地址(本文也称为“存储器地址”)和元数据对指针进行编码。在一些指针编码中,指针中地址的切片或分段包括多个比特,并且在秘密地址密钥和基于元数据的细调的基础上得
以加密(并且解密)。可以用明文存储器地址(例如,线性地址)和元数据对其他指针进行编码。
22.为了说明用于在强制存储器区域的密码式隔离的同时主动地阻止越界存储器存取的若干实施例的目的,重要的是首先理解与数据保护和存储器安全关联的操作和活动。因此,以下根本信息可以视为可以恰当地解释本公开所依据的基础。
23.已知的计算技术(例如,用于进程/内核分离的页表、虚拟机管理器、所管理的运行时等)已经使用架构和元数据以提供数据保护和隔离。例如,在先前的解决方案中,cpu边界外部的存储器控制器支持按更粗糙粒度性(例如,应用)的存储器加密和解密,并且受加密数据的隔离是经由存取控制实现的。典型地,密码式引擎放置在处于cpu内核外部的存储器控制器中。为了受加密,在对于加密应使用哪些密钥的某种标识的情况下,数据从内核行进到存储器控制器。该标识经由物理地址中的比特进行通信。因此,针对提供附加密钥或细调的任何偏差可能导致增加的费用(例如,对于新总线)或从地址总线正“窃取”的附加比特,以允许用物理地址携带用于密钥或细调的附加索引或标识。存取控制可能需要使用元数据,并且处理器将使用查找表以对用于所有权、存储器大小、位置、类型、版本等的策略或关于数据的数据进行编码。动态地存储并且加载元数据需要附加存储(存储器开销)并且影响性能,尤其是对于精细粒度元数据(例如,功能即服务(faas)工作负载或对象边界信息)。
24.存储器分隔(本文也称为“存储器区域”)的密码式隔离解决许多上述问题(以及更多)。在根本上新的精细粒度保护模型的情况下,密码式隔离可以使进程分离、用户空间和内核的遗留模式冗余。通过存储器分隔的密码式隔离,保护是密码式的,其中,各种类型的处理器单元(例如,处理器和加速器、现场可编程门阵列、数据处理单元等)同样利用秘密密钥(和可选地,细调)和密码以按日益精细的粒度性提供存取控制和分离。实际上,可以支持对于如1字节那样小的对象到如用于整个虚拟机的数据和代码那样大的存储器分隔的隔离。在至少一些场景中,密码式隔离可以导致单独应用或功能变为边界,允许每个地址空间包含多个区别的应用或功能。可以经由指针跨越隔离边界有选择地共享对象。可以对这些指针进行密码式编码或非密码式编码。此外,在一个或多个实施例中,在内核边界内,加密和解密发生在处理器内核内部。因为加密发生在数据写入内核外部的存储器单元(例如,l1缓存或主存储器)之前,所以不必从物理地址“窃取”比特以传达密钥或细调信息,并且任意大数量的密钥和/或细调可以受支持。
25.密码式隔离借助密码式寻址层的概念,其中,处理器基于隐式和显式元数据(例如,上下文信息)和/或存储器地址自身的切片(例如,作为对可细调分组密码的细调(例如,针对密文窃取的基于xor-加密-xor的细调码本模式(xts)))对软件分配的存储器地址(线性/虚拟地址空间内的地址,有时也称为“指针”)的至少一部分进行加密。如本文所使用的那样,除了普通明文或密文输入和密钥之外,“细调”还可以指代对分组密码的额外输入等。细调包括表示值的一个或多个比特。在一个或多个实施例中,细调可以组成用于分组密码的初始化矢量(iv)的全部或部分。所得密码式已编码指针可以包括存储器地址的受加密部分(或切片)和已编码元数据(例如,上下文信息)的一些比特。当执行地址的解密时,如果用以创建细调(例如,隐式和显式元数据、存储器地址的明文地址切片等)的信息对应于存储器分配器(例如,软件分配方法)进行的存储器地址的原始分配,则处理器可以正确地对地址进行解密。否则,随机地址结果将引起故障并为处理器所捕获。
26.这些密码式已编码指针(或其部分)可以进一步由处理器用作对用以对它们引用的数据(由密码式已编码指针引用的数据)进行加密/解密的数据加密密码的细调,在密码式寻址层与数据/代码加密之间创建密码式绑定。在一些实施例中,可以对密码式已编码指针进行解密并且解码,以获得线性地址。处理器可以使用线性地址(或其部分)作为对数据加密密码的细调。替代地,在一些实施例中,可以不对存储器地址进行加密,但是仍然可以用指针当中的表示唯一值的一些元数据对指针进行编码。在该实施例中,已编码指针(或其部分)可以由处理器用作对数据加密密码的细调。应注意,用作对分组密码的输入以对存储器地址进行加密/解密的细调在本文中也称为“地址细调”。相似地,用作对分组密码的输入以对数据进行加密/解密的细调在本文中也称为“数据细调”。
27.虽然密码式已编码指针(或非密码式已编码指针)可以用以隔离数据,但是经由加密,数据的完整性可能仍是易受攻击的。例如,密码式隔离的数据的未授权的存取可能破坏存储数据的存储器区域,而无论数据是否受加密,破坏对于受害者未知的数据内容。可以使用完整性验证(或检查)机制(例如,消息认证代码(mac))或隐式地基于所解密的数据的熵测度或二者支持数据完整性。在一个示例中,mac代码可以每缓存行被存储,并且每次缓存行受读取时得以评估,以确定数据是否被破坏。然而,这种机制并不主动检测未授权的存储器存取。相反,可以通过反应方式(例如,在写入数据之后)而不是主动方式(例如,在写入数据之前)检测存储器的破坏(例如,越界存取)。例如,存储器破坏可能因在对于软件实体处于越界的存储器位置处执行的写入操作而发生。在密码式计算的情况下,写入操作可以使用对于存储器位置无效的密钥和/或细调。当在该存储器位置处执行随后读取操作时,读取操作可以在受破坏的存储器上使用不同的密钥并检测破坏。例如,如果读取操作使用有效密钥和/或细调,则检索到的数据将不恰当地进行解密,并且破坏可以例如使用消息认证代码或通过检测所解密的数据中的高等级的熵(随机性)(隐式完整性)加以检测。
28.转向图1,图1是根据本公开的至少一个实施例的用于在使用安全存储器存取逻辑强制存储器区域的密码式隔离的同时实现用于对存储器的越界存取的主动阻挡技术的示例计算设备100的简化框图。在所示示例中,计算设备100包括处理器102,其带有地址密码术单元104、密码式计算引擎108、安全存储器存取逻辑106和存储器组件(例如,缓存170(例如,l1缓存、l2缓存))和补充处理器存储器180。安全存储器存取逻辑106包括:加密存储逻辑150,其用于基于各种密钥和/或细调对数据进行加密并且然后存储受加密数据;和解密加载逻辑160,其用于读取并且然后基于密钥和/或细调对数据进行解密。密码式计算引擎108可以被配置为:基于各种密钥和/或细调对用于加载操作的数据或代码进行解密,并且基于各种密钥和/或细调对用于存储操作的数据或代码进行加密。地址密码术单元104可以被配置为:对指向由线性地址引用的数据或代码的指针中编码的线性地址(或线性地址的部分)进行解密并且加密。
29.处理器102还包括寄存器110,其可以包括例如通用寄存器和专用寄存器(例如,控制寄存器、模型特定寄存器(msr)等)。寄存器110可以包含可以在一个或多个实施例中使用的各种数据(例如,指向存储器地址的已编码指针114)。可以对已编码指针进行密码式编码或非密码式编码。用一些元数据对已编码指针进行编码。如果已编码指针受密码式编码,则地址比特的至少一部分(或切片)得以加密。在一些实施例中,用于地址、代码和/或数据的加密和解密的密钥116可以存储在寄存器110中。在一些实施例中,用于地址、代码和/或数
据的加密和解密的细调117可以存储在寄存器110中。
30.安全存储器存取逻辑106利用关于已编码指针114的元数据,其编码为已编码指针114的未使用的比特(例如,64比特地址的非正规比特,或例如由操作系统留出的地址范围,以使得地址范围的对应高阶比特可以用以存储元数据),以保护和/或提供对由已编码指针114指向的存储器位置的存取控制。例如,由安全存储器存取逻辑106提供的元数据编码和解码可以防止已编码指针114受操纵以引起缓冲区上溢,和/或可以防止程序代码存取它没有对存取的许可的存储器。指针可以当存储器(例如,由操作系统,在堆中)分配时对得以编码,并以数种不同方式(包括:通过使用函数(例如,malloc、alloc或new);或隐式地经由加载器,或由编译器静态地分配存储器,等)中的任何一种方式提供给执行程序。结果,用地址元数据对指向所分配的存储器的已编码指针114进行编码。
31.地址元数据可以包括有效范围元数据。有效范围元数据允许执行中的程序在有效范围内操纵已编码指针114的值,但是如果使用超越有效范围的已编码指针114存取存储器,则将破坏已编码指针114。替代地或附加地,有效范围元数据可以用以标识有效代码范围(例如,许可存取程序代码的存储器的范围(例如,所编码的范围信息可以用以在寄存器上设置显式范围))。可以在地址元数据中编码的其他信息包括对已编码指针114的存取(或许可)限制(例如,已编码指针114是否可以用以写入、执行或读取所引用的存储器)。
32.在至少一些其他实施例中,可以在已编码指针114的未使用的比特中对其他元数据(或上下文信息)(例如,明文地址切片的大小(例如,已编码指针中嵌入的存储器地址的明文切片中的比特的数量)、存储器分配大小(例如,由已编码指针引用的所分配的存储器的字节)、数据或代码的类型(例如,由编程语言定义的数据或代码的类)、许可(例如,已编码指针的读取、写入和执行许可)、数据或代码的位置(例如,存储数据或代码的地方)、待存储指针自身的存储器位置、数据或代码的所有权、已编码指针的版本(例如,每次对于新分配的存储器创建已编码指针就递增的序列号,及时确定所引用的所分配的存储器的当前所有权)、(例如,关于与已编码指针的关联而生成的)随机化比特的标签、特权等级(例如,用户或管理员)、密码式上下文标识符(或密式上下文id)(例如,用于每个已编码指针的随机化或确定性唯一值)等)进行编码。例如,在一个实施例中,地址元数据可以包括对已编码指针中的明文地址切片的大小进行编码的大小元数据。大小元数据可以指定可以由执行中的程序修改的已编码指针中的最低阶比特的数量。大小元数据取决于由程序请求的存储器的量。因此,如果请求16个字节,则将大小元数据编码为4(或指针的5个高比特中的00100),并且将指针的4个最低比特指定为可修改的比特,以允许寻址到存储器的所请求的16个字节。在一些实施例中,地址元数据可以包括与已编码指针关联的随机化比特的标签,以使标签对于敌手是不可预测的。敌手可以尝试猜测标签值,以使得敌手能够存取由指针引用的存储器,并且与用于生成版本值的确定性方法相比,将标签值随机化可以使敌手成功地猜测值成为较不可能的。在一些实施例中,代替随机化的标签值或除此之外,指针可以包括及时确定所引用的所分配的数据的当前所有权的版本号(或其他确定性地不同的值)。即使敌手能够猜测用于存储器的区域的当前标签值或版本号,例如,因为用于生成版本号的算法是可预测的,所以归因于敌手没有对稍后将用以对指针的该部分进行解密的密钥的存取,敌手也可能仍然不能正确地生成指针的对应受加密部分。
33.示例安全存储器存取逻辑106体现为处理器指令的部分(例如,体现为处理器指令
集架构的部分)或微代码(例如,存储在只读存储器中并由处理器102直接执行的指令)。在其他实施例中,安全存储器存取逻辑106的部分可以体现为硬件、固件、软件或其组合(例如,体现为由计算设备100的特权化系统组件142执行的编程代码)。在一个示例中,解密加载逻辑160和加密存储逻辑150体现为执行相应解密和加密操作以隔离存储器分隔的新加载(读取)和存储(写入)处理器指令的部分。解密加载逻辑160和加密存储逻辑150验证关于利用新处理器指令(例如,其可以是现有处理器指令(例如,mov)的对等物)的存储器读取和写入操作的已编码元数据,其中,通用寄存器用作用于从存储器读取值(例如,加载)或向存储器写入值(例如,存储)的存储器地址。
34.安全存储器存取逻辑106可由计算设备100执行,以例如在由计算设备100执行程序(例如,用户空间应用134)期间“内联”提供关于已编码指针的安全性。如本文所使用的那样,术语“间接地址”和“指针”可以均指代存储其他数据或指令的存储器位置的地址(例如,虚拟地址或线性地址)等。在示例中,对存储数据或代码的存储器位置的所编码的存储器地址进行存储的寄存器可以充当指针。故此,已编码指针114可体现为例如数据指针(其指代数据的位置)、代码指针(其指代可执行代码的位置)、指令指针或栈指针。如本文所使用的那样,“元数据”可以指代关于或涉及已编码指针114的信息(例如,有效数据范围、有效代码范围、指针存取许可、(例如,在比特中编码为幂的)明文地址切片的大小、存储器分配大小、数据或代码的类型、数据或代码的位置、数据或代码的所有权、指针的版本、随机化比特的标签、版本、软件的特权等级、密码式上下文标识符等)等。
35.如本文所使用的那样,“存储器存取指令”可以指代“mov”或“load”指令、或使数据在一个存储位置(例如,存储器)处得以读取、拷贝或以其他方式存取并移动到另一存储位置(例如,寄存器)中的任何其他指令(其中,“存储器”可以指代主存储器或缓存(例如,随机存取存储器的形式),并且“寄存器”可以指代处理器寄存器(例如,硬件))、或存取或操纵存储器的任何指令等。同样如本文所使用的那样,“存储器存取指令”可以指代“mov”、“store”或“store”指令、或使数据在一个存储位置(例如,寄存器)处得以读取、拷贝或以其他方式存取并移动到另一存储位置(例如,存储器)中的任何其他指令、或存取或操纵存储器的任何指令等。
36.地址密码术单元104可以包括逻辑(包括电路)以执行已编码指针的地址解码以获得数据(或代码)的存储器位置的线性地址。地址解码可以包括至少部分地基于密钥和/或从已编码指针导出的细调的当需要时(例如,如果已编码指针包括线性地址的受加密部分)的解密。地址密码术单元104可以还包括逻辑(包括电路)以执行已编码指针的地址编码,其包括至少部分地基于同一密钥和/或用以对已编码指针进行解码的同一细调的当需要时(例如,已编码指针包括线性地址的受加密部分)的加密。地址编码可以还包括:将元数据存储在指针的非正规比特中。各种操作(例如,地址编码和地址解码(包括地址或其部分的加密和解密))可以由与地址密码术单元104关联的处理器指令、其他处理器指令、或单独指令或指令系列、或由特权化系统组件(例如,操作系统内核或虚拟机监控器)执行的更高级代码、或作为指令集仿真器执行。如下文更详细描述的那样,地址编码逻辑和地址解码/解密逻辑均使用元数据(例如,有效范围、许可元数据、大小(幂)、存储器分配大小、类型、位置、所有权、版本、标签值、特权等级(例如,用户或管理员)、密式上下文id等中的一个或多个)和秘密密钥(例如,密钥116)对已编码指针114进行操作,以在存储器分配/存取等级保护已
编码指针114。
37.加密存储逻辑150和解密加载逻辑160可以使用密码式计算引擎108以对于待存储在由已编码指针114引用的存储器位置或从由已编码指针114引用的存储器位置获得的数据执行密码式操作。密码式计算引擎108可以包括逻辑(包括电路)以至少部分地基于从指向数据(或代码)的存储器位置的已编码指针导出的细调执行数据(或代码)解密,并且至少部分基于从指向用于数据(或代码)的存储器位置的已编码指针导出的细调执行数据(或代码)加密。引擎108的密码式操作可以使用细调,其包括已编码指针114的至少一部分(或从已编码指针生成的线性地址)和/或秘密密钥(例如,密钥116)以通过将数据/代码加密和解密绑定到已编码指针保护由已编码指针114引用的存储器位置处的数据或代码。
38.可以使用各种不同的密码式算法以实现地址密码术单元104和密码式计算引擎108。通常,使用128比特分组密码,高级加密标准(aes)一直是用于数据加密的支柱达数十年。同时,如今,存储器寻址典型地是64比特。可以参照用于64台计算机的64比特存储器寻址示出并且解释虽然本文实施例,但是所公开的实施例并非旨在受限于此,并且可以容易地适用于容纳用于指针的32比特、128比特或任何其他可用比特大小。同样,本文实施例可以进一步适用于容纳各种大小的分组密码(例如,使用simon、spec、可细调k-密码、prince或任何其他分组密码的64比特、48比特、32比特、16比特等)。
39.近来也显现适合于基于指针的加密的轻量级密码。例如,prince密码可以实现于在10nm工艺中需要少如799μm2的面积的3个时钟中,在十分之一硅面积中提供aes的时延的一半。密码式隔离可以利用这些新密码以及其他密码,引入新颖计算机架构概念,包括但不限于:(i)密码式寻址(即,使用关于所引用的数据的上下文信息(例如,嵌入指针中的元数据和/或外部元数据)、地址自身的切片或其任何合适组合作为细调的处理器处的数据指针的加密);和(ii)使用密码式已编码指针或其部分、非密码式已编码指针或其部分、关于所引用的数据的上下文信息或其任何合适的组合作为用于数据加密的细调的内核处的数据自身的加密。出于包括元数据的这种目的,可以使用可细调的各种加密模式(例如,计数器模式(ctr)和基于xor-加密-xor(xex)的细调码本模式针对密文窃取(xts))。除了提供数据机密性的加密之外,其隐式完整性也可以允许处理器确定是否正使用正确的密钥流和细调恰当地对数据进行解密。在一些分组密码加密模式下,分组密码创建密钥流,其然后(例如,使用xor运算或其他更复杂的逻辑)与输入分组组合,以产生加密的或解密的分组。在一些分组密码中,密钥流馈送到下一分组密码中,以执行加密或解密。
40.图1中的示例已编码指针114体现为寄存器110(例如,处理器102的通用寄存器)。示例秘密密钥116可以由特权化系统组件142的密钥创建模块148生成,并存储在寄存器110(例如,专用寄存器或控制寄存器(例如,模型特定寄存器(msr)))、可由处理器102读取的另一存储器位置(例如,固件、数据存储设备126的安全部分等)、外部存储器或适合于执行本文所描述的功能的另一形式的存储器之一中。在一些实施例中,可以实时计算用于对地址、数据或代码进行加密的细调,以用于加密或解密。细调117可以存储在寄存器110、可由处理器102读取的另一存储器位置(例如,固件、数据存储设备126的安全部分等)、外部存储器或适合于执行本文描述的功能的另一形式的存储器中。在一些实施例中,秘密密钥116和/或细调117存储在仅可由处理器读取的位置(例如,补充处理器存储器180)中。在至少一个实施例中,补充处理器存储器180可以实现为新的缓存或内容可寻址存储器(cam)。在一种或
多种实现方式中,补充处理器存储器180可以用以存储与密码式隔离有关的信息(例如,密钥和潜在地细调、凭证和/或上下文id)。
41.秘密密钥也可以得以生成并且与密码式已编码指针关联,以用于对指针中编码的地址部分(或切片)进行加密/解密。这些密钥可以与关联于指针的密钥相同或不同,以对由密码式已编码指针引用的数据(或代码)执行数据(或代码)加密/解密操作。为了易于解释,术语“秘密地址密钥”或“地址密钥”可以用以指代存储器地址的加密和解密操作中使用的秘密密钥,并且术语“秘密数据密钥”或“数据密钥”可以用以指代用于对数据或代码进行加密并且解密的操作中使用的秘密密钥。
42.在存储器分配操作(例如,“malloc”)时(或期间),存储器分配逻辑146对于缓冲区分配存储器的范围,返回指针连同元数据(例如,范围、许可元数据、大小(幂)、存储器分配大小、类型、位置、所有权、版本、标签、特权等级、密式上下文id等中的一个或多个)。在一个示例中,存储器分配逻辑146可以对已编码指针114中(例如,在加密之前,未使用的/非正规比特中)的明文范围信息进行编码,或者将元数据作为一个或多个分离参数提供给指令,其中,参数指定范围、代码许可信息、大小(幂)、存储器分配大小、类型、位置、所有权、版本、标签、特权等级(例如,用户或管理员)、密式上下文id或其某种合适的组合。说明性地,存储器分配逻辑146可以体现于特权化系统组件142的存储器管理器模块144中。存储器分配逻辑146使指针114用元数据(例如,范围、许可元数据、大小(幂)、存储器分配大小、类型、位置、所有权、版本、标签值、特权等级、密式上下文id、其某种合适的组合等)加以编码。元数据可以存储在已编码指针114的未使用部分(例如,64比特地址的非正规比特)中。对于一些元数据或元数据组合,可以在更大的地址空间(例如,128比特地址、256比特地址)中对指针114进行编码,以容纳元数据或元数据组合的大小。
43.为了确定有效范围元数据,示例范围规则逻辑选择有效范围元数据,以指示用于由已编码指针114引用的缓冲区的大小的上限。地址调整逻辑根据需要调整有效范围元数据,以使得只要已编码指针114引用处于由范围元数据指示的有效范围内的存储器位置,地址范围中的地址的高地址比特(例如,最高有效比特)就不改变。这样赋能已编码指针114(例如,由执行算术运算的软件等)操纵,但是仅只要操纵不使已编码指针114超出有效范围(例如,上溢缓冲区)。
44.在一个实施例中,有效范围元数据用以选择待加密的已编码指针114的部分(或切片)。在其他实施例中,待加密的已编码指针114的切片可以是先验已知的(例如,高32比特、低32比特等)。使用秘密地址密钥(例如,密钥116)和可选地,地址细调对已编码指针114的所选择的切片(以及在一些实施例中,调整)进行加密,如下文进一步描述的那样。在存储器存取操作(例如,读取、写入或执行操作)时,对先前已编码指针114进行解码。为此,使用秘密地址密钥(例如,密钥116)和地址细调(如果在加密中使用地址细调)对已编码指针114的受加密切片(并且在一些实施例中,受加密调整)进行解密,如下文进一步描述的那样。
45.已编码指针114基于适当的操作返回其原始(例如,正规)形式,以恢复已编码指针114的原始值(例如,真实的原始线性存储器地址)。为了在至少一个可能实施例中进行该操作,移除已编码指针114的未使用的比特中所编码的地址元数据(例如,将未使用的比特返回它们的原始形式)。如果已编码指针114成功地进行解码,则存储器存取操作成功地完成。然而,如果已编码指针114已经(例如,由软件、疏忽地、或由攻击者)操纵,以使得其值落在
由范围元数据指示的有效范围之外(例如,上溢缓冲区),则作为对指针中的受加密地址比特执行的解密过程的结果,已编码指针114可能受破坏。受破坏的指针将引起故障(例如,如果地址并未从分页结构/页表映射为存在,则普通保护故障或页故障)。可能导致生成故障的一种状况是稀疏地址空间。在此情况下,受破坏的地址很可能着落在未映射的页上并生成页错误。即使受破坏的地址比特着落在所映射的页上,用于该存储器区域的所授权的细调或初始化矢量也高度可能与在此情况下可以作为细调或初始化矢量提供的受破坏的地址不同。以此方式,计算设备100提供对抗缓冲区上溢攻击和相似利用的已编码指针安全性。
46.现在更详细地参照图1,计算设备100可以体现为用于执行本文描述的功能的任何类型的电子设备。例如,计算设备100可以体现为但不限于智能电话、平板计算机、可穿戴计算设备、膝上型计算机、笔记本计算机、移动计算设备、蜂窝电话、手机、消息传送设备、车辆遥测设备、服务器计算机、工作站、分布式计算系统、多处理器系统、消费者电子设备和/或被配置为执行本文描述的功能的任何其他计算设备。如图1所示,示例计算设备100包括至少一个处理器102,其体现有安全存储器存取逻辑106、地址密码术单元104和密码式计算引擎108。
47.计算设备100还包括存储器120、输入/输出子系统124、数据存储设备126、显示设备128、用户接口(ui)子系统130、通信子系统132、应用134和特权化系统组件142(其说明性地包括存储器管理器模块144和密钥创建模块148)。在其他实施例中,计算设备100可以包括其他或附加组件(例如,一般在移动和/或固定计算机中发现的组件(例如,各种传感器和输入/输出设备))。此外,在一些示例中,一个或多个说明性部件可以并入另一部件中,或以其他方式形成另一部件的一部分。计算设备100的组件中的每一个可以体现为软件、固件、硬件或软件和硬件的组合。
48.处理器102可以体现为能够执行本文描述的功能(例如,执行应用)的任何类型的处理器。例如,处理器102可以体现为单核或多核中央处理单元(cpu)、多cpu处理器或处理/控制电路、或多个各样的处理单元或电路(例如,cpu和图形处理单元(gpu)等)。
49.可以在内核的内部和内核边界的外部提供处理器存储器。例如,寄存器110可以包括于内核内,并且可以用以存储已编码指针(例如,114)、秘密密钥116和可能地细调117,以用于数据或代码和地址的加密和解密。处理器102可以还包括缓存170,其可以是例如数据在由处理器102获取的预计方面当它从存储器120受检索时得以存储的l1和/或l2缓存。
50.处理器可以还包括内核边界的外部的补充处理器存储器180。补充处理器存储器180可以是不可由软件直接存取的专用缓存。在一个或多个实施例中,补充处理器存储器180可以存储参数与其关联存储器区域之间的映射188。例如,密钥可以在映射188中映射到它们的对应存储器区域。在一些实施例中,与密钥配对的细调也可以存储在映射188中。在其他实施例中,映射188可以由软件管理。
51.通常,可以基于特定需要和架构实现方式以任何合适的方式处置密钥和细调。在第一实施例中,密钥和细调二者可以是隐式的,并且因此由处理器管理。在该实施例中,密钥和细调可以由处理器在内部生成,或由安全处理器在外部生成。在第二实施例中,密钥和细调二者是显式的,并且因此由软件管理。在该实施例中,使用包括引用密钥和细调的操作数的指令在指令调用时间引用密钥和细调。在该实施例中,密钥和细调可以存储在寄存器
或存储器中。在第三实施例中,密钥可以由处理器管理,而细调可以由软件管理。
52.计算设备100的存储器120可以体现为能够执行本文描述的功能的任何类型的易失性或非易失性存储器或数据存储。易失性存储器可以是需要电力以维持由介质存储的数据状态的存储介质。易失性存储器的非限定性示例可以包括各种类型的随机存取存储器(ram)(例如,dram或静态随机存取存储器(sram))。可以在存储器模块中使用的一种特定类型的dram是同步动态随机存取存储器(sdram)。在特定实施例中,存储器120的dram符合由联合电子器件工程委员会(jedec)颁布的标准(例如,用于双倍数据速率(ddr)sdram的jesd79f、用于ddr2 sdram的jesd79-2f、用于ddr3 sdram的jesd79-3f、或用于ddr4 sdram的jesd79-4a(这些标准可得于www.jedec.org处))。易失性存储器可以是需要电力以维持由介质存储的数据状态的存储介质。非易失性存储器的非限定性示例可以包括以下中的任一者或组合:固态存储器(例如,平面或3d nand闪存或nor闪存)、3d交叉点存储器、使用硫属化物相变材料(例如,硫属化物玻璃)的存储器器件,字节可寻址非易失性存储器器件、铁电存储器、硅-氧化物-氮化物-氧化物-硅(sonos)存储器、聚合物存储器(例如,铁电聚合物存储器)、铁电晶体管随机存取存储器(fe-tram)ovonic存储器、纳米引线存储器、电可擦除可编程只读存储器(eeprom)、其他各种类型的非易失性随机存取存储器(ram)和磁存储存储器。
53.在一些实施例中,存储器120包括一个或多个存储器模块(例如,双列直插式存储器模块(dimm))。在一些实施例中,存储器120可以位于与包括处理器102的集成电路芯片区分的一个或多个集成电路芯片上,或者可以位于与处理器102相同的集成电路芯片上。在各种实施例中,存储器120可以包括任何合适的类型存储器,并且不限于存储器的特定速度或技术。
54.在操作中,存储器120可以存储在计算设备100的操作期间所使用的各种数据和代码、以及操作系统、应用、程序、库和驱动程序。存储器120可以存储包括由处理器102执行的指令序列的数据和/或代码。
55.存储器120例如经由i/o子系统124以通信方式耦合到处理器102。i/o子系统124可以体现为电路和/或组件,以促进与处理器102、存储器120和计算设备100的其他组件的输入/输出操作。例如,i/o子系统124可以体现为或以其他方式包括存储器控制器集线器、输入/输出控制集线器、固件设备、通信链路(即,点到点链路、总线链路、导线、电缆、光导、印制电路板迹线等)和/或其他组件和子系统,以促进输入/输出操作。在一些实施例中,i/o子系统124可以形成片上系统(soc)的部分,并且连同处理器102、存储器120和/或计算设备100的其他组件一起合并于单个集成电路芯片上。
56.数据存储设备126可以体现为任何类型的物理设备或被配置用于数据的短期或长期存储的设备(例如,比如存储设备和电路、存储卡、硬盘驱动器、固态驱动器、闪存或其他只读存储器、作为只读存储器和随机存取存储器的组合的存储器设备、或其他数据存储设备)。在各种实施例中,存储器120可以缓存数据存储设备126上存储的数据。
57.显示设备128可以体现为能够显示数字信息的任何类型的显示器(例如,液晶显示器(lcd)、发光二极管(led)、等离子体显示器、阴极射线管(crt)或其他类型的显示设备)。在一些实施例中,显示设备128可以耦合到触摸屏或其他人机接口设备,以允许用户与计算设备100的交互。显示设备128可以是用户接口(ui)子系统130的部分。用户接口子系统130
可以包括包含物理或虚拟控制按钮或键、麦克风、扬声器、单向或双向静止图像和/或视频像机等的数个附加设备,以促进用户与计算设备100的交互。用户接口子系统130可以还包括诸如运动传感器、接近度传感器和眼睛跟踪设备之类的设备,其可以被配置为检测、捕获并且处理涉及计算设备100的各种其他形式的人类交互。
58.计算设备100还包括通信子系统132,其可以体现为能够赋能计算设备100与其他电子设备之间的通信的任何通信电路、设备或其集合。通信子系统132可以被配置为使用任何一种或多种通信技术(例如,无线或有线通信)和关联协议(例如,以太网、蓝牙
tm
、wi-fi
tm
、wimax、3g/lte等)以实行该通信。通信子系统132可以体现为网络适配器(包括无线网络适配器)。
59.示例计算设备100还包括数个计算机程序组件(例如,一个或多个用户空间应用(例如,应用134)和特权化系统组件142)。用户空间应用可以体现为经由例如显示设备128或ui子系统130与终端用户直接或间接进行交互的任何计算机应用(例如,软件、固件、硬件或其组合)。用户空间应用的一些示例包括文字处理程序、文档查看器/阅读器、网络浏览器、电子邮件程序、消息传送服务、计算机游戏、相机和视频应用等。除此之外,特权化系统组件142促进用户空间应用(例如,应用134)与计算设备100的硬件组件之间的通信。特权化系统组件142的部分可以体现为能够执行本文描述的功能的任何操作系统(例如,microsoft公司的windows的版本、google公司的android等)。替代地或附加地,特权化系统组件142的部分可以体现为能够执行本文描述的功能的任何类型的虚拟机监控器(例如,类型i或类型ii管理程序)。
60.示例特权化系统组件142包括密钥创建模块148,其可以体现为软件、固件、硬件或软件和硬件的组合。例如,特权化系统组件148的组件可以体现为操作系统内核、虚拟机监控器或管理程序的模块。密钥创建模块148创建秘密密钥116(例如,秘密地址密钥和秘密数据密钥),并且将它们写入处理器102具有读取存取的一个或多个寄存器(例如,专用寄存器)。为了创建密钥,密钥创建模块148可以执行例如随机数生成器或能够生成可以执行本文描述的功能的密钥的另一算法。在其他实现方式中,秘密密钥可以写入不可由软件直接存取的补充处理器存储器180。在又一实现方式中,秘密密钥可以受加密并存储在存储器120中。在一个或多个实施例中,当对于分配给特定软件实体的存储器区域生成数据密钥时,可以对数据密钥进行加密,并且可以向软件实体提供受加密数据密钥、指向受加密数据密钥的指针、或包括受加密密钥或指向受加密数据密钥的指针的数据结构。在其他实现方式中,可以向软件实体提供指向处理器存储器中存储的未加密数据密钥的指针或包括指向未加密数据密钥的指针的数据结构。通常,在本文所描述的实施例中可以使用用于生成、存储并且提供待用于对数据(或代码)进行加密并且解密以及待用于对指针中所编码的存储器地址(或其部分)进行加密并且解密的安全密钥的任何合适的机制。
61.应注意,可以使用无数方法以生成或获得用于本文公开的实施例的密钥。例如,虽然密钥创建模块148示出为计算设备100的部分,但是可以使用任何合适的认证过程从任何合适的外部源获得一个或多个秘密密钥,以将密钥安全地传递到计算设备100,这可以包括:生成密钥作为这些过程的部分。此外,特权化系统组件142可以是可信执行环境(tee)、虚拟机、处理器102、协处理器(未示出)或计算设备100中的或安全地连接到计算设备100的任何其他合适的硬件、固件或软件的部分。此外,密钥可以是“秘密的”,这旨在意指着其值
保持隐藏、不可存取、混淆或以其他方式受保护以防未授权的行动方(例如,软件、固件、机器、无关的硬件组件和人类)。
62.图2a是示出基于已编码指针210的实施例的密码式计算的普通过程200a的简化流程图。过程200a示出根据至少一个实施例的将数据存储(例如,写入)到由已编码指针210指示的存储器地址处的存储器区域,其中,数据的加密和解密绑定到指针的内容。计算设备100的硬件、固件和/或软件可以执行过程200a的至少一些部分。在所示示例中,指针210是已编码指针的示例,并且体现为包括元数据部分的已编码线性地址。元数据部分是某种类型的上下文信息(例如,大小/幂元数据、标签、版本等),并且线性地址可以通过任何数量的可能配置(本文描述其中的至少一些)得以编码。
63.根据各种实施例,指针210可以具有各种配置。例如,已编码指针210可以用明文线性地址加以编码,或可以用一些明文线性地址比特和一些受加密线性地址比特加以编码。已编码指针210也可以取决于特定实施例用不同的元数据加以编码。例如,已编码指针210中所编码的元数据可以包括但不一定限于大小/幂元数据、标签值或版本号中的一个或多个。
64.通常,过程200a示出密码式计算流程,其中,已编码指针210用以获得用于待存储数据的存储器220的存储器区域的存储器地址,并用以至少部分地基于从已编码指针210导出的细调对于待存储的数据进行加密。首先,地址密码术单元202对已编码指针210进行解码,以获得已解码线性地址212。已解码线性地址212可以用以使用转译后备缓冲区204或页表(未示出)获得存储器220中的物理地址214。至少部分地从已编码指针210导出数据细调217。例如,数据细调217可以包括完整已编码指针、已编码指针的一个或多个部分、已解码线性地址的部分、完整已解码线性地址、已编码元数据和/或外部上下文信息(例如,未在指针中编码的上下文信息)。
65.一旦已经从已编码指针210导出细调217,密码式计算引擎270就可以通过基于数据密钥216和数据细调217对未加密数据222进行加密计算受加密数据224。在至少一个实施例中,密码式计算引擎270包括加密算法(例如,密钥流生成器),其可以按特定大小粒度性(任何合适的大小)体现为aes-ctr模式分组密码272。在该实施例中,数据细调217可以用作初始化矢量(iv),并且已编码指针210的明文偏移可以用作计数器值(ctr)。密钥流生成器可以对数据细调217进行加密,以产生密钥流276,并且然后密码式操作(例如,逻辑函数274(例如,异或(xor))或其他更复杂的操作)可以对未加密的数据222和密钥流276得以执行,以生成受加密数据224。应注意,在正从已编码指针210获得物理地址214的同时,密钥流276的生成可以开始。因此,并行操作可以增加对未加密的数据进行加密的效率。应注意,先于(或在一些实例中,代替)存储到存储器220,受加密数据可以存储到缓存(例如,170)。
66.图2b是示出基于已编码指针210的实施例的密码式计算的普通过程200b的简化流程图。过程200b示出根据至少一个实施例的在由已编码指针210引用的存储器地址处获得(例如,读取、加载、获取)存储器区域中存储的数据,其中,数据的加密和解密绑定到指针的内容。计算设备100的硬件、固件和/或软件可以执行过程200b的至少一些部分。
67.通常,过程200b示出密码式计算流程,其中,已编码指针210用以获得用于存储受加密数据的存储器220的存储器区域的存储器地址,并且一旦受加密数据从存储器区域得以获取,就至少部分地基于从已编码指针210导出的细调对受加密数据进行解密。首先,地
址密码术单元202对已编码指针210进行解码,以获得用以从存储器获取受加密数据224的已解码线性地址212,如在232所指示的那样。至少部分地从已编码指针210导出数据细调217。在用于从存储器加载/读取数据的该过程200b中,以与用于向存储器存储/写入数据的反向过程200a中相同的方式导出数据细调217。
68.一旦已经从已编码指针210导出细调217,密码式计算引擎270就可以通过基于数据密钥216和数据细调217对受加密数据224进行解密计算所解密的(或未加密的)数据222。如先前所描述的那样,在该示例中,密码式计算引擎270包括加密算法(例如,以特定大小粒度性(任何合适的大小)体现为aes-ctr模式分组密码272的密钥流生成器)。在该实施例中,数据细调217可以用作初始化矢量(iv),并且已编码指针210的明文偏移可以用作计数器值(ctr)。密钥流生成器可以对数据细调217进行加密以产生密钥流276,并且然后密码式操作(例如,逻辑功能274(例如,异或(xor)或其他更复杂的操作))可以对受加密数据224和密钥流276得以执行,以生成解密的(或未加密的)数据222。应注意,在受加密数据在232正被获取的同时,密钥流的生成可以开始。因此,并行操作可以改进对受加密数据进行解密的效率。
69.图3示出根据本公开的至少一个实施例的密码式已编码指针300。指针300包括明文上下文信息302、密文304和明文地址部分306。
70.如本文所使用的那样,“上下文信息”旨在包括与存储器分配、其关联存储器地址、其关联指针、分配存储器所针对的软件和/或所分配的存储器的内容有关的任何元数据或其他信息。以下描述上下文信息的各种示例。
71.软件正日益受分隔,其中,针对在分隔之间共享哪些数据的对象粒度式控制正变为期望的。本公开的各种实施例可以用仅每对象的元数据的单个拷贝实现这些控制,包括对于密码式保护的支持,因此与替代方法相比,在高效地强制储器安全的同时,减少存储器和性能开销。
72.在特定实施例中,公开具有128比特的比特长度的密码式已编码指针(虽然比特大小不限于此)。带有这种长度的地址具有用于上下文信息的充足空间,因此当使用该上下文信息作为细调时,改进数据的密码式强度。此外,可以增加指针内的受加密切片的分组大小,进一步改进数据的安全性。
73.密文304可以包括对应于明文的受加密数据分组,明文可以包括附加上下文信息和地址的部分之一或二者。地址的另一部分可以包括于明文地址部分306中。
74.图4示出根据本公开的至少一个实施例的带有各种上下文信息的密码式已编码指针。指针400包括可以相似于上述302、304和306的部分402、404和406。在所描绘的实施例中,明文上下文信息402包括幂大小412、数据密钥选择器418和许可420。密文404可以是对应于底层明文的密文,其包括版本422、类型424、消息认证代码426、其他上下文信息428b和地址部分430。因此,关于这些元素(例如,422、424、426、428、430)所示的比特位置是用于底层明文的。
75.虽然关于各种明文上下文信息402、其他上下文信息(例如,422、424、426、428)、地址部分430和明文地址部分406示出特定位置和编码长度,但是其他实施例可以包括在任何合适的位置并使用任何合适的长度在指针中编码的任何合适的信息(例如,呈任何合适格式的地址和任何合适的上下文信息)。在各种实施例中,上下文信息的类型可以包括于明文
上下文信息402部段中或者编码于指针的密文404部分中。例如,类型424可以包括于明文上下文信息402中,而不是编码于密文404中。
76.图4是根据本公开的至少一个实施例的示例指针400的图。具体而言,图4示出使用幂大小412作为明文上下文信息402的部分以其基本格式密码式编码的128比特指针(地址)。在所示示例中,已编码指针400包括幂大小412(例如,所示示例中的6比特),其指示指针400的不定明文部分416的大小(例如,所示示例中的15比特)(例如,包括指针400的不定明文部分416的数个低阶地址比特,这些比特可以由软件自由操纵以用于指针算术,以精细地控制使用指针400存取的分配的部分)。在一些实施例中,幂大小412可以包括指示基于2的幂的大小的幂(指数)元数据比特。该大小可以是例如分配的大小或最适合分配的大小的2的幂大小。
77.如图4所示,幂大小412可以指示组成非不定明文部分414和不定明文部分416的比特的数量。在特定实施例中,构成非不定明文部分414和不定明文部分416的比特的总数量可以是恒定的,其中,各个部分的大小由大小元数据部分602规定。例如,如果幂元数据值为0,则不存在不定明文比特和所有32个剩余地址比特(非不定明文部分414)用作对从地址切片(例如,线性地址比特的子集)生成密文部分404的细调,其中,密文部分404与非不定明文部分414相邻并且比非不定明文部分414更重要。作为进一步的示例,如果幂元数据值是1,则存在1比特的不定明文,如果幂元数据值是2,则存在2比特的不定明文,直到不定明文的32比特不导致非不定明文比特(414)。不定明文416可由软件操纵,例如,以用于指针算术或其他操作。可以用小的可细调分组密码(例如,simon、speck、或64比特分组大小的可细调k密码或其他可变比特大小可细调分组密码)对指针400的密文部分404(例如,所示示例中的64比特)进行加密。一些地址比特组成非不定明文部分414(例如,所示示例中的17比特),并且可以用作用于用以对密文部分404进行加密的可细调分组密码的细调的部分。虽然这些比特也是地址的明文(未加密)部分,但是它们不能在不使密文部分404不正确地解密的情况下像不定明文部分416的比特那样由软件(例如,指针算术)修改。图4所示的基本指针格式允许密码式描述对象大小及其在存储器中的位置。在一些情况下,除了指针之外,幂大小412部分也可以提供为单独参数;然而,在一些情况下(例如,如所示),幂大小412的比特可以与指针400集成。
78.还应注意,在替选实施例中,幂大小412可以指示组成非不定明文部分414的比特的数量,并且因此规定剩余的比特的数量以构成不定明文部分416。例如,如果幂元数据值为0,则不存在非不定明文比特(414),并且所有32个剩余地址比特(不定明文部分416)可以由软件操纵。作为进一步的示例,如果幂元数据值是1,则存在1比特的非不定明文,如果幂元数据值是2,则存在2比特的非不定明文,直到非不定明文的32比特不导致不定明文比特(416),并且因此,没有可以由软件操纵的比特。
79.此外,虽然基于对于密文部分404使用64比特示出并且描述指针400,但是指针格式并非旨在受限于此。可以基于容易可得的64比特分组加密密码选择待加密的地址切片和上下文信息。然而,可以另外使用采用任何其他分组大小(例如,96比特、可变等)的加密密码。
80.当处理器单元在密码式模式下正运行并且正使用已编码指针(地址)(例如,以与图4的指针400相同或相似的方式格式化的指针)存取存储器以得到实际线性/虚拟地址存
储器位置时,处理器单元采取所编码的地址格式并使用由幂大小(例如,图4中的412)确定的可变数量的非不定明文比特(例如,图4中的414)和秘密密钥对密文部分(例如,图4中的404)进行解密。在一些实例中,可以包括幂大小412和/或其他上下文信息作为用于对密文部分404进行解密的细调的部分(本文也称为“地址细调”)。如果地址不正确地解密,则处理器可能归因于在受破坏的线性/虚拟地址的情况下的所尝试的存储器存取而产生普通保护故障(#gp)或页故障。
81.明文上下文信息402还包括密钥选择器418。密钥选择器418可以包括用以对指针400进行加密的地址密钥的标识符或用于对由指针400引用的数据进行加密的数据密钥。在一些实施例中,上下文信息可以包括数据密钥选择器和地址密钥选择器二者。在一些实施例中,密钥选择器418可以是指入存储多个密钥的表的条目中的索引,其中,受索引的条目包括用以对数据或指针400进行加密/解密的密钥。
82.这些实施例对于在软件实体之间共享数据可能是特别有用的。例如,实体可以使用密钥选择器418以引用共享的数据密钥,以对于待与一个或多个其他实体共享的数据进行加密(并且这些实体当存取数据时可以使用密钥选择器以引用同一密钥)。在一个示例中,由应用使用私钥创建的数据可以使用私钥加以解密,并且然后使用共享密钥加以重新加密,以赋能数据的共享。例如,可以通过具有两个不同的密钥选择器(例如,0(用于共享)和1(用于私有))实现该情况。在一个实施例中,应用可以使用指定私钥的存储器存取指令将数据加载到寄存器(例如,通用寄存器)中,并且然后发放指定共享密钥的另一存储器存取指令以将寄存器的内容存储回到地址。指针地址可以是每个存储器存取指令中的相同地址,但是可以包括或引用不同的密钥选择器。在此情况下,数据正(通过寄存器)被写回相同的存储器位置,但是使用不同的密钥。
83.密钥选择器也可以用以对应用内的库进行沙箱化。例如,应用可以经由由密钥选择器索引的密钥限制库的数据使用,以使得库不能存取应用的其他数据(例如,库将仅具有对可以使用该密钥加以解密的数据的存取)。
84.在各种实施例中,生成带有包括密钥选择器的指针的存储器存取指令的软件实体可以让自己生成密钥。例如,软件实体可以具有对将密钥存储到存储密钥的表中的存取。
85.如果密钥选择器418引用地址密钥,则密钥选择器418应包括于明文上下文信息402中(以使得它可以用在指针400的密文404的解密中)。如果密钥选择器418引用数据密钥,则密钥选择器418可以放置于明文上下文信息402内或在密文404内受加密。将密钥选择器418放置在明文上下文信息402中可能是有利的,因为该实施例可以允许与数据有关的解密操作在密文404的解密完成之前开始。例如,如果处理器在数据之前具有密钥选择器418(归因于密钥选择器418放置于明文上下文信息402内),则在计数器模式下,它可以能够在数据到达之前计算密钥流。处理器可以获知使用由密钥选择器引用的数据密钥加密的,它用作计数器值的受编码地址。当数据到达时,处理器可以于是简单地用计算出的密钥流执行xor操作,以对关联数据进行解密。
86.明文上下文信息402还包括许可420,其可以替代地在密文404内得以加密。许可420可以包括用于存储器位置的任何合适的存取控制信息(例如,读取、写入和执行比特,其标识发放引用指针400的指令的实体是否可以在由指针400引用的线性地址处读取、写入或执行对象)。在一些实施例中,许可420可以包括所有者的标识,因此任何期望存取数据的实
体可能需要准确地标识数据的所有者。
87.对应于密文404的明文包括版本422,其可以替代地包括于明文上下文信息402中。版本422可以是用于存储器分配的随机值或确定性不同值,当分配得以释放并重新分配时可以改变,以保护不受释放后使用攻击。在一个示例中,每次(例如,经由malloc或new命令)新分配存储器的部分时,就可以改变(例如,递增)用于特定分配的版本422。当在数据细调中使用版本时,先前使用分配的实体将不再能够正确地对数据进行解密,因为它将具有用于数据的不同版本。
88.对应于密文404的明文包括类型424,其可以替代地包括于明文上下文信息402中。例如,对于指定不同类的编程语言,类型424可以用以指定分配中存储的数据的类型(例如,浮点数、标量整数、矢量整数、对象等)。在一些实施例中,当存取指针400时,上下文信息中指定的类型424可以与程序中指定的预期类型id匹配,以减轻类型混淆漏洞。
89.对应于密文404的明文包括消息认证代码426。可以在包括任何上下文信息和/或线性地址的任何部分(或全部)的指针400的任何合适部分上计算mac 426。在存取数据或代码之前,处理器单元可以从线性地址和/或上下文信息的对应部分重新计算mac 426。如果重新计算的mac与嵌入在指针400中的mac匹配,则认为指针对于在该存取位点处的使用是有效的。该检查可以验证指针的完整性(以检测指针的伪造)。如果检查失败,则不允许存储器存取进行。
90.在一些实施例中,可以通过使用指针400的有关比特计算散列函数生成mac 426。例如,在一个实施例中,使用安全散列算法3(sha-3)算法以计算mac 426。
91.图5示出根据本公开的至少一个实施例的带有包括完整性比特508的上下文信息的密码式已编码指针500。作为对在上下文信息中包括mac(例如,426)的替选,用以生成指针500(其包括明文上下文信息502、密文504和明文地址部分506)的密文504的明文可以包括设置为特定值(例如,全0、全1或其他合适的值)的多个完整性比特508。完整性比特508可以是上下文信息、已编码线性地址的部分或其组合。当用以对密文504进行解密的分组密码具有足够的扩散时,当密文504的一个或多个比特在伪造尝试期间(或归因于任何其他原因)翻转时,扩散可以当密文得以解密时导致底层完整性比特508的改变(例如,平均50%的完整性比特可以翻转)。因此,可以使用完整性比特508检测指针的修改,而不必计算mac。在一个实施例中,明文完整性比特508全部设置为0,并且因此,当密文504得以解密时,如果完整性比特508的一个或多个设置为1,则检测到密文504已受操纵的确定。
92.再次参照图4,在各种实施例中,其他上下文信息428(无论是在指针400的明文428a中还是在指针400的密文404内加密的上下文信息428b的底层明文中)可以包括任何合适的上下文信息。例如,上下文信息428可以包括指入包括任何合适信息的表中的索引(例如,本文描述的上下文信息或其他合适信息的任何合适的组合可以包括于该表中)。
93.作为另一示例,上下文信息428可以包括指示指针400是有效的所达时间量的时间戳。例如,上下文信息428可以包括指定指针400是有效的开始时间和指针400是有效的所达的持续时间的时间戳。作为另一示例,上下文信息428可以包括指定指针400超期的结束时间的时间戳。时间戳信息可以与处理器单元保持的挂钟时间进行比较,以确定指针400是否仍是有效的,并且如果指针不是有效的,则处理器可以防止存储器存取。
94.作为另一示例,上下文信息428可以包括对于用户定义值保留的一个或多个比特。
发放包括指针的存储器存取的软件实体可以定义放置于用户定义值中的值。
95.作为另一示例,上下文信息428可以包括可以在垃圾收集操作中使用的信息。许多编程语言利用自动存储器管理,其可以利用一般称为垃圾收集的过程。垃圾收集过程可以跟踪在应用内正如何引用存储器,并(例如,通过检测无论直接还是间接不再从栈存储器、全局变量或寄存器引用的孤立对象)检测对存储器的活动引用何时已经被消除或已经超期。底层存储器可以然后得以回收并用于其他目的。在至少一些实施例中,垃圾收集在存储对象或动态数据的存储器中的堆上进行操作。上下文信息428可以包括例如使用信息,其指示最近如何存取由指针引用的数据。垃圾收集器可以迭代通过指针,并确定哪些指针是最近最少使用的。垃圾收集器可以在确定如何排列对象中使用该信息。
96.作为另一示例,上下文信息428可以包括特权等级。特权等级可以指示例如存储器得以分配所针对的软件的用户或管理员模式。作为另一示例,上下文信息428可以包括执行存储器存取的分隔的标识符。在一个示例中,上下文信息428可以包括分配的数据是否为共享数据的指示。
97.在另一示例中,上下文信息428可以包括与函数调用关联的信息。例如,当对另一软件实体进行函数调用时,包含指向代码的指针(例如,400)的返回地址可以存储在特定位置处的栈上,以允许当函数调用结束时程序流继续。如果正使用指针(例如,400)作为返回地址,则指针的上下文信息可以包括关于返回地址存储在栈上的位置的信息,以防止实体改变栈上的返回地址的位置。这可以有助于防止面向返回的编程攻击。其他实施例可以将该信息作为单独变量放置在栈上,或者它可以存储在单独的影子栈上。
98.作为另一示例,上下文信息428可以包括指示受调用者进入调用者的栈帧中(例如,受调用者可以进入调用者的栈帧中,以设置自变量)有多深的状态信息。如果受调用者进入得太远,例如,超控调用者的局部变量,则状态信息可以指示未授权的活动。在一些实施例中,上下文信息428可以是表明受调用者已经侵入到调用者的栈帧中的越过返回地址位置有多远的增量值(例如,水印)(两个栈帧之间的划分线可以是在栈上存储返回地址的位置)。有时应用期望这种行为,因为自变量在调用者的栈帧上传递给受调用者函数。然而,这些值不为调用者所重新读取,因为它们仅旨在针对受调用者。通过使用受调用者的栈指针跟踪受调用者在调用者的栈上存取了哪些值,如果调用者(在回到调用者的返回之后)重新读取这些值(该情况如果这些值旨在作为对受调用者的函数调用的自变量则将并非是预期的),则处理器可能引发故障。由于调用者可以用新数据盖写那些值,因此在一些实施例中,故障可以受限于先读取后写入/先加载后存储。返回函数可以简单地用特殊值盖些调用者的栈帧上的数据直到水印,以指示存储器将不被调用者重新读取(但是可以被写入)。
99.在一些实施例中,上下文信息428可以包括是否应使用(例如,由指令指针所指示的)代码地址作为对于对数据进行解密的细调的指示。在一些实例中,通过使用细调中的代码地址(或从其导出的值)对数据进行加密,代码地址可以绑定数据加密。当存取数据时,指针可以包括应使用代码地址(或从其导出的值)以对数据进行解密的指示。在这些实施例中,数据的解密可以受限于例如对数据进行加密的相同函数。在一些实施例中,可以从由细调使用的值省略代码地址的一些最低有效比特,以使得毗邻代码(例如,同一函数的代码,而非单个地址处的代码)的群组可以存取数据。
100.在另一实施例中,上下文信息可以包括或关联于进入函数的初始点。因此,用用以
对数据进行加密的细调可以利用进入发放存储器存取的函数的地址。
101.在各种实施例中,上下文信息428可以包括与代码路径关联的信息。例如,上下文信息428可以包括代码路径的散列或导致包括指针的存储器存取指令的发放的关键事件(例如,条件分支)的散列。因此,仅当该特定散列已经在控制流上累计到调取指针的点,才可以成功地使用指针。
102.在另一实施例中,当迁移虚拟机或其他软件实体时,上下文信息428可以包括状态比特,其指示是否已经迁移虚拟机的特定存储器区域。
103.在又一实施例中,上下文信息428可以包括边界信息(例如,数据的区域的开始和结束)。
104.在另一实施例中,上下文信息428可以包括污点(taint)跟踪信息。例如,污点跟踪信息的使用可以确保一次仅单个指向区域的有效指针存在。例如,上下文信息428可以包括设备id,其当其得以创建时分派给分配,并且指针的随后用户(例如,与最初请求分配的实体不同的软件实体)可以在指针中包括设备id以存取数据。
105.任何其他合适的上下文信息(例如,指示处于由指针引用的分配中的存储器的字节的大小、包含与存储器地址关联的随机化比特的标签、或包括用于存储器地址的随机化或确定性唯一值的密码式上下文标识符或其他合适的上下文信息中的一个或多个)可以包括于上下文信息428内。
106.一个或多个指针编码实施例可以使用上下文信息的任何单个项作为细调(地址细调或数据细调)的部分,或者可以使用细调中的上下文信息项的任何合适的组合。细调中所使用的上下文信息可以存储在任何类型的存储中,这可以基于特定需要和实现方式。例如,上下文信息的一个或多个项可以嵌入128比特指针(或其他长度指针(例如,256比特指针))(例如,指针400)中。在一种场景中,上下文信息可以存储在未加密指针的最高比特中。(除了将上下文信息嵌入指针400中之外还可以使用的)用于上下文信息的其他示例类型的存储包括但不一定限于:将上下文信息嵌入提供给指针加密指令和存储器存取指令的另一操作数内,和/或将上下文信息存储在控制寄存器中。
107.图6是根据本公开的至少一个实施例的用于对密码式已编码指针进行解密以产生线性地址的环境的图600。在该示例中,基于所分配的存储器的存储器地址(例如,线性或虚拟地址)对指针400进行密码式编码,如本文先前所描述的那样。指针400包括明文上下文信息402、密文404、非不定明文部分414和不定明文部分416。地址密码术单元620用以对指针400进行解码,以获得解密的线性地址614以及解密的上下文信息402(其可以包括密文内受加密的上下文信息的明文版本404)。例如,附加硬件单元(例如,地址生成单元(agu)622、转换后备缓冲区(tlb)624和缺页处理程序(pmh)626)将解密的线性地址614转换为物理地址,以用于存取由指针400引用的所分配的存储器中的数据。
108.地址密码术单元620包括用于对指针400的密文部分404进行解密的密码式算法。密文部分404可以包括指向(或引用)所分配的存储器的存储器地址(例如,线性地址)的受加密切片。密文部分404可以还包括受加密上下文信息(例如,本文描述的任何信息)。在至少一个实施例中,地址密码术单元620包括分组密码,其基于地址密钥618和第二输入(本文也称为“细调”或“地址细调")612执行受加密地址切片(以及可选地,上下文信息)的解密。通常,分组密码是一种加密算法,其使用对称密钥以通过提供带有对于防止敌手可预测地
操纵所解密的地址切片是重要的性质(例如,比特扩散和混淆)的机密性的方式对数据的分组进行加密。至少一些分组密码实施例包括初始化矢量(iv),其是取决于特定分组密码要求而成为随机的、伪随机的或非重复的固定大小输入。对于使用需要初始化矢量的分组密码的实施例,地址细调612可以组成初始化矢量的全部或部分。在一些实施例中,地址细调可以包括来自以下的上下文信息的一个或多个项:来自指针(例如,图4的示例中的幂大小412或本文描述的任何其他上下文信息)、来自另一寄存器、来自存储器和/或来自指令操作数。
109.本文所公开的实施例允许各种指针编码,并且因此允许各种细调。细调(地址细调或数据细调)可以包括随机值、用于不同存储器分配的确定性不同值、不能随机化或生成为任意值的语义含义或其任何合适的组合。随机性和/或确定性不同值可以用作细调(或用作细调的部分),以使密码术多样化。这些细调在本文中称为“密式上下文标识符”或“密式上下文id”,并且可以采取随机细调(或初始化矢量)、由可信软件生成并且控制的确定性细调(或初始化矢量)的形式或随机密码式密钥的形式。然而,特定细调可能具有不能随机化或生成为任意值的语义含义。例如,cpu使用上下文信息中的大小字段,以选择用于处理的指针比特的范围。因此,已编码指针(例如,指针400)的大小部分对于每个大小值具有良好定义的解释。
110.在图4所示的实施例中,完全从指针400获得地址细调612,而无需其他存储位置(例如,寄存器、其他存储器、指令操作数)中的附加查找。在一个实施例中,地址细调612可以包括非不定明文比特(例如,414)、用于不定明文比特(例如,416)的填充和(除了在密文404内受加密的上下文信息之外的)本文描述的任何上下文信息中的一个或多个。填充可以是用以填充明文地址的可变的、可修改的部分(不定明文部分416)的任何保留值。例如,填充可以是全0、全1或任何其他指定值。如果大小元数据没有定义任何不定明文部分(例如,如果大小值=0),则不需要填充。相反,如果大小元数据将不定明文部分定义为包括所有明文地址比特(例如,如果幂大小值=32),则不对非不定明文部分进行编码,并且用填充(例如,全0)装填整个32比特。在示例指针400中,非不定明文部分包括17比特,并且填充包括15比特。例如,关于图1的特权化系统组件142和密钥创建模块148,可以通过本文先前描述的任何合适的方式生成或获得地址密钥618。
111.任何合适的分组密码密码式算法可以实现为地址密码术单元620。例如,可以使用小的可细调分组密码(例如,simon、speck、64比特分组大小的可细调k密码、或其他可变比特大小可细调分组密码)。高级加密标准(aes)提供可以通过任何数量的方式实现的各种分组密码,以实现数据的分组(例如,密文404)的加密/解密。例如,aes基于xor-加密-xor(xex)的细调码本模式针对密文窃取(aes-xts)可能是合适的。在其他实施例中,可以实现aes计数器(ctr)操作模式。
112.一旦密文部分404的解密是成功的,地址密码术单元620就也可以基于线性地址的所解密的切片生成解密的线性地址614。线性地址的所解密的切片然后与非不定明文部分和不定明文部分416串接。此外,可以对线性地址的所解密的切片的最高有效比特执行符号扩展,以将高比特填充或设置为特定值。
113.图7是示出获得由已编码指针710的另一实施例引用的数据的示例过程700的详细流程图,其中,数据的加密绑定到指针的内容。过程700的至少一些部分可以由计算设备100
的硬件、固件和/或软件执行。指针710可以体现为128比特(或其他长度)已编码线性地址,其包括上下文信息部分702,mac 703和不定明文地址部分708。上下文信息部分702可以包括本文讨论的任何上下文信息。在一个实施例中,上下文信息部分702包括标签/版本部分,其可以包括每次对于所请求的存储器分配对指针进行编码就随机地生成的时间安全比特。替代地,标签/版本部分可以包括版本号或用于所请求的存储器分配的任何确定性唯一值。例如,标签/版本部分可以是每次对于所请求的存储器分配对指针进行编码就生成的依次递增的数字。虽然可以使用任一方法,但是在对地址比特皆不进行加密的该实施例中,带有随机生成的比特的标签可以提供对抗攻击的更大保护,因为随机生成的比特比确定性不同值(例如,顺序递增的数字)更难于确定。对于地址的部分受加密的本文公开的其他实施例,版本可能是更期望的,因为加密提供对抗攻击的保护,并且版本号使用较少的资源以生成。可以在已编码指针710的任何合适部分上计算mac 703,以提供完整性验证。
114.应注意,上下文信息部分702、mac 703和地址部分708可以被配置有比特的各种数量。在一个实施例中,上下文信息702可以包括2比特保留部分,其可以被指定为管理员比特和已编码比特指示符。管理员比特可以指示地址是位于管理员地址空间内(例如,“1”)还是位于用户模式地址空间内(例如,“0”)。已编码比特指示符可以设置为管理员比特的相反值,以指示指针(例如,用标签/版本比特)加以编码,或者可以设置为管理员比特的相同值,以指示指针未受编码。
115.在两个阶段中标识过程700的操作:地址形成(阶段i)和数据解密(阶段i)。过程700不包括地址解密阶段,因为已编码线性地址并未受加密。相反,在不定明文地址部分708中对线性地址进行编码。
116.在阶段i中,可以从已编码指针710形成已解码线性地址730。在至少一个实施例中,不作为线性地址的部分的最高比特722(例如,上下文信息702和mac 703)可以设置为相同的比特值(例如,0或1)。不定明文地址部分708的比特构成已解码线性地址730的低比特。
117.已解码线性地址730用以寻找待在阶段ii中解密的受加密数据的存储器位置。解密算法(例如,密钥流生成器750)对受加密数据进行解密。在至少一个实施例中,密钥流生成器750可以按特定大小粒度性(任何合适的大小)实现为aes-ctr模式分组密码。在该实施例中,已编码指针的内容用作初始化矢量(iv)或数据细调744。具体而言,上下文信息702(或其子集)和/或明文地址部分708的比特可形成用于对受加密数据进行解密的数据细调(或iv)。密钥流生成器750基于数据密钥742对数据细调744进行加密,以生成密钥流751。然后对密钥流751和从由已解码线性地址730引用的存储器位置选择的受加密输入数据分组(或缓存线)746执行xor操作752。受加密输入数据分组746的粒度性与从密钥流生成器750输出的密钥流751匹配,并且xor操作752产生解密的输出数据分组754。附加地,在一些实施例中,并非位于指针710中的其他上下文信息也可以用在数据细调744中。
118.以下的图8-图12提供一些可以在如本文所描述的实施例的上下文中使用的示例计算设备、计算环境、硬件、软件或流程。
119.图8是示出根据至少一个实施例的示例密码式计算环境800的框图。在所示示例中,密码式寻址层810扩展跨越示例计算矢量(例如,处理器单元)中央处理单元(cpu)802、图形处理单元(gpu)804、人工智能(ai)806和现场可编程门阵列(fpga)808。例如,cpu 802和gpu 804可以对于存储器812中存储的数据共享相同的虚拟地址转译,并且密码式地址可
以构建在该所共享的虚拟存储器上。它们可以对于给定的执行流程共享相同的进程密钥,并遵照相同的密码式算法计算相同的细调,以对密码式已编码地址进行解密并且对由这些已编码地址引用的数据进行解密。
120.加以组合,本文所描述的能力可以赋能密码式计算。可以从缓存的第一层级通过缓存的最后层级并进入系统存储器中在存储器层次结构的每一层级对存储器812进行加密。将密码式地址编码绑定到数据加密可以允许极端精细粒度对象边界和存取控制,赋能下至甚至用于功能即服务的单独功能及其对象的精细粒度安全容器。对调用栈上的返回地址(取决于它们的位置)进行密码式编码也可以在不需要影子栈元数据的情况下赋能控制流程完整性。因此,仅取决于密码式寻址和各个密码式数据绑定,可以通过密码式方式执行任何数据存取控制策略和控制流程。
121.图9-图14是可以根据本文所公开的实施例使用的示例性计算机架构的框图。通常,可以使用本领域中已知的用于处理器和计算系统的任何计算机架构设计。在一个示例中,本领域已知的用于膝上型计算机、台式机、手持式pc、个人数字助理、平板计算机、工程工作站、服务器、网络设备、服务器、电器、网络集线器、路由器、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、智能电话、移动设备、可穿戴电子设备、便携式媒体播放器、手持设备和各种其他电子设备的系统设计和配置也适合于本文描述的计算系统的实施例。通常,用于本文所公开的实施例的合适计算机架构可以包括但不限于图9-图11所示的配置。
122.图9是根据实施例的处理器的示例说明。处理器900是可以结合本文示出并且描述的实现方式(例如,处理器102)使用的一种类型的硬件设备的示例。处理器900可以是任何类型的处理器(例如,微处理器、嵌入式处理器、数字信号处理器(dsp)、网络处理器、多核处理器、单核处理器或其他用于执行代码的设备)。虽然在图9中仅示出一个处理器900,但是处理元件可以替代地包括图9中所示的处理器900中的多于一个。处理器900可以是单线程内核,或者对于至少一个实施例,处理器900可以是多线程的,因为它可以包括每内核多于一个的硬件线程上下文(或“逻辑处理器”)。
123.图9还示出根据实施例的耦合到处理器900的存储器902。存储器902可以是对于本领域技术人员已知的或以其他方式可用的广泛各种存储器(包括存储器层次结构的各个层)中的任一种。这些存储器元件可以包括但不限于随机存取存储器(ram)、只读存储器(rom)、现场可编程门阵列(fpga)的逻辑块、可擦除可编程只读存储器(eprom)和电可擦除可编程只读存储器(eeprom)。
124.处理器900可以执行与本文详述的算法、过程或操作关联的任何类型的指令。通常,处理器900可以将要素或物品(例如,数据)从一种状态或事物变换为另一状态或事物。
125.可以作为待由处理器900执行的一个或多个指令的代码904,可以存储在存储器902中,或者可以存储在软件、硬件、固件或其任何合适的组合中,或者在适当的情况下并基于特定需求存储在任何其他内部或外部组件、设备、要素或对象中。在一个示例中,处理器900可以遵照由代码904指示的指令的程序序列。每条指令进入前端逻辑906,并且由一个或多个解码器908处理。解码器可以生成微操作(例如,呈预定义格式的固定宽度微操作)作为其输出,或者可以生成反映原始代码指令的其他指令、微指令或控制信号。前端逻辑906还包括寄存器重命名逻辑910和调度逻辑912,它们通常分配资源并且将对应于指令的操作排
队以用于执行。
126.处理器900可以还包括具有执行单元916a、916b、916n等的集合的执行逻辑914。一些实施例可以包括专用于特定功能或功能集合的数个执行单元。其他实施例可以仅包括一个执行单元或可以执行特定功能的一个执行单元。执行逻辑914执行由代码指令指定的操作。
127.在完成由代码指令指定的操作的执行之后,后端逻辑918可以退离代码904的指令。在一个实施例中,处理器900允许指令的无序执行,但是要求有序退离。退离逻辑920可以采取各种已知形式(例如,重新排序缓冲区等)。以此方式,至少鉴于由解码器生成的输出、由寄存器重命名逻辑910利用的硬件寄存器和表以及由执行逻辑914修改的任何寄存器(未示出),在代码904的执行期间变换处理器900。
128.虽然未在图9中示出,但是处理元件可以包括具有处理器900的芯片上的其他元件。例如,处理元件可以包括存储器控制逻辑连同处理器900。处理元件可以包括i/o控制逻辑,和/或可以包括与存储器控制逻辑集成的i/o控制逻辑。处理元件可以还包括一个或多个缓存。在一些实施例中,非易失性存储器(例如,闪存或熔丝)也可以包括于具有处理器900的芯片上。
129.图10a是示出根据本公开的一个或多个实施例的示例性有序流水线和示例性寄存器重命名、无序发放/执行流水线二者的框图。图10b是示出根据本公开的一个或多个实施例的处理器中待包括的有序架构内核和示例性寄存器重命名、无序发放/执行架构内核的示例性实施例的框图。图10a-图10b中的实线框示出有序流水线和有序内核,而虚线框的可选添加示出寄存器重命名、无序发放/执行流水线和内核。考虑到有序方面是无序方面的子集,将描述无序方面。
130.在图10a中,处理器流水线1000包括获取级1002、长度解码级1004、解码级1006、分配级1008、重命名级1010、调度(也称为分派或发放)级1012、寄存器读取/存储器读取级1014、执行级1016、回写/存储器写入级1018、异常处理级1022和提交级1024。
131.图10b示出处理器内核1090,其包括耦合到执行引擎单元1050的前端单元1030,并且二者耦合到存储器单元1070。处理器内核1090和存储器单元1070是可以结合本文示出并且描述的实现方式(例如,处理器102、存储器120)使用的硬件的类型的示例。内核1090可以是精简指令集计算(risc)内核、复杂指令集计算(cisc)内核、超长指令字(vliw)内核或混合或替代内核类型。作为又一选项,内核1090可以是专用内核(例如,网络或通信内核、压缩引擎、协处理器内核、通用计算图形处理单元(gpgpu)内核、图形内核等)。此外,处理器内核1090及其组件表示可以用以实现逻辑处理器及其各个组件的示例架构。
132.前端单元1030包括分支预测单元1032,其耦合到指令缓存单元1034,指令缓存单元1434耦合到指令转译后备缓冲区(tlb)单元1036,指令转译后备缓冲区(tlb)单元1436耦合到指令获取单元1038,指令获取单元1438耦合到解码单元1040。解码单元1040(或解码器)可以对指令进行解码,并生成解码自、或以其他方式反映、或导出自原始指令的一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号作为输出。可以使用各种不同的机制实现解码单元1040。合适的机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(pla)、微码只读存储器(rom)等。在一个实施例中,内核1090包括微码rom或存储用于(例如,解码单元1040中,或以其他方式,前端单元1030内的)特定宏指令的微代码的
其他介质。解码单元1040耦合到执行引擎单元1050中的重命名/分配器单元1052。
133.执行引擎单元1050包括重命名/分配器单元1052,其耦合到退离单元1054和一个或多个调度器单元1056的集合。调度器单元1056表示任何数量的不同调度器,包括保留站、中央指令窗口等。调度器单元1056耦合到物理寄存器文件单元1058。物理寄存器文件单元1058中的每一个表示一个或多个物理寄存器文件,其中的不同寄存器文件存储一种或多种不同的数据类型(例如,标量整数、标量浮点、封装整数、封装浮点、矢量整数、矢量浮点、状态(例如,作为待执行的下一指令的地址的指令指针)等)。在一个实施例中,物理寄存器文件单元1058包括矢量寄存器单元、写入掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构矢量寄存器、矢量掩码寄存器和通用寄存器(gpr)。在本文描述的至少一些实施例中,寄存器单元1058是可以结合本文示出并且描述的实现方式(例如,寄存器110)使用的硬件的类型的示例。物理寄存器文件单元1058与退离单元1054重叠,以示出可以(例如,使用重排序缓冲区和退离寄存器文件;使用未来文件、历史缓冲区和退离寄存器文件;使用寄存器映射和寄存器池;等)实现寄存器重命名和无序执行的各种方式。退离单元1054和物理寄存器文件单元1058耦合到执行集群1060。执行集群1060包括一个或多个执行单元1062的集合和一个或多个存储器存取单元1064的集合。执行单元1062可以且对各种类型的数据(例如,标量浮点、封装整数、封装浮点、矢量整数、矢量浮点)执行各种操作(例如,移位、加法、减法、乘法)。虽然一些实施例可以包括专用于特定功能或功能集合的数个执行单元,但是其他实施例可仅包括一个执行单元或全部执行所有功能的多个执行单元。执行单元1062可以还包括地址生成单元,以计算由内核用以存取主存储器(例如,存储器单元1070)和缺页处理程序(pmh)的地址。
134.调度器单元1056、物理寄存器文件单元1058和执行集群1060示出为可能地是多个,因为特定实施例对于特定类型的数据/操作创建分离的流水线(例如,标量整数流水线、标量浮点/封装整数/封装浮点/矢量整数/矢量浮点流水线和/或存储器存取流水线,其均具有它们自己的调度程序单元、物理寄存器文件单元和/或执行集群——并且在分离的存储器存取流水线的情况下,实现仅该流水线的执行集群具有存储器存取单元1064的特定实施例)。还应理解,在使用分离的流水线的情况下,这些流水线中的一个或多个可以是无序发放/执行,而其余是有序的。
135.存储器存取单元1064的集合耦合到存储器单元1070,其包括tlb单元1072,tlb单元1472耦合到数据缓存单元1074,数据缓存单元1474耦合到层级2(l2)缓存单元1076。在一个示例性实施例中,存储器存取单元1064可以包括加载单元、存储地址单元和存储数据单元,其中的每一个耦合到存储器单元1070中的数据tlb单元1072。指令缓存单元1034进一步耦合到存储器单元1070中的层级2(l2)缓存单元1076。l2缓存单元1076耦合到一个或多个其他层级的缓存,并最终耦合到主存储器。此外,如果在数据tlb单元1072中并未找到匹配,则缺页处理程序也可以包括于内核1090中,以在页表中查找地址映射。
136.通过示例的方式,示例性寄存器重命名、无序发放/执行内核架构可以如下实现流水线1000:1)指令获取单元1038执行获取和长度解码级1002和1004;2)解码单元1040执行解码级1006;3)重命名/分配器单元1052执行分配级1008和重命名级1010;4)调度器单元1056执行调度级1012;5)物理寄存器文件单元1058和存储器单元1070执行寄存器读取/存储器读取级1014;执行集群1060对执行级1016进行执行;6)存储器单元1070和物理寄存器
文件单元1058执行回写/存储器写入级1018;7)在异常处置级1022中可能涉及各种单元;以及8)退离单元1054和物理寄存器文件单元1058执行提交级1024。
137.内核1090可以支持一个或多个指令集(例如,x86指令集(带有已经添加有新版本的一些扩展);加利福尼亚州桑尼维尔mips technologies的mips指令集;加利福尼亚州桑尼维尔arm holdings的arm指令集(带有可选附加扩展(例如,neon)),包括本文描述的指令。在一个实施例中,内核1090包括用于支持封装数据指令集扩展(例如,avx1、avx2)的逻辑,由此允许使用封装数据执行由许多多媒体应用使用的操作。
138.应理解,内核可以支持多线程(执行两个或更多个并行的操作或线程集合),并且可以通过包括以下方式的多种方式这样做:时间切片式多线程、同时多线程(其中,单个物理内核提供用于物理内核正同时多线程化的线程中的每一个的逻辑内核)、或其组合(例如,时间切片式获取和解码以及此后的同时多线程化(例如,在超线程技术中))。因此,在至少一些实施例中,可以支持多线程式飞地。
139.虽然在无序执行的上下文中描述寄存器重命名,但是应理解,寄存器重命名可以用在有序架构中。虽然处理器的所示实施例还包括分离的指令和数据缓存单元1034/1074和共享的l2缓存单元1076,但是替选实施例可以具有用于指令和数据二者的单个内部缓存(例如,比如层级1(l1)内部缓存、或多个层级的内部缓存)。在一些实施例中,系统可以包括内部缓存和处于内核和/或处理器外部的外部缓存的组合。替代地,所有缓存可以处于内核和/或处理器的外部。
140.图11示出根据实施例的点对点(ptp)配置中所布置的计算系统1100。具体而言,图11示出处理器、存储器和输入/输出设备由数个点对点接口互连的系统。通常,可以通过与计算系统1100相同或相似的方式配置本文描述的计算系统或计算设备中的一个或多个。
141.处理器1170和1180可以实现为单核处理器1174a和1184a或多核处理器1174a-1174b和1184a-1184b。处理器1170和1180可以均包括由它们相应一个或多个内核使用的缓存1171和1181。共享缓存(未示出)可以包括于任一处理器中或这两个处理器之外,但经由p-p互连与处理器连接,以使得如果处理器置于低功耗模式下,则处理器之一或二者的本地缓存信息可以存储在共享缓存中。应注意,本文描述的一个或多个实施例可以实现于计算系统(例如,计算系统1100)中。此外,处理器1170和1180是可以结合本文示出并且描述的实现方式(例如,处理器102)使用的硬件的类型的示例。
142.处理器1170和1180也可以均包括集成存储器控制器逻辑(imc)1172和1182,以与存储器元件1132和1134进行通信,其可以是本地附接到相应处理器的主存储器的部分。在替选实施例中,存储器控制器逻辑1172和1182可以是与处理器1170和1780分离的分立式逻辑。存储器元件1132和/或1134可以存储由处理器1170和1180在实现本文概述的操作和功能中使用的各种数据。
143.处理器1170和1180可以是任何类型的处理器(例如,结合其他附图讨论的处理器)。处理器1170和1180可以分别使用点对点接口电路1178和1188经由点对点(ptp)接口1150交换数据。处理器1170和1180可以均使用点对点接口电路1176、1186、1194和1198经由单独点对点接口1152和1154与输入/输出(i/o)子系统1190交换数据。i/o子系统1190也可以使用可以是ptp接口电路的接口电路1192经由高性能图形接口1139与高性能图形电路1138交换数据。在一个实施例中,高性能图形电路1138是专用处理器(例如,比如高吞吐量
mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等)。i/o子系统1190还可与显示器1133进行通信,以用于显示人类用户可浏览的数据。在替选实施例中,图11所示的任何或所有ptp链路可以实现为多点总线而非ptp链路。
144.i/o子系统1190可以经由接口电路1196与总线1110进行通信。总线1110可以具有通过它进行通信的一个或多个设备(例如,总线桥1118、i/o设备1114和一个或更多其他处理器1115)。经由总线1120,总线桥1118可以与其他设备(例如,用户接口1122(例如,键盘、鼠标、触摸屏或其他输入设备)、通信设备1126(例如,调制解调器、网络接口设备或可以通过计算机网络1160进行通信的其他类型的通信设备)、音频i/o设备1124和/或存储单元1128)进行通信。存储单元1128可以存储可以由处理器1170和/或1180执行的数据和代码1130。在替选实施例中,可以用一个或多个ptp链路实现总线架构的任何部分。
145.程序代码(例如,代码1130)可以应用于输入指令,以执行本文描述的功能并生成输出信息。输出信息可以通过已知方式应用于一个或多个输出设备。出于本技术的目的,处理系统可以是计算系统1100的部分,并且包括具有处理器(例如,比如数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器)的任何系统。
146.可以通过高级过程或面向对象的编程语言实现程序代码(例如,1130),以与处理系统进行通信。如果需要,则也可以通过汇编语言或机器语言实现程序代码。事实上,本文描述的机制在范围方面不限于任何特定编程语言。在任何情况下,语言可以是编译型或解释型语言。
147.在一些情况下,指令转换器可以用以将指令从源指令集转换为目标指令集。例如,指令转换器可以将指令转译(例如,使用静态二进制转译、动态二进制转译(包括动态编译))、变体、仿真或以其他方式转换为待由内核处理的一个或多个其他指令。指令转换器可以实现于软件、硬件、固件或其组合中。指令转换器可以处于处理器上、处理器外、或部分在处理器上且部分在处理器外。
148.图12是根据本公开的实施例的对比使用软件指令转换器以将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。在所示实施例中,指令转换器是软件指令转换器,但是可选地,指令转换器可以实现于软件、固件、硬件或其各种组合中。图12示出可以使用x86编译器1204编译高级语言1202中的程序,以生成可以由带有至少一个x86指令集内核1216的处理器在本机执行的x86二进制代码1206。带有至少一个x86指令集内核的处理器1216表示可以通过以下操作执行与英特尔处理器实质上相同的结果的任何处理器:兼容地执行或以其他方式处理(1)英特尔x86指令集内核的指令集的实质部分、或(2)目标在于在带有至少一个x86指令集内核的英特尔处理器上运行的的目标代码版本,以实现与带有至少一个x86指令集内核的英特尔处理器实质上相同的结果。x86编译器1204表示可操作为生成可以在具有或没有附加链接处理的情况下在带有至少一个x86指令集内核1216的处理器上执行的x86二进制代码1206(例如,目标代码)的编译器。相似地,图12示出可以使用替代指令集编译器1208编译高级语言1202中的程序,以生成可以由没有至少一个x86指令集内核1214的处理器(例如,具有执行加利福尼亚州桑尼维尔mips technologies的mips指令集和/或执行加利福尼亚州桑尼维尔arm holdings的arm指令集的内核的处理器)在本机执行的替代指令集二进制代码1210。指令转换器1212用以将x86二进制代码1206转换为可以由没有x86指令集内核1214处理器原生地执行的代码。该转换后的代码不太可能与替代
指令集二进制代码1210相同,因为有此能力的指令转换器是难以制造的;然而,转换后的代码将完成普通操作,并由来自替代指令集的指令组成。因此,指令转换器1212表示通过仿真、仿拟或任何其他过程允许没有x86指令集处理器或内核的处理器或其他电子设备执行x86二进制代码1206的软件、固件、硬件或其组合。
149.可以通过当由机器读取时使机器制造逻辑以执行本文描述的技术中的一个或多个的表示处理器内的各种逻辑的机器可读介质上存储的代表性指令实现至少一个实施例的一个或多个方面。称为“ip内核”的这些表示法可以存储在有形机器可读介质上,并提供给各种客户或制造设施,以加载到实际制作逻辑或处理器的制造机器中。
150.这些机器可读存储介质可以包括但不限于由机器或设备制造或形成的物品的非瞬时、有形布置,包括存储介质(例如,硬盘、任何其他类型的盘(包括软盘、光盘、压缩盘只读存储器(cd-rom)、可重写压缩盘(cd-rw)和磁光盘)、半导体器件(例如,只读存储器(rom)、随机存取存储器(ram),例如动态随机存取存储器(dram)、静态随机存取存储器(sram)、可擦除可编程只读存储器(eprom)、闪存、电可擦除可编程只读存储器(eeprom)、相变存储器(pcm)、磁卡或光卡)或适合于存储电子指令的任何其他类型的介质)。
151.因此,本公开的实施例还包括包含指令或包含设计数据(例如,定义本文描述的结构、电路、装置、处理器和/或系统特征的硬件描述语言(hdl))的非瞬时有形机器可读介质。这些实施例也可以称为程序产品。
152.图11中描绘的计算系统是可以利用以实现本文讨论的各种实施例的计算系统的实施例的示意图。应理解,可以在片上系统(soc)架构中或在能够实现本文提供的示例和实现方式的功能和特征的任何其他合适的配置中组合图11中描绘的系统的各种组件。
153.虽然已经鉴于特定实现方式和通常关联的方法描述本公开,但是这些实现方式和方法的更改和排列对于本领域技术人员将是显而易见的。例如,本文描述的动作可以通过与所描述的顺序不同的顺序得以执行,并且仍然实现期望的结果。作为一个示例,附图中描绘的过程不一定需要所示的特定顺序或依次顺序以实现期望的结果。在特定实现方式中,多任务化和并行处理可以是有利的。其他变型处于所附权利要求的范围内。
154.本文提出的架构仅通过示例的方式得以提供,并且旨在成为非排他性且非限定性的。此外,所公开的各个部分旨在仅作为逻辑划分,而不一定表示物理上分离的硬件和/或软件组件。特定计算系统可以在单个物理存储设备中提供存储元件,而在其他情况下,存储元件可以在功能上分布在许多物理设备上。在虚拟机管理器或管理程序的情况下,可以通过在虚拟化层上运行的软件或固件的形式提供功能的全部或部分,以提供所公开的逻辑功能。
155.注意,在本文提供的示例的情况下,可以鉴于单个计算系统描述交互。然而,仅为了清楚性和示例的目的,已经进行该操作。在特定情况下,通过仅引用单个计算系统描述给定的流程集合的功能中的一个或多个可能是更容易的。此外,用于深度学习和恶意软件检测的系统是易于扩展的,并且可以实现得跨越大数量的组件(例如,多个计算系统)以及更复杂/精密的布置和配置。因此,所提供的示例不应限制潜在地应用于无数其他架构的计算系统的范围或禁止广泛教导。
156.如本文所使用的那样,除非明确地声明为相反,否则短语
“……
中的至少一个”的使用指代所命名的项、要素、条件或活动的任何组合。例如,“x、y和z中的至少一个”旨在意
指以下中的任一项:1)至少一个x,但非y也非z;2)至少一个y,但非x也非z;3)至少一个z,但非x也非y;4)至少一个x和至少一个y,但非z;5)至少一个x和至少一个z,但非y;6)至少一个y和至少一个z,但非x;或7)至少一个x、至少一个y和至少一个z。
157.附加地,除非明确地声明为相反,否则术语“第一”、“第二”、“第三”等旨在区分它们修饰的特定名词(例如,要素、条件、模块、活动、操作、权利要求要素等),而非旨在指示所修饰的名词的任何类型的顺序、等级、重要性、时间顺序或层次结构。例如,“第一x”和“第二x”旨在指定不一定为两个要素的任何顺序、等级、重要性、时间顺序或层次结构所限制的两个分离的x要素。
158.说明书中对“一个方面”、“一方面”“示例性方面”等的引用表示所描述的方面可以包括特定特征、结构或特性,但每个方面可以不一定包括特定特征、结构或特性。此外,这些短语不一定指代同一方面。
159.虽然本说明书包含许多具体实现方式细节,但是它们不应解释为对任何实施例的范围或可能要求保护的内容的范围的限制,而是特定于特定实施例的特征的描述。本说明书中在分离的实施例的上下文中描述的特定特征也可以通过组合实现于单个实施例中。相反,在单个实施例的上下文中描述的各种特征也可以分离地或以任何合适的子组合实现于多个实施例中。此外,虽然特征可以在以上描述为以特定组合起作用,并且甚至最初要求保护如是,但是在一些情况下可以从组合中删除来自要求保护的组合的一个或多个特征,并且所要求保护的组合可以直指子组合或子组合的变型。
160.相似地,上述实施例中的各种系统组件和模块的分离不应理解为在所有实施例中要求这种分离。应理解,所描述的程序组件、模块和系统通常可以一起集成在单个软件产品中或封装到多个软件产品中。
161.目前描述的实施例的附加示例包括以下非限定性实现方式。以下非限定性示例中的每一个可以独立存在或者可以与下文或贯穿本公开提供的其他示例中的任何一个或多个通过任何排列或组合进行组合。
162.示例1包括:一种处理器单元,包括:第一存储器元件,其用于存储指向存储器位置的已编码指针,其中,所述已编码指针包括第一上下文信息和所述存储器位置的存储器地址的切片,其中,所述第一上下文信息包括数据密钥的标识;和电路,其用于:对所述已编码指针进行解码,以获得所述存储器位置的所述存储器地址;以及使用通过对所述已编码指针进行解码获得的所述存储器地址,以存取所述存储器位置处的受加密数据;以及基于所述数据密钥对所述受加密数据进行解密。
163.示例2可以包括:如示例1所述的主题,其中,所述已编码指针具有至少128比特的长度。
164.示例3可以包括:如示例1-2中任一项所述的主题,其中,所述第一上下文信息是所述已编码指针内的明文,并且所述已编码指针还包括受加密第二上下文信息。
165.示例4可以包括:如示例3所述的主题,其中,在还包括所述存储器地址的受加密部分的所述已编码指针的分组中对所述受加密第二上下文信息进行加密。
166.示例5可以包括:如示例3所述的主题,所述电路用于进一步基于第一细调对所述受加密数据进行解密,所述第一细调包括至少部分地从所述第一上下文信息和所述第二上下文信息导出的一个或多个比特。
167.示例6可以包括:如示例1-5中任一项所述的主题,其中,所述第一上下文信息包括基于所述存储器地址的至少一部分计算的消息认证代码。
168.示例7可以包括:如示例1-6中任一项所述的主题,其中,所述第一上下文信息包括指示对于所述存储器位置授权的存取的等级的许可比特。
169.示例8可以包括:如示例1-7中任一项所述的主题,其中,所述第一上下文信息包括指示所述存储器位置中的所述受加密数据的类的类型比特。
170.示例9可以包括:如示例1-8中任一项所述的主题,其中,所述第一上下文信息包括表示与所述已编码指针关联的确定性不同值的版本比特。
171.示例10可以包括:如1-9中任一项所述的主题,其中,所述第一上下文信息包括用于对表的条目进行索引的查找标签,其中,所述条目包括第二上下文信息。
172.示例11包括:一种方法,包括:在寄存器中存储指向存储器位置的已编码指针,其中,所述已编码指针包括第一上下文信息和所述存储器位置的存储器地址的切片,其中,所述第一上下文信息包括数据密钥的标识;对所述已编码指针进行解码,以获得所述存储器位置的所述存储器地址;使用通过对所述已编码指针进行解码获得的所述存储器地址,以存取所述存储器位置处的受加密数据;以及基于所述数据密钥对所述受加密数据进行解密。
173.]示例12可以包括:如示例11所述的主题,其中,所述已编码指针具有至少128比特的长度。
174.示例13可以包括:如示例11-12中任一项所述的主题,其中,所述第一上下文信息是所述已编码指针内的明文,并且所述已编码指针还包括受加密第二上下文信息。
175.示例14可以包括:如示例13所述的主题,其中,在还包括所述存储器地址的受加密部分的所述已编码指针的分组中对所述受加密第二上下文信息进行加密。
176.示例15可以包括:如示例13所述的主题,还包括:进一步基于第一细调对所述受加密数据进行解密,所述第一细调包括至少部分地从所述第一上下文信息和所述第二上下文信息导出的一个或多个比特。
177.示例16可以包括:如示例11-15中任一项所述的主题,其中,所述第一上下文信息包括基于所述存储器地址的至少一部分计算的消息认证代码。
178.示例17可以包括:如示例11-16中任一项所述的主题,其中,所述第一上下文信息包括指示对于所述存储器位置授权的存取的等级的许可比特。
179.示例18可以包括:如示例11-17中任一项所述的主题,其中,所述第一上下文信息包括指示所述存储器位置中的所述受加密数据的类的类型比特。
180.示例19可以包括:如示例11-18中任一项所述的主题,其中,所述第一上下文信息包括表示与所述已编码指针关联的确定性不同值的版本比特。
181.示例20可以包括:如11-19中任一项所述的主题,其中,所述第一上下文信息包括用于对表的条目进行索引的查找标签,其中,所述条目包括第二上下文信息。
182.示例21包括:一种或多种计算机可读介质,带有其上存储的代码,其中,所述代码是可执行的,以使机器:在寄存器中存储指向存储器位置的已编码指针,其中,所述已编码指针包括第一上下文信息和所述存储器位置的存储器地址的切片,其中,所述第一上下文信息包括数据密钥的标识;对所述已编码指针进行解码,以获得所述存储器位置的所述存
储器地址;使用通过对所述已编码指针进行解码获得的所述存储器地址,以存取所述存储器位置处的受加密数据;以及基于所述数据密钥对所述受加密数据进行解密。
183.示例22可以包括:如示例21所述的主题,其中,所述已编码指针具有至少128比特的长度。
184.示例23可以包括:如示例21-22中任一项所述的主题,其中,所述第一上下文信息是所述已编码指针内的明文,并且所述已编码指针还包括受加密第二上下文信息。
185.示例24可以包括:如示例23所述的主题,其中,在还包括所述存储器地址的受加密部分的所述已编码指针的分组中对所述受加密第二上下文信息进行加密。
186.示例25可以包括:如示例23所述的主题,其中,所述代码是可执行的,以使所述机器:进一步基于第一细调对所述受加密数据进行解密,所述第一细调包括至少部分地从所述第一上下文信息和所述第二上下文信息导出的一个或多个比特。
187.示例26可以包括:如示例21-25中任一项所述的主题,其中,所述第一上下文信息包括基于所述存储器地址的至少一部分计算的消息认证代码。
188.示例27可以包括:如示例21-26中任一项所述的主题,其中,所述第一上下文信息包括指示对于所述存储器位置授权的存取的等级的许可比特。
189.示例28可以包括:如示例21-27中任一项所述的主题,其中,所述第一上下文信息包括指示所述存储器位置中的所述受加密数据的类的类型比特。
190.示例29可以包括:如示例21-28中任一项所述的主题,其中,所述第一上下文信息包括表示与所述已编码指针关联的确定性不同值的版本比特。
191.示例30可以包括:如21-29中任一项所述的主题,其中,所述第一上下文信息包括用于对表的条目进行索引的查找标签,其中,所述条目包括第二上下文信息。
192.因此,已经描述主题的特定实施例。其他实施例处于本公开的范围内。本领域技术人员可以确定许多其他改变、替换、变化、变更和修改,并且本公开旨在涵盖落入所附权利要求的范围内的所有这些改变、替换、变化、变更和修改。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献