CN112148642A - 针对核中的所有权访问的存储器写入 - Google Patents
针对核中的所有权访问的存储器写入 Download PDFInfo
- Publication number
- CN112148642A CN112148642A CN202010587518.5A CN202010587518A CN112148642A CN 112148642 A CN112148642 A CN 112148642A CN 202010587518 A CN202010587518 A CN 202010587518A CN 112148642 A CN112148642 A CN 112148642A
- Authority
- CN
- China
- Prior art keywords
- data
- memory
- certificate
- region
- processor
- 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; CALCULATING OR 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/64—Protecting data integrity, e.g. using checksums, certificates or signatures
-
- 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/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3263—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements
- H04L9/3268—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements using certificate validation, registration, distribution or revocation, e.g. certificate revocation list [CRL]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1408—Protection against unauthorised use of memory or access to memory by using cryptography
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1416—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1466—Key-lock mechanism
- G06F12/1475—Key-lock mechanism in a virtual system, e.g. with translation means
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR 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/602—Providing cryptographic facilities or services
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/062—Securing storage systems
- G06F3/0623—Securing storage systems in relation to content
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
-
- 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
- H04L9/0637—Modes of operation, e.g. cipher block chaining [CBC], electronic codebook [ECB] or Galois/counter mode [GCM]
-
- 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/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
- H04L9/3242—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving keyed hash functions, e.g. message authentication codes [MACs], CBC-MAC or HMAC
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2145—Inheriting rights or properties, e.g., propagation of permissions or restrictions within a hierarchy
Abstract
本文公开的技术提供在核中具有存储器写访问的密码计算。示例方法包括执行软件实体的第一指令。该第一指令包括第一操作数,其包括存储器中的存储器区的证书。执行第一指令包括至少部分基于密码算法和第一数据参数来计算经加密的第一数据、确定证书是否授权软件实体访问所述存储器的存储器区以及基于确定第一操作数中的证书是否授权软件实体访问存储器区、执行写操作来将经加密的第一数据存储在存储器区中。更特定的实施例包括执行写操作而不对存储器区执行在先读操作,这可以叫作所有权写。
Description
相关申请的交叉引用
该申请是2020年1月10日提交的美国专利申请序列号16/740,359的接续部分(并且要求其权益和优先权),所述申请是2019年12月20日提交的美国专利申请序列号16/724,059和2019年12月20日提交的16/723,468以及2020年1月10日提交的美国专利申请序列号16/740,359的接续部分(并且要求其权益和优先权),还有2019年12月20日提交的美国专利申请序列号16/724,105、2019年12月20日提交的16/724,026、2019年12月20提交的16/723,977、2019年12月20日提交的16/723,927、2019年12月20日提交的16/723,871、2019年12月20日提交的16/722,707以及2019年12月20日提交的16/722,342的接续部分(并且要求其权益和优先权),全部七个申请要求2019年6月29日提交的美国临时申请号62/868,884的权益和优先权。该申请还是美国专利申请序列号16/723,977、16/722,342以及16/722,707的接续部分,每个都在2019年12月20日提交,并且全部三个申请要求2019年6月29日提交的美国临时申请号62/868,884的权益和优先权。该申请还要求2019年6月29日提交的美国临时申请号62/868,884的权益和优先权。在先申请的公开视为该申请的公开的部分,并且通过引用而完全并入该申请的公开中。
技术领域
本公开一般涉及计算机系统的领域,更特定地,涉及核中的存储器写访问。
背景技术
保护计算机系统中的存储器不受软件缺陷和安全漏洞的影响是一个重要问题。在程序将数据写入缓冲区并且超过缓冲区界限使得相邻存储器位点被覆写时出现缓冲区溢出,其可能影响存储器安全。相似地,读完缓冲区末端进入另一个页面可能触发访问违规或错误。另一个存储器安全性违规称为悬垂指针。悬垂指针是未被解析到有效目的地的引用。这可能在对存储器解除分配而没有修改指向被解除分配(或释放)的存储器的现有指针的值时发生。如果系统重新分配被释放的存储器并且悬垂指针用于访问经重新分配的存储器,则可能出现无法预测的行为,其包括系统故障。数据完整性核实机制(诸如高速缓存行中的嵌入消息验证码(MAC))可以用于补充其他数据保护技术。然而,这样的完整性核实机制实现已经损坏的存储数据的被动检测。因此,需要不同的方法来主动保护存储器不被损坏。
附图说明
为了提供对本公开及其特征和优势的更完整理解,结合附图参考下列描述,在附图中类似的标号表示类似的部件,其中:
图1是根据至少一个实施例的示例计算装置的简化框图;
图2A是图示根据至少一个实施例将通用编码指针绑定到该指针所引用的数据的加密的过程的流程图;
图2B是图示根据至少一个实施例对绑定到通用编码指针的解密数据的过程的流程图;
图3是图示根据至少一个实施例的通过密码隔离的数据或代码的流程的框图;
图4A是图示根据实施例的存储器区的简化框图;
图4B是图示根据实施例具有多个子区的存储器区的简化框图;
图5是图示根据实施例可以在将数据或代码写入存储器的示例指令中使用的所有权写证书的可能格式的简化框图;
图6是图示根据实施例将数据或代码写入存储器的一个场景的简化流程图;
图7是图示根据实施例可以通过执行所有权写指令来执行的其他可能操作的简化流程图;
图8是图示根据实施例可以通过执行定期写指令来执行其他可能操作的简化流程图;
图9是图示根据实施例可以执行来生成子代所有权写证书的其他可能操作的简化流程图;
图10是图示根据实施例可以通过执行备选所有权写指令来执行的其他可能操作的简化流程图;
图11是图示根据一个实施例的示例密码计算环境的框图;
图12是图示根据至少一个实施例的示例处理器核和存储器的框图;
图13A是图示根据某些实施例的示范性有序流水线和示范性寄存器重命名、无序发出/执行流水线这两者的框图;
图13B是图示根据某些实施例待包括在处理器中的有序架构核的示范性实施例和示范性寄存器重命名、无序发出/执行架构核这两者的框图;
图14是根据至少一个实施例的示例计算机架构的框图。
具体实施方式
下面的公开提供了用于实现可以在密码计算的上下文中使用的存储器写指令的各种可能实施例或示例。密码计算一般可以指在处理器组件内部采用密码机制作为它的计算的一部分的计算机系统安全性技术方案。一些密码计算系统可能牵涉指针地址(或指针的一部分)、密钥、数据和代码(处理器核中)使用新的加密存储器访问指令的加密和解密。因此,处理器核的微架构流水线可以采用支持这样的加密和解密操作这样的方式来配置。
该申请中公开的实施例涉及在存储器内实施存储器区的密码隔离时主动阻止对存储器的越界访问。如本文使用的,术语‘密码隔离’意在指由存储器的不同区或区域产生的隔离在用一个或多个不同参数来加密。参数可以包括密钥和/或微调(tweak)。隔离存储器区可以由软件实体(例如,虚拟机(VM)、应用、函数、线程)的数据结构和/或代码组成。因此,可以在任意粒度级支持隔离,诸如虚拟机之间的隔离、应用之间的隔离、函数之间的隔离、线程之间的隔离或数据结构(例如,几个字节结构)之间的隔离。
为了在主动阻止越界访问时经由加密来实施分离,本文公开的实施例有助于使用对特定存储器区特定的一个或多个参数来对处理器的核中的数据加密和解密的存储器访问(例如,读访问、写访问)。在一个或多个实施例中,经加密的存储器写操作包括定期写操作和所有权写(WFO)操作,它们具有对应的指令。定期写指令使在相同地址(例如,使用相同的编码指针)上写操作之前有对应的存储器读操作。如果读失败,则可以阻止写访问。所有权写(WFO)指令通过与被访问地址相关联的所有权的有效证书来证明软件实体被授权执行存储器写入。没有有效证书的情况下,可以阻止写访问。WFO指令可以用于初始化存储器以供包括定期写指令的软件实体后续使用。
与特定存储器区相关联的数据或代码的加密和解密操作可以通过使用与该存储器区相关联的密钥的密码算法来执行。在至少一些实施例中,密码算法也可以(或备选地)使用微调作为输入。一般,诸如‘密钥’和‘微调’等参数意在指示输入值,其可以是私密和/或唯一的,并且分别被加密或解密过程用于产生经加密的输出值或经解密的输出值。密钥可以是唯一值,至少在通过密码隔离的存储器区或子区之间是这样。密钥可以维持在处理器寄存器或通过新的指令集扩展而可访问的新处理器存储器(例如,处理器高速缓存、内容可寻址存储器(CAM)等)中。可以从指向存储器地址的编码指针得出微调,在该存储器地址中存储或待存储正在被加密/解密的数据或代码并且在至少一些场景中还可以包括与存储器区相关联的上下文信息。
在该说明书中公开的至少一些实施例(包括读和写操作)涉及基于指针的数据加密和解密,其中指向数据或代码的存储器位点的指针用标签和/或其他元数据来编码并且可以用于得出输入到数据或代码密码(例如,加密和解密)算法的微调的至少一部分。因此,可以在密码寻址层与数据/代码加密和解密之间创建密码绑定。这隐式地加强了界限,因为偏离对象(例如,数据)末端的指针可能对该相邻对象使用不正确的标签值。在一个或多个实施例中,用指向存储器位点的线性地址(在本文也称为“存储器地址”)和元数据来对指针编码。在一些指针编码中,指针中一片或一段地址包括多个位并且基于私密地址密钥和包括元数据的微调来加密(和解密)。可以用明文存储器地址(线性地址)和元数据来对其他指针编码。
为了说明在实施存储器区的密码隔离时用于主动阻止越界存储器访问的若干实施例,重要的是首先理解与数据保护和存储器安全相关联的操作和活动。因此,下列基本信息可以视为可以正确解释本公开的基础。
已知的计算技术(例如,用于过程/内核分离的页表、虚拟机管理器、管理运行时等)使用架构和元数据来提供数据保护和隔离。例如,在之前的技术方案中,CPU界限外的存储器控制器支持较粗粒度(例如,应用)的存储器加密和解密,并且加密数据的隔离经由访问控制来实现。典型地,密码引擎被置于CPU核外部的存储器控制器中。为了被加密,数据从核行进到存储器控制器,其中对哪些密钥应该用于加密进行一些识别。该识别经由物理地址中的位来传达。因此,提供额外密钥或微调的任何偏差可以导致开支增加(例如,对于新的总线)或从地址总线“窃取”额外位以允许附带有物理地址的密钥或微调的额外索引或标识。访问控制可能需要使用元数据并且处理器将使用查找表来对关于所有权、存储器大小、位点、类型、版本等的数据的策略或数据编码。动态存储和加载元数据需要额外存储(存储器开销)并且影响性能,特别对于细粒度元数据(诸如函数即服务(FaaS)工作负载或或对象界限信息)更是如此。
存储器隔间(在本文也称为‘存储器区’)的密码隔离解决前面提到的许多问题(以及更多)。密码隔离可以利用全新细粒度保护模型使过程分离、用户空间和内核的遗留模式冗余。利用存储器隔间的密码隔离,保护是通过密码的,其中处理器和加速器都利用私密密钥(以及可选地,微调)和密码而以越来越细的粒度提供访问控制和分离。确实,对小至一个字节的对象到大至整个虚拟机的数据和代码的存储器隔间可以支持隔离。在至少一些情况下,密码隔离可以导致个体应用或功能成为界限,从而允许经由指针共享地址空间。这些指针可以通过密码编码或不通过密码编码。此外,在一个或多个实施例中,加密和解密在处理器核内部、在核界限内部发生。因为加密在将数据写入核外部的存储器单元(诸如L1高速缓存或主存储器)之前发生,不一定从物理地址“窃取”位来传达密钥或微调信息,并且可以支持任意大量密钥和/或微调。因为操作在核内发生,微架构流水线的成本也被最小化。
密码隔离利用密码寻址层的概念,其中处理器基于隐式和/或显式元数据(例如,上下文信息)和/或存储器地址片本身(例如,作为对可调块密码(例如,带密文窃取(XTS)的基于XOR-加密-XOR的微调码本模式)的微调)对软件分配的存储器地址(线性/虚拟地址空间,有时称为“指针”)的至少一部分加密。如本文使用的,除通用明文或密文输入和密钥外,“微调”还可以指到块密码的额外输入,以及其他。微调包括表示值的一个或多个位。在一个或多个实施例中,微调可以组成块密码的初始化向量(IV)中的全部或部分。所得的通过密码编码的指针可以包括存储器地址的加密部分(或片)以及编码元数据(例如,上下文信息)的一些位。在执行地址的解密时,如果用于创建微调的信息(例如,隐式和/或显式元数据、存储器地址的明文地址片,等)对应于存储器分配器对存储器地址的初始分配(例如,软件分配方法),则处理器可以正确地对地址解密。否则,随机地址结果将导致错误并且被处理器捕获。
这些通过密码编码的指针(或其部分)可以进一步被处理器用作对数据加密密码的微调,该数据加密密码用于对它们所指的数据(通过密码编码的指针所引用的数据)加密/解密,从而在密码寻址层与数据/代码加密之间创建密码绑定。在一些实施例中,通过密码编码的指针可以被解密和解码来获得线性地址。线性地址(或其一部分)可以被处理器用作对数据加密密码的微调。备选地,在一些实施例中,可以不对存储器地址加密,但仍然用表示指针之中的唯一值的一些元数据来对指针编码。在该实施例中,编码指针(或其一部分)可以被处理器用作对数据加密密码的微调。应注意用作块密码的输入来对存储器地址加密/解密的微调在本文也称为“地址微调”。相似地,用作块密码的输入来对数据加密/解密的微调在本文也称为“数据微调”。
尽管通过密码编码的指针(或不通过密码编码的指针)可以用于经由加密来隔离数据,但数据的完整性可能仍然很脆弱。例如,通过密码隔离的数据的未经授权访问可能损坏存储数据的存储器区而不管数据是否被加密,从而在受害者不知情的情况下损坏数据内容。可以使用诸如消息验证码(MAC)等完整性核实(或检验)机制或隐式基于解密数据的熵测度或两者兼而有之来支持数据完整性。可以每高速缓存行存储MAC代码并且每当读取该高速缓存行来确定数据是否损坏时评估该MAC代码。然而,这样的机制并未主动检测未经授权的存储器访问。相反,采用被动方式(例如,在写入数据之后)而不是主动方式(例如,在写入数据之前)来检测存储器损坏(例如,越界访问)。例如,通过在对软件实体越界的存储器位点执行写操作而可能出现存储器损坏。利用密码计算,写操作可以使用对存储器位点无效的密钥和/或微调。当在该存储器位点执行后续读操作时,读操作可以在被损坏的存储器上使用不同的密钥并且检测损坏。例如,如果读操作使用有效密钥和/或微调,则经检索的数据将不会正确解密并且损坏可以使用例如消息验证码或通过检测解密数据(隐式完整性)中的高级熵(随机性)来检测。
主动阻止越界访问的一个选项涉及将与对象界限和/或存储器区界限有关的信息嵌入各种位点中。例如,这样的信息可以嵌入对象的描述、指向对象的指针、元数据表等中。这样的方法需要很大的开销来将信息存储在存储器中并且每当执行存储器访问时检索信息。因此,在密码计算中需要更高效的方法来主动阻止越界存储器访问。
本文公开的实施例解决了前面提到的许多问题(以及更多)。一个或多个实施例经由加密来实施隔离同时仍然主动阻止越界访问。这可以用可区分的写操作来实现,所述写操作包括定期写操作和所有权写(WFO)操作,这些操作包括对应的指令。定期写操作之前是在相同存储器地址(例如,使用相同的编码指针)上的对应存储器读操作。为了对读取的数据解密,在先读操作使用定期写操作的相同参数(例如,密钥和/或微调)。如果在读操作期间未检测到损坏,则定期写操作正常进行并完成。如果检测到一些损坏,则写操作被阻止。可以例如在越界访问使用除对被访问数据加密的正确密钥和/或微调以外的密钥和/或微调时检测到损坏。相比之下,所有权写(WFO)指令可以通过与被访问地址相关联的所有权的有效证书来断言它对访问存储器的授权。如果证书有效,则写操作继续而没有与定期写访问情况相同的任何在先读取。然而,如果证书无效,则写访问被阻止。在一些实施例中,不需要证书,而是使用前面没有读操作的直接写(例如,非临时存储)操作,其中在写操作覆写保存秘密的在先数据之前没有揭示先前的存储器内容。这是存储器所有权的隐式改变。在这些情况下,如果覆写数据再次被其数据被覆写的在先所有者再次访问,则完整性检查将失败(例如,MAC值将不匹配),从而导致错误并且防止消耗损坏数据。
所有权写操作可以用于使存储器内容从使用一个密钥流变成使用另一个密钥流,并且这可以是特权操作(例如,由存储器管理器执行,或由与对编码指针解密的操作一起使用的权限确定),用于分配存储器而没有导致完整性违规。所有权写可以改变数据(或代码)和对应的完整性值(例如,ICV/MAC)来使写入的数据内容与新的密钥流/微调匹配。同时,定期写可以使用用于将寄存器内容存储到(写入)存储器的编码地址来首先读取旧的数据/完整性值,从而首先核实在使用正确的密钥流/微调(例如,所有权读检查)。这样,检测到覆写属于别人(不同的密钥/微调)的存储器的尝试并且阻止它。因此,可以主动阻止越界存储器访问而不是被动阻止。这样的错误检测可以防止消耗宝贵的资源并且可以实现更快地解决问题代码。另外,WFO指令结合定期写指令的使用实现比存储和检索指示对于每个访问的存储器区界限和对象界限的存储器信息更高效的错误检测。因此,本文描述的实施例可以改进错误检测的速度和效率。
转向图1,图1是根据本公开的至少一个实施例用于在使用安全存储器访问逻辑实施存储器区的密码隔离时实现对存储器的越界访问的主动阻止技术的示例计算装置100的简化框图。在示出的示例中,计算装置100包括具有地址密码单元104、密码计算引擎108、安全存储器访问逻辑106的处理器102,和存储器组件,诸如高速缓存170(例如,L1高速缓存、L2高速缓存)和补充处理器存储器180。安全存储器访问逻辑106包括:加密存储逻辑150,用于基于各种密钥和/或微调对数据加密并且然后存储加密的数据;解密加载逻辑160,用于读取并且然后基于密钥和/或微调对数据解密;父代证书生成逻辑156,用于发出证书来授权软件实体使用所有权写(WFO)指令来初始化存储器区;以及子代证书生成逻辑158,用于发出证书来授权软件实体使用WFO指令来初始化较大存储器区内的较小区。密码计算引擎108可以配置成基于各种密钥和/或微调来对加载操作的数据或代码解密并且基于各种密钥和/或微调来对存储操作的数据或代码加密。地址密码单元104可以配置成对在指向线性地址所引用的数据或代码的指针中编码的线性地址(或线性地址的一部分)解密和加密。
处理器102还包括寄存器110,其可以包括例如通用寄存器和专用寄存器(例如,控制寄存器、模型特定寄存器(MSR)等)。寄存器110可以包含可以在一个或多个实施例中使用的各种数据,诸如指向存储器地址的编码指针114。编码指针可以通过密码编码或不通过密码编码。编码指针用一些元数据来编码。如果编码指针通过密码编码,则地址位的至少一部分(或片)被加密。在一些实施例中,用于地址、代码和/或数据的加密和解密的密钥116可以存储在寄存器110中。在一些实施例中,用于地址、代码和/或数据的加密和解密的微调117可以存储在寄存器110中。另外,生成的用于证实所有权写指令的证书118可以存储在寄存器110中。
安全存储器访问逻辑106利用关于编码指针114的元数据,其被编码到编码指针114的未用位(例如,64位地址的非规范位,或预留的地址范围,例如被操作系统预留,使得地址范围的对应高阶位可以用于存储元数据),以便确保对编码指针114所指向的存储器位点安全和/或对这些存储器位点提供访问控制。例如,安全存储器访问逻辑106提供的元数据编码和解码可以防止编码指针114被操纵而导致缓冲区溢出,和/或可以防止程序代码访问它没有权限访问的存储器。当分配存储器(例如,由操作系统在堆中分配)并且采用许多不同方式中的任一个将它提供给执行程序时可以对指针编码,这些许多不同方式包括通过使用malloc、alloc或new等函数;或隐式地经由加载器,或由编译器静态分配存储器,等等。因此,指向已分配存储器的编码指针114用地址元数据来编码。
地址元数据可以包括有效范围元数据。该有效范围元数据允许执行程序在有效范围内操纵编码指针114的值,但如果使用有效范围之外的编码指针114访问存储器则将损坏编码指针114。备选地或另外,有效范围元数据可以用于识别有效代码范围,例如准许访问程序代码的存储器范围(例如,编码的范围信息可以用于在寄存器上设置显式范围)。可以在地址元数据中编码的其他信息包括对编码指针114的访问(或权限)限制(例如,编码指针114是否可以用于写、执行或读取所引用的存储器)。
在至少一些其他实施例中,其他元数据(或上下文信息)可以在编码指针114的未用位中编码,所述未用位诸如明文地址片的大小(例如,嵌入编码指针中的存储器地址的明文片中位的数量)、存储器分配大小(例如,编码指针所引用的已分配存储器的字节)、数据或代码的类型(例如,编程语言所定义的数据或代码的类)、权限(例如,编码指针的读、写和执行权限)、数据或代码的位点(例如,存储数据或代码的地方)、要存储指针本身的存储器位点、数据或代码的所有权、编码地址的版本(例如,每当为新分配的存储器创建编码指针时递增的序列号适时确定所引用的已分配存储器的当前所有权)、随机化位的标签(例如,针对与编码指针的关联性而产生的)、特权级别(例如,用户或管理员)、密码上下文标识符(或密码上下文ID)(例如,对每个编码指针随机化或确定唯一的值),等等。例如,在一个实施例中,地址元数据可以包括大小元数据,其对编码指针中的明文地址片的大小编码。大小元数据可以规定编码指针中可以被执行程序修改的最低阶位的数量。大小元数据依赖于程序所请求的存储器的量。因此,如果请求16个字节,则大小元数据被编码为4(或在指针的五个较高位中是00100)并且指针的4个最低位被指定为可修改位以允许对所请求的16个字节的存储器寻址。在一些实施例中,地址元数据可以包括与编码指针相关联的随机化位的标签,从而让对手无法预测该标签。对手可能尝试猜测标签值使得该对手能够访问指针所引用的存储器,并且与用于生成版本值的确定性方法相比,使标签值随机化可以使得对手不太可能成功猜出该值。在一些实施例中,代替随机化标签值或除随机化标签值之外,指针还可以包括版本号(或其他确定不同的值),从而适时确定所引用的已分配数据的当前所有权。即使对手能够猜出存储器区的当前标签值或版本号,例如因为用于生成版本号的算法是可预测的,但由于对手没有获得以后将用于对指针的对应加密部分解密的密钥,对手因此可能仍然无法正确地生成指针的那部分。
示例安全存储器访问逻辑106体现为处理器指令的部分(例如,作为处理器指令集架构的部分),或微代码(例如,存储在只读存储器中并且由处理器102直接执行的指令)。在其他实施例中,安全存储器访问逻辑106的部分可以体现为硬件、固件、软件或其组合(例如,作为由计算装置100的特权系统组件142执行的编程代码)。在一个示例中,解密加载逻辑160和加密存储逻辑150体现为执行相应解密和加密操作来隔离存储器隔间的新加载(读)和存储(写)处理器指令的部分。解密加载逻辑160和加密存储逻辑150核实关于利用新的处理器指令(例如,其可以是现有处理器指令(诸如MOV)的对应项)的存储器读和写操作的编码元数据,其中通用寄存器用作从存储器读取值(例如,加载)或将值写入存储器(例如,存储)的存储器地址。该说明书中公开的一个或多个实施例包括新的所有权存储器写指令和定期写指令,本文进一步描述这些指令。
安全存储器访问逻辑106由计算装置100可执行来为编码指针“内联”提供安全性,例如在计算装置100执行程序(诸如用户空间应用134)期间。如本文使用的,术语“间接地址”和“指针”每个可以指存储其他数据或指令的存储器位点的地址(例如,虚拟地址或线性地址),以及其他。在示例中,存储其中存储代码或数据的存储器位点的编码存储器地址的寄存器可以充当指针。如此,编码指针114可以体现为例如数据指针(其指向数据位点)、代码指针(其指向可执行代码的位点)、指令指针或栈指针。如本文使用的,“上下文信息”包括“元数据”并且可以指关于或涉及编码指针114的信息以及其他,诸如有效数据范围、有效代码范围、指针访问权限、明文地址片的大小(例如,编码为幂(以位计))、存储器分配大小、数据或代码的类型、数据或代码的位点、数据或代码的所有权、指针的版本、随机化位的标签、版本、软件的特权级别、密码上下文标识符,等。
如本文使用的,“存储器访问指令”可以指“MOV”或“LOAD”指令或导致数据在一个存储位点(例如,存储器)被读取、复制或另外被访问并且移入另一个存储位点(例如寄存器(其中“存储器”可以指主存储器或高速缓存,例如随机存取存储器的形式,并且“寄存器”可以指处理器寄存器,例如硬件))的任何其他指令或访问或操纵存储器的任何指令,以及其他。同样如本文使用的,“存储器访问指令”可以指“MOV”或“STORE”指令或导致数据在一个存储位点(例如,寄存器)处被读取、复制或另外被访问并且移入另一个存储位点(例如存储器)的任何其他指令,或访问或操纵存储器的任何指令,以及其他。用于在核内执行数据或代码的加密并且存储加密数据或代码且主动阻止越界访问(例如,所有权写(WFO)指令、定期写指令)的存储器访问指令将在下文进一步描述。一些实施例可以定义将特殊密文值写入/存储到存储器来替代数据的密文以便指示存储器位点未被初始化的指令。在读取这些特殊密文值时,处理器然后可以生成故障或异常来向执行软件程序指示存储器内容尚未被初始化并且在加载处理器寄存器时可以替换合适的初始值。例如,存储在存储器中的哈希表可能并没有使它所有的条目初始化,当对于未经初始化的哈希表条目发现哈希命中时,条目可以用指示它尚未被初始化的特殊密文值来标记,并且软件异常然后可以写入/存储对应的数据,从用数据的密文替代对应存储器位点的未经初始化特殊值来初始化条目。
地址密码单元104可以包括用于执行编码指针的地址解码来获得数据(或代码)的存储器位点的线性地址的电路和逻辑。地址解码可以包括至少部分基于密钥和/或基于微调(从编码指针得出)的解密,如需要的话(例如,如果编码指针包括线性地址的加密部分)。地址密码单元104还可以包括用于执行编码指针的地址编码的电路和逻辑,所述地址编码包括至少部分基于相同密钥和/或基于相同微调(用于对编码指针解码)的加密,如需要的话(例如,编码指针包括线性地址的加密部分)。地址编码还可以包括将元数据存储在指针的非规范位中。诸如地址编码和地址解码(包括地址或其部分的加密和解密)等各种操作可以由与地址密码单元104相关联的处理器指令、其他处理器指令或独立指令或指令系列或特权系统(诸如操作系统内核或虚拟机监视器)执行的更高级代码、或作为指令集仿真器来执行。如在下文更详细描述的,地址编码逻辑和地址解码逻辑每个使用元数据(例如,有效范围、权限元数据、大小(幂)、存储器分配大小、类型、位点、所有权、版本、标签值、特权级别(例如,用户或管理员)、密码上下文ID等中的一个或多个)和私密密钥(例如,密钥116)对编码指针114进行操作,以便在存储器分配/访问级确保编码指针114安全。
加密存储逻辑150和解密加载逻辑160可以使用密码计算引擎108来对要存储在编码指针114所引用的存储器位点或从编码指针114所引用的存储器位点获得的数据执行密码操作。密码计算引擎108可以包括用于至少部分基于从指向数据(或代码)的存储器位点的编码指针得出的微调来执行数据(或代码)解密,并且至少部分基于从指向数据(或代码)的存储器位点的编码指针得出的微调来执行数据(或代码)加密。引擎108的密码操作可以使用微调,其包括编码指针114(或从编码指针生成的线性地址)的一部分和/或私密密钥(例如,密钥116)以便通过将数据/代码加密和解密绑定到编码指针而确保编码指针114所引用的存储器位点处的数据或代码的安全。
各种不同的密码算法可以用于实现地址密码单元104和密码计算引擎108。一般,几十年来,高级加密标准(AES)已经是使用128位块密码的数据加密的支柱。同时,存储器寻址现今典型地是64位。尽管本文的实施例可以参考64个计算机的64位存储器寻址来说明和解释,但公开的实施例不意在这样受限制并且可以容易适于容纳32位、128位,或对于指针的任何其他可用位大小。同样,本文的实施例可以进一步适于容纳各种大小的块密码(例如,64位、48位、32位、16位等,使用Simon、Speck、可调K密码、PRINCE或任何其他块密码)。
最近还出现了适合于基于指针的加密的轻量级密码。PRINCE密码例如可以在10nm工艺的少至799μm2面积的3个时钟中实现,从而在十分之一的硅区中提供一半的AES时延。密码隔离可以利用这些新的密码,以及其他,从而引入新颖的计算机架构概念,其包括但不限于:(i)密码寻址,即,处理器处使用关于所引用数据(例如,嵌入指针中的元数据和/或外部元数据)、地址片自身或其任何适合的组合的上下文信息作为微调的数据指针的加密;以及(ii)核处的数据本身使用通过密码编码的指针或其部分、不通过密码编码的指针或其(一个或多个)部分、关于所引用数据的上下文信息或其作为数据加密的微调的任何适合的组合的加密。可微调的多种加密模式可以用于包括元数据的该目的(例如,计数器模式(CTR)和带密文窃取(XTS)的基于XOR-加密-XOR(XEX)的微调码本模式)。除提供数据机密性的加密外,它的隐式完整性可以允许处理器确定是否使用正确的密钥流和微调来对数据正确解密。在一些块密码加密模式中,块密码创建密钥流,其然后与输入块组合(例如,使用XOR操作或其他更复杂的逻辑)来产生加密或解密块。在一些块密码中,将密钥流馈送到下一个块密码内来执行加密或解密。
图1中的示例编码指针114体现为寄存器110(例如,处理器102的通用寄存器)。示例私密密钥116可以由特权系统组件142的密钥创建模块148生成,并且存储在寄存器110(例如,通用寄存器或控制寄存器,诸如机器特定寄存器(MSR))中的一个、处理器102可读的另一个存储器位点(例如,固件、数据存储装置126的安全部分,等)中、在外部存储器或适合于执行本文描述的功能的另一个形式的存储器中。在一些实施例中,用于对地址、数据或代码加密的微调可以被实时计算用于加密或解密。微调117可以存储在寄存器110、处理器102可读的另一个存储器位点(例如,固件、数据存储装置126的安全部分,等)中、在外部存储器或适合于执行本文描述的功能的另一个形式的存储器中。在一些实施例中,私密密钥116和/或微调117存储在仅处理器可读的位点中,诸如补充处理器存储器180。在至少一个实施例中,补充处理器存储器180可以实现为新的高速缓存或内容可寻址存储器(CAM)。在一个或多个实现中,补充处理器存储器180可以用于存储与密码隔离有关的信息,诸如密钥和潜在地微调、证书和/或上下文ID。
在一个或多个实施例中,加密存储逻辑150可以包括定期写存储器存储逻辑152。定期写存储器存储逻辑152可以体现为定期写指令,用于执行一些可用数据D0的定期存储器存储。对于该类型的存储,发出与数据D0、存储器地址A1和数据密钥K1相关联的加密存储器写操作或微操作。然而,在执行写操作之前,使用相同的存储器地址A1执行读操作。已经存储在存储器地址A1处的内容首先被读取并且使用数据密钥K1来解密。作为解密的部分,对解密数据执行完整性检查。如果解密数据确定为损坏,则这指示可能的越界访问,因为存储的内容潜在地用除数据密钥K1以外的密钥来加密。用于存储器地址A1处内容的加密和解密的不同密钥的使用可以导致数据损坏。如果存储器地址A1的解密内容确定为损坏,则可以中止写操作,并且处理器返回损坏指示。例如,可以相应地在寄存器中设置处理器标志。如果存储器地址A1的解密内容未确定为损坏,则写操作完成并且地址A1的内容被使用数据密钥K1的可用数据D0的加密结果所替代。
在一个或多个实施例中,加密存储逻辑150还可以包括所有权写(WFO)存储器存储逻辑154。WFO存储器存储逻辑154可以体现为WFO指令,用于执行一些可用数据D0的WFO存储器存储。对于该类型的存储,发出与存储器地址A1和数据密钥K1相关联的WFO存储器操作或微操作。然而,与定期写操作相比之下,从相同的存储器地址A1没有在先的读操作。WFO存储器操作用于基于存储器地址A1直接写入存储器区,而没有对存储器区的内容执行任何完整性检查。WFO存储器操作可以用于用使用数据密钥K1加密的数据来初始化存储器区,其中数据密钥K1与拥有存储器区的存储器地址A1的软件实体相关联。在至少一个实施例中,这由执行呈现所有权写证书作为操作数的WFO指令的软件实体实现。证书与地址A1相关联并且用于证明软件实体被授权在地址A1执行WFO访问。如果证书被证明有效,则地址A1的内容被加密数据D0替代。
尽管WFO指令可以由软件实体执行以在对存储器区执行任何定期写指令之前来初始化该存储器区,但在一些实例中WFO指令也可以用于重新初始化存储器区。例如,可以对针对较小对象定制大小的存储器区生成证书,其中存储器区在软件实体的运行时期间可以被多次重新初始化。另外,WFO指令可以有利地减轻未初始化的使用漏洞,其中在存储器被正确初始化之前软件从它读出一些数据。通过在软件实体的运行时期间使用WFO指令,当对存储器区进行分配时,在对存储器区初始化时可以执行WFO指令。如果在执行WFO指令之前对该存储器区分配执行读操作(例如,由定期读指令或由定期写操作所调用的在先读操作执行),则将出现完整性检查违规并且因此在软件实体中的别处使用被损坏数据之前将检测到未初始化的使用漏洞。
在一个或多个实施例中,软件利用证书118来获得对证书所规定的特定存储器区的特权访问。例如,所有权写指令允许软件实体(例如,虚拟机管理器(VMM)、操作系统、应用、函数、线程等)通过呈现证书来证明被授权将数据(或代码)写入该证书所规定的特定存储器区来初始化存储器区。证书可以体现为父代证书或子代证书,其中父代证书规定具有特定大小的存储器区,并且相关联的子代证书规定较大存储器区内所包含的较小存储器区(例如,子区或第一级子区)。另外,实施例允许多级子区(例如,父代/主存储器区的第一级子区,第一级子区的第二级子区,等)以及子代证书(例如,父代证书的第一级子代证书,第一级子代证书的第二级子代证书,等)被使用。
证书可以由处理器102生成并且签名。例如,父代证书生成逻辑156可以体现为生成父代证书的父代证书生成指令。子代证书生成逻辑158可以体现为生成子代证书的子代证书生成指令。在计算装置100的启动时间可以授予至少一些证书。例如,对于为较大实体(例如,虚拟存储器管理器(VMM)、操作系统等)和其他实体(例如,应用)分配的存储器的父代证书可以在BIOS的启动时间被授予。然而,在一些场景中,软件实体可以请求在启动时间之后访问特权存储器区并且处理器102向应用提供合适的证书。在这些场景中,处理器可以在启动时间向软件实体提供一些私密信息。软件实体可以采用仅执行模式使用私密信息来向处理器验证它自己并且确立它的上下文。在处理器向子代软件实体授予权限之前,软件实体可以使用该上下文信息连同用于确立上下文的证书一起来获得所有权写存储器访问的根的原始证书。
证书118可以存储在寄存器110(例如,通用寄存器或控制寄存器,诸如机器特定寄存器(MSR))、处理器102可读的另一个存储器位点(例如,固件、数据存储装置126的安全部分,等)中、在外部存储器或适合于执行本文描述的功能的另一个形式的存储器中。在一些实施例中,证书118存储在仅处理器可读的位点中,诸如在补充处理器存储器180中。可以在指令调用时间使用包括引用证书的操作数的指令(例如,所有权写指令)来引用该证书。
应注意本文描述的实施例允许任意数量的参数(诸如私密密钥和/或微调)以用于特定软件实体(例如,虚拟机、操作系统、应用、函数、线程)所拥有的存储器区。例如,密钥和/或微调可以用于使特定软件实体所拥有的存储器区与其他软件实体所拥有的其他存储器区隔离。另外,诸如密钥和/或微调等参数可以用于隔离软件实体所拥有的父代(或主)区内的一级或多级子区。例如,密钥和/或微调可以用于使软件实体所拥有的主存储器区内的第一级子区与主存储器区内的其他第一级字段隔离。此外,一个或多个参数可以用于使第二级子区与软件实体所拥有的主存储器区的第一级子区内的其他第二级子区隔离,以此类推。不同的密钥可以用于每个存储器区(例如,主存储器区或子区)来使存储器区彼此隔离,这应是明显的。备选地,相同的密钥可以用于每个存储器区,但密钥可以与针对存储器区的每个实例的不同微调配对来实施存储器区实例的隔离。使用微调的隔离可以对每级子区采用相似方式实现。
在至少一个实施例中,存储器区(例如,主存储器区和子区)到用于隔离那些存储器区的参数的映射188可以存储在处理器102可读的适合的存储器(例如,固件、数据存储装置126的安全部分,等)中、在外部存储器或适合于执行本文描述的功能的另一个形式的存储器中。在一些实施例中,映射188被存储在仅处理器可读的位点中,诸如补充处理器存储器180。
还可以生成私密密钥并且使其与通过密码编码的指针相关联用于对指针中编码的地址部分(或片)加密/解密。这些密钥可以是与指针相关联的相同或不同密钥以对通过密码编码的指针所引用的数据(或代码)执行数据(或代码)加密/解密操作。为了便于解释,术语“私密地址密钥”或“地址密钥”可以用于指在存储器地址的加密和解密操作中使用的私密密钥并且术语“私密数据密钥”或“数据密钥”可以用于指在对数据或代码加密和解密的操作中使用的私密密钥。
在存储器分配操作(例如,“malloc”)时(或期间),存储器分配逻辑146为缓冲区分配存储器范围,返回指针连同元数据(例如,范围、权限元数据、大小(幂)、存储器分配大小、类型、位点、所有权、版本、标签、权限级别、密码上下文ID等中的一个或多个)。在一个示例中,存储器分配逻辑146可以对编码指针114中的明文范围信息(例如,在加密之前,在未用/非规范位中)编码,或向指令供应元数据作为一个或多个独立参数,其中(一个或多个)参数规定范围、代码权限信息、大小(幂)、存储器分配大小、类型、位点、所有权、版本、标签、权限级别(例如,用户或管理员)、密码上下文ID或其某一适合的组合。通过说明,存储器分配逻辑146可以被包含在特权系统组件142的存储器管理器模块144中。存储器分配逻辑146促使用元数据(例如,范围、权限元数据、大小(幂)、存储器分配大小、类型、位点、所有权、版本、标签值、特权级别、密码上下文ID、其某一适合的组合,等)来对指针114编码。元数据可以存储在编码指针114的未用部分(例如,64位地址的非规范位)中。对于一些元数据或元数据的组合,指针114可以在更大的地址空间(例如,128位地址、256位地址)中编码来容纳元数据或元数据组合的大小。
为了确定有效范围元数据,示例范围规则逻辑选择有效范围元数据来指示编码指针114所引用的缓冲区的大小的上限。地址调整逻辑根据需要调整有效范围元数据使得只要编码指针114指向在范围元数据所指示的有效范围内的存储器位点,地址范围中的地址的较高地址位(例如,最高有效位)就不改变。这使得能够操纵编码指针114(例如,由执行算术操作的软件,等)而且只要操纵没有导致编码指针114超出有效范围(例如,溢出缓冲区)即可。
在实施例中,有效范围元数据用于选择待加密的编码指针114的一部分(或片)。在其他实施例中,待加密的编码指针114的片可以是先验已知的(例如,较高32个位、较低32个位,等)。如在下文进一步描述的,使用私密地址密钥(例如,密钥116)以及可选地地址微调来对编码指针114的所选片(以及在一些实施例中对调整)加密。在存储器访问操作(例如,读、写或执行操作)时,对之前编码的指针114解码。为此,如在下文进一步描述的,使用私密密钥(例如,密钥116)和地址微调(如果在加密中使用地址微调的话)来对编码指针114的加密片(以及在一些实施例中,对加密调整)解密。
编码指针114基于适当操作返回到它的初始(例如,规范)形式以便复原编码指针114的初始值(例如,真的初始线性存储器地址)。为此在至少一个可能的实施例中,去除编码指针114的未用位中编码的地址元数据(例如,使未用位返回它们的初始形式)。如果编码指针114成功解码,则存储器访问操作成功完成。然而,如果编码指针114已被操纵(例如,被软件无意或被攻击者操纵)使得它的值落在范围元数据所指示的有效范围外(例如,溢出缓冲区),则编码指针114可能由于对指针中的加密地址位所执行的解密过程而被损坏。被损坏的指针将引发错误(例如,一般性保护错误或如果地址未被映射为从分页结构/页表出现则为页面错误)。可以导致错误生成的一个条件是稀疏地址空间。在该场景中,被损坏的地址可能着陆在未映射页面上并且生成页面故障。这样,计算装置100针对缓冲区溢出攻击和类似的利用提供编码指针安全性。
现在更详细地参考图1,计算装置100可以体现为用于执行本文描述的功能的任何类型的电子装置。例如,计算装置100可以体现为以下而没有限制:智能电话、平板计算机、可佩戴计算装置、膝上型计算机、笔记本计算机、移动计算装置、蜂窝电话、耳机、消息传递装置、车辆远程信息处理装置、服务器计算机、工作站、分布式计算系统、多处理器系统、消费者电子装置和/或配置成执行本文描述的功能的任何其他计算装置。如在图1中示出的,示例计算装置100包括至少一个处理器102,其包含有安全存储器访问逻辑106、地址密码单元104和密码计算引擎108。
计算装置100还包括存储器120、输入/输出子系统124、数据存储装置126、显示装置128、用户界面(UI)子系统130、通信子系统132、应用134和特权系统组件142(其通过说明包括存储器管理器模块144和密钥创建模块148)。在其他实施例中,计算装置100可以包括其他或额外组件,诸如通常出现在移动和/或固定计算机中的那些(例如,各种传感器和输入/输出装置)。另外,在一些实施例中,示例组件中的一个或多个可以包含在另一个组件中或另外形成另一个组件的一部分。计算装置100的组件中的每个可以体现为软件、固件、硬件,或软件和硬件的组合。
处理器102可以体现为能够执行本文描述的功能的任何类型的处理器。例如,处理器102可以体现为单核或多核中央处理单元(CPU)、多CPU处理器或处理/控制电路,或多个不同的处理单元或电路(例如,CPU和图形处理单元(GPU),等)。
处理器存储器可以在核内部或在核界限外部提供。例如,寄存器110可以包括在核内并且可以用于存储编码指针(例如,114)、私密密钥116和可能的微调117用于数据或代码和地址的加密和解密,并且用于存储证书118来证实对存储器区的特权访问。处理器102还可以包括高速缓存170,其可以是例如L1和/或L2高速缓存,其中当预期被处理器102提取而从存储器120检索该高速缓存时存储数据。
处理器还可以包括核界限外部的补充处理器存储器180。补充处理器存储器180可以是专用高速缓存,其并不可由软件直接访问。在一个或多个实施例中,补充处理器存储器180可以存储参数与它们相关联的存储器区之间的映射188。例如,密钥可以在映射188中被映射到它们的对应存储器区。在一些实施例中,与密钥配对的微调也可以存储在映射188中。在其他实施例中,映射188可以由软件管理。在一些实施例中,补充处理器存储器180还可以用于存储其他信息,诸如证书118。
一般,密钥和微调可以基于特定需要和架构实现采用任何适合的方式来处理。在第一实施例中,密钥和微调两者都可以是隐式的,并且因此被处理器管理。在该实施例中,密钥和微调可以由处理器在内部或由安全处理器在外部生成。在第二实施例中,密钥和微调两者都是显式的,并且因此被软件管理。在该实施例中,在指令调用时间使用包括引用密钥和微调的操作数的指令来引用密钥和微调。在该实施例中,密钥和微调可以存储在寄存器或存储器中。在第三实施例中,密钥可以被处理器管理,而微调可以被软件管理。
计算装置100的存储器120可以体现为能够执行本文描述的功能的任何类型的易失性或非易失性存储器或数据存储。易失性存储器是需要功率来维持介质所存储的数据的状态的存储介质。易失性存储器的示例可以包括各种类型的随机存取存储器(RAM),诸如动态随机存取存储器(DRAM)或静态随机存取存储器(SRAM)。可以在存储器中使用的一个特定类型的DRAM是同步动态随机存取存储器(SDRAM)。在特定实施例中,存储器122的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)、奥氏存储器、纳米线存储器、电可擦除可编程只读存储器(EEPROM)、其他各种类型的非易失性随机存取存储器(RAM)和磁存储存储器。
在一些实施例中,存储器120包括一个或多个存储器模块,诸如双列直插存储器模块(DIMM)。在一些实施例中,存储器120可以位于与包括处理器120的集成电路芯片截然不同的一个或多个集成电路芯片上或可以位于与处理器102相同的集成电路芯片上。在各种实施例中,存储器120可以包括任何适合类型的存储器并且不限于存储器的特定速度或技术。
在操作中,存储器120可以存储在计算装置100的操作期间使用的各种数据和代码,以及操作系统、应用、程序、库和驱动器。存储器120可以存储数据和/或代码,其包括处理器102执行的指令序列。
存储器120通信地耦合于处理器102,例如经由I/O子系统124。I/O子系统124可以体现为电路和/或组件,用以促进与处理器102、存储器120和计算装置100的其他组件的输入/输出操作。例如,I/O子系统124可以体现为或另外包括存储器控制器中枢、输入/输出控制中枢、固件装置、通信链路(例如,点到点链路、总线链路、线、电缆、光导、硬刷电路板迹线等)和/或用以促进输入/输出操作的其他组件和子系统。在一些实施例中,I/O子系统124可以形成片上系统(SoC)的一部分并且连同处理器102、存储器120和/或计算装置100的其他组件一起包含在单个集成电路芯片上。
数据存储装置126可以体现为为了数据的短期或长期存储而配置的任何类型的一个或多个物理装置,诸如例如存储器装置和电路、存储卡、硬盘驱动、固态驱动、闪速存储器或其他只读存储器、作为只读存储器和随机存取存储器的组合的存储器装置,或其他数据存储装置。在各种实施例中,存储器120可以高速缓存在数据存储装置126上存储的数据。
显示装置128可以体现为能够显示数字信息的任何类型的显示器,诸如液晶显示器(LCD)、发光二极管(LED)、等离子体显示器、阴极射线管(CRT)或其他类型的显示装置。在一些实施例中,显示装置128可以耦合于触屏或其他人机接口装置以允许用户与计算装置100交互。显示装置128可以是用户界面(UI)子系统130的部分。用户界面子系统130可以包括许多额外装置,用以促进用户与计算装置100的交互,其包括物理或虚拟控制按钮或键、麦克风、扬声器、单向或双向静物和/或视频拍摄装置和/或其他。用户界面子系统130还可以包括这样的装置,诸如运动传感器、接近传感器和眼部追踪装置,其可以配置成检测、捕获和处理涉及计算装置100的各种其他形式的人类交互。
计算装置100进一步包括通信子系统132,其可以体现为能够在计算装置100与其他电子装置之间实现通信的任何通信电路、装置或其集合。通信子系统132可以配置成使用任何一个或多个通信技术(例如,无线或有线通信)和相关联协议(例如,以太网、Bluetooth™、Wi-Fi™、WiMAX、3G/LTE等)来实施这样的通信。通信子系统132可以体现为网络适配器,其包括无线网络适配器。
示例计算装置100还包括许多计算机程序组件,诸如一个或多个用户空间应用(例如,应用134)和特权系统组件142。用户空间应用可以体现为经由例如显示装置128或UI子系统130而直接或间接与最终用户交互的任何计算机应用(例如,软件、固件、硬件或其组合)。用户空间应用的一些示例包括字处理程序、文档查看器/阅读器、web浏览器、电子邮件程序、消息传递服务、计算机游戏、拍摄装置和视频应用等。除其他外,特权系统组件142还促进用户空间应用(例如,应用134)与计算装置100的硬件组件之间的通信。特权系统组件142的部分可以体现为能够执行本文描述的功能的任何操作系统,诸如MicrosoftCorporation的WINDOWS、Google, Inc.的ANDROID和/或其他的版本。备选地或另外,特权系统组件142的一部分可以体现为能够执行本文描述的功能的任何类型的虚拟机监视器(例如,I型或II型管理程序)。
示例特权系统组件142包括密钥创建模块148,其可以体现为软件、固件、硬件或软件和硬件的组合。例如,密钥创建模块148可以体现为操作系统内核的模块、虚拟机监视器或管理程序。密钥创建模块148创建私密密钥116(例如,私密地址密钥和私密数据密钥)并且可以将它们写入处理器102具有读取访问的一个或多个寄存器(例如,专用寄存器)。为了创建私密密钥,密钥创建模块148可以执行例如随机数生成器或能够生成可以执行本文描述的功能的私密密钥的另一个算法。在其他实现中,私密密钥可以被写入软件不可直接访问的补充处理器存储器180。在又其他实现中,可以对私密密钥加密并且将其存储在存储器120中。在一个或多个实施例中,当对分配给特定软件实体的存储器区生成数据密钥时,可以对该数据密钥加密,并且软件实体可以提供有加密数据密钥、指向加密数据密钥的指针或包括加密密钥或指向加密数据密钥的指针的数据结构。在其他实现中,软件实体可以提供有指向处理器存储器中存储的未加密数据密钥的指针或包括指向未加密数据密钥的指针的数据结构。一般而言,在本文描述的实施例中可以使用用于生成、存储和提供要用于对数据(或代码)加密和解密并且要用于对指针中编码的存储器地址(或其部分)加密和解密的私密密钥的任何适合的机制。
应注意大量方法可以用于对本文公开的实施例生成或获得密钥。例如,尽管密钥创建模块148示出为计算装置100的部分,但可以使用任何适合的验证过程从任何适合的外部源获得一个或多个私密密钥,用以安全地将密钥传达给计算装置100,这可以包括生成密钥,作为那些过程的部分。此外,特权系统组件142可以是可信执行环境(TEE)、虚拟机、处理器102、协处理器或计算装置100中或安全连接到计算装置100的任何其他适合的硬件、固件或软件的部分。此外,密钥可以是“私密的”,其意指它的值保持隐藏、无法访问、模糊的或另外被保护来防止未经授权的行动者(例如,软件、固件、机器、外来硬件组件和人类)。这可以包括使密钥对密钥用于执行数据和/或代码的加密和解密的存储器区保持私密。
本文描述的实施例(包括WFO指令和相关联的操作、定期写指令和相关联的操作以及密码计算技术)可以被实现用于数据和/或代码,这应是明显的。为了便于说明,实施例和示例可以只参考数据而描述。然而,应理解这样的实施例和示例还适用于代码,但代码可能未被显式引用。
图2A是图示基于编码指针210的实施例的密码计算的通用过程200A的简化流程图。过程200A图示将数据存储到(例如,写入)编码指针210所指示的存储器地址处的存储器区,其中根据至少一个实施例,数据的加密和解密被绑定到指针的内容。过程200A的至少一些部分可以由计算装置100的硬件、固件和/或软件执行。在示出的示例中,指针210是编码指针114的示例并且体现为包括元数据部分的编码线性地址。元数据部分是某一类型的上下文信息(例如,大小/幂元数据、标签、版本等)并且线性地址可以采用任意数量的可能配置来编码,其中的至少一些在本文描述。
根据各种实施例,编码指针210可以具有各种配置。例如,编码指针210可以用明文线性地址来编码或可以用一些明文线性地址位和一些加密线性地址位来编码。根据特定实施例,编码指针210还可以用不同的元数据来编码。例如,在编码指针210中编码的元数据可以包括但不一定限于大小/幂元数据、标签值或版本号中的一个或多个。
一般,过程200A图示密码计算流,其中编码指针210用于获得要存储数据的存储器220的存储器区的存储器地址,并且至少部分基于从编码指针210得出的微调来对待存储的数据加密。首先,地址密码单元202对编码指针210解码来获得解码线性地址212。解码线性地址212可以用于使用转换后备缓冲器204来获得存储器220中的物理地址214。至少部分从编码指针210得出数据微调217。例如,数据微调217可以包括整个编码指针、编码指针的一个或多个部分、解码线性地址的一部分、整个解码线性地址、编码元数据和/或外部上下文信息(例如,未在指针中编码的上下文信息)。
一旦从编码指针210得出微调217,密码计算引擎270就可以通过基于数据密钥216和数据微调217对未加密数据222加密来计算加密数据224。在至少一个实施例中,密码计算引擎270包括加密算法,诸如密钥流生成器,其在特定大小粒度(任何适合的大小)可以体现为AES-CTR模式块密码272。在该实施例中,数据微调217可以用作初始化向量(IV)并且编码指针210的明文偏移可以用作计数器值(CTR)。密钥流生成器可以对数据微调217加密来产生密钥流276并且然后可以对未加密数据222和密钥流276执行密码操作(例如,逻辑函数274,诸如异或(XOR),或其他更复杂的操作)以便生成加密数据224。应注意,在从编码指针210获得物理地址214时可以开始密钥流276的生成。因此,并行操作可以增加对未加密数据加密的效率。应注意加密数据在存储到存储器220之前可以被存储到高速缓存(例如,170)或在一些实例中代替存储到存储器220。
图2B是图示基于编码指针210的实施例的密码计算的通用过程200B的简化流程图。过程200B图示获得(例如,读取、加载、提取)在编码指针210所引用的存储器地址处的存储器区中存储的数据,其中根据一个实施例,数据的加密和解密被绑定到指针的内容。过程200B的至少一些部分可以由计算装置100的硬件、固件和/或软件执行。
一般,过程200B图示密码计算流,其中编码指针210用于获得对于其中存储加密数据的存储器220的存储器区的存储器地址,并且一旦从存储器区提取加密数据,则至少部分基于从编码指针210得出的微调来对加密数据解密。首先,地址密码单元202对编码指针210解码来获得解码线性地址212,其用于从存储器提取加密数据224,如在232指示那样。至少部分从编码指针210得出数据微调217。在用于从存储器加载/读取数据的该过程200B中,采用与在用于将数据存储到/写入存储器的逆过程中相同的方式得出数据微调217。
一旦已经从编码指针210得出微调217,则密码计算引擎270可以通过基于数据密钥216和数据微调217对加密数据224解密来计算解密(或未加密)数据222。如之前描述的,在该示例中,密码计算引擎270包括加密算法,诸如在特定大小粒度(任何适合的大小)体现为AES-CTR模式块密码272的密钥流生成器。在该实施例中,数据微调217可以用作初始化向量(IV)并且编码指针210的明文偏移可以用作计数器值(CTR)。密钥流生成器可以对数据微调217加密来产生密钥流276并且然后可以对加密数据224和密钥流276执行密码操作(例如,逻辑函数274,诸如异或(XOR),或其他更复杂的操作)以便生成解密(或未加密)数据222。应注意当在232提取加密数据时可以开始密钥流的生成。因此,并行操作可以增加对加密数据解密的效率。
图3是根据至少一个实施例通过计算装置100的各种组件的数据流300的简化流程图。数据流300假设用于对数据加密和解密的密钥是已知的。通过示例,处理器102可能已经获得或生成密钥,或应用134可能已向处理器确立它的证书并且从处理器102获得密钥。图3中示出的数据流300中牵涉的组件包括处理器102、处理器的核103、高速缓存170(诸如L1高速缓存)、存储器120和应用134。尽管参考应用134描述图3,但参考图3描述的概念能适用于执行加密写指令(例如,定期写指令、所有权写指令)或解密读指令(例如,读和解密、加载和解密、移动和解密)的任何软件实体,这应该是明显的。
起初,应用134可以例示为处理器102上的进程并且可以对未加密数据和/或代码302加密。应用134可以对未加密数据/代码302执行加密写(例如,所有权写)的指令。在310,未加密数据/代码302被传递给核103。例如,未加密数据/代码302可以存储在寄存器中。对于WFO指令,在WFO指令中呈现证书并且其被处理器102核实用于写入任何数据。对于定期写指令,首先在写操作要访问的相同的存储器地址执行在先读操作。对于该论述,假设对于WFO指令,证书已被核实,或对于定期写指令,已经执行在相同存储器地址的成功读取。
在311,由加密存储逻辑150访问未加密数据/代码302,该加密存储逻辑至少部分基于应用134获得或生成的密钥来对未加密数据/代码302执行密码算法。在一个或多个实施例中,密钥或密钥的指示可以由应用134传递给核103作为加密写指令(例如,定期写指令、所有权写指令)中的操作数。
在312,加密存储逻辑150生成加密数据/代码304作为执行密码算法的结果。一旦生成加密数据/代码304,在313,它被传出核103。在图3的示例数据流300中,加密数据/代码304可以被传递给高速缓存170(例如,处理器102中的L1高速缓存)。在314,加密数据/代码304可以存储在存储器120(例如,计算装置100的主存储器)中。在其他实施例中,加密数据/代码304可以绕过L1高速缓存并且被直接存储到存储器120内。
当应用134需要使用或执行存储器120中存储的数据或代码时,它可以执行解密读指令来读取加密数据/代码304并且对其解密。在315,加密数据/代码304被传递给高速缓存170。在316,加密数据/代码304被传递给核103。在317,加密数据/代码304被解密加载逻辑160访问,该解密加载逻辑至少部分基于应用134获得或生成的相同密钥来对加密数据/代码304执行密码算法。在一个或多个实施例中,密钥或密钥的指示可以被应用134传递给核103作为解密和移动指令中的操作数。
在318,解密加载逻辑160生成未加密(或解密)数据/代码302作为对加密数据/代码执行密码算法的结果。一旦生成未加密数据/代码302,在319,它被传出核103。例如,未加密数据/代码302可以通过被存储在寄存器中而对应用134变得可用。因此,应用134可以对未加密数据执行操作并且操纵它们或可以执行未加密代码。一旦应用134完成对数据执行操作(或执行代码),它就可以执行另一个加密写指令(例如,定期写指令)来对数据或代码重新加密并且将它再次存储在存储器120中。
图4A和4B是图示根据至少一个实施例的计算装置(例如,100)中的存储器(例如,120)的存储器区的可能例示的框图。图4A图示具有分配给软件实体的单个区域的示例存储器区400,其中该软件实体从处理器请求并且接收或另外获得对存储器区400的特权访问。处理器可以对特定存储器区授予特权访问的软件实体的示例可以包括但不一定限于可信执行环境、虚拟机、操作系统、系统应用或用户空间应用(例如,134)。
在一个或多个实施例中,对特定存储器区的特权访问包括对该存储器区的所有权写(WFO)特权,这将在本文进一步描述。如本文使用的,术语“父代软件实体”意在指为其分配存储器区并且已被授予WFO特权的软件实体。例如,存储器区400可以分配给父代软件实体S0。在该示例中,父代软件实体S0可以用单个参数或参数(例如,密钥、微调,或密钥和微调)的单个组合执行WFO指令来用基于参数或参数组合而加密的数据或代码来初始化整个存储器区400。该写访问可以有效地使存储器区400与使用其他参数的其他软件实体所潜在拥有并且隔离的其他存储器区隔离。
图4B图示可以分配给父代软件实体S0的存储器区410的另一个示例。父代软件实体S0对于整个存储器区410具有WFO特权。父代软件实体S0可以使用WFO指令以在所分配的存储器区410内用使用三个不同参数(例如,三个不同密钥)加密的数据来初始化不同的存储器区域(或子区)。在该示例中,子区410A用使用第一参数(例如,密钥K1)加密的第一数据来初始化,子区410B用使用第二参数(例如,密钥K2)加密的第二数据来初始化,并且子区410C用使用第三参数(例如,密钥K3)加密的第三数据来初始化。在另一个示例中,通过使用利用相同密钥的不同微调来对用于初始化子区的相应数据加密,可以区分或隔离存储器子区。
对分配给父代软件实体的存储器区的访问也可以被给予其他软件实体,在本文称为“子代软件实体”。例如,对存储器区410具有特权访问的父代软件实体可以用定期写特权而不是WFO特权来给予子代软件实体对子区的访问。因为定期写操作前面是相同地址上的存储器读,因此另一个子区中的地址上的读可能导致错误。例如,考虑利用密钥K1被给予对子区410A的定期写访问的子代软件实体S1,如在412处示出那样。因为子代软件实体S1没有拥有父代软件实体S0所拥有的证书,子代软件实体因此无法执行WFO操作,并且相反,执行定期写操作。如果子代软件实体S1使用定期写指令对子区410B执行越界访问,则生成错误,如在414示出那样。因为写操作是定期的(即,不是所有权写),执行在先读访问并且它导致来自子区410B的一些加密内容被用错误的密钥(即,密钥K1)解密。使用一个或多个适合的完整性检查,解密的结果可以指示读访问越界并且可以阻止写操作。适合的完整性检查可以包括但不一定限于检查独立存储的完整性值(例如,消息验证码(MAC))的有效性、检查某些金丝雀值(canary value)具有它们本应具有的值,和/或检查解密内容的熵。
图5是示出所有权写(WFO)证书500的结构和内容的一个可能示例的图,该证书可以由处理器允许对存储器区(例如,主存储器区或子区)地址的WFO访问的指令表示。在一个或多个实施例中,产生证书500并且由处理器(例如,102)对它签名并且软件实体需要它来发出WFO访问以用它自己的数据初始化存储器。证书可以包括与编码指针的字段相似的一些字段,如本文之前描述那样。证书可以具有与编码指针的字段相似的一个或多个字段,但根据特定需要和实现可以是任何适合的大小。例如,证书500以位(例如,64个位、128个位、256个位等)计可以是任何大小,这些位可以存储在寄存器中,诸如在ymm寄存器或zmm寄存器中。在其他实施例中,其他类型的安全存储器可以用于存储证书500,该证书可以被加密并且存储在主存储器中,或WFO指令可以呈现指向证书或加密证书的指针。在一个或多个实施例中,有效证书核实呈现证书的软件实体在初始化时间被授权访问特定存储器区一次。编码指针(通过密码或不通过密码)在大小上可以较小并且用于对存储器区的定期访问,潜在地是多次。
在一个或多个实施例中,证书500包括基地址字段502、存储器区界限字段504、额外元数据字段506和完整性值字段508。基地址字段502可以包含证书授权WFO特权访问的存储器区的基地址512。存储器区界限字段504包含证书授权WFO特权访问的存储器区的存储器区界限514。存储器区界限514可以采用任何适合的方式提供,其包括但不限于存储器区的大小或存储器区的高位地址。额外元数据字段506包含与证书授权WFO特权访问的存储器区相关联的额外元数据516。额外元数据516可以包括但不一定限于访问权限(例如,写权限、读权限、执行权限等)和/或字段类型。
完整性值字段508包含完整性值516,其可以表示处理器在证书500上的签名。在其他实现中,证书可以包括另一个字段或使用某一其他适合的机制以使处理器能够验证(例如,签名)证书。完整性值518可以是使处理器能够执行完整性检查来核实当软件呈现证书500时证书的完整性的任何适合的值。例如,完整性值518可以体现为消息验证码(MAC),其可以基于证书中的一个或多个其他字段由密码哈希函数使用私密密钥来计算。在一个或多个实施例中,私密密钥可以仅对处理器是已知的。在一个示例中,处理器可以调用密码哈希函数,其使用处理器已知的私密密钥以基于证书中的一个或多个其他字段(诸如基地址512、存储器区界限514和/或额外元数据516)来计算MAC值。当在软件实体执行的指令中呈现证书500时,处理器可以使用相同的密码哈希函数和相同的私密密钥以基于证书中之前被用于计算证书500的完整性值字段508中存储的MAC值的一个或多个字段来计算新的MAC值。如果新的MAC值匹配(或另外对应于)证书500中的MAC值,则完整性检查成功并且核实证书500(和它的字段)的完整性。在该情况下,呈现证书的软件实体被准许对证书中标识的存储器区执行特权存储器访问(例如,所有权写访问)。如果新的MAC值不匹配(或另外不对应于)证书中的MAC值,则证书500的完整性无法被核实并且呈现证书500的软件实体被阻止使用特权WFO存储器访问。
在另外的实施例中,处理器对较大存储器区生成的证书可以用于对该较大存储器区内定义的较小区(或子区)生成一个或多个证书。较大存储器区的证书在本文可以称为“父代证书”,并且在较大存储器区内定义的较小区的证书在本文可以称为“子代证书”。可以生成子代证书来给予子代软件实体对较小区的特权WFO访问。
在一个或多个实施例中,通过执行子代证书生成指令来生成子代证书,该子代证书生成指令接受(作为输入)父代证书以及对于比该父代证书中规定的存储器区还窄的区的未经验证子代证书。该指令检查父代证书的有效性(例如,通过在父代证书中执行完整性值的完整性检查)并且还检查子代证书是否规定父代证书中规定的较大存储器区中所包括的较窄区。该检查可以通过评估证书中的基地址和存储器区界限来执行。如果通过检查,则处理器通过计算完整性值(例如,MAC值)并且向证书的完整性字段增添完整性值来对子代证书签名。在至少一个实施例中,经签名的子代证书允许子代软件实体完全控制子代证书对其授权特权WFO访问的较窄区。
转向图6,图6是图示其中特权写指令和定期(或非特权)写指令都被父代软件实体610以及它的第一和第二子代软件实体614A和614B(由处理器602执行)用于写入存储器区620的过程600的流程图。在631,父代软件实体610从处理器602获得对存储器区620的父代证书C1。在一个或多个实施例中,父代软件实体610可以执行父代证书生成指令(例如,调用父代证书生成逻辑156)来获得授权对存储器区620的所有权写特权的经验证的父代证书C1。处理器602生成并且验证(例如,通过签名)父代证书C1且向父代软件实体610提供证书。在一个或多个实施例中,处理器602的BIOS固件可以生成父代证书C1并且对其签名。
一旦父代软件实体610获得有效父代证书,则它可以执行WFO指令以用对每个子区使用不同密钥加密的数据来初始化存储器区620的子区622A、622B和622C。在软件实体被初始化之后第一次将数据写入存储器区时,该存储器区可以由软件实体“初始化”。存储器区在一些实例中还可以被“重新初始化”以使用不同的参数来对该区中存储的数据加密。
在该示例中,在634,父代软件实体610用父代证书C1、指向子区622A的编码指针PTR1以及用来对第一数据D1加密的第一密钥K1执行WFO指令。基于确定父代证书C1授权对子区622A的访问(例如,通过对父代证书C1中的完整性值执行完整性检查),用经加密的第一数据来初始化子区622A。在635,父代软件实体610用父代证书C1、指向子区622B的编码指针PTR2和用来对第二数据D2加密的第二密钥K2执行WFO指令。基于确定父代证书C1授权访问子区622B,用经加密的第二数据来初始化子区622B。
父代软件实体610还可以针对存储器区620的子区而给予子代软件实体定期写特权和WFO特权。在该示例中,父代软件实体610可以不初始化子区622C,而相反给予第二子代软件实体614B对子区622C的WFO特权。父代软件实体610可以执行子代证书生成(CCG)指令(例如,调用子代证书生成逻辑158)来获得授予对存储器的期望子区的WFO特权的经验证的子代证书CC1。在该示例中,期望子区是子区622C。CCG指令包括父代证书C1和未经验证的子代证书C1。处理器602确定父代证书C1的有效性(例如,通过在父代证书C1中执行完整性值的完整性检查)。处理器602还确定未经验证的子代证书CC1是否规定它在请求访问的有效区。例如,如果子代证书CC1中的规定区被包括在父代软件实体610所拥有的存储器区620的界限内,则所规定的区有效。如果父代证书C1和子代证书中的规定区都被确定为有效,则处理器602例如通过对子代证书CC1(例如,计算完整性值并且将它存储在子代证书CC1中)签名来验证子代证书CC1。在632,处理器602然后向父代软件实体610提供经验证的子代证书CC1。
在该示例中,在615,父代软件实体610通过向子代软件实体614B提供子代证书CC1而给予子代软件实体614B对子区622C的WFO特权。子代软件实体614B可以用它自己的加密数据初始化子区622C。在一个示例中,子代软件实体614B可以用指向子区622C的编码指针、子代证书CC1和对数据加密的密钥来执行WFO指令以初始化子区622C的整个区域。在另一个示例中,子代软件实体614B执行WFO指令来初始化子区622C的多个子区。如在图6中示出的,在636,子代软件实体614B用子代证书CC1、指向子区624A的编码指针PTR3和对第三数据D3加密的第三密钥K3来执行WFO指令。基于确定子代证书CC1授权访问子区624A(例如,通过对子代证书CC1中的完整性值执行完整性检查),用经加密的第三数据D3初始化子区624A。在637,子代软件实体614B用子代证书CC1、编码指针PTR4和对第四数据D4加密的第四密钥K4来执行WFO指令。基于确定子代证书CC1授权访问子区624B,用经加密的第四数据D4来初始化子区624B。在638,子代软件实体614B用子代证书CC1、编码指针PTR5和对第五数据D5加密的第五密钥K5来执行WFO指令。基于确定子代证书CC1授权访问子区624C,用经加密的第五数据D5来初始化子区624C。
可以不对一些子代实体授予对存储器区的WFO特权访问,而相反可以对其授予对存储器区或它的子区中的一个或多个的定期写权限。在图6的示例中,父代软件实体610给予子代实体614A对子区622A的定期写权限。子代软件实体614A可以执行定期写指令来将它自己的数据写入子区622A。在一个示例中,子代软件实体614B使用编码指针PTR1(如之前描述的)和被父代软件实体610用于对子区622A中存储的第一数据D1加密的密钥K1来执行定期写指令。密钥K1用于对第六数据D6加密。因为指令是定期写指令,在将任何新的数据写入子区之前使用编码指针PTR1来对子区622A执行读操作。如果写指令尝试访问越界的存储器(例如,在存储器区620的另一个子区中或在另一个存储器区中),则对编码指针PTR1解码和/或对加密数据D1解密将导致错误。例如,对于数据D1的完整性检查可能失败(例如,高速缓存行上的消息验证码(MAC)),解密数据D1中的金丝雀值可能失败,或解密数据D1中检测的熵的量可以基于相关熵阈值而指示错误。如果在先前的读操作中检测到错误,则阻止定期写访问。然而,如果在先读操作成功,则可以将新的经加密的第六数据D6写入子区622A。
诸如存储器区620等原始分配的存储器区可能未分成任何子区,或可以分成任意数量的子区(在本文也称为“第一级子区”),其中每个第一级子区(例如,622A、622B、622C)可能使用WFO指令用使用不同参数或不同参数组合(例如,不同的密钥、相同的密钥和不同的微调,等)加密的数据来初始化,这应该是明显的。此外,初始分配的存储器区的第一级子区可以不分成另外的子区,或可以分成任意数量的子区(在本文也称为“第二级子区”),其中每个第二级子区(例如,624A、624B、624C)可以使用WFO指令用使用不同参数或不同参数组合(例如,不同的密钥、相同的密钥和不同的微调,等)加密的数据来初始化。存储器区的任意数量的嵌套级子区可以基于特定需要和实现而被例示。此外,可以给予子代软件实体对一个或多个子区的WFO特权访问、对一个或多个子区的定期读访问或其任何适合的组合。
转向图7,图7是图示根据一个或多个实施例的与所有权写(WFO)指令相关联的示例过程700的流程图。过程700可以与一个或多个操作集相关联。计算系统(例如,计算装置100)可以包括诸如计算装置100的硬件、固件和/或软件等用于执行操作的部件。在一个示例中,WFO存储器存储逻辑154的操作中的至少一些可以由处理器102执行。
当一些数据(例如,D1)变成可用于写入存储器时,过程700开始。在702,WFO指令由软件实体(例如,父代软件实体或子代软件实体)执行来使用数据D1初始化编码指针所引用的存储器地址处的存储器区(例如,主存储器区或子区)。WFO指令的执行促使发出所有权写存储器操作或微操作。WFO存储器操作或微操作与数据密钥(例如,K1)和数据D1要被写入的存储器区的存储器地址(例如,A1)相关联。在至少一个实施例中,WFO指令可以包括包含证书的第一操作数和包含用存储器区的存储器地址(例如,线性地址)编码的指针的第二操作数。
因为指令是WFO指令而不是定期写指令,没有从相同存储器地址A1执行的在先读操作。相反,WFO存储器操作用于直接写入存储器而没有执行存储器区的内容的任何完整性检查。因此,在704,识别包含WFO指令中的证书的第一操作数。在706,做出关于证书是否授权访问(例如,写访问)存储器区的确定。在至少一个实施例中,该确定包括证书中完整性值的核实(例如,518)来确定证书本身是否有效。例如,完整性值可以是使用处理器已知的证书签名的密钥而在证书中的一个或多个其他字段上计算的消息验证码(MAC)。为了确定证书是否有效,处理器可以使用它持有的相同证书密钥以从所呈现的证书中的相同的一个或多个其他字段产生新的MAC。如果存储在所呈现的证书中的MAC不匹配或另外不对应于新产生的MAC,则证书无效,并且因此,不授权软件实体访问存储器区。在该情况下,在708,可以中止写操作并且可以返回错误消息来指示越界访问错误。
如果存储在所呈现的证书中的MAC匹配或另外对应于新产生的MAC,则所呈现的证书确定为有效。如果证书有效,则证书授权软件实体访问存储器地址A1所指示的存储器区。因此,在712,存储器区的存储器地址A1(例如,线性地址)通过对编码指针解码而获得。如果指针通过密码来编码,则指针的至少一部分可以使用地址密钥以及可能地址微调而被解密以获得经解密的存储器地址片,其与线性地址的其他明文部分结合来产生全明文线性地址,如本文之前描述那样。
在714,数据微调(例如,T1)可以至少部分从编码指针得出,如本文之前描述那样。例如,数据微调T1可以是整个编码指针(其可以通过或可以不通过密码编码)。在另一个示例中,来自编码指针的元数据以及从编码指针计算的线性地址可以是数据微调T1的部分。在又其他实施例中,外部上下文信息可以是数据微调T1的部分。在至少一些实施例中,数据微调T1可以用于区分较大存储器区内或较大存储器子区内定义的子区。在又其他实施例中,数据微调T1可以不从编码指针得出。而是,可以使用单个计数器/初始化向量(IV)。在该情况下,不同的数据微调可以用于区分子区。在又其他实施例中,对于每个子区的不同密钥和从指向那些子区的编码指针得出的不同数据微调的组合可以用于区分子区。
在716,可以获得与存储器区相关联的数据密钥K1。WFO指令的操作数可以用于获得对于存储器区的数据密钥K1。操作数可以包含从中可以获得数据密钥K1的任何适合的内容(例如,加密密钥、指向存储器中存储的加密密钥的指针、指向处理器存储器中存储的未加密密钥的指针、包含加密密钥的数据结构、包含指向处理器存储器中的加密密钥或未加密密钥的数据结构等)。如果待初始化的存储器区是分配给软件实体的存储器的较大区域的子区,则数据密钥K1可以是要用于对较大存储器区的相应子区或较大存储器子区的数据加密的若干数据密钥中的一个。
在718,待写入存储器的数据D1被加密以至少部分基于数据密钥K1和数据微调T1来产生加密数据D1。在至少一个实施例中,在处理器的核中执行加密。加密可以使用块密码(例如,可微调块密码(例如,带密文窃取(XTS)的基于XOR-加密-XOR的微调码本模式))或如本文之前描述的任何其他适合的密码算法来执行。
在720,通过用加密数据D1替代存储器区的内容来初始化存储器区。这可以通过基于存储器地址A1执行写操作来将加密数据D1存储到存储器而实现。在712获得的解码线性地址可以用于获得物理地址并且加密数据D1可以基于物理地址被写入存储器区。
在另一个实施例中,在执行写操作之前,既不需要证书也不需要在先读操作。而是,使用直接写(例如,非暂时存储)操作,其中直接操作前面没有读操作并且不执行对有效证书的检查。在该实施例中,在写操作覆写保留秘密的先前数据之前并未揭示先前存储器内容。这是存储器所有权的隐式改变。在这些情况下,即使数据损坏(例如,因为直接写操作由恶意软件或无意软件错误执行),如果被覆写的数据再次由数据被覆写的先前所有者所访问,则完整性检查将失败(例如,MAC值将不匹配),从而导致错误并且防止消耗被损坏的数据。
应进一步注意,尽管按顺序说明过程700的操作,但可以使用各种操作的任何适合的顺序或时序。例如,在至少一个实施例中,在710识别的一个或多个操作可以至少部分与过程700的其他操作并行执行。在一个可能实现中,尽管证书被评估(例如,704、706)以确定它是否授权访问存储器区,但用于对待存储的数据加密的710的操作中的一个或多个可能发生。在又另外的可能实现中,在714-716指示的一个或多个操作可以至少部分与在712从编码指针对存储器区的存储器地址解码并行执行。在这些可能的备选实现或其某一组合中,由于过程可能更快完成,因此可以提高效率。
图8是图示根据一个或多个实施例与定期写指令相关联的示例过程800的流程图。过程800可以与一个或多个操作集相关联。计算系统(例如,计算装置100)可以包括诸如计算装置100的硬件、固件和/或软件等用于执行操作的部件。在一个示例中,定期写存储器存储逻辑152的操作中的至少一些可以由处理器102执行。
当一些数据(例如,D1)变成可用于被写入存储器时,过程800开始。在802,由软件实体(例如,父代软件实体或子代软件实体)执行定期写指令来将数据D1写入编码指针所引用的存储器地址处的存储器区。定期写指令的执行促使发出定期写存储器操作或微操作。定期写存储器操作或微操作与数据密钥(例如,K1)和数据D1要被写入的存储器区的存储器地址(例如,A1)相关联。在至少一个实施例中,WFO指令可以包括包含用存储器区的存储器地址(例如,线性地址)编码的指针的第一操作数。
因为指令是定期写操作,而不是WFO写指令,根据相同的存储器地址A1执行在先读操作。因此,可以评估存储器区的内容的完整性来确定内容是损坏还是写操作在尝试执行越界访问。因此,在804,通过对编码指针解码来获得存储器区的存储器地址(例如,线性地址)。如果指针通过密码来编码,则指针的至少一部分可以使用地址密钥以及可能地址微调而被解密以获得经解密的存储器地址片,其与线性地址的其他明文部分结合来产生全明文线性地址,如本文之前描述那样。
在806,基于解码的线性地址读取存储器区的内容。为了便于说明,我们假设存储器区包含数据D0。在至少一些场景中,存储器区的物理地址可以基于线性地址获得并且然后用于访问存储器区。物理地址然后可以用于访问存储器区来读取数据D0。在其他场景中,如果数据D0当前存储在高速缓存(例如,170)中,则可以从高速缓存读取它。
在808,可以至少部分从编码指针得出数据微调T1,如本文之前描述那样。例如,数据微调T1可以是整个编码指针(其可以通过或可以不通过密码编码)。在另一个示例中,来自编码指针的元数据和从编码指针计算的线性地址可以是数据微调T1的部分。在又其他实施例中,外部上下文信息可以是数据微调T1的部分。在至少一些实施例中,数据微调T1可以用于区分较大存储器区内或较大存储器子区内定义的子区。在又其他实施例中,可以不从编码指针得出数据微调T1。而是,可以使用简单的计数器/初始化向量(IV)。在该情况下,不同的数据密钥可以用于区分子区。在又其他实施例中,对于每个子区的不同密钥和从指向那些子区的编码指针得出的不同数据微调的组合可以用于区分子区。
在810,可以获得与存储器区相关联的数据密钥K1。定期写指令的操作数可以用于获得对于存储器区的数据密钥K1。该操作数可以包含从中可以获得数据密钥K1的任何适合的内容(例如,加密密钥、指向存储器中存储的加密密钥的指针、指向处理器存储器中存储的未加密密钥的指针、包含加密密钥的数据结构、包含指向加密密钥或指向处理器存储器中的未经加密密钥的指针的数据结构,等)。如果要初始化的存储器区是分配给如软件实体的存储器的较大区域的子区,则数据密钥K1可以是要用于对较大存储器区的相应子区或较大存储器子区的数据加密的若干数据密钥中的一个。
在812,对从存储器读取的数据D1解密以至少部分基于数据密钥K1和数据微调T1来产生解密数据D0。在至少一个实施例中,在处理器的核中执行解密。解密可以使用块密码(例如,可微调块密码(例如,带密文窃取(XTS)的基于XOR-加密-XOR的微调码本模式))或如之前描述的任何其他适合的密码算法来执行。
在814,执行一个或多个完整性检查来检测损坏,如果用不同的数据密钥来加密读取的数据D1或如果定期写操作在试图越界访问则可能出现该损坏。可以使用任何适合的完整性检查技术。一个技术包括检查解密数据D0的独立存储完整性值(例如,MAC值)的有效性。密码哈希函数可以应用于解密数据D0来计算新的MAC值。该新的MAC值可以与之前例如对数据D0计算的所存储MAC值比较,作为在对数据D0加密以存储在存储器区之前的前一写指令(例如,WFO指令或定期写指令)的部分。如果新的MAC值和所存储的MAC值不匹配,则检测到损坏。然而,如果MAC值匹配,则通过完整性检查。应注意,备选地,可以对加密数据(例如,对加密数据计算的MAC值)执行MAC完整性检查。第二完整性检查牵涉对解密数据D0应包含的一个或多个金丝雀值检查解密数据D0。如果在解密数据D0中发现金丝雀值,则完整性检查指示没有损坏。否则,完整性检查指示可能有损坏。第三完整性检查牵涉检查解密数据D0的熵。可以基于解密数据D0的熵和熵阈值来检测损坏。例如,未加密(或解密)数据的更高数量的熵可以指示数据的损坏并且因此将错误的密钥/微调用于访问数据。
在816,做出关于在完整性检查中的一个或多个中出现的完整性违规的确定。如果出现完整性违规,则检测到损坏并且在818,可以中止写操作并且可以返回错误消息来指示越界访问错误。
如果没有出现完整性违规,则没有检测到损坏。在该情况下,在820,要被写入存储器的数据D1被加密以至少部分基于数据密钥K1和数据微调T1产生加密数据D1。在至少一个实施例中,在处理器的核中执行加密。加密可以使用块密码(例如,可微调块密码(例如,带密文窃取(XTS)的基于XOR-加密-XOR的微调码本模式))或如之前描述的任何其他适合的密码算法来执行。
在822,用新的加密数据D1来替代存储器区的内容(例如,数据D0)。这可以通过执行写操作以基于存储器地址将加密数据D1存储到存储器而实现。在804获得的解码线性地址可以用于获得物理地址并且加密数据D1基于该物理地址可以被写入存储器区。
应注意,尽管按顺序说明过程800的操作,但可以使用各种操作的任何适合的顺序或时序。在一个可能实现中,在808得出数据微调T1和在812从数据微调T1生成密钥流以在对数据D0解密时使用可以至少部分与在804对来自编码指针的存储器地址解码和/或在806从存储器区读取数据D0并行执行。在另一个示例中,对数据D1加密可以至少部分与在812对数据D0解密和/或在814-816执行完整性检查并行执行。由于可以更快地完成过程,这些可能的备选实现或其任何适合的组合可以提高效率。
图9是图示根据一个或多个实施例与子代证书生成指令相关联的示例过程900的流程图。过程900可以与一个或多个操作集相关联。计算系统(例如,计算装置100)可以包括诸如计算装置100的硬件、固件和/或软件等用于执行操作的部件。在一个示例中,子代证书生成逻辑158的操作中的至少一些可以由处理器102执行。
为了便于说明,参考对分配给软件实体的存储器区生成的父代证书以及对于该存储器区的子区生成的子代证书来描述过程900,其中该存储器区是分配给软件实体的存储器的根。然而,应注意,存储器区还可以是甚至更大的第二存储器区的子区,该第二存储器区可以是甚至更大的第三存储器区的子区,以此类推。一般,分配给软件实体的存储器的根内的任意数量的子区级以及对应于相应子区的证书是可能的。
当已经对分配给软件实体的存储器区生成证书并且软件实体想将存储器区分解或分成两个或以上较小子区时执行过程900。在902,由软件实体执行子代证书生成指令以基于与较大第一存储器区相关联的父代证书对较大第一存储器区的子区生成子代证书。子代证书生成指令的执行促使发出子代证书生成操作或微操作。子代证书生成操作或微操作与对于较大存储器区的父代证书和对于较大存储器区内所包含的两个或以上较小子区中的一个的未经验证子代证书相关联。在一个示例中,可以在第一操作数中提供父代证书,并且可以在第二操作数中提供未经验证的子代证书。
未经验证的子代证书可以由软件实体生成并且可以包括基于特定需要和实现的任何适合的字段。例如,未经验证的子代证书可以包括子区的基地址、指示子区或要存储在子区中的对象的大小的存储器区界限以及任何期望的额外元数据(例如,访问权限和/或字段类型)。另外,未经验证的子代证书可以包含空的完整性值字段,如果子代证书被确定为有效则可以用处理器生成的完整性值填充该空的完整性值字段。处理器写入的完整性值也可以充当签名来验证证书。在其他实现中,处理器可以使用另一个机制或字段来授权证书。
在904,识别包含父代证书和未经验证的子代证书的子代证书生成指令的操作数。在906,处理器确定父代证书是否有效。该确定可以包括例如在706如参考过程700描述的父代证书中的完整性值的核实。如果完整性核实失败并且证书被确定为无效,则可以在910生成错误来指示越界访问错误,并且可以返回错误消息。
如果完整性核实成功并且父代证书被确定为有效,则在908,处理器确定未经验证的子代证书是否有效。可以通过将未经验证的子代证书中的存储器界限值与父代证书中的存储器界限值比较来做出该确定。如果在未经验证的子代证书中指示的存储器界限未完全包含在父代证书中所指示的存储器界限内,则未经验证的子代证书无效。还可以执行其他检查。例如,可以评估额外元数据字段中的访问权限来确保子代证书中的许可并不大于父代证书中的访问许可。如果在未经验证的子代证书中指示的访问许可大于父代证书中所指示的访问许可,则未经验证的子代证书可能无效。如果未经验证的子代证书被确定为无效,则可以在910生成错误,并且可以返回错误消息。
然而,如果未经验证的子代证书被确定为有效,则在912,可以对未经验证的子代证书计算完整性值。该完整性值可以通过对未经验证的子代证书中的一个或多个其他字段(例如,基地址、存储器界限、额外元数据)应用密码哈希函数来计算。在914,处理器可以在未经验证的子代证书的完整性字段中写入所计算的完整性值。在一个或多个实施例中,该完整性值充当验证签名来将未经验证的子代证书变换为经验证的子代证书,其授权呈现经验证的子代证书的软件实体访问第三子区。
在916,软件实体可以从处理器接收经验证的子代证书并且可以向子代软件实体提供经验证的子代证书以允许子代软件实体完全控制较窄子区。
图10是图示根据一个或多个实施例与所有权写(WFO)指令的另一个实施例相关联的示例过程1000的流程图。过程1000可以与一个或多个操作集相关联。计算系统(例如,计算装置100)可以包括诸如计算装置100的硬件、固件和/或软件等用于执行操作的部件。在一个示例中,WFO存储器存储逻辑154的另一个实施例的操作中的至少一些可以由处理器102执行。
当一些数据(例如,D1)变成可用于被写入存储器时,过程1000开始。在1002,由软件实体(例如,父代软件实体或子代软件实体)执行WFO指令(在本文称为“备选WFO指令”)的另一个实施例以使用数据D1初始化编码指针所引用的存储器地址处的存储器区。备选WFO指令的执行促使发出备选所有权写存储器操作或微操作。备选WFO存储器操作或微操作与预期数据密钥(例如,K0)、新数据密钥(例如,K1)和数据D1要被写入的存储器区的存储器地址(例如,A1)相关联。在至少一个实施例中,备选WFO指令可以包括包含预期数据密钥K0的第一操作数、包含新数据密钥K1的第二操作数以及包含用存储器区的存储器地址A1(例如,线性地址)编码的指针的第三操作数。应注意包含密钥的操作数可以使用任何适合的技术来提供密钥,诸如例如包含指向密钥的指针、包含密钥的数据结构或包含指向密钥的指针的数据结构。
在所分配的已经用一个数据密钥(例如,预期数据密钥K0)加密的存储器随后被分成子区并且新的数据密钥(例如,新的数据密钥K1、新的数据密钥K2等)被指派给这些子区时,备选WFO指令可以是有利的。因此,备选WFO指令可以连同在系统启动期间使用证书的其他WFO证书一起被使用。例如,具有证书的WFO指令可以在系统启动期间被用来初始化存储器区。在系统启动之后,备选WFO指令可以根据需要被用来使用不同密钥来初始化子区(或主存储器区)。在该场景中,软件实体可以使用备选WFO指令用新的密钥来初始化新的子区。备选WFO指令读取编码指针所引用的存储器地址处的内容并且基于该备选WFO指令的操作数所供应的预期数据密钥来对内容执行完整性检查,而不是证实WFO写指令中供应的证书。因此,可以评估存储器区的内容的完整性来确定内容是损坏还是备选WFO操作在试图执行越界访问。这在较大存储器或子区的内容已经用加密数据(或代码)初始化时,避免了对于针对该较大存储器区或子区的每个新分配的子区生成且检查证书的需要。
因此,在1004,存储器区的存储器地址(例如,线性地址)通过对编码指针解码而获得。如果指针通过密码来编码,则指针的至少一部分可以使用地址密钥并且可能使用地址微调而被解密以获得经解密的存储器地址片,其与线性地址的其他明文部分结合来产生全明文线性地址,如本文之前描述那样。
在1006,基于解码线性地址读取存储器区的内容。为了便于说明,我们假设存储器区包含数据D0。在至少一些场景中,解码线性地址可以用于获得存储器区的物理地址。物理地址然后可以用于访问存储器区来读取数据D0。在其他场景中,如果数据D0当前存储在高速缓存(例如,170)中,则可以从高速缓存读取它。
在1008,可以至少部分从编码指针得出数据微调T1,如本文之前描述那样。例如,数据微调T1可以是整个编码指针(其可以通过或可以不通过密码编码)。在另一个示例中,来自编码指针的元数据和从编码指针计算的线性地址可以是数据微调T1的部分。在又其他实施例中,外部上下文信息可以是数据微调T1的部分。在至少一些实施例中,数据微调T1可以用于区分较大存储器区内或较大存储器子区内定义的子区。在又其他实施例中,可以不从编码指针得出数据微调T1。相反,可以使用简单的计数器/初始化向量(IV)。在该情况下,不同的数据密钥可以用于区分子区。在又其他实施例中,对于每个子区的不同密钥和从指向那些子区的编码指针得出的不同数据微调的组合可以用于区分子区。
在1010,从存储器读取的数据D0被解密以至少部分基于从第一操作数获得的预期数据密钥K0和在1008得出的数据微调T1来产生解密数据D0。第一操作数可以包含可以从中获得预期数据密钥K0的任何适合的内容(例如,加密密钥、指向存储器中存储的加密密钥的指针、指向处理器存储器中存储的未加密密钥的指针、包含加密密钥的数据结构、包含指向加密密钥或指向处理器存储器中的未加密密钥的指针的数据结构,等)。在至少一个实施例中,在处理器的核中执行解密。可以使用块密码(例如,可微调块密码(例如,带密文窃取(XTS)的基于XOR-加密-XOR的微调码本模式))或如本文之前描述的任何其他适合的密码算法来执行解密。
在1012,可以执行一个或多个完整性检查来检测损坏,如果用不同的数据密钥对读取的数据D0加密或如果备选WFO操作在试图越界访问则可能出现该损坏。可以使用任何适合的完整性检查技术,诸如参考过程800在814描述的完整性检查(例如,MAC值、金丝雀值、熵)。
在1014,做出关于在完整性检查中的一个或多个中是否出现完整性违规的确定。如果出现完整性违规,则检测到损坏,并且在1015,可以中止备选WFO操作并且可以返回错误消息来指示越界访问错误。
如果完整性违规没有出现,则没有检测到损坏。在该情况下,在1016,要写入存储器的数据D1至少部分基于从第二操作数获得的新的数据密钥K1和在1008处得出的数据微调T1来被加密以产生加密数据D1。第二操作数可以包含从中可以获得新的数据密钥K1的任何适合的内容(例如,加密密钥、指向存储器中存储的加密密钥的指针、指向处理器存储器中存储的未加密密钥的指针、包含加密密钥的数据结构、包含指向加密密钥或指向处理器存储器中的未加密密钥的指针的数据结构,等)。在至少一个实施例中,在处理器的核中执行加密。可以使用块密码(例如,带密文窃取(XTS)的基于XOR-加密-XOR的微调码本模式)或如本文之前描述的任何其他适合的密码算法来执行加密。
在1018,存储器区的内容(例如,数据D0)被用新的加密数据D1来替代。这可以通过执行写操作以基于存储器地址将加密数据D1存储到存储器而实现。在1004获得的解码线性地址可以用于获得物理地址并且加密数据D1可以基于该物理地址被写入存储器区。
应注意,尽管按顺序说明过程1000的操作,但可以使用各种操作的任何适合的顺序或时序。在一个可能实现中,在1008得出数据微调T1和从在1010对数据D0解密中使用的数据微调T1生成密钥流可以至少部分与在1004从编码指针对存储器地址解码和/或在1006从存储器区读取数据D0并行执行。在另一个示例中,对数据D1加密可以至少部分与在1010对数据D0解密和/或在1012-1014执行完整性检查并行执行。由于可以更快地完成过程,这些可能备选实现或其任何适合的组合可以提高效率。
示例架构
图11是图示根据至少一个实施例的示例密码计算环境1100的框图。在示出的示例中,密码寻址层1110遍布示例计算向量中央处理器(CPU)1102、图形处理单元(GPU)1104、人工智能(AI)1106和现场可编程门阵列(FPGA)1108。例如,CPU 1102和GPU 1104可对存储器1112中存储的数据共享相同虚拟地址转换,并且密码地址可建立于这个共享虚拟存储器。它们可对给定执行流共享相同进程密钥,以及计算相同微调以便对通过密码编码的地址进行解密,并且沿用相同密码算法对这类编码的地址所引用的数据解密。
经组合,本文描述的能力可以实现密码计算。存储器1112可以在存储器分级结构的每一级来加密,从高速缓存的第一级至高速缓存的最后一级并且进入系统存储器中。将密码地址编码绑定到数据加密可以允许极细粒度对象界限和访问控制,从而实现一直到甚至单独功能及其函数即服务的对象的细粒度安全性容器。调用栈上的通过密码编码返回地址(取决于其位置)还可以实现控制流完整性,而无需影子栈元数据。因此,能够仅仅根据密码寻址和相应密码数据绑定以密码方式执行数据访问控制策略和控制流中的任一个。
图12-14是可以根据本文公开的实施例使用的示范计算机架构的框图。一般来说,可以使用用于处理器和计算系统的本领域已知的任何计算机架构设计。在示例中,用于膝上型电脑、台式机、手持PC、个人数字助理、平板、工程工作站、服务器、网络装置、服务器、电器、网络集线器、路由器、交换机、嵌入式处理器,数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器,智能电话、移动装置、可佩戴电子装置、便携媒体播放器、手持装置和各种其他电子装置的本领域已知的系统设计和配置也适合于本文描述的计算系统的实施例。一般来说,用于本文所公开实施例的适当计算机架构可以包括但不限于图12-14中图示的配置。
图12是根据实施例的处理器的示例图示。处理器1200是可以与本文所示和所述的实现结合使用的一种类型的硬件装置(例如处理器102)的示例。处理器1200可以是任何类型的处理器,诸如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、多核处理器、单核处理器或者执行代码的其他装置。尽管图12中仅图示一个处理器1200,但处理元件备选地可以包括多于一个图12所示的处理器1200。处理器1200可以是单线程核,或者对于至少一个实施例,处理器1200可以是多线程的,因为它可以包括每核多于一个硬件线程上下文(或者“逻辑处理器”)。
图12还图示根据实施例、耦合到处理器1200的存储器1202。存储器1202可以是大量存储器中的任一个(包括存储器分级结构的各种层),如本领域的技术人员已知或者以其它方式可得到的。这样的存储器元件能够包括但不限于随机存取存储器(RAM)、只读存储器(ROM)、现场可编程门阵列(FPGA)的逻辑块、可擦除可编程只读存储器(EPROM)和电可擦除可编程ROM(EEPROM)。
处理器1200可以执行与本文详述的算法、过程或操作相关联的任何类型的指令。一般来说,处理器1200可以将元件或产品(例如数据)从一种状态或事物变换成另一种状态或另一种事物。
可以是将要由处理器1200执行的一个或多个指令的代码1204可以存储在存储器1202中,或者可以存储在软件、硬件、固件或者其任何适合的组合中,或根据情况并且基于特定需要而存储在任何其他内部或外部组件、装置、元件或对象中。在一个示例中,处理器1200可以跟随代码1204所指示的指令的程序序列。每个指令进入前端逻辑1206,并且由一个或多个解码器1208来处理。解码器可以生成作为其输出的微操作(诸如采用预定义格式的固定宽度微操作),或者可以生成反映原始代码指令的其他指令、微指令或控制信号。前端逻辑1206还包括寄存器重命名逻辑1210和调度逻辑1212,它们一般分配资源并且将与指令对应的操作进行排队以供执行。
处理器1200还可以包括执行逻辑1214,该执行逻辑1214具有一组执行单元1216a、1216b、1216n等。一些实施例可以包括专用于特定功能或者功能集的许多执行单元。其他实施例可以仅包括一个执行单元或者能够执行特定功能的一个执行单元。执行逻辑1214执行代码指令所规定的操作。
在代码指令所规定的操作的执行完成之后,后端逻辑1218可以引退代码1204的指令。在一个实施例中,处理器1200允许无序执行,但是要求指令的有序引退。引退逻辑1220可以采取多种已知形式(例如,重排序缓冲器或类似物)。采用该方式,在代码1204的执行期间,至少根据解码器所生成的输出、寄存器重命名逻辑1210所利用的硬件寄存器和表以及执行逻辑1214所修改的任何寄存器(未示出),来变换处理器1200。
尽管图12中未示出,但处理元件可以包括芯片上的其他元件与处理器1200。例如,处理元件可以包括随同处理器1200的存储器控制逻辑。处理元件可以包括I/O控制逻辑,和/或可以包括与存储器控制逻辑集成的I/O控制逻辑。处理元件还可以包括一个或多个高速缓存。在一些实施例中,非易失性存储器(诸如闪速存储器或熔丝)也可随处理器1200被包含在芯片上。
图13A是图示根据本公开的一个或多个实施例的示范性有序流水线和示范性寄存器重命名、无序发出/执行流水线的框图。图13B是图示根据本公开的一个或多个实施例、将要包含在处理器中的有序架构核和示范性寄存器重命名、无序发出/执行架构核的示范性实施例的框图。图13A-13B中的实线框图示有序流水线和有序核,而虚线框的可选添加图示寄存器重命名、无序发出/执行流水线和核。在给定有序方面是无序方面的子集的情况下,将描述无序方面。
在图13A中,处理器流水线1300包括提取级1302、长度解码级1304、解码级1306、分配级1308、重命名级1310、调度(又称作分发或发出)级1312、寄存器读/存储器读级1314、执行级1316、回写/存储器写级1318、异常处理级1322和提交级1324。
图13B示出处理器核1390,所述处理器核1390包括耦合到执行引擎单元1350的前端单元1330,并且它们两者均耦合到存储器单元1370。处理器核1390和存储器单元1370是可以与本文所示和所述的实现结合使用的硬件类型(例如处理器102、存储器120)的示例。核1390可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核或者混合或备选核类型。作为又一个选项,核1390可以是专用核(诸如例如网络或通信核)、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核或类似物。另外,处理器核1390及其组件表示示例架构,所述示例架构可用来实现逻辑处理器及其相应组件。
前端单元1330包括耦合到指令高速缓存单元1334的分支预测单元1332,该指令高速缓存单元1334耦合到指令转换后备缓冲器(TLB)单元1336,该指令TLB单元1336耦合到指令提取单元1338,该指令取单元1338耦合到解码单元1340。解码单元1340(或解码器)可以对指令解码,并且生成作为输出的一个或多个微操作、微代码入口点、微指令、其他指令或者从原始指令所解码或得出或者以其他方式反映原始指令的其他控制信号。解码单元1340可使用各种不同的机制来实现。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微码只读存储器(ROM)等。在一个实施例中,核1390包括存储某些宏指令的微代码(例如在解码单元1340中或者以其它方式在前端单元1330内)的微代码ROM或另一介质。解码单元1340耦合到执行引擎单元1350中的重命名/分配器单元1352。
执行引擎单元1350包括重命名/分配器单元1352,其耦合到引退单元1354和一组一个或多个调度器单元1356。(一个或多个)调度器单元1356表示任何数量的不同调度器,包括保留站、中心指令窗口等。(一个或多个)调度器单元1356耦合到(一个或多个)物理寄存器堆单元1358。(一个或多个)物理寄存器堆单元1358中的每个表示一个或多个物理寄存器堆,其中不同的寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、向量整数、向量浮点、状态(例如,作为将要执行的下一个指令的地址的指令指针)等。在一个实施例中,(一个或多个)物理寄存器堆单元1358包括向量寄存器单元、写屏蔽寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量屏蔽寄存器和通用寄存器(GPR)。在本文描述的至少一些实施例中,寄存器单元1358是可以与本文所示和所述的实现结合使用的硬件类型(例如寄存器110)的示例。(一个或多个)物理寄存器堆单元1358被引退单元1354重叠,以图示可以实现寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重排序缓冲器和(一个或多个)引退寄存器堆;使用(一个或多个)将来文件、(一个或多个)历史缓冲器和(一个或多个)引退寄存器堆;使用寄存器映射和寄存器池等)。引退单元1354和(一个或多个)物理寄存器堆单元1358耦合到(一个或多个)执行集群1360。(一个或多个)执行集群1360包括一组一个或多个执行单元1362和一组一个或多个存储器存取单元1364。执行单元1362可以执行各种操作(例如移位、加法、减法、乘法)并且对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可以仅包括一个执行单元或者全部执行全部功能的多个执行单元。执行单元1362还可以包括:地址生成单元,用以计算供核用来访问主存储器(例如,存储器单元1370)的地址;以及页缺失处理程序(PMH)。
(一个或多个)调度器单元1356、(一个或多个)物理寄存器堆单元1358和(一个或多个)执行集群1360示为可能是多个的,因为某些实施例创建某些类型的数据/操作的独立流水线(例如标量整数流水线、标量浮点/打包整数/打包浮点/向量整数/向量浮点流水线和/或存储器访问流水线,其各具有其自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行集群—以及在独立存储器存取流水线的情况下,实现只有这个流水线的执行集群具有(一个或多个)存储器存取单元1364的某些实施例)。还应当理解,在使用独立流水线的情况下,这些流水线的一个或多个可以是无序发出/执行,而其余的是有序的。
该组存储器存取单元1364耦合到存储器单元1370,其包括耦合到数据高速缓存单元1374(其耦合到第2级(L2)高速缓存单元1376)的数据TLB单元1372。在一个示范性实施例中,存储器存取单元1364可以包括加载单元、存储地址单元和存储数据单元,它们中的每个耦合到存储器单元1370中的数据TLB单元1372。指令高速缓存单元1334进一步耦合到存储器单元1370中的第2级(L2)高速缓存单元1376。L2高速缓存单元1376耦合到一个或多个其他等级的高速缓存,并且最终耦合到主存储器。另外,页缺失处理程序还可以包含在核1390中,以便在数据TLB单元1372中没有找到匹配时查找页表中的地址映射。
通过示例,示范性寄存器重命名、无序发出/执行核架构可以按如下所述实现流水线1300:1)指令提取单元1338执行提取和长度解码级1302和1304;2)解码单元1340执行解码级1306;3) 重命名/分配器单元1352执行分配级1308和重命名级1310;4) (一个或多个)调度器单元1356执行调度级1312;5)(一个或多个)物理寄存器堆单元1358和存储器单元1370执行寄存器读/存储器读级1314;执行集群1360执行运行级1316;6)存储器单元1370和(一个或多个)物理寄存器堆单元1358执行回写/存储器写级1318;7)异常处理级1322中可以牵涉各种单元;以及8)引退单元1354和(一个或多个)物理寄存器堆单元1358执行提交级1324。
核1390可以支持一个或多个指令集(例如,x86指令集(其中具有随较新版本已经添加的一些扩展);MIPS Technologies(Sunnyvale,CA)的MIPS指令集;ARM Holdings(Sunnyvale,CA)的ARM指令集(其中具有可选附加扩展,诸如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核1390包括支持打包数据指令集扩展的逻辑(例如AVX1、AVX2),由此允许供许多多媒体应用使用的操作使用打包数据而被执行。
应当理解,核可以支持多线程运行(执行操作或线程的两个或更多并行集合),并且可采用多种方式这样做,包括时间切片多线程运行、同时多线程运行(其中单个物理核为物理核同时多线程运行的线程中的每个提供逻辑核)或其组合(例如,时间切片提取和解码以及此后的同时多线程运行,诸如在Intel®Hyperthreading技术中)。相应地,在至少一些实施例中,可以支持多线程包体(enclave)。
尽管在无序执行的上下文中描述寄存器重命名,但是应当理解,寄存器重命名可以在有序架构中使用。尽管处理器的所示实施例还包括独立指令和数据高速缓存单元1334/1374和共享L2高速缓存单元1376,但是备选实施例可以具有用于指令和数据的单个内部高速缓存,诸如例如第1级(L1)内部高速缓存或者多级内部高速缓存。在一些实施例中,系统可以包括内部高速缓存以及核和/或处理器外部的外部高速缓存的组合。备选地,高速缓存全部可以在核和/或处理器外部。
图14图示根据实施例、采用点对点(PtP)配置所布置的计算系统1400。特别是,图14示出一种系统,其中处理器、存储器和输入/输出装置通过许多点对点接口来互连。一般来说,本文描述的计算系统或计算装置(例如计算装置100)中的一个或多个可以采用与计算系统1400相同或相似的方式来配置。
处理器1470和1480可以实现为单核处理器1474a和1484a或者多核处理器1474a-1474b和1484a-1484b。处理器1470和1480各自可以包括由其相应一个或多个核所使用的高速缓存1471和1481。共享高速缓存(未示出)可以包含在任一个处理器中或者两个处理器外部,但是仍然经由P-P互连与处理器连接,使得如果使处理器被置于低功率模式,则任一个或两个处理器的本地高速缓存信息可以存储在共享高速缓存中。应当注意,本文描述的一个或多个实施例可以在计算系统(诸如计算系统1400)中实现。此外,处理器1470和1480是可以与本文所示和所述的实现结合使用的硬件类型(例如处理器102)的示例。
处理器1470和1480各自还可以包括集成存储器控制器逻辑(MC)1472和1482,以便与存储器元件1432和1434通信,所述存储器元件1432和1434可以是本地附连到相应处理器的主存储器的部分。在备选实施例中,存储器控制器逻辑1472和1482可以是与处理器1470和1480分开的分立逻辑。存储器元件1432和1434可以存储将要由处理器1470和1480在实现本文概述的操作和功能性中使用的各种数据。
处理器1470和1480可以是例如与其他附图结合论述的处理器等的任何类型的处理器。处理器1470和1480可以分别使用点对点(PtP)接口电路1478和1488、经由点对点(PtP)接口1450来交换数据。处理器1470和1480各自可以使用点对点接口电路1476、1486、1494和1498、经由单独点对点接口1452和1454来与输入/输出(I/O)子系统1490交换数据。I/O子系统1490还可以使用接口电路1492(该接口电路1492可以是PtP接口电路)、经由高性能图形接口1439来与高性能图形电路1438交换数据。在一个实施例中,高性能图形电路1438是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器或类似物。I/O子系统1490还可以与显示器1433通信,以用于显示人类用户可查看的数据。在备选实施例中,图14中图示的PtP链路的任一个或全部可实现为多点总线而不是PtP链路。
I/O子系统1490可以经由接口电路1496与总线1410通信。总线1410可以具有通过它通信的一个或多个装置,诸如总线桥接器1418、I/O装置1414和一个或多个其他处理器1415。经由总线1420,总线桥接器1418可以与诸如用户接口1422(诸如键盘、鼠标、触摸屏或其他输入装置)、通信装置1426(诸如调制解调器、网络接口装置或者可通过计算机网络1460通信的其他类型的通信装置)、音频I/O装置1424和/或存储单元1428通信。数据单元1428可以存储可以由处理器1470和/或1480所执行的代码和数据1430。在备选实施例中,总线架构的任何部分可以用一个或多个PtP链路来实现。
程序代码(诸如代码1430)可以应用于输入指令,以执行本文描述的功能并且生成输出信息。输出信息可采用已知方式应用于一个或多个输出装置。出于本申请的目的,处理系统可以是计算系统1400的组成部分,并且包括具有处理器(诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或者微处理器)的任何系统。
程序代码(例如1430)可以通过高级程序性或面向对象的编程语言来实现,以便与处理系统通信。如果期望的话,程序代码还可以通过汇编或机器语言来实现。实际上,本文描述的机制的范围并不局限于任何特定编程语言。在任何情况下,语言可以是编译或解译语言。
至少一个实施例的一个或多个方面可以通过机器可读介质上存储的、表示处理器内的各种逻辑的代表指令来实现,所述指令在由机器读取时使该机器制备执行本文所述技术中的一个或多个的逻辑。称作“IP核”的这类表示可以存储在有形机器可读介质上,并且供应给各种客户或制造设施,以加载到实际制作逻辑或处理器的制备机器中。
这样的机器可读存储介质可以非限制性地包括通过机器或装置所制造或形成的产品的非暂时有形布置,其中包括:例如硬盘等存储介质;任何其他类型的磁盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)和磁光盘;半导体器件,诸如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SARAM)等随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪速存储器、电可擦除可编程只读存储器(EEPROM)、相变存储器(PCM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。
相应地,本公开的实施例还包括非暂时有形机器可读介质,所述机器可读介质包含指令或者包含设计数据(诸如硬件描述语言(HDL)),所述设计数据定义本文描述的结构、电路、设备、处理器和/或系统特征。这样的实施例又可以称为程序产品。
图14中描绘的计算系统是可以用来实现本文论述的各个实施例的计算系统的实施例的示意图示。将会理解,图14中描绘的系统的各种组件可以组合在芯片上系统(SoC)架构中或者以能够实现本文所提供示例和实现的功能性和特征的任何其他适当配置来组合。
尽管根据某些实现和一般关联方法来描述本公开,但是这些实现和方法的变更和置换对于本领域的技术人员将是清楚的。例如,本文描述的动作可以采用与如所述顺序不同的顺序来执行,并且仍然实现期望结果。作为一个示例,附图中描绘的过程不一定要求所示的特定顺序或依次顺序来实现预期结果。在某些实现中,多任务和并行处理可以是有利的。其他变化落入以下权利要求书的范围之内。
本文呈现的架构仅通过示例来提供,并且预计是非排他和非限制性的。此外,所公开的各种部分预计只是逻辑划分,而无需必然表示物理分离硬件和/或软件组件。某些计算系统可以在单个物理存储器装置中提供存储器元件,而在其他情况下,存储器元件可以在功能上跨许多物理装置分布。在虚拟机管理器或管理程序的情况下,功能的全部或部分可以采取通过虚拟化层运行的软件或固件的形式来提供,以提供所公开的逻辑功能。
要注意,对于本文所提供的示例,可以在单个计算系统方面来描述交互。然而,这只是为了清楚起见和举例而进行。在某些情况下,可更易于通过仅引用单个计算系统来描述流程的给定集的功能性中的一个或多个。此外,用于深度学习和恶意软件检测的系统是容易可缩放的,并且可以跨大量组件(例如多个计算系统)以及更复杂/精密布置和配置来实现。相应地,所提供的示例不应当限制范围或者禁止如潜在地应用于大量其他架构的计算系统的广义教导。
如本文所使用的,除非另加明确相反说明,否则词语‘...中的至少一个’的使用表示所述项、元件、条件或活动的任何组合。例如,‘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。
另外,除非另加明确相反说明,否则术语‘第一’、‘第二’、‘第三’等意在区分它们修饰的特定名词(例如元件、条件、模块、活动、操作、权利要求元素等),而不意在指示修饰名词的任何类型的顺序、分级、重要性、时间序列或者分级结构。例如,‘第一X’和‘第二X’旨在表示不一定受两个元素的任何顺序、分级、重要性、时间序列或分级结构所限制的两个独立X元素。
说明书中提到“一个实施例”、“实施例”、“一些实施例”等指示所描述的(一个或多个)实施例可以包括特定特征、结构或特性,但是每一个实施例都可能或者可不一定包括那个特定特征、结构或特性。此外,这样的词语不一定指同一实施例。
尽管本说明书包含许多具体实现细节,但是这些不应当被理解为对任何实施例或者可要求保护的范围的限制,而是应当被理解为对特定实施例特定的特征的描述。本说明书中在独立实施例的上下文中描述的某些特征也可以在单个实施例中组合地实现。相反,在单个实施例的上下文中描述的各种特征也可以单独在多个实施例中或者以任何适当的子组合实现。此外,尽管特征在上文中可描述为通过某些组合来起作用并且甚至最初这样要求保护,但是来自要求保护的组合的一个或多个特征在一些情况下可以脱离组合,并且要求保护的组合可以针对子组合或者子组合的变化。
类似地,上文描述的实施例中的各种系统组件和模块的分离不应当被理解为在全部实施例中都要求这种分离。应当理解,所描述的程序组件、模块和系统一般可以共同集成在单个软件产品中或者封装到多个软件产品中。
因此,描述了本主旨的特定实施例。其他实施例落入本公开的范围之内。许多其他更改、置换、变更、改变和修改对于本领域的技术人员是可确定的,并且意在本公开包含如落入所附权利要求书的范围之内的所有这样的更改、置换、变更、改变和修改。
提供一组技术方案,如下:
1. 一种处理器,包括:
核,所述核包括电路用以执行第一软件实体的第一指令,所述第一指令包括第一操作数和第二操作数,所述第一操作数包括第一证书并且所述第二操作数指示存储器中的第一存储器区,其中所述电路要执行所述第一指令以:
至少部分基于密码算法和第一数据参数来计算经加密的第一数据;
确定所述第一证书是否授权所述第一软件实体访问所述存储器的所述第一存储器区;以及
基于确定所述第一操作数中的所述第一证书授权所述第一软件实体访问所述第一存储器区,执行第一写操作来将所述经加密的第一数据存储在所述第一存储器区中。
2. 如技术方案1所述的处理器,其中要执行所述第一写操作而不对所述第一存储器区执行在先读操作。
3. 如技术方案1所述的处理器,其中所述电路进一步:
通过至少部分基于地址参数对所述第一指令的所述第二操作数中的第一编码指针解码而获得所述第一存储器区的第一存储器地址。
4. 如技术方案1所述的处理器,其中所述第一存储器区是在较大存储器区内定义的两个或以上子区的第一子区。
5. 如技术方案4所述的处理器,其中所述电路进一步执行所述第一软件实体的第二指令,所述第二指令包括第三操作数和第四操作数,所述第三操作数包括所述第一证书并且所述第四操作数指示所述两个或以上子区的第二子区,其中所述电路要执行所述第二指令以:
至少部分基于所述密码算法和第二数据参数来计算经加密的第二数据;以及
基于确定所述第三操作数中的所述第一证书授权所述第一软件实体访问所述第二子区,执行第二写操作来将所述经加密的第二数据存储在所述第二子区中。
6. 如技术方案4所述的处理器,其中所述电路进一步执行第三指令,所述第三指令包括第五操作数,所述第五操作数包括授权访问所述较大存储器区的第二证书,其中所述电路要执行所述第三指令以:
响应于确定所述第二证书有效并且未经验证的子代证书指示在所述第二证书所指示的所述较大存储器区内定义第三子区:
将所述未经验证的子代证书变换为经验证的子代证书用于访问所述第三子区;以及
向所述第一软件实体提供所述经验证的子代证书,其中所述第一软件实体向所述第一软件实体的子代软件实体提供所述经验证的子代证书。
7. 如技术方案6所述的处理器,其中确定所述第二证书有效包括:
核实所述第二证书的完整性。
8. 如技术方案6所述的处理器,其中将所述未经验证的子代证书变换为经验证的子代证书用于访问所述第三子区包括:
基于所述未经验证子代证书中的多个字段中的至少一个来计算完整性值;并且
将所述完整性值存储在所述未经验证的子代证书中。
9. 如技术方案6所述的处理器,其中所述电路执行呈现所述经验证的子代证书的所述子代软件实体的第四指令来执行第三写操作以将经加密的第三数据存储在所述第三子区中而没有对所述第三子区的在先读操作。
10. 如技术方案1所述的处理器,其中所述第一证书包括多个字段,所述多个字段包括:第一字段,所述第一字段包含所述第一存储器区的基地址;第二字段,所述第二字段包含指示所述第一存储器区的大小的存储器区界限;以及所述第一证书的完整性值,其中所述完整性值基于所述多个字段中的至少一个其他字段而被生成。
11. 如技术方案1所述的处理器,其中所述电路进一步:
生成针对所述第一存储器区的所述第一证书,其中所述第一证书包括第一签名;以及
授权所述第一软件实体通过向所述第一软件实体提供所述第一证书来使用所述第一存储器区。
12. 如技术方案1所述的处理器,其中确定所述第一证书授权所述第一软件实体访问所述第一存储器区是基于:
核实所述第一证书的完整性。
13. 如技术方案1所述的处理器,其中所述电路进一步继执行所述第一指令之后执行所述第一软件实体的第五指令以:
在对所述第一存储器区执行第四写操作之前,对所述第一存储器区中存储的数据执行读操作;
至少部分基于所述密码算法和所述第一数据参数,从所存储的数据计算解密数据;以及
基于确定所述解密数据被损坏,防止对所述第一存储器区的所述第四写操作。
14. 如技术方案13所述的处理器,其中所述电路进一步执行完整性检查来确定所述解密数据是否损坏,其中所述完整性检查包括以下中的至少一项:
基于所述解密数据计算消息验证码并且将所计算的消息验证码与之前存储的消息验证码比较;
识别所述解密数据中的金丝雀值并且确定所述金丝雀值是否匹配预期值;以及
识别所述解密数据的熵并且将所述解密数据的所述熵与阈值熵比较。
15. 一种方法包括:
由处理器的核执行第一软件实体的第一指令,所述第一指令包括第一操作数和第二操作数,所述第一操作数包括第一证书,所述第二操作数指示存储器中的第一存储器区,其中所述执行所述第一指令包括:
至少部分基于密码算法和第一数据参数来计算经加密的第一数据;
确定所述第一证书是否授权所述第一软件实体访问所述存储器的所述第一存储器区;以及
基于确定所述第一操作数中的所述第一证书授权所述第一软件实体访问所述第一存储器区,执行第一写操作来将所述经加密的第一数据存储在所述第一存储器区中。
16. 如技术方案15所述的方法,进一步包括:
继所述执行所述第一指令之后,执行所述第一软件实体的第二指令,其中所述执行所述第二指令包括:
在对所述第一存储器区执行第二写操作之前,对所述第一存储器区中存储的数据执行读操作;
至少部分基于所述密码算法和所述第一数据参数从所存储的数据计算解密数据;以及
基于确定所述解密数据未损坏,执行所述第二写操作来将经加密的第二数据存储在所述第一存储器区中。
17. 一个或多个机器可读介质,所述机器可读介质具有存储在其上的指令,其中所述指令在由机器执行时促使所述机器:
由处理器的核执行第一软件实体的第一指令,所述第一指令包括第一操作数和第二操作数,所述第一操作数包括第一证书,所述第二操作数指示存储器中的第一存储器区,其中执行所述第一指令包括:
至少部分基于密码算法和第一数据参数来计算经加密的第一数据;
确定所述第一证书是否授权所述第一软件实体访问所述存储器的所述第一存储器区;以及
基于确定所述第一操作数中的所述第一证书授权所述第一软件实体访问所述第一存储器区,执行第一写操作来将所述经加密的第一数据存储在所述第一存储器区中。
18. 如技术方案17所述的一个或多个机器可读介质,其中所述确定所述第一证书授权所述第一软件实体访问所述第一存储器区是基于:
核实所述第一证书的完整性;以及
确定所述第一存储器区的第一存储器地址包含在所述第一证书中。
19. 如技术方案17所述的一个或多个机器可读介质,其中所述指令进一步促使所述机器继执行所述第一指令之后执行所述第一软件实体的第二指令以:
在对所述第一存储器区执行第二写操作之前,对所述第一存储器区中的存储数据执行读操作;
至少部分基于所述密码算法和所述第一数据参数从所存储的数据计算解密数据;以及
基于确定所述解密数据损坏,防止对所述第一存储器区的所述第二写操作。
20. 一种系统,包括:
存储器,所述存储器包括存储器区;以及
处理器,用于:
执行软件实体的第一指令,所述第一指令包括指示所述存储器区的第一操作数,其中所述处理器执行所述第一指令以:
至少部分基于密码算法和第一数据参数从未加密的第一数据计算经加密的第一数据;以及
执行第一写操作以将所述经加密的第一数据存储在所述存储器区中而不对所述存储器区执行在先读操作;以及
继执行所述第一指令之后,执行所述软件实体的第二指令,其中所述处理器执行所述第二指令以:
在对所述存储器区执行第二写操作之前,对所述存储器区中存储的第一数据执行第一读操作;
至少部分基于所述密码算法和所述第一数据参数从所存储的第一数据计算经解密的第一数据;以及
基于确定所述经解密的第一数据未损坏,执行所述第二写操作来将经加密的第二数据存储在所述存储器区中。
21. 如技术方案20所述的系统,其中所述处理器进一步执行所述第一指令以:
确定所述第一指令的第二操作数中的证书授权所述软件实体访问所述存储器的所述存储器区,其中所述第一写操作要基于确定所述第二操作数中的所述证书授权所述软件实体访问所述存储器区而被执行。
22. 如技术方案20所述的系统,其中所述处理器执行所述软件实体的第三指令,所述第三指令包括第三操作数中的所述第一数据参数、第四操作数中的新数据参数以及第五操作数,所述第五操作数包括指向所述存储器区的存储器地址的编码指针,其中所述处理器执行所述第三指令以:
对所述存储器区的所述存储器地址处存储的第二数据执行第二读操作;
至少部分基于所述密码算法和所述第一数据参数从所述存储的第二数据计算经解密的第二数据;
至少部分基于所述密码算法和所述新数据参数从未经加密的新数据计算经加密的新数据;以及
基于确定所述经解密的第二数据未损坏,执行第三写操作以用所述经加密的新数据替代所述存储的第二数据。
其他注释和示例
下列示例关于根据本说明书的实施例。系统、设备、方法和机器可读介质实施例可以包括下列示例中的一个或组合:
示例A1提供设备、系统、处理器、机器可读介质、方法和/或基于硬件、固件和/或软件的逻辑,其中示例A1包括核,其包括电路用以执行第一软件实体的第一指令,该第一指令包括第一操作数和第二操作数,该第一操作数包括第一证书并且该第二操作数指示存储器中的第一存储器区,其中该电路执行第一指令以:至少部分基于密码算法和第一数据参数来计算经加密的第一数据;确定第一证书是否授权第一软件实体访问存储器的第一存储器区;以及基于确定第一操作数中的第一证书授权第一软件实体访问第一存储器区,执行第一写操作来将经加密的第一数据存储在第一存储器区中。
在示例A2中,示例A1的主旨可以可选地包括要执行第一写操作而不对第一存储器区执行在先读操作。
在示例A3中,示例A1-A2中的任一个的主旨可以可选地包括其中电路通过至少部分基于地址参数对第一指令的第二操作数中的第一编码指针解码而获得第一存储器区的第一存储器地址。
在示例A4中,示例A1-A3中的任一个的主旨可以可选地包括其中第一存储器区是在较大存储器区内定义的两个或以上子区的第一子区。
在示例A5中,示例A4的主旨可以可选地包括其中电路进一步执行第一软件实体的第二指令,该第二指令包括第三操作数和第四操作数,该第三操作数包括第一证书并且该第四操作数指示两个或以上子区的第二子区,其中电路执行第二指令以:至少部分基于密码算法和第二数据参数来计算经加密的第二数据;以及基于确定第三操作数中的第一证书授权第一软件实体访问第二子区,执行第二写操作来将经加密的第二数据存储在第二子区中。
在示例A6中,示例A4-A5中的任一个的主旨可以可选地包括其中电路进一步执行第三指令,其包括第五操作数,该第五操作数包括授权访问较大存储器区的第二证书,其中电路执行第三指令以:响应于确定第二证书有效并且未经验证的子代证书指示在第二证书所指示的较大存储器区内定义第三子区:将未经验证的子代证书变换为经验证的子代证书用于访问第三子区;以及向第一软件实体提供经验证的子代证书,其中第一软件实体向第一软件实体的子代软件实体提供经验证的子代证书。
在示例A7中,示例A6的主旨可以可选地包括其中确定第二证书有效包括核实第二证书的完整性。
在示例A8中,示例A6-A7中的任一个的主旨可以可选地包括其中将未经验证的子代证书变换为经验证的子代证书用于访问第三子区包括基于未经验证子代证书中的多个字段中的至少一个来计算完整性值,并且将该完整性值存储在未经验证的子代证书中。
在示例A9中,示例A6-A8中的任一个的主旨可以可选地包括其中电路执行呈现经验证的子代证书的子代软件实体的第四指令来执行第三写操作以将经加密的第三数据存储在第三子区中而没有对该第三子区的在先读操作。
在示例A10中,示例A1-A9中的任一个的主旨可以可选地包括:第一证书包括多个字段,其包括:第一字段,该第一字段包含第一存储器区的基地址;第二字段,其包含指示第一存储器区的大小的存储器区界限;以及第一证书的完整性值,其中该完整性值基于多个字段中的至少一个其他字段而生成。
在示例A11中,示例A1-A10中的任一个的主旨可以可选地包括其中电路进一步生成针对第一存储器区的第一证书,其中第一证书包括第一签名,并且授权第一软件实体通过向第一软件实体提供第一证书来使用第一存储器区。
在示例A12中,示例A1-A11中的任一个的主旨可以可选地包括其中确定第一证书授权第一软件实体访问第一存储器区是基于核实第一证书的完整性。
在示例A13中,示例A1-A12中的任一个的主旨可以可选地包括其中电路进一步继执行第一指令之后执行第一软件实体的第五指令以:在对第一存储器区执行第四写操作之前,对第一存储器区中存储的数据执行读操作;至少部分基于密码算法和第一数据参数,从所存储的数据计算解密数据;以及基于确定解密数据被损坏,防止对第一存储器区的第四写操作。
在示例A14中,示例A13的主旨可以可选地包括其中电路进一步执行完整性检查来确定解密数据是否损坏,其中完整性检查包括以下中的至少一个:基于解密数据计算消息验证码并且将所计算的消息验证码与之前存储的消息验证码比较;识别解密数据中的金丝雀值并且确定该金丝雀值是否匹配预期值;以及识别解密数据的熵并且将解密数据的熵与阈值熵比较。
示例B1提供设备、系统、处理器、机器可读介质、方法和/或基于硬件、固件和/或软件的逻辑,其中示例B1包括核,其包括电路用以执行软件实体的第一指令,该第一指令包括第一操作数中的第一预期密钥、第二操作数中的第一新密钥以及第三操作数,该第三操作数包括指向存储器中的第一存储器区的第一存储器地址的第一编码指针,其中电路执行第一指令以:对第一存储器区的第一存储器地址处的第一存储数据执行第一读操作;至少部分基于密码算法和第一预期密钥从第一存储数据计算第一解密数据;至少部分基于密码算法和第一新密钥从第一未解密数据计算第一加密数据;以及基于确定第一解密数据未损坏,用第一加密数据替代第一存储数据。
在示例B2中,示例B1的主旨可以可选地包括其中电路进一步执行完整性检查来确定第一解密数据是否损坏,其中完整性检查包括以下中的至少一个:基于第一解密数据计算消息验证码并且将所计算的消息验证码与之前存储的消息验证码比较;识别第一解密数据中的金丝雀值并且确定该金丝雀值是否匹配预期值;以及识别第一解密数据的熵并且将第一解密数据的熵与阈值熵比较。
在示例B3中,示例B1-B2中的任一个的主旨可以可选地包括其中第一解密数据要至少部分基于从第一编码指针得出的第一微调从第一存储数据计算,并且其中第一加密数据要至少部分基于从第一编码指针得出的第一微调从第一未加密数据计算。
在示例B4中,示例B1-B3中的任一个的主旨可以可选地包括其中第一存储器区是在较大存储器区内定义的两个或以上子区的第一子区。
在示例B5中,示例B4的主旨可以可选地包括其中电路在执行软件实体的第一指令之前进一步执行软件实体的第二指令,该第二指令包括第四操作数和第五操作数,该第四操作数包括证书,并且该第五操作数指示较大存储器区,其中电路执行第二指令以:至少部分基于密码算法和第二数据参数来计算第二加密数据;确定证书是否授权软件实体访问较大存储器区;以及基于确定证书授权软件实体访问较大存储器区,将第二加密数据存储在较大存储器区中。
在示例B6中,示例B5的主旨可以可选地包括其中证书包括多个字段,其包括:第一字段,该第一字段包括较大存储器区的基地址;第二字段,其包含指示较大存储器区的大小的存储器区界限,和证书的完整性值,其中该完整性值基于多个字段的至少一个其他字段而被生成。
在示例B7中,示例B1-B6中的任一个的主旨可以可选地包括其中第一未加密数据等同于第一解密数据或不同于第一解密数据。
在示例B8中,示例B1-B7中的任一个的主旨可以可选地包括其中电路通过对第一指令的第三操作数中的第一编码指针解码而进一步获得第一存储器区的第一存储器地址。
在示例B9中,示例B1-B8中的任一个的主旨可以可选地包括其中电路进一步继第一指令的执行之后执行软件实体的第三指令以:在存储第一存储器地址处的第三加密数据之前,对第一存储器地址处的第三存储数据执行第二读操作;至少部分基于密码算法和第一新密钥从第三存储数据计算第三解密数据;以及基于确定第三解密数据未损坏,用第三加密数据替代第三存储数据。
示例C1提供设备、系统、处理器、机器可读介质、方法和/或基于硬件、固件和/或软件的逻辑,其中示例C1包括存储器和处理器,该存储器包括存储器区,该处理器用于:执行第一软件实体的第一指令,该第一指令包括第一操作数,其指示存储器区,其中处理器执行第一指令以至少部分基于密码算法和第一数据参数从未加密的第一数据计算经加密的第一数据并且执行第一写操作来将经加密的第一数据存储在存储器区中而不对存储器区执行在先读操作;以及继执行第一指令之后,执行第一软件实体的第二指令,其中处理器执行第二指令以:在对存储器区执行第二写操作之前,对存储器区中存储的第一数据执行第一读操作;至少部分基于密码算法和第一数据参数从所存储的第一数据计算经解密的第一数据;以及基于确定经解密的第一数据未损坏,执行第二写操作来将经加密的第二数据存储在存储器区中。
在示例C2中,示例C1的主旨可以可选地包括其中处理器进一步执行第一指令以确定第一指令的第二操作数中的证书是否授权第一软件实体访问存储器的存储器区,其中第一写操作要基于确定第二操作数中的证书授权第一软件实体访问存储器区而被执行。
在示例C3中,示例C1-C2中的任一个的主旨可以可选地包括其中处理器执行软件实体的第三指令,该第三指令包括第三操作数中的第一数据参数、第四操作数中的新数据参数以及第五操作数,该第五操作数包括指向存储器区的存储器地址的编码指针,其中处理器执行第三指令以:对存储器区的存储器地址处存储的第二数据执行第二读操作;至少部分基于密码算法和第一数据参数从所存储的第二数据计算经解密的第二数据;至少部分基于密码算法和新数据参数从未经加密的新数据计算经加密的新数据;以及基于确定经解密的第二数据未损坏,执行第三写操作来用经加密的新数据替代所存储的第二数据。
在示例C4中,示例A1-A14、B1-B9或C1-C3中的任一个的主旨可以可选地包括其中第一软件实体是可信执行环境、虚拟机、操作系统、系统应用或用户空间应用中的一个。
示例Y1提供一种设备,所述设备包括用于执行示例A1-A14、B1-B9和C1-C4中的任一个的方法的部件。
在示例Y2中,示例Y1的主旨可以可选地包括用于执行方法的部件包括至少一个处理器和至少一个存储器元件。
在示例Y3中,示例Y2的主旨可以可选地包括其中至少一个存储器元件包括机器可读指令,其在被执行时促使该设备执行示例A1-A14、B1-B9和C1-C4中的任一个的方法。
在示例Y4中,示例Y1-Y3中的任一个的主旨可以可选地包括设备是计算系统或片上系统中的一个。
示例X1提供至少一个机器可读存储介质,其包括指令,其中这些指令在被执行时实现设备、实现系统或实现方法(在前述示例A1-A14、B1-B9和C1-C4中的任一个中)。
Claims (25)
1.一种处理器,包括:
核,所述核包括电路用以:
执行第一软件实体的第一指令以:
至少部分基于密码算法和第一数据参数来计算经加密的第一数据;以及
执行第一写操作以将所述经加密的第一数据存储在存储器的第一存储器区中而不对所述第一存储器区执行在先读操作;以及
执行所述第一软件实体的第二指令以:
在对所述第一存储器区执行第二写操作之前,对所述第一存储器区中存储的第一数据执行第一读操作;
至少部分基于所述密码算法和所述第一数据参数从所存储的第一数据计算经解密的第一数据;以及
基于确定所述经解密的第一数据未损坏,执行所述第二写操作来将经加密的第二数据存储在所述第一存储器区中。
2.如权利要求1所述的处理器,其中所述第一指令包括第一操作数和第二操作数,所述第一操作数指示所述第一存储器区,所述第二操作数包含第一证书,其中所述电路要执行所述第一指令以进一步用于:
确定所述第一证书是否授权所述第一软件实体访问所述存储器区的所述第一存储器区,其中所述第一写操作要基于确定所述第二操作数中的所述第一证书授权所述第一软件实体访问所述第一存储器区而被执行。
3.如权利要求2所述的处理器,其中所述第一存储器区是在较大存储器区内定义的两个或以上子区的第一子区。
4. 如权利要求3所述的处理器,其中所述电路要进一步执行所述第一软件实体的第三指令,所述第三指令包括第三操作数和第四操作数,所述第三操作数包括所述第一证书并且所述第四操作数指示所述两个或以上子区的第二子区,其中所述电路执行所述第三指令以:
至少部分基于所述密码算法和第二数据参数来计算经加密的第三数据;以及
基于确定所述第三操作数中的所述第一证书授权所述第一软件实体访问所述第二子区,执行第三写操作来将所述经加密的第三数据存储在所述第二子区中。
5.如权利要求3所述的处理器,其中所述电路要进一步执行第四指令,所述第四指令包括第五操作数,所述第五操作数包括授权访问所述较大存储器区的第二证书,其中所述电路要执行所述第四指令以:
响应于确定所述第二证书有效并且未经验证的子代证书指示在所述第二证书中指示的所述较大存储器区内定义的第三子区:
将所述未经验证的子代证书变换为经验证的子代证书以用于访问所述第三子区;以及
向所述第一软件实体提供所述经验证的子代证书,其中所述第一软件实体要向所述第一软件实体的子代软件实体提供所述经验证的子代证书。
6.如权利要求5所述的处理器,其中所述确定所述第二证书有效要包括:
核实所述第二证书的完整性。
7.如权利要求5所述的处理器,其中所述电路要执行呈现所述经验证的子代证书的所述子代软件实体的第五指令来执行第四写操作以将经加密的第四数据存储在所述第三子区中而没有对所述第三子区的在先读操作。
8. 如权利要求5所述的处理器,其中将所述未经验证的子代证书变换为经验证的子代证书以用于访问所述第三子区要包括:
基于所述未经验证的子代证书中的多个字段中的至少一个来计算完整性值;以及
将所述完整性值存储在所述未经验证的子代证书中。
9.如权利要求2-7中的任一项所述的处理器,其中所述第一证书包括多个字段,所述多个字段包括:第一字段,所述第一字段包含所述第一存储器区的基地址;第二字段,所述第二字段包含指示所述第一存储器区的大小的存储器区界限;以及所述第一证书的完整性值,其中所述完整性值基于所述多个字段的至少一个其他字段而被生成。
10.如权利要求2-8中的任一项所述的处理器,其中所述确定所述第一证书授权所述第一软件实体访问所述第一存储器区是基于:
核实所述第一证书的完整性。
11.如权利要求1-8中的任一项所述的处理器,其中所述电路要进一步执行完整性检查来确定所述经解密的第一数据是否损坏,其中所述完整性检查包括以下中的至少一项:
基于所述经解密的第一数据计算消息验证码并且将所述消息验证码与之前存储的消息验证码比较;
识别所述经解密的第一数据中的金丝雀值并且确定所述金丝雀值匹配预期值;或
识别所述经解密的第一数据的熵并且将所述经解密的第一数据的所述熵与阈值熵比较。
12.如权利要求1-8中的任一项所述的处理器,其中所述电路要执行所述第二指令以进一步用于:
至少部分基于所述密码算法和所述第一数据参数从未加密的新数据计算所述经加密的第二数据。
13.如权利要求1-4中的任一项所述的处理器,其中所述第二指令包括第六操作数、第七操作数和第八操作数,所述第六操作数包含指向所述第一存储器区的编码指针,所述第七操作数包含所述第一数据参数,所述第八操作数包含新的数据参数,其中所述电路要执行所述第二指令以进一步用于:
至少部分基于所述密码算法和所述第八操作数中的所述新的数据参数来从未经加密的新数据计算所述经加密的第二数据。
14.如权利要求1-8中的任一项所述的处理器,其中所述第一软件实体是可信执行环境、虚拟机、操作系统、系统应用或用户空间应用中的一个。
15.如权利要求1-8中的任一项所述的处理器,其中所述第一数据参数是至少部分从指向所述第一存储器区的编码指针得出的密钥或微调。
16.一种方法,包括:
由处理器的核执行第一软件实体的第一指令,其中所述执行所述第一指令包括:
至少部分基于加密算法和第一数据参数来计算经加密的第一数据;以及
执行第一写操作来将所述经加密的第一数据存储在存储器的第一存储器区中而不对所述第一存储器区执行在先读操作;以及
执行所述第一软件实体的第二指令,其中所述执行所述第二指令包括:
在对所述第一存储器区执行第二写操作之前,对所述第一存储器区中存储的第一数据执行第一读操作;
至少部分基于所述密码算法和所述第一数据参数从所存储的第一数据计算经解密的第一数据;以及
基于确定所述经解密的第一数据未损坏,执行所述第二写操作来将经加密的第二数据存储在所述第一存储器区中。
17.如权利要求16所述的方法,其中所述第一指令包括第一操作数和第二操作数,所述第一操作数指示所述第一存储器区,所述第二操作数包含第一证书,所述方法进一步包括:
确定所述第一证书是否授权所述第一软件实体访问所述存储器的所述第一存储器区,其中基于确定所述第二操作数中的所述证书授权所述第一软件实体访问所述第一存储器区而执行所述第一写操作。
18.如权利要求17所述的方法,其中所述第一存储器区是在较大存储器区内定义的两个或以上子区的第一子区。
19.如权利要求18所述的方法,进一步包括:
执行所述第一软件实体的第三指令,所述第三指令包括第三操作数和第四操作数,所述第三操作数包括所述第一证书,所述第四操作数指示所述两个或以上子区的第二子区,其中执行所述第三指令包括:
至少部分基于所述密码算法和第二数据参数来计算经加密的第三数据;以及
基于确定所述第三操作数中的所述第一证书授权所述第一软件实体访问所述第二子区,执行第三写操作来将所述经加密的第三数据存储在所述第二子区中。
20.如权利要求17-19中的任一项所述的方法,其中所述第一证书包括多个字段,所述多个字段包括:第一字段,所述第一字段包含所述第一存储器区的基地址;第二字段,所述第二字段包含指示所述第一存储器区的大小的存储器区界限;以及所述第一证书的完整性值,其中所述完整性值基于所述多个字段的至少一个其他字段而被生成。
21.如权利要求16-19中的任一项所述的方法,其中所述第二指令包括第五操作数、第六操作数和第七操作数,所述第五操作数包含指向所述第一存储器区的编码指针,所述第六操作数包含所述第一数据参数,所述第七操作数包含新的数据参数,其中所述执行所述第二指令进一步包括:
至少部分基于所述密码算法和所述新的数据参数从未经加密的新数据计算所述经加密的第二数据。
22.如权利要求16-19中的任一项所述的方法,其中所述第一软件实体是可信执行环境、虚拟机、操作系统、系统应用或用户空间应用中的一个。
23.如权利要求16-19中的任一项所述的方法,其中所述第一数据参数是至少部分从指向所述第一存储器区的编码指针得出的微调。
24.一种设备,所述设备包括用于执行权利要求16-19中的任一项所述的方法的部件。
25.至少一个机器可读存储介质,所述至少一个机器可读存储介质包括指令,其中所述指令在被执行时实现如在权利要求1-8中任一项要求保护的处理器或实现如在权利要求16-19中任一项要求保护的方法。
Applications Claiming Priority (24)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201962868884P | 2019-06-29 | 2019-06-29 | |
US62/868884 | 2019-06-29 | ||
US16/723,871 US11768946B2 (en) | 2019-06-29 | 2019-12-20 | Low memory overhead heap management for memory tagging |
US16/722707 | 2019-12-20 | ||
US16/724,105 US11321469B2 (en) | 2019-06-29 | 2019-12-20 | Microprocessor pipeline circuitry to support cryptographic computing |
US16/724105 | 2019-12-20 | ||
US16/723468 | 2019-12-20 | ||
US16/724,026 US11620391B2 (en) | 2019-06-29 | 2019-12-20 | Data encryption based on immutable pointers |
US16/724059 | 2019-12-20 | ||
US16/724026 | 2019-12-20 | ||
US16/723871 | 2019-12-20 | ||
US16/723,977 US11354423B2 (en) | 2019-06-29 | 2019-12-20 | Cryptographic isolation of memory compartments in a computing environment |
US16/723977 | 2019-12-20 | ||
US16/722,342 US11829488B2 (en) | 2019-06-29 | 2019-12-20 | Pointer based data encryption |
US16/724,059 US20200145187A1 (en) | 2019-12-20 | 2019-12-20 | Bit-length parameterizable cipher |
US16/722,707 US11416624B2 (en) | 2019-06-29 | 2019-12-20 | Cryptographic computing using encrypted base addresses and used in multi-tenant environments |
US16/723,927 US11308225B2 (en) | 2019-06-29 | 2019-12-20 | Management of keys for use in cryptographic computing |
US16/723927 | 2019-12-20 | ||
US16/722342 | 2019-12-20 | ||
US16/723,468 US11250165B2 (en) | 2019-12-20 | 2019-12-20 | Binding of cryptographic operations to context or speculative execution restrictions |
US16/740,359 US11403234B2 (en) | 2019-06-29 | 2020-01-10 | Cryptographic computing using encrypted base addresses and used in multi-tenant environments |
US16/740359 | 2020-01-10 | ||
US16/862022 | 2020-04-29 | ||
US16/862,022 US20200257827A1 (en) | 2019-06-29 | 2020-04-29 | Memory write for ownership access in a core |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112148642A true CN112148642A (zh) | 2020-12-29 |
Family
ID=71946431
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010587518.5A Pending CN112148642A (zh) | 2019-06-29 | 2020-06-24 | 针对核中的所有权访问的存储器写入 |
Country Status (3)
Country | Link |
---|---|
US (1) | US20200257827A1 (zh) |
EP (1) | EP3757858A1 (zh) |
CN (1) | CN112148642A (zh) |
Families Citing this family (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11580234B2 (en) | 2019-06-29 | 2023-02-14 | Intel Corporation | Implicit integrity for cryptographic computing |
US11575504B2 (en) | 2019-06-29 | 2023-02-07 | Intel Corporation | Cryptographic computing engine for memory load and store units of a microarchitecture pipeline |
US11403234B2 (en) | 2019-06-29 | 2022-08-02 | Intel Corporation | Cryptographic computing using encrypted base addresses and used in multi-tenant environments |
US11250165B2 (en) | 2019-12-20 | 2022-02-15 | Intel Corporation | Binding of cryptographic operations to context or speculative execution restrictions |
US11061594B1 (en) * | 2020-03-23 | 2021-07-13 | Vmware, Inc. | Enhanced data encryption in distributed datastores using a cluster-wide fixed random tweak |
US11444788B2 (en) * | 2020-04-13 | 2022-09-13 | Verizon Patent And Licensing Inc. | Authentication and access control for device management and provisioning |
US11379383B2 (en) | 2020-08-25 | 2022-07-05 | Vmware, Inc. | Data encryption in a two-tier storage system |
US11669625B2 (en) | 2020-12-26 | 2023-06-06 | Intel Corporation | Data type based cryptographic computing |
US11580035B2 (en) | 2020-12-26 | 2023-02-14 | Intel Corporation | Fine-grained stack protection using cryptographic computing |
US11836361B2 (en) * | 2021-08-25 | 2023-12-05 | Nvidia Corporation | Implementing compiler-based memory safety for a graphic processing unit |
US11372969B1 (en) * | 2021-09-17 | 2022-06-28 | Polyverse Corporation | Randomized canary and shadow stack for JIT-ROP defense |
US20230251782A1 (en) * | 2022-02-10 | 2023-08-10 | Macronix International Co., Ltd. | Memory device and associated control method |
Family Cites Families (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP1870829B1 (en) * | 2006-06-23 | 2014-12-03 | Microsoft Corporation | Securing software by enforcing data flow integrity |
EP2073430B1 (en) * | 2007-12-21 | 2013-07-24 | Research In Motion Limited | Methods and systems for secure channel initialization transaction security based on a low entropy shared secret |
US9792229B2 (en) * | 2015-03-27 | 2017-10-17 | Intel Corporation | Protecting a memory |
US10181946B2 (en) * | 2015-07-20 | 2019-01-15 | Intel Corporation | Cryptographic protection of I/O data for DMA capable I/O controllers |
US20180082057A1 (en) * | 2016-09-22 | 2018-03-22 | Intel Corporation | Access control |
US10261854B2 (en) * | 2016-09-30 | 2019-04-16 | Intel Corporation | Memory integrity violation analysis method and apparatus |
US10922439B2 (en) * | 2018-06-29 | 2021-02-16 | Intel Corporation | Technologies for verifying memory integrity across multiple memory regions |
-
2020
- 2020-04-29 US US16/862,022 patent/US20200257827A1/en active Pending
- 2020-06-24 EP EP20181907.5A patent/EP3757858A1/en active Pending
- 2020-06-24 CN CN202010587518.5A patent/CN112148642A/zh active Pending
Also Published As
Publication number | Publication date |
---|---|
EP3757858A1 (en) | 2020-12-30 |
US20200257827A1 (en) | 2020-08-13 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11354423B2 (en) | Cryptographic isolation of memory compartments in a computing environment | |
US11711201B2 (en) | Encoded stack pointers | |
US11575504B2 (en) | Cryptographic computing engine for memory load and store units of a microarchitecture pipeline | |
US20200257827A1 (en) | Memory write for ownership access in a core | |
US11625337B2 (en) | Encoded pointer based data encryption | |
CN112149152A (zh) | 使用加密的基地址和用于多租户环境的以密码方式的计算 | |
US20210150040A1 (en) | Data type based cryptographic computing | |
US20210149825A1 (en) | Fine-grained stack protection using cryptographic computing | |
US20220121447A1 (en) | Hardening cpu predictors with cryptographic computing context information | |
US20220100907A1 (en) | Cryptographic computing with context information for transient side channel security | |
US20220214909A1 (en) | Hypervisor-managed linear address translation and memory integrity | |
US20240104027A1 (en) | Temporal information leakage protection mechanism for cryptographic computing | |
US20210117341A1 (en) | Cache line slot level encryption based on context information | |
US20220121578A1 (en) | Transient side-channel aware architecture for cryptographic computing |
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 |