CN114902225A - 多租户环境中的密码计算 - Google Patents
多租户环境中的密码计算 Download PDFInfo
- Publication number
- CN114902225A CN114902225A CN202080092944.XA CN202080092944A CN114902225A CN 114902225 A CN114902225 A CN 114902225A CN 202080092944 A CN202080092944 A CN 202080092944A CN 114902225 A CN114902225 A CN 114902225A
- Authority
- CN
- China
- Prior art keywords
- key
- code
- memory
- data
- 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/602—Providing cryptographic facilities or services
-
- 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
-
- 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/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/52—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
- G06F21/54—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs
-
- 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/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/78—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data
- G06F21/79—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure storage of data in semiconductor storage media, e.g. directly-addressable memories
-
- 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/0631—Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
- H04L9/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L2209/00—Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
- H04L2209/34—Encoding or coding, e.g. Huffman coding or error correction
Landscapes
- Engineering & Computer Science (AREA)
- Computer Security & Cryptography (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Power Engineering (AREA)
- Storage Device Security (AREA)
- Advance Control (AREA)
Abstract
处理器、系统、机器可读介质和方法。处理器包括第一电路模块,所述第一电路模块用于:使用第一代码密钥对第一代码图像进行编码;将加密的第一代码图像加载到存储器中由处理器上运行的操作系统为第一代码图像所分配的存储器区域中;以及向操作系统发送与第一代码密钥对应的替代密钥,其中第一代码密钥对操作系统隐藏;以及包括控制电路模块的指令高速缓存;以及被耦合到指令高速缓存的第二电路模块,所述第二电路模块用于:从操作系统接收替代密钥;响应于来自操作系统的执行第一代码图像以例示第一进程的第一请求,使用硬件密钥来执行第一密码功能,以从替代密钥来生成第一代码密钥;以及采用第一代码密钥对指令高速缓存的控制电路模块进行编程,以使第一代码图像能够使用第一代码密钥被解密。
Description
相关申请的交叉引用
本申请要求如下美国临时专利申请的优先权益:美国临时专利申请号63/122,444,标题为“Cryptographic Computing including Metadata Stored Outside of anAddress Pointer”,并且于2020年12月7日提交;以及美国临时专利申请号62/976,319,标题为“Security Check Systems And Methods For Memory Allocations”,并且于2020年2月13日提交,通过引用将其完整公开结合到本文中。
技术领域
本公开一般涉及计算机系统领域,以及更特别涉及存储器操作中的密码计算。
背景技术
保护计算机系统中的存储器免于软件缺陷和安全漏洞是重大问题。当程序将数据写到缓冲器并且超出缓冲器边界以使得相邻存储器位置被覆写时,能够影响存储器安全性的缓冲器上溢发生。类似地,越过缓冲器末尾对另一个页中的读取可触发访问违规或错误。另一个存储器安全违规称作悬空指针。悬空指针是未经解析的对有效目的地的引用。这在存储器被解除分配而没有修改对已解除分配(或释放)存储器的现有指针的值时可发生。如果系统重新分配已释放存储器,并且悬空指针用来访问已重新分配存储器,则不可预测行为(包括系统故障)可发生。
当前计算技术(例如用于进程/内核分离的页表、虚拟机管理器、被管理运行时等)已经使用架构和元数据来提供数据保护。例如,在先前解决方案中,处理器将使用查找表对于与所有权、存储器大小、位置、类型、版本等的数据有关的策略或数据进行编码。动态存储和加载元数据要求附加存储(存储器开销),并且影响性能,特别是对于细粒度元数据(诸如对于功能即服务(FaaS)工作负荷或者对于每对象限度信息(bound information)),以及特别是在多租户环境中。
附图说明
为了提供对本公开及其特征和优点的更全面了解,参照以下结合附图的描述,其中相似附图标记表示相似部件,附图包括:
图1是示出按照至少一个实施例的示例密码计算环境的框图;
图2是示出按照至少一个实施例的示例处理器的框图;
图3A是示出根据某些实施例的示范有序管线和示范寄存器重命名无序发出/执行管线的框图;
图3B是示出按照某些实施例的将被包含在处理器中的有序架构核心和示范寄存器重命名无序发出/执行架构核心的示范实施例两者的框图;
图4是按照至少一个实施例的示例计算机架构的框图;
图5是按照本公开的实施例、对比软件指令转换器用来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图;
图6是按照本公开的至少一个实施例、配置有安全存储器访问逻辑的示例计算装置的简化框图;
图7是示出按照本公开的至少一个实施例、图6的安全存储器访问逻辑的应用的简化环境图;
图8是按照至少一个实施例、计算装置中的硬件、软件单元和数据流的可能示例细节的简化框图;
图9是按照至少一个实施例、用于实现各种密码计算操作的示例指令和逻辑的可能系统的简化框图;
图10是按照一些实施例的云网络的示意图;
图11是示出示例多租户软件架构的简化框图;
图12是示出按照实施例的示例多租赁初始化进程的简化框图;
图13是示出按照实施例的示例多租赁运行时进程的简化框图;
图14是示出按照实施例、具有共享资料库的另一个示例多租赁运行时进程的简化框图;
图15是按照实施例、用于基于密码计算的容器安全性的示例多租户系统架构的框图;
图16A-16B是按照实施例的示例初始化进程的流程图;
图17是按照实施例的示例引导进程的流程图;
图18A-18C是按照实施例、使用共享资料库的示例容器进程的流程图;
图19是按照实施例、用于调用共享资料库的进程的数据和代码的可能存储器布局的框图;
图20是按照实施例、用于调用共享资料库的进程的数据和代码的另一个可能存储器布局的框图;
图21是按照实施例、用于调用共享资料库的进程的数据和代码的又一个可能存储器布局的框图;
图22是按照实施例、与为调用容器加载共享资料库代码图像(code image)关联的示例进程的流程图;
图23是图15的多租户系统架构的多租户平台的附加可能细节的框图;
图24是按照实施例、可在用户中断期间使用的信息的所选部分的框图;
图25示出按照实施例的容器进程之间的进程间通信的流程图;
图26是按照实施例的示例异步事件/中断操控的流程图;
图27是按照实施例的另一个示例异步事件/中断操控的流程图;
图28A-28B是按照实施例的示例容器迁移进程的流程图;
图29示出根据某些实施例的虚拟地址加密技术的简化框图;
图30示出根据某些实施例的示例编码指针;
图31示出根据某些实施例的受害者(victim)和对手(adversary)的示例存储器分配;
图32示出根据某些实施例的示例扩散技术的简化框图;
图33示出根据某些实施例的另一个示例扩散技术的简化框图;
图34示出根据某些实施例的处理器和存储器架构的简化框图;
图35示出根据某些实施例、在存储器层次结构中的DCU与其他高速缓存单元之间所执行的扩散技术的简化框图;
图36示出根据某些实施例、用于以子高速缓存线粒度来修改和扩散数据的示例技术的简图;
图37示出根据某些实施例、用于允许合并在高速缓存层次结构内部被执行的示例技术3700;
图38示出根据某些实施例的高速缓存路的示例组织;
图39A-39F示出根据某些实施例、由处理器的核心从/向存储器的示例读取/写入;
图40是按照实施例的存储器分配安全性校验系统的示意图;
图41是按照一个实施例的说明性编码指针架构的示意图;
图42是用于不同范围的槽(slot)大小、图9的元数据的实施例的展开图;
图43是按照一些实施例、在与图41的线性存储器布局分离的表中存储的元数据的图示;
图44是按照实施例、存储相同大小的分配的页的图示,其中元数据被存储在相同页中;
图45是按照实施例的方法的流程图;
图46是示出按照实施例、在没有对指针的加密地址进行解密的情况下使用密码编码指针来访问存储器内容的流程选项的流程图;
图47是按照实施例、在没有对指针的加密地址进行解密的情况下使用密码编码指针来访问存储器内容的流程的流程图;
图48是按照一些实施例、在在安全元数据未命中的情况下由核心对于高速缓存线中的存储器内容的读请求的高速缓存一致性流程的流程图,并且其中在尝试访问的核心的本地高速缓存中存在将被访问的存储器内容的单个副本;
图49是按照一些实施例、在安全元数据未命中的情况下由核心对于高速缓存线中的存储器内容的读请求的高速缓存一致性流程的流程图,并且其中在各种核心中存在将被访问的具有状态S的存储器内容的多个副本;
图50是按照一些实施例、由核心对于高速缓存线中的存储器内容的读请求的高速缓存一致性流程的流程图,其中在尝试访问的核心的本地高速缓存中存在将被访问的存储器内容的单个副本,其中单个核心相对存储器内容处于状态E或M;
图51是按照一些实施例的读请求的高速缓存一致性流程的流程图,其中在尝试访问的核心的本地高速缓存中存在将被访问的存储器内容的多个副本,其中探查核心相对存储器内容处于状态共享(S)(分支B),或者其中存储器内容的副本不存在(分支A);以及
图52是按照一些实施例的写请求的高速缓存一致性流程的流程图。
具体实施方式
以下公开提供用于密码计算的实现的各种可能实施例或示例。密码计算是计算工业中的重要趋势,其中计算本身的根基成为基本密码。密码计算表示对工业具有广泛影响的系统安全性的巨大转变、根本反思。
如本文所使用,术语“顶部”、“底部”、“上”、“下”、“最底部”和“最上部”在相对一个或多个元件来使用时意在传达相对而不是绝对物理配置。因此,描述为装置中的“最上面元件”或“顶部元件”的元件在装置被反转时而是可形成装置中的“最下面元件”或“底部元件”。类似地,描述为装置中的“最下面元件”或“底部元件”的元件在装置被反转时而是可形成装置中的“最上面元件”或“顶部元件”。
如本文所使用,术语“逻辑关联”在参照多个对象、系统或元件来使用时意在传达对象、系统或元件之间的关系的存在,使得对一个对象、系统或元件的访问揭示与所访问对象、系统或元件具有“逻辑关联”的其余对象、系统或元件。示例“逻辑关联”存在于关系数据库之间,其中对第一数据库中的元素的访问可提供一个或多个附加数据库中的一个或多个元素(所述元素各自与所访问元素具有所识别关系)的信息和/或数据。在另一个示例中,如果“A”与“B”在逻辑上关联,则访问“A”将揭示或者以其他方式提取来自“B”的信息和/或数据,反过来也是一样。
如本文所使用,术语“第一”、“第二”和其他类似序数意在区分多个相似或相同的对象,而不是表示对象的特定或绝对顺序。因此,“第一对象”和“第二对象”可按照任何顺序出现——包括第二对象在空间或时间上出现在第一对象前面或之前。这类配置应当被认为是包含在本公开的范围之内。
要注意,在以下论述中,使用字母数字项指定符来表示特定组件。例如,第一元件可被表示为470A,以及第二元件可被表示为470B。为了便于论述和简洁起见,当描述两种元件共同的特征时,省略字母数字指定符。因此,当使用这种通用(即,非字母数字)指定符时,所述特征应当被理解为可适用于共用公共数字指定符的所有元件。例如,针对“元件470”所述的特征会适用于所有元件470A-470n。另一方面,针对“元件470A”所述的特征会特别适用于表示为470A的元件,而不适用于表示为470B至470n的元件。
如本申请和权利要求书所使用,通过术语“和/或”所连接的项列表能够表示所列项的任何组合。例如,词语“A、B和/或C”能够表示:A;B;C;A和B;A和C;B和C;或者A、B和C。如本申请和权利要求书所使用,通过术语“……的至少一个”所连接的项列表能够表示所列术语的任何组合。例如,词语“A、B或C的至少一个”能够表示:A;B;C;A和B;A和C;B和C;或者A、B和C。
如本文的任何实施例所使用,术语“系统”和“模块”可表示例如配置成执行上述操作的任一个的软件、固件和/或电路模块。软件可被实施为非暂态计算机可读存储介质上记录的软件封装、代码、指令、指令集和/或数据。固件可被实施为存储器装置中硬编码(例如非易失性)的代码、指令或指令集和/或数据。如本文的任何实施例中所使用,“电路模块”可单一地或者按照任何组合地包括例如硬连线电路模块、可编程电路模块(诸如计算机处理器,包括一个或多个单独指令处理核心)、状态机电路模块和/或固件,其存储由可编程电路模块所执行的指令或者未来计算范式,包括例如加速计(诸如神经网处理器)的大规模并行性模拟或量子计算硬件实施例以及以上所述的非硅实现。电路模块可共同或者单独地被实施为形成较大系统的部分的电路模块,例如集成电路(IC)、片上系统(SoC),台式计算机、膝上型计算机、平板计算机、服务器、智能电话等。
本文所述操作的任一个可在系统中实现,所述系统包括其中单独或组合地存储了指令的一个或多个介质(例如非暂态存储介质),所述指令在由一个或多个处理器执行时执行所述方法。在这里,处理器可包括例如服务器CPU、移动装置CPU和/或其他可编程电路模块。另外,预计本文所述的操作可被分布于多个物理装置,诸如在多于以上不同物理位置的处理结构。存储介质可包括任何类型的有形介质,例如:任何类型的盘,包括硬盘、软盘、光盘、致密光盘只读存储器(CD-ROM)、可重写致密光盘(CD-RW)和磁光盘;半导体装置,诸如,只读存储器(ROM)、诸如动态和静态随机存取存储器(RAM)之类的RAM、可擦可编程只读存储器(EPROM)、电可擦可编程只读存储器(EEPROM)、闪速存储器、固态硬盘(SSD)、嵌入式多媒体卡(eMMC)、安全数字输入/输出(SDIO)卡、磁卡或光卡;或者适合于存储电子指令的任何类型的介质。其他实施例可实现为由可编程控制装置所执行的软件。
如本文所使用,“元数据”表示下列至少一个或多个:标签值或版本号(标签元数据)、有效范围元数据、上下文信息(例如存储器分配大小(例如通过间接地址所引用的所分配存储器的字节))、数据或代码的类型(例如通过编程语言所定义的数据或代码的类)、准许(例如间接地址的读、写和执行准许)、数据或代码的位置(例如与数据或代码的大小相组合的地址)、数据或代码的所有权、特权级别(例如用户或监督人)或者密码上下文标识符(或者密码上下文ID)(例如每个间接地址的随机化或确定性唯一值),这里只列举几个示例。如本文所使用的“元数据”还可表示密钥标识符(密钥ID)、微调(tweak)、计数器、存储器访问控制(MAC)或者纠错码(ECC)。
如本文所使用,“分配”表示存储对象(诸如数据或代码)的存储器的可寻址部分。
如本文所使用,“限度信息”表示基于参考点来确定分配的开头和结束的信息。参考点可包括例如槽、块、页或者存储器的任何其他单元的中点、开头、结束。
如本文所使用,“槽”表示高速缓存线中的存储器的单位。
如本文所使用,“隔间(compartment)”在本文中表示的是以密码方式与其他租户隔离的租户。如本文所使用,术语“密码隔离”意在表示产生于采用不同密钥和微调所加密的存储器的不同区域(不同隔间或租户)的隔离。被隔离存储器隔间/租户能够由虚拟机(VM)、应用、函数或线程的数据结构和/或代码来组成。在多租户环境中,密码可用来加强租户之间的隔离,而不是页表或扩展页表。
如本文所使用,“微调”或“微调函数”表示一种函数,所述函数通过将未加密数据与物理存储器地址绑定,来允许使用物理存储器地址(例如已加扰、未加扰等)作为对块密码的微调。微调函数可包括例如XTS(具有密文窃取的基于异或-加密-异或/XEX的微调码本模式)算法、Liskov、Rivest和Wagner(LRW)算法等等或者它们的组合。微调函数例如可扩展原始物理存储器地址,将地址与未加密数据进行“异或”,并且通过具有密钥的加密器来运行结果,以将未加密数据绑定到地址。在一个示例中,当攻击包括将密文数据交换到不同的存储器位置时,解密器可采用与不同存储器位置对应的存储器地址对密文数据进行解密,从而使对应未加密数据(例如明文数据)包括多个位的随机分布。
A.密码计算
下面的图1-10提供可在如本文所述的密码计算实施例的上下文中使用的一些示例计算装置、计算环境、硬件、软件、网络或流程。
图1是示出按照至少一个实施例的示例密码计算环境100的框图。在所示示例中,密码寻址层110跨示例计算向量中央处理单元(CPU)102、图形处理单元(GPU)104、人工智能(AI)106和现场可编程门阵列(FPGA)108延伸。例如,CPU 102和GPU 104可对存储器112中存储的数据共享相同虚拟地址转换,并且密码地址可建立于这个共享虚拟存储器。它们可对给定执行流共享相同进程密钥,以及沿用相同密码算法来计算相同微调以对密码编码的地址进行解密并且对这类编码地址所引用的数据进行解密。
经组合,本文所述的能力可以能够实现密码计算。存储器112可在存储器层次结构的每一级来加密,从高速缓存的第一级至高速缓存的最后一级并且进入系统存储器中。将密码地址编码绑定到数据加密可允许极细粒度对象边界和访问控制,从而能够实现下至甚至单独函数及其函数即服务的对象的细粒度安全容器。调用栈上的密码编码返回地址(取决于它们的位置)还可以能够实现控制流完整性,而无需影子栈元数据。因此,能够简单地根据密码寻址和相应密码数据绑定以密码方式执行数据访问控制策略和控制流的任一个。
图2-4是可根据本文所公开实施例所使用的示范计算机架构的框图。一般来说,可使用本领域已知的用于处理器和计算系统的任何计算机架构设计。在示例中,本领域已知的用于膝上型、台式、手持PC、个人数字助理、平板、工程工作站、服务器、网络装置、服务器、电器、网络中枢、路由器、交换机、嵌入式处理器,数字信号处理器(DSP)、图形装置、视频游戏装置、机顶盒、微控制器,智能电话、移动装置、可佩戴电子装置、便携媒体播放器、手持装置和各种其他电子装置的系统设计和配置也适合于本文所述计算系统的实施例。一般来说,用于本文所公开实施例的适当计算机架构能够包括但不限于图2-4中所示的配置。
图2是按照实施例的处理器的示例图示。处理器200是能够与本文所示和所述的实现结合使用的一种类型的硬件装置(例如处理器102)的示例。处理器200可以是任何类型的处理器,诸如微处理器、嵌入式处理器、数字信号处理器(DSP)、网络处理器、多核处理器、单核处理器或者执行代码的另一装置。虽然图2中仅示出一个处理器200,但是处理元件备选地可包括多于一个图2中所示的处理器200。处理器200可以是单线程核心,或者对于至少一个实施例,处理器200可以是多线程的,因为它可包括每核心多于一个硬件线程上下文(或者“逻辑处理器”)。
图2还示出根据实施例、被耦合到处理器200的存储器202。存储器202可以是各种存储器中的任一个(包括存储器层次结构的各种层),如本领域的那些技术人员已知或者可得到的。这类存储器元件能够包括但不限于随机存取存储器(RAM)、只读存储器(ROM)、现场可编程门阵列(FPGA)的逻辑块、可擦可编程只读存储器(EPROM)和电可擦可编程ROM(EEPROM)。
处理器200能够执行与本文详述的算法、进程或操作关联的任何类型的指令。一般来说,处理器200能够将元件或产品(例如数据)从一种状态或事物变换成另一种状态或事物。
可以是将要由处理器200所执行的一个或多个指令的代码204可被存储在存储器202中,或者可被存储在软件、硬件、固件或者它们的任何适当组合中或者适当地并且基于特定需要被存储在任何其他内部或外部组件、装置、元件或对象中。在一个示例中,处理器200能够遵循代码204所指示的指令的程序序列。每个指令进入前端逻辑206,并且由一个或多个解码器208来处理。解码器可生成作为其输出的微操作(诸如采取预定义格式的固定宽度微操作),或者可生成反映原始代码指令的其他指令、微指令或控制信号。前端逻辑206还包括寄存器重命名逻辑210和调度逻辑212,它们一般分配资源并且将与指令对应的操作进行排队以供执行。
处理器200还能够包括执行逻辑214,所述执行逻辑具有一组执行单元216a、216b、216n等。一些实施例可包括专用于特定功能或者功能集合的多个执行单元。其他实施例可以仅包括一个执行单元或者能够执行特定功能的一个执行单元。执行逻辑214执行代码指令所指定的操作。
在代码指令所指定的操作的执行完成之后,后端逻辑218能够撤销代码204的指令。在一个实施例中,处理器200允许无序执行,但是要求对指令的有序撤销。撤销逻辑220可采取多种已知形式(例如重排序缓冲器等)。按照这种方式,在代码204的执行期间,至少根据由解码器、硬件寄存器所生成的输出以及由寄存器重命名逻辑210所利用的表以及由执行逻辑214所修改的任何寄存器(未示出),来变换处理器200。
虽然图2中未示出,但是处理元件可随处理器200包括芯片上的其他元件。例如,处理元件可包括随同处理器200的存储器控制逻辑。处理元件可包括I/O控制逻辑,和/或可包括与存储器控制逻辑相集成的I/O控制逻辑。处理元件还可包括一个或多个高速缓存。在一些实施例中,非易失性存储器(诸如闪速存储器或熔丝)也可随处理器200被包含在芯片上。
图3A是示出按照本公开的一个或多个实施例的示范有序管线和示范寄存器重命名无序发出/执行管线的框图。图3B是示出按照本公开的一个或多个实施例、将被包含在处理器中的有序架构核心和示范寄存器重命名无序发出/执行架构核心的示范实施例的框图。图3A-3B中的实线框示出有序管线和有序核心,而虚线框的可选添加示出寄存器重命名无序发出/执行管线和核心。在给定有序方面是无序方面的子集的情况下,将描述无序方面。
图3A中,处理器管线300包括取级302、长度解码级304、解码级306、分配级308、重命名级310、调度(又称作分发或发出)级312、寄存器读取/存储器读取级314、执行级316、回写/存储器写入级318、异常操控级322和提交级324。
图3B示出处理器核心390,所述处理器核心包括被耦合到执行引擎单元350的前端单元330,并且所述前端单元和所述执行引擎单元均被耦合到存储器单元370。处理器核心390和存储器单元370是能够与本文所示和所述的实现结合使用的硬件类型的示例(例如处理器102、存储器120)。核心390可以是简化指令集计算(RISC)核心、复杂指令集计算(CISC)核心、超长指令字(VLIW)核心或者混合或备选核心类型。作为又一个选项,核心390可以是专用核心(例如,诸如网络或通信核心)、压缩引擎、协处理器核心、通用计算图形处理单元(GPGPU)核心、图形核心等。另外,处理器核心390及其组件表示示例架构,所述示例架构可用来实现逻辑处理器及其相应组件。
前端单元330包括被耦合到指令高速缓存单元334的分支预测单元332,所述指令高速缓存单元被耦合到指令转换后备缓冲器(TLB)336,所述指令TLB单元被耦合到指令取单元338,所述指令取单元被耦合到解码单元340。解码单元340(或解码器)可对指令进行解码,并且生成作为输出的一个或多个微操作、微码入口点、微指令、其他指令或其他控制信号,它们从原始指令中被解码或得出或者以其他方式反映原始指令。可使用各种不同的机制来实现解码单元340。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(PLA)、微码只读存储器(ROM)等。在一个实施例中,核心390包括存储某些宏指令的微码的微码ROM或另一介质(例如在解码单元340中或者在前端单元330内)。解码单元340被耦合到执行引擎单元350中的重命名/分配器单元352。
执行引擎单元350包括重命名/分配器单元352,所述重命名/分配器单元被耦合到撤销单元354和一组一个或多个调度器单元356。(一个或多个)调度器单元356表示任何数量的不同调度器,包括保留站、中心指令窗口等。(一个或多个)调度器单元356被耦合到(一个或多个)物理寄存器堆单元358。(一个或多个)物理寄存器堆单元358的每个表示一个或多个物理寄存器堆,其中不同的寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、封装整数、封装浮点、向量整数、向量浮点、状态(例如,作为将被执行的下一个指令的地址的指令指针)等。在一个实施例中,物理寄存器堆单元358包括向量寄存器单元、写屏蔽寄存器单元和标量寄存器单元。这些寄存器单元可提供架构向量寄存器、向量屏蔽寄存器和通用寄存器(GPR)。在本文所述的至少一些实施例中,(一个或多个)寄存器堆单元358是能够与本文所示和所述的实现结合使用的硬件类型的示例(例如寄存器112)。(一个或多个)物理寄存器堆单元358被撤销单元354重叠,以示出可实现寄存器重命名和无序执行的各种方式(例如使用(一个或多个)重排序缓冲器和(一个或多个)撤销寄存器堆;使用(一个或多个)未来文件、(一个或多个)历史缓冲器和(一个或多个)撤销寄存器堆;使用寄存器映射和寄存器池;等等)。撤销单元354和(一个或多个)物理寄存器堆单元358被耦合到(一个或多个)执行集群360。(一个或多个)执行集群360包括一组一个或多个执行单元362和一组一个或多个存储器访问单元364。执行单元362可执行各种操作(例如移位、加法、减法、乘法),并且对各种类型的数据(例如,标量浮点、封装整数、封装浮点、向量整数、向量浮点)来执行。虽然一些实施例可包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可以仅包括一个执行单元或者全部执行所有功能的多个执行单元。执行单元362还可包括:地址生成单元(例如822),计算由核心用来访问主存储器(例如存储器单元370)的地址;以及页未命中操控器(PMH)。
(一个或多个)调度器单元356、(一个或多个)物理寄存器堆单元358和(一个或多个)执行聚类360示为可能是多个的,因为某些实施例创建某些类型的数据/操作的独立管线(例如标量整数管线、标量浮点/封装整数/封装浮点/向量整数/向量浮点管线和/或存储器访问管线,其各具有其自己的调度器单元、(一个或多个)物理寄存器堆单元和/或执行聚类——以及在独立存储器访问管线的情况下,实现只有这个管线的执行聚类具有(一个或多个)存储器访问单元364的某些实施例)。还应当理解,在使用独立管线的情况下,这些管线的一个或多个可以是无序发出/执行,而其余的是有序的。
所述一组存储器访问单元364被耦合到存储器单元370,所述存储器单元包括被耦合到数据高速缓存单元374的数据TLB单元372,所述数据高速缓存单元被耦合到第2级(L2)高速缓存单元376。在一个示范实施例中,(一个或多个)存储器访问单元364可包括加载单元、存储地址单元和存储数据单元,它们的每个被耦合到存储器单元370中的数据TLB单元372。指令高速缓存单元334进一步被耦合到存储器单元370中的第2级(L2)高速缓存单元376。L2高速缓存单元376被耦合到高速缓存的一个或多个其他级,并且最终被耦合到主存储器。另外,页未命中操控器(例如页未命中操控器826)还可被包含在核心390中,以在数据TLB单元372中没有找到匹配时查找页表中的地址映射。
作为举例,示范寄存器重命名无序发出/执行核心架构可如下所述来实现管线300:1) 指令取单元338执行取和长度解码级302和304;2) 解码单元340执行解码级306;3)重命名/分配器单元352执行分配级308和重命名级310;4) (一个或多个)调度器单元356执行调度级312;5) (一个或多个)物理寄存器堆单元358和存储器单元370执行寄存器读取/存储器读取级314;(一个或多个)执行集群360执行执行级316;6) 存储器单元370和(一个或多个)物理寄存器堆单元358执行回写/存储器写入级318;7) 各种单元可涉及到异常操控级322;以及8) 撤销单元354和(一个或多个)物理寄存器堆单元358执行提交级324。
核心390可支持一个或多个指令集(例如x86指令集(其中具有随较新版本已被添加的一些扩展));MIPS Technologies(Sunnyvale,CA)的MIPS指令集;ARM Holdings(Sunnyvale,CA)的ARM指令集(其中具有可选附加扩展,诸如NEON)),包括本文所述的(一个或多个)指令。在一个实施例中,核心390包括支持封装数据指令集扩展(例如AVX1、AVX2)的逻辑,由此允许由许多多媒体应用所使用的操作将使用封装数据来执行。
应当理解,核心可支持多线程运行(执行操作或线程的两个或更多并行集合),并且可按照多种方式这样做,包括时间切片多线程运行、同时多线程运行(其中单个物理核心为物理核心同时多线程运行的线程的每个提供逻辑核心)或者它们的组合(例如,诸如在Intel®超线程技术中的时间切片取和解码以及此后的同时多线程运行)。相应地,在至少一些实施例中,可支持多线程包体(enclave)。
虽然在无序执行的上下文中描述寄存器重命名,但是应当理解,寄存器重命名可用于有序架构中。虽然处理器的所示实施例还包括独立指令和数据高速缓存单元334/374和共享L2高速缓存单元376,但是备选实施例可具有用于指令和数据两者的单个内部高速缓存,例如,诸如第1级(L1)内部高速缓存或者内部高速缓存的多级。在一些实施例中,系统可包括内部高速缓存以及核心和/或处理器外部的外部高速缓存的组合。备选地,高速缓存全部可以是核心和/或处理器外部的。
图4示出按照实施例、按照点对点(PtP)配置所布置的计算系统400。特别是,图4示出一种系统,其中处理器、存储器和输入/输出装置通过多个点对点接口来互连。一般来说,本文所述计算系统或计算装置(例如计算装置100)的一个或多个可按照与计算系统400相同或相似的方式来配置。
处理器470和480可被实现为单核处理器474a和484a或者多核处理器474a-474b和484a-484b。处理器470和480各自可包括由其相应的一个或多个核心所使用的高速缓存471和481。共享高速缓存(未示出)可被包含在任一个处理器中或者两种处理器外部,但是仍然经由P-P互连与处理器连接,使得如果使处理器进入低功率模式,则任一个或两个处理器的本地高速缓存信息可被存储在共享高速缓存中。应当注意,本文所述的一个或多个实施例可在计算系统(诸如计算系统400)中实现。此外,处理器470和480是能够与本文所示和所述的实现结合使用的硬件类型的示例(例如处理器102)。
处理器470和480各自还可包括集成存储控制器逻辑(IMC)472和482,以与存储器元件432和434进行通信,所述存储器元件可以是本地附连到相应处理器的主存储器的部分。在备选实施例中,存储控制器逻辑472和482可以是与处理器470和480分离的分立逻辑。存储器元件432和434可存储将被处理器470和480在实现本文所述操作和功能性中使用的各种数据。
处理器470和480可以是任何类型的处理器,诸如与其他附图结合论述的那些处理器。处理器470和480可分别使用点对点(PtP)接口电路478和488、经由点对点接口450来交换数据。处理器470和480各自可使用点对点接口电路476、486、494和498、经由单独点对点接口452和454与输入/输出(I/O)子系统490交换数据。I/O子系统490还可使用接口电路492(所述接口电路可是PtP接口电路)、经由高性能图形接口439与高性能图形电路438交换数据。在一个实施例中,高性能图形电路438是专用处理器,例如,诸如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器等。I/O子系统490还可与显示器433进行通信,以用于显示由人类用户可查看的数据。在备选实施例中,图4中所示的PtP链路的任一个或全部可实现为多点总线而不是PtP链路。
I/O子系统490可经由接口电路496与总线410进行通信。总线410可具有通过它进行通信的一个或多个装置,诸如总线桥接器418、I/O装置414和一个或多个其他处理器415。经由总线420,总线桥接器418可与诸如用户接口422(诸如键盘、鼠标、触摸屏或其他输入装置)、通信装置426(诸如调制解调器、网络接口装置或者可通过计算机网络460进行通信的其他类型的通信装置)、音频I/O装置424和/或数据存储装置428之类的其他装置进行通信。数据存储装置428可存储可由处理器470和/或480所执行的代码和数据430。在备选实施例中,总线架构的任何部分可采用一个或多个PtP链路来实现。
程序代码(诸如代码430)可应用于输入指令,以执行本文所述的功能并且生成输出信息。输出信息可按照已知方式应用于一个或多个输出装置。为了本申请的目的,处理系统可以是计算系统400的部分,并且包括具有处理器(例如,诸如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或者微处理器)的任何系统。
程序代码(例如430)可通过高级过程或面向对象的编程语言来实现,以与处理系统进行通信。根据需要,程序代码也可通过汇编或机器语言来实现。实际上,本文所述的机制的范围并不局限于任何特定编程语言。在任何情况下,语言可以是编译或解释语言。
至少一个实施例的一个或多个方面可通过机器可读介质上存储的、表示处理器内的各种逻辑的代表指令来实现,所述指令在由机器读取时使该机器制作执行本文所述技术的一个或多个的逻辑。称作“IP核心”的这类表示可被存储在有形机器可读介质上,并且被提供给各种客户或制造设施,以加载到实际制作逻辑或处理器的制造机器中。
这种机器可读存储介质可以非限制性地包括通过机器或装置所制造或形成的产品的非暂态有形布置,其中包括:诸如硬盘之类的存储介质;任何其他类型的盘,包括软盘、光盘、致密光盘只读存储器(CD-ROM)、可重写致密光盘(CD-RW)和磁光盘;半导体装置,诸如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SARAM)之类的随机存取存储器(RAM)、可擦可编程只读存储器(EPROM)、闪速存储器、电可擦可编程只读存储器(EEPROM)、相变存储器(PCM);磁卡或光卡;或者适合于存储电子指令的任何其他类型的介质。
相应地,本公开的实施例还包括非暂态有形机器可读介质,所述机器可读介质包含指令或者包含设计数据(诸如硬件描述语言(HDL)),所述设计数据定义本文所述结构、电路、设备、处理器和/或系统特征。这类实施例又可称作程序产品。
图4中所示的计算系统是可用来实现本文所述的各个实施例的计算系统的实施例的示意图。将会理解,图4中所示系统的各种组件可被组合在片上系统(SoC)架构中或者能够实现本文所提供示例和实现的功能性和特征的任何其他适当配置中。
在一些情况下,指令转换器可用来将指令从源指令集转换成目标指令集。例如,指令转换器可将指令转化(例如使用静态二进制转化、包括动态编译的动态二进制转化)、变形、模拟或者以其他方式转换成将被核心来处理的一个或多个其他指令。指令转换器可通过软件、硬件、固件或其何组合来实现。指令转换器可以在处理器上、处理器外或者部分处理器上和部分处理器外。
图5是按照本公开的实施例、对比软件指令转换器用来将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示实施例中,指令转换器是软件指令转换器,但是备选地,指令转换器可通过软件、固件、硬件或者它们的各种组合来实现。图5示出可使用x86编译器504来编译高级语言502中的程序,以生成x86二进制代码506,所述x86二进制代码可由具有至少一个x86指令集核心的处理器516本机执行。具有至少一个x86指令集核心的处理器516表示任何处理器,所述处理器能够通过兼容地执行或者以其他方式处理下列方面来执行与具有至少一个x86指令集核心的Intel处理器基本上相同的功能:(1) Intel x86指令集核心的指令集的大部分;或者(2) 针对在具有至少一个x86指令集核心的Intel处理器上运行的应用或其他软件的对象代码版本,以便取得与具有至少一个x86指令集核心的Intel处理器基本上相同的结果。x86编译器504表示一种编译器,所述编译器可操作以生成x86二进制代码506(例如对象代码),所述x86二进制代码能够在具有或没有附加链接处理的情况下在具有至少一个x86指令集核心的处理器516上执行。类似地,图5示出可使用备选指令集编译器508来编译高级语言502中的程序,以生成备选指令集二进制代码510,所述备选指令集二进制代码可由没有至少一个x86指令集核心的处理器514(例如具有执行MIPS Technologies(Sunnyvale,CA)的MIPS指令集和/或执行ARM Holdings(Sunnyvale,CA)的ARM指令集的核心的处理器)本机执行。指令转换器512用来将x86二进制代码506转换为可由没有x86指令集核心的处理器514本机执行的代码。这个转换代码不太可能与备选指令集二进制代码510是相同的,因为能够进行这个操作的指令转换器难以制作;但是,所转换代码将实现一般操作,并且由来自备选指令集的指令来组成。因此,指令转换器512表示软件、固件、硬件或者它们的组合,它们通过模拟、仿真或者任何其他进程允许处理器或者没有x86指令集处理器或核心的另一电子装置执行x86二进制代码506。
B.密码寻址
按照一些实施例,线性地址是存储器中的对象(或者对象内部的某个方面)的基址。基址的切片或段包括可被加密并且嵌入指针中的多个位。基址切片可基于秘密地址密钥以及包括上下文信息(例如存储器分配大小、对象的类型、准许等)的微调和/或指针中编码的元数据来加密(和解密)。当访问指针时可提供相同的上下文信息(和编码元数据),以便正确地对基址切片进行解密并且生成线性地址。能够通过使用基于指针的微调和秘密数据密钥在存储器位置对数据(或代码)进行加密,来实现绑定数据加密和指针。用于对数据进行加密(和解密)的基于指针的微调能够从编码指针并且潜在地从附加上下文信息来得出。特别是,能够至少部分基于基址的解密切片并且可能基于编码指针中的元数据来创建数据的基于指针的微调。在至少一些实施例中,与指针分开存储的上下文信息也可被包含在微调中。
用于对将被嵌入指针中的基址的切片进行加密和解密的不同微调的变化在一个或多个实施例中是可能的。例如,在用来对指针中的存储器地址的切片进行加密/解密的微调中,可使用不同和/或附加的上下文信息,诸如各种类型的元数据、密码上下文标识符、明文基址的部分或者它们的任何适当组合。类似地,用于对编码指针所引用的数据进行加密和解密的微调的变化也是可能的。在其他实施例中,编码指针的附加部分可用于基于指针的微调中,或者整个编码指针可用作基于指针的微调。此外,在至少一些实施例中,在用来对编码指针所引用的数据进行加密/解密的微调中,也可使用不同和/或附加的上下文信息,诸如元数据、密码上下文标识符、明文基址的切片或者它们的任何适当组合。
应当注意,虽然要理解,数据和代码能够由间接地址(本文中又称作“指针”)来引用,但是为了便于说明,本文中的描述可能仅提到数据(而不是代码)由指针来引用并且以密码方式被绑定到指针。但是应当理解,一般来说,与这种数据的存储器访问和加密/解密有关的论述意在也可适用于代码。此外,本文中对术语“对象”的使用意在表示存储器中由指针所引用的值或信息或者一组值或信息。例如,对象能够是堆分配(heap allocation)、局部或全局变量、函数、代码等。
为了示出密码计算中的基址加密的若干实施例的目的,重要的是首先要了解与数据保护和存储器安全性关联的操作和活动。相应地,下列基本信息可被看作是可正确说明本公开的基础。
密码计算能够缓解或解决上述问题的许多问题(以及更多问题)。密码计算可使进程分离、用户空间和具有全新的细粒度保护模型的传统模式是多余的。通过密码计算,保护是密码的,其中处理器和加速器同样利用秘密密钥和密码以越来越细的粒度来提供访问控制和分离。进一步,代替当前系统中的虚拟机和进程分离,通过密码计算,单独功能可成为边界,从而允许对象经由被加密的指针来共享,其中加密指针和密钥提供下至单独数据对象的受控访问。
本文所公开的密码计算实施例可利用密码寻址层的概念,其中处理器基于上下文信息(例如隐式和显式元数据、密码上下文标识符、指针中编码的元数据等)对软件分配的存储器基址(线性/虚拟地址空间,有时称作“指针”)进行解密。除了通常的明文或密文输入和密钥(例如秘密密钥616(1))之外,如本文所使用,“微调”还可表示对块密码的额外输入等等。微调包括表示值的一个或多个位。在一个或多个实施例中,微调可组成块密码的初始化向量(IV)的全部或部分。当执行对基址切片的解密时,如果用来创建微调的信息(例如上下文信息)对应于存储器分配器(例如软件分配方法)对存储器地址的原始分配,则处理器能够对基址切片正确解密并且生成完整明文基址。否则,随机地址结果可能引起错误并且被处理器所捕获。
从密码编码的指针已经生成的完整明文基址可由处理器用作对于用来对它所引用的数据(由密码编码的指针所引用的数据)进行加密/解密的数据加密密码的微调的至少部分,从而创建密码寻址层与数据/代码加密之间的密码绑定。在其他实施例中,密码地址(或地址切片)可用作数据加密密码的微调的至少部分。应当注意,用作对块密码的输入以对存储器地址进行加密/解密的微调在本文中又称作“地址微调”。类似地,用作对块密码的输入以对数据进行加密/解密的微调在本文中又称作“数据微调”。
通过将元数据密码编码为地址及其所引用数据,密码计算可降低或消除对于提供策略和上下文信息/元数据的额外独立存储器/存储装置的需要。这只因元数据的减少而能够在计算行业中节省高达数十亿美元(例如在动态随机存取存储器(DRAM)开支中)。客户能够收获存储器成本的这些节省,同时仍然获得他们对密码计算想要的安全性、安全和无差错功能性。通过允许安全推测,密码计算的基本密码分离策略可允许处理器自由推测并且提供增加的性能。
在密码计算中,在数据安全基本上与密码存储器寻址相联系的情况下,对数据的处理和细粒度密码访问控制是重要的。密码计算将全部计算向量从CPU变换到GPU、从加速器变换到FPGA等。通过密码计算,保护可以是密码的,其中处理器和加速器同样利用秘密密钥和密码以越来越细的粒度来提供访问控制和分离。进一步,代替虚拟机和进程分离,单独功能可成为边界,在指针被加密的同时共享地址空间,其中密钥提供下至到单独数据对象的受控访问。因此,能力可被交织在密码操作中以提供对数据对象的粒度访问控制,同时在系统的每一级防止缓冲器上溢、类型混淆和时间(例如释放后使用)漏洞。密码代码可本机安全地执行,而无需解释器或管理运行时来提供存储器和类型安全。存储器可从隔离域和容器移动到全局共享存储器模型,其中数据基于密码访问控制机制是可访问的,并且是难以缩放分布式准许、分页及关联控制结构。甚至文件也可安全地直接被存储在存储器中(例如在非易失性存储器模块中,诸如非易失性双列直插存储器模块(NVDIMM)),被单独加密、以密码方式确定大小以及从软件差错是不可破坏的。这可具有功能安全性、可靠性和多租户的暗示,潜在地允许更大推测性以用于改进处理性能。
密码继续变得更快和更轻。例如,高级加密标准(AES)数十年来是数据加密的支柱,使用128位块密码。同时,存储器寻址当今通常为64位。虽然本文的实施例可参照64计算机的64位存储器寻址来示出和说明,但是所公开实施例并不是要局限于此,而是能够易于适合适应32位、128位或者指针的任何其他可用位大小。同样,本文的实施例可进一步适合适应块密码的各种大小(例如64位、48位、32位、16位等,使用Simon、Speck、可微调K密码、PRINCE或者任何其他块密码)。
适合于指针加密的轻量密码近来已经出现。例如,PRINCE密码能够在3个时钟中实现,在10 nm进程中要求少至799 μm2的面积,从而在硅面积的十分之一中提供AES的等待时间的一半。密码计算可利用这些新密码以及其他密码,从而引入新的计算机架构概念,包括但不限于:(i) 密码寻址,即,在处理器使用与所引用数据(例如指针中嵌入的元数据和/或外部元数据)有关的上下文信息、地址本身的切片或者它们的任何适当组合作为微调对数据指针的加密;以及(ii) 在核心使用密码编码的指针或者其部分、非密码编码的指针或者其(一个或多个)部分、与所引用数据关联的上下文信息或者它们的任何适当组合作为数据加密的微调对数据本身的加密。可微调的多种加密模式能够用于这个目的,包括元数据(例如计数器模式(CTR)以及具有密文窃取的基于XOR-加密-XOR(XEX)的微调码本模式(XTS))。除了提供数据保密性的加密之外,其隐式完整性还可允许处理器确定是否使用正确密钥流和微调对数据正确解密。在一些块密码加密模式中,块密码创建密钥流,所述密钥流然后与输入块相组合(例如使用XOR运算),以产生加密或解密块。在一些块密码中,密钥流被馈入下一个块密码,以执行对下一个输入块的加密或解密。
“元数据墙”可表示另外取与存储器操作(诸如访问控制、对象类型/大小和版本)有关的元数据的问题。当今的计算机架构要求处理器查找元数据或者与数据有关的数据,以确定是否允许存储器访问。元数据的附加存储器访问能够影响性能,要求元数据的附加存储,以及元数据本身需要被保护,以便提供安全性。添加采取限度表(硬件会使用所述限度表来检测缓冲器上溢)的形式的元数据的一些当前解决方案已经表明对一些工作负荷具有高达4X性能影响,其中具有400%存储器开销。类似地,影子栈元数据能够实现控制流增强技术,以及存储器加标记将元数据用于版本化,并且能力添加元数据以用于检验数据类型。存储器加标记不适合于减轻类型混淆和防止未初始化使用变量。另外,虽然可使用纠错码位来降低存储器加标记的开销,但是它能够仍然要求附加装置,这能够增加成本。能力机器还可使用胖指针与指针内联地(in-line)嵌入安全元数据,从而因指针大小的加倍而施加大量存储器开销(例如在指针重度应用中为25%)。
相比之下,密码计算的一些实施例可提供被编为对密码寻址和数据、密码寻址和代码或者它们的组合的微调的上下文信息(例如指针中编码的元数据、外部元数据),从而消除通过包含这种元数据所引起的潜在性能和存储器开销。特别是,密码计算中的基址加密减轻主要类别的存储器安全漏洞,同时使编译器能够将静态计算的上下文信息嵌入程序代码中,以减少来自动态加载元数据的时间和存储器开销,因为这类开销在过去只依靠动态元数据的方式中相当大。所产生的加密基址切片可以不需要除了秘密密钥之外的附加保护,从而允许重复使用与数据相同的存储器。变得越来越重要的功能安全标准要求使用存储器安全机制来应对漏洞,例如,诸如数据破坏、越界访问、控制流违规和访问准许违规。如本文进一步论述或指示,使用加密基址的密码计算可使用计算而不是存储器、采用相同统一机制来解决无数这类存储器安全漏洞。
来看图6,图6是按照本公开的至少一个实施例、配置有安全存储器访问逻辑的示例计算装置600的简化框图。在所示示例中,计算装置600包括处理器602,所述处理器具有一组安全存储器访问逻辑650和多个寄存器612。安全存储器访问逻辑650利用与间接地址614有关的元数据,所述元数据被编码到间接地址614的未使用位中(例如64位地址的非规范位或者例如由操作系统所留出的地址的范围,使得地址范围的对应高阶位可用来存储元数据),以便保护和/或提供对间接地址614所指向的存储器位置的访问控制。例如,由安全存储器访问逻辑650所提供的元数据编码和解码能够防止间接地址614被操纵以引起缓冲器上溢,和/或能够防止程序代码访问它没有访问准许的存储器。当存储器被分配(例如由操作系统在堆(heap)中)并且按照多种不同方式的任一种(包括:通过使用诸如malloc、alloc或new之类的函数;或者经由加载器隐式地或者由编译器静态分配存储器;等等)来提供给执行程序时,调用安全存储器访问逻辑650的地址编码逻辑652。因此,指向所分配存储器的间接地址614被编码有地址元数据。
地址元数据能够包括标签值或版本号。标签值能够包括为存储器分配所生成的随机化位。随机化位可被生成为对于存储器分配是唯一的。版本号能够是确定性不同的值,诸如在时间上确定所引用的所分配存储器的当前所有权的序列号。每次为新分配的存储器创建间接地址时,序列号能够被递增预定量。标签/版本能够作为微调的部分用来对间接地址中编码的基址切片进行加密和解密。标签/版本还能够作为微调的部分用来对基址所引用的数据或代码进行加密和解密。
地址元数据还能够包括有效范围元数据。有效范围元数据允许执行程序操纵有效范围内的间接地址614的值,但是如果使用超出有效范围的间接地址614来访问存储器,则可能潜在地破坏间接地址614。作为替代或补充,有效范围元数据能够用来识别有效代码范围,例如准许程序代码访问的存储器的范围(例如编码范围信息能够用来对寄存器设置显式范围)。能够在地址元数据中编码的其他信息包括对间接地址614的访问(或准许)限制(例如,间接地址614是否能够用来写入、执行或读取所引用存储器)。
在本文将进一步描述的至少一些其他实施例中,能够在间接地址614的未使用位中编码其他元数据(或上下文信息),诸如存储器分配大小(例如通过间接地址所引用的所分配存储器的字节))、数据或代码的类型(例如通过编程语言所定义的数据或代码的类)、和/或准许(例如间接地址的读、写和执行准许)、数据或代码的位置(例如与数据或代码的大小相组合的地址)、指针本身将被存储的存储器位置、数据或代码的所有权、特权级别(例如用户或监督人)、密码上下文标识符(或者密码上下文ID)(例如每个间接地址的随机化或确定性唯一值)等。在其他实施例中,这种上下文信息可以不被编码在间接地址中,而是可在被嵌入代码流中或者经由存储器中的表查找动态访问时被静态访问。在一些实施例中,地址元数据可包括与间接地址关联的随机化位的标签,以使标签对于对手是不可预测的。对手可能设法猜测标签值,使得对手能够访问指针所引用的存储器,以及与用于生成标签值的确定性方式相比,随机化标签值可使得对手将成功猜测该值是不太可能的。在一些实施例中,指针可包括版本号,所述版本号在时间上确定所引用的分配数据的当前所有权,作为对随机化标签值的替代或补充。即使对手例如因为用于生成版本号的算法是可预测的而能够猜测存储器区域的当前标签值或版本号,对手也仍然可能因对手没有对密钥(所述密钥以后将用来对指针的对应加密部分进行解密)的访问权而无法正确生成指针的那个部分。
地址解码逻辑662对利用处理器指令(诸如MOV)的存储器读和写操作以及对涉及存储器的“使用”的其他操作(诸如,例如ADD等的具有存储器操作数的算术指令以及例如CALL/JMP等的控制转移指令等)来检验编码元数据,其中通用寄存器用作从存储器中读取值(例如加载)或者对存储器写入值(例如存储)的存储器地址。这些被认为是存储器操作数,所述操作数可指定处理器指令将访问以执行其操作的存储器中的位置。数据存储器操作数可指定存储器中将被操纵的数据的位置,而控制转移存储器操作数可指定存储器中存储控制转移的目的地地址的位置。地址解码逻辑662也可被调用,以检验用于加载间接地址所引用的数据或代码的新指令以及存储间接地址所引用的数据或代码的另一个新指令的编码元数据。这些指令能够提供作为参数的间接地址(或指针)连同上下文信息,所述上下文信息可作为微调的部分用于对间接地址中嵌入的基址切片进行解密。
示例安全存储器访问逻辑650被实施为处理器指令的部分(例如作为处理器指令集架构的部分)或者微码(例如只读存储器中存储并且由处理器602直接执行的指令)。在其他实施例中,安全存储器访问逻辑650的部分可被实施为硬件、固件、软件或者它们的组合(例如作为由计算装置600的特许系统组件642所执行的编程代码)。例如,安全存储器访问逻辑650可通过软件来实施为指令集模拟器(例如,二进制仪表工具,诸如PIN工具),所述模拟器利用如本文所公开的编码地址来模拟指令逻辑。
安全存储器访问逻辑650是由计算装置600可执行的,以例如在由计算装置600对程序(诸如用户空间软件应用)的执行期间“内联地”提供间接地址的安全性。如本文所使用,术语“间接地址”和“指针”各自可表示地址(例如虚拟地址或线性地址)等等,诸如存储其他数据或指令的存储器位置的基址。在示例中,存储其中存储数据或代码的存储器位置的编码存储器地址的寄存器可充当指针。因此,间接地址614可被实施为例如数据指针(所述数据指针表示数据的位置)、代码指针(所述代码指针表示可执行代码的位置)、指令指针或者栈指针。因此,间接地址可通过其他术语来表示,诸如“指针”、“地址指针”或“指针地址”。如本文所使用,“元数据”可表示与间接地址614有关或相关的信息等等,诸如有效数据范围、有效代码范围、指针访问准许、明文地址切片的大小(例如被编码为位的幂)、存储器分配大小、数据或代码的类型、数据或代码的位置、数据或代码的所有权、间接地址的版本、随机化位的标签、版本、软件的特权级别、密码上下文标识符等。
如本文所使用,“存储器访问指令”可表示“MOV”或“LOAD”指令或者使数据被读取、复制或者在一个存储位置(例如存储器)以其他方式被访问并且被移入另一个存储位置(例如寄存器)的任何其他指令(其中“存储器”可表示主存储器或高速缓存,例如某种形式的随机存取存储器,而“寄存器”可表示例如硬件等的处理器寄存器)或者访问或操纵存储器的任何指令等等。又如本文所使用,“存储器存储指令”可表示“MOV”或“STORE”指令或者使数据被读取、复制或者在一个存储位置(例如寄存器)以其他方式被访问并且被移入另一个存储位置(例如存储器)的任何其他指令或者访问或操纵存储器的任何指令等等。在本文的一个或多个实施例中,本文将进一步描述使用被编码有加密基址切片的指针来加载数据或代码(例如“LdEP”指令)并且使用被编码有加密基址切片的指针来存储数据或代码(例如“StEP”指令)的新指令。
但是,本文所公开的间接地址编码/解码技术并不局限于MOV或加载/存储指令。例如,控制转移指令(诸如调用和跳转指令)能够适合按照与本文针对MOV指令所述方式相似的方式来操控编码间接地址,其中代码在有效地址范围之内执行。同样,在给定由控制转移指令(例如JMP/CALL)所指定的编码地址使编码地址被用于指令指针的情况下,指令指针(例如寄存器)可能是范围限定的,因此将有效程序执行限制到有效地址范围之内(实际上,程序计数器能够正确递增,直至它达到编码范围结束)。此外,在一些架构中,任何数量的处理器指令可具有采取间接地址形式的存储器操作数(例如,诸如ADD、SUB、MUL、AND、OR、XOR等的算术运算可具有采取间接地址形式的源/目的地存储器引用,和/或它们可具有源/目的地寄存器操作数)。但是在其他架构中,存储器操作数的格式可改变。例如,寄存器可按照某种方式(例如通过加法)来组合,以产生有效地址。另外,其他参数可选地可被包含,诸如比例因子,所述比例因子将寄存器值之一(例如索引)和/或直接被相加的被嵌入指令中的常数位移值相乘。进一步应当注意,虽然说明性实施例提到“指令”,但是这类指令可被实施为例如处理器指令、操作系统例程或者计算机程序代码的其他形式。
示例安全存储器访问逻辑650包括地址编码逻辑652(所述地址编码逻辑包括元数据编码逻辑656和地址加密逻辑658)和地址解码逻辑662(所述地址解码逻辑包括地址解密逻辑664和地址形成逻辑666)。安全存储器访问逻辑650还包括加密指针指令逻辑672(“EncryptBaseAddr”指令)、专用指针指令逻辑674(“SpecializePtr”指令)、从加密指针加载指令逻辑676(“LdEP”指令)、存储到加密指针指令逻辑678(“StEP”指令)和传统存储器访问指令逻辑(例如MOV指令)。地址编码逻辑652和地址解码逻辑662可在处理器指令(例如672、674、676、678)中实施,或者被实施为独立指令或指令系列,或者被实施为由特许系统组件(诸如操作系统内核或虚拟机监测器)所执行的更高级代码,或者被实施为指令集模拟器。如下面更详细描述,地址编码逻辑652和地址解码逻辑662各自使用元数据(例如有效范围、准许元数据、存储器分配大小、类型、位置、所有权、版本、标签值、特权级别(例如用户或监督人)、密码上下文ID等的一个或多个)和秘密密钥(例如秘密密钥616(1))对间接地址614进行操作,以便在存储器分配/访问级保护间接地址614。又如下面更详细描述,数据加密逻辑(图7中所示)和数据解密逻辑(图7中所示)可使用间接地址的至少一部分和秘密密钥(例如秘密密钥616(2))对数据或代码(通过间接地址614所引用)进行操作,以便通过将数据/代码加密绑定到间接地址来保护通过间接地址614所引用的存储器位置处的数据或代码。
示例间接地址614被实施为寄存器612(例如处理器602的通用寄存器)。示例秘密密钥616(1)-616(N)可由特许系统组件642的密钥创建模块648来生成,并且被存储在寄存器612之一(例如专用寄存器或机器特定寄存器(MSR))或者是处理器602可读的另一个存储器位置中。在一些实施例中,秘密密钥616(1)-616(N)可被存储在仅由处理器可读的位置中。在其他实施例中,用来保护间接地址、数据和代码的秘密密钥616(1)-616(N)能够被存储在另一个存储器位置中,诸如在固件中、数据存储装置626或另一个数据存储装置的安全部分中或者适合于执行本文所述功能的另一种形式的存储器中。在一些实施例中,秘密密钥616(1)-616(N)可跨安全通信信道来传送,并且由可执行(诸如操作系统或虚拟机监测器,例如以下所述的特许系统组件642)来恢复。在虚拟机从一个机器迁移到另一个机器的虚拟化环境中,和/或在计算装置600上运行的虚拟机、进程或程序在使用秘密密钥来保护间接地址和所引用数据和/或代码之后开始睡眠/冬眠模式并且以后恢复的情况下,秘密密钥将需要复原和恢复。在这些情况下,秘密密钥能够在睡眠/冬眠模式之前被存储或者可能跨(安全)通信信道来传送,并且然后由可执行(诸如操作系统或虚拟机监测器,例如特许系统组件642)来检索/恢复。
应当注意,本文所述的实施例允许任何数量的秘密密钥被用于特定程序。在一个示例中,相同秘密密钥可用于程序中使用的所有间接地址。在另一个示例中,不同秘密密钥可用于与不同存储器分配关联的每个间接地址或者用于与不同存储器分配关联的存储器地址的每个预定义编组。在又一些实施例中,用于地址加密/解密的相同秘密密钥还可用于对绑定到那个地址的数据进行加密。在其他实施例中,一个秘密密钥可用于地址加密/解密,而不同秘密密钥可用于绑定到那个地址的数据加密/解密。为了便于说明,本文进一步描述的实施例引用“秘密地址密钥”或“地址密钥”以表示秘密密钥在对存储器地址的加密和解密操作中的使用,以及引用“秘密数据密钥”或“数据密钥”以表示秘密密钥在对数据进行加密和解密的操作中的使用。类似地,如本文所使用的对“秘密代码密钥”或“代码密钥”的引用意在表示秘密密钥在对代码进行加密和解密的操作中的使用。
在存储器分配操作(例如“malloc”)时(或期间),存储器分配逻辑646为缓冲器分配存储器的范围,并且返回间接地址614和元数据(例如范围、准许元数据、存储器分配大小、类型、位置、所有权、版本、标签、特权级别、密码上下文ID等的一个或多个)。例如,存储器分配逻辑646可在间接地址614中(例如在未使用/非规范位中)采用随机化位或版本号对标签进行编码,或者将元数据作为一个或多个独立参数来提供给指令,其中(一个或多个)参数指定范围、代码准许信息、存储器分配大小、类型、位置、所有权、版本、标签、特权级别(例如用户或监督人)、密码上下文ID或者它们的某个适当组合。说明性地,存储器分配逻辑646在特许系统组件642的存储器管理器模块644中实施。存储器分配逻辑646发起地址编码逻辑652。地址编码逻辑652包括元数据编码逻辑656,所述元数据编码逻辑采用诸如标签之类的元数据或者采用其他编码变化中的其他元数据(例如范围、准许元数据、存储器分配大小、类型、位置、所有权、版本、标签值、特权级别、密码上下文ID、它们的某个适当组合等)对间接地址614进行编码。地址编码逻辑652可在间接地址614的未使用部分(例如64位地址的非规范位)中存储元数据。对于某些元数据或者元数据的组合,间接地址614可在较大地址空间(例如628位地址、256位地址)中编码,以适应元数据或者元数据组合的大小。
在实施例中,地址编码逻辑652选择在间接地址614中将被加密和编码的基址的一部分(或切片)。在其他实施例中,将被加密的基址的切片可以是先验已知的(例如低32位等)。地址加密逻辑658使用秘密地址密钥616(1)和地址微调对基址的所选切片进行加密,如下面进一步描述。
在存储器访问操作(例如读、写或执行操作)时,地址解码逻辑662对先前编码的间接地址614进行解码。要这样做,地址解密逻辑664使用秘密密钥616(1)和地址微调对间接地址614中编码的基址的加密切片进行解密,如下面进一步描述。不是作为将被加密的切片的部分被包含的基址的高地址位(UAB)可被外部存储在表(例如指针上下文表621)或寄存器(例如对象上下文618)中。多个明文偏移位(例如25)被编码在间接地址614的低位中。在至少一个实施例中,它们可被初始化为零。
基于适当操作(例如地址解码逻辑662)将间接地址614返回到其原始(例如规范)形式,以便恢复间接地址614的原始值(例如真实的原始线性存储器地址)。要这样做,在至少一个可能实施例中,地址解码逻辑662可移除间接地址614的未使用位中编码的地址元数据(例如标签)(例如将未使用位返回到其原始形式)加密切片能够被解密并且与高地址位级联。结果能够基于偏移来调整。如果间接地址614成功解码,则存储器访问操作成功完成。但是,如果编码间接地址614已被操纵(例如由软件、无意地或者由攻击者),以使得其值下降到范围元数据所指示的有效范围之外(例如使缓冲器上溢),则间接地址614将因地址解密逻辑664所执行的解密进程而被破坏。被破坏间接地址将引发错误(例如,如果在地址未从分页结构/页表被映射为当前地址,则引发一般保护错误或者页错误)。可能导致错误被生成的一个条件是稀疏地址空间。在这种情形中,被破坏地址可能落在未映射页上,并且生成页错误。这样,安全存储器访问逻辑650使计算装置600能够提供针对缓冲器上溢攻击及类似利用的间接地址安全性。本文所公开的间接地址安全技术的实施例还能够用于软件调试目的或者作为访问控制机制,以防止软件访问所述软件没有准许的存储器的区域。另外,与其他缓冲器上溢缓解技术相比,所公开间接地址安全技术的实施例能够无需任何二进制修改或者无需重新编译传统代码而进行操作。在一些情形中,本文所公开的间接地址指令能够无需任何附加存储器读取/写入或者无需任何附加指令而进行操作。此外,所公开技术的实施例响应能够读取存储器并且覆写指针值的对手以及能够创建/选择任意指针值的对手。进一步,所公开技术的实施例能够从极小存储器范围缩放到极大存储器范围,或者能够通过使用不同编码指针来级联其他存储器范围之内的存储器范围。更进一步,所公开技术的实施例对动态存储器分配是有效的(例如由于以编程方式内联地创建范围编码指针的能力)。另外,所公开技术的实施例能够被扩展成提供对数据的代码块(代码位置)访问控制。进一步,通过为包含地址的元数据保留地址范围,所公开技术的实施例与x86指令集的64位版本以及ARM、MIPS、PowerPC和其他处理器架构是兼容的,包括更宽(例如大于64位)地址位架构和更小(例如32位)架构。
密码计算可应用于数据和代码,以及在至少一些实施例中,不同的密钥可用于对数据和代码的加密/解密。适应不同密钥用于数据和代码的一种可能方式是实现独立高速缓存。相应地,当独立密钥在密码计算中用于代码和数据时,能够提供用于加密指令的一个或多个高速缓存以及用于加密数据的一个或多个高速缓存。例如,“代码密钥”能够被编程以对指令高速缓存中存储并且与特定进程关联的代码进行加密和解密,以及“数据密钥”能够被编程以对数据高速缓存中存储并且与特定进程关联的数据进行加密和解密。能够对于与不同进程关联的代码和数据对不同的代码密钥和数据密钥进行编程。
在图6的示例中,处理器602包括指令高速缓存682(所述指令高速缓存可与图3B的指令高速缓存334、图4的高速缓存471或481或者存储器432或434相似)和数据高速缓存(所述数据高速缓存可与图3B的数据高速缓存单元374、图4的高速缓存471或481或者存储器432或434相似)。在至少一个实施例中,代码和数据高速缓存682和684可以是L1高速缓存。指令高速缓存682能够包括控制电路模块,以存储加密代码,并且允许采用每进程的控制电路模块中编程的代码密钥对加密代码的解密。数据高速缓存684能够包括控制电路模块,以存储加密数据,并且允许采用每进程的控制电路模块中编程的数据密钥对加密数据的解密。指令高速缓存和数据高速缓存的控制电路模块(所述控制电路模块可与图4的IMC 472、482相似)可与存储控制器电路模块(例如472、482)相组合或者分离(完全或部分)。
在一个或多个实施例中,可在计算装置600中配置用于保护密码计算中的密钥的安全引擎692和密钥管理硬件694。安全引擎692和密钥管理硬件694可以是逻辑上独立的实体或者被组合为一个逻辑和物理实体。这个实体配置成提供采取加密密钥形式的代码和数据密钥,从其中能够对代码(或数据密钥)进行解密,或者提供唯一密钥标识符,从其中能够得出代码(或数据)密钥。安全引擎692和密钥管理硬件694可被实施为电路模块、固件、软件或者它们的任何适当组合。在至少一些实施例中,安全引擎692和/或密钥管理硬件694可形成处理器602的部分。在至少一些实施例中,安全引擎692和/或密钥管理硬件694可被实施为特许状态中执行的置信固件组件。
在一些实施例中,还可提供补充硬件(HW)存储器696以用于存储密钥。在一些示例中,补充HW存储器696可被实现为新高速缓存或内容可寻址存储器(CAM)。在一个或多个实现中,至少当密钥当前未被编码在指令和数据高速缓存682和684的高速缓存电路模块中时,补充HW存储器696可用来存储加密代码和数据密钥或者所得出代码和数据密钥。
所公开技术的一些实施例利用地址解码逻辑的方面来支持传统代码兼容性,如以下所述。如本文所使用,“传统代码”可表示被设计成在早期或者现在过时或者不再被支持的计算机架构上进行工作的计算机代码的版本。例如,传统代码可包括最初为32位处理器所开发但是现在运行于64位处理器的软件。“传统代码”还表示在没有使用或适合使用专用指令以用于如本文所述对间接地址进行编码和加密的情况下所设计的计算机代码的版本。
现在更详细参照图6,计算装置600可被实施为用于执行本文所述功能的任何类型的电子装置。例如,计算装置600非限制性地可被实施为智能电话、平板计算机、可佩戴计算装置、膝上型计算机、笔记本计算机、移动计算装置、蜂窝电话、手机、消息传递装置、车辆远程信息处理装置、服务器计算机、工作站、分布式计算系统、多处理器系统、消费电子装置和/或配置成执行本文所述功能的任何其他计算装置。如图6中所示,示例计算装置600包括至少一个处理器602,所述处理器采用安全存储器访问逻辑650所实施。
计算装置600还包括存储器620、输入/输出子系统624、数据存储装置626、显示装置628、用户接口(UI)子系统630、通信子系统632、至少一个用户空间应用634和特许系统组件642(所述特许系统组件说明性地包括存储器管理器模块644和密钥创建模块648)。在其他实施例中,计算装置600可包括其他或附加组件,诸如移动和/或固定计算机中常见的组件(例如各种传感器和输入/输出装置)。另外,在一些实施例中,示例组件的一个或多个可被结合在另一个组件中或者以其他方式形成另一个组件的一部分。计算装置600的组件的每个可被实施为软件、固件、硬件或者软件和硬件的组合。
处理器602可被实施为能够执行本文所述功能的任何类型的处理器。例如,处理器602可被实施为多核处理器、其他多CPU处理器或处理/控制电路或者多个多样处理单元或电路(例如CPU和GPU等)。处理器602具有多个寄存器612,所述寄存器包括通用寄存器(GPR)、专用寄存器(SPR)和/或模型特定寄存器(MSR)。间接地址614和秘密密钥616(1)-616(N)可被存储在寄存器612中。对象上下文618也可被存储在寄存器中。对象上下文618可包括未被编码在对象的间接地址(例如614)中的最高有效位或“高地址位(例如57位间接地址中的高22位)的切片。如本文将进一步描述,在这种情形中,间接地址能够引用静态可寻址存储器区域(例如快速访问存储器622)中存储的数据。对于数据被存储在静态可寻址存储器区域中的一些情形,能够从间接地址来生成数据的线性地址,而无需从例如动态可访问表中动态得到高地址位或其他上下文信息。而是能够从寄存器中得到高地址位,以及能够在程序代码中静态提供其他上下文信息。因此,与要求上下文信息的动态查找的其他存储器中存储的数据相比,能够更快地访问静态可寻址存储器区域中存储的数据。但是可存在一些情况,其中即使数据被存储在静态可寻址区域中,也动态检索其他上下文信息。当期望在静态可寻址区域中存储某些对象但是编译器无法静态提供那些对象的上下文信息时,这可能发生。
处理器密钥617(本文中又称作‘硬件密钥’)可用于各种加密、解密和/或哈希(hashing)操作,并且可在处理器602的硬件中配置为安全密钥。处理器617例如可被存储在熔丝中,被存储在只读存储器中,或者通过产生随机化位的一致集合的物理不可克隆函数来生成。一般来说,处理器密钥617可在硬件中配置,并且是处理器602已知的,但不是特许软件(例如操作系统、虚拟机管理器(VMM)、固件)或者非特许软件已知或者以其他方式可用的。
计算装置600的存储器620可被实施为能够执行本文所述功能的任何类型的易失性或者非易失性存储器或数据存储装置。在操作中,存储器620可存储计算装置600的操作期间所使用的各种数据和软件以及操作系统、应用、程序、资料库和驱动程序。在一个或多个实施例中,存储器620包括指针上下文表621,所述指针上下文表可包含多个表条目。指针上下文表621的位置可被指示为由寄存器所定义的物理可寻址表基(physical-addressable table base),例如,诸如模型特定寄存器(MSR)。每个表条目能够包括与指向存储器中的对象的密码编码指针关联的上下文信息。在一个实施例中,上下文信息可包括大小元数据(例如指示对象的存储器分配大小的值)、类型元数据(例如对象的类型或类)和准许元数据(例如指向对象的指针的准许)。一个或多个表条目还可包含与密码编码指针关联的高地址位(UAB)。例如当高地址位被存储在寄存器(例如618)中时,一个或多个其他表条目可对于与密码编码指针关联的高地址位编码零。在至少一个实施例中,指针上下文表621可通过指向对象的密码编码指针的加密切片来索引。每个表条目能够通过相应密码编码指针的加密切片来索引。但是,在其他实施例中,任何适当技术可用来索引或者以其他方式将表条目映射到其相应指针,包括但不一定局限于索引、其他指针、哈希表或者表示表条目与其相应指针之间的关系、连接、链接或关联的任何其他技术。此外,也可使用其他索引。例如,充分唯一的密码编码指针的任何部分可能用来索引指针上下文表。例如,指针上下文表621可能通过密码编码指针的至少一部分(诸如基址的加密切片、基址的加密切片加上标签部分、整个密码编码指针等)来索引。但是应当注意,只要指针未被软件修改,整个密码编码指针作为索引就可能是适当的。例如,如果软件将指针中的偏移更新成指向对象内的字段,则所述指针将发生变化。在这种情况下,通过整个指针来索引表可能阻止表条目被找到。能够使用新指令集架构(ISA)从用户空间来管理所述表,如本文进一步描述。但是,表中的冲突是可能的,因此操作系统负责操控这类发生事件,如本文将进一步描述。
存储器620的某些区域可被定义为快速访问存储器622。快速访问存储器622表示寄存器(例如612)能够指定存储器的区域的高地址位的所述区域。例如,4GB的存储器区域可被指定为快速访问存储器,其中数据(或代码)的4GB能够被存储,并且存储器访问能够由指令来执行,所述指令提供适当上下文信息(例如存储器分配大小、类型、准许)并且从寄存器(例如对象上下文618)而不是存储器中的表(例如指针上下文表621)来拉取高地址位。虽然快速访问存储器区域可以是如所示的4GB,但是任何其他适当存储器大小可按照特定需要和实现被指定为快速访问存储器。例如,如果对象被对齐到8字节边界,则快速访问存储器区域可以是32GB。
存储器620例如经由I/O子系统624在通信上耦合到处理器602。I/O子系统624可被实施为电路模块和/或组件,以促进与处理器602、存储器620和计算装置600的其他组件的输入/输出操作。例如,I/O子系统624可被实施为或者以其他方式包括存储控制器中枢、输入/输出控制中枢、固件装置、通信链路(即,点对点链路、总线链路、导线、缆线、光导、印刷电路板迹线等)和/或促进输入/输出操作的其他组件和子系统。在一些实施例中,I/O子系统624可形成片上系统(SoC)的一部分,并且连同处理器602、存储器620和/或计算装置600的其他组件一起被结合在单个集成电路芯片上。
数据存储装置626可被实施为配置用于数据的短期或长期存储的任何类型的一个或多个物理装置,例如,诸如存储器装置和电路、存储卡、硬盘驱动器、固态驱动器、闪速存储器或其他只读存储器、作为只读存储器和随机存取存储器的组合的存储器装置或者其他数据存储装置。
显示装置628可被实施为能够显示数字信息的任何类型的显示器,诸如液晶显示器(LCD)、发光二极管(LED)、等离子体显示器、阴极射线管(CRT)或另一种类型的显示装置。在一些实施例中,显示装置628可被耦合到触摸屏或另一人机接口装置(human computerinterface device),以允许与计算装置600的用户交互。显示装置628可以是用户接口(UI)子系统630的部分。用户接口子系统630可包括促进与计算装置600的用户交互的多个附加装置,包括物理或虚拟控制按钮或按键、话筒、扬声器、单向或双向照相机和/或摄像机等。用户接口子系统630还可包括诸如运动传感器、接近传感器和眼球跟踪装置之类的装置,所述装置可配置成检测、捕获和处理涉及计算装置600的各种其他形式的人类交互。
计算装置600进一步包括通信子系统632,所述通信子系统可被实施为能够实现计算装置600与其他电子装置之间的通信的任何通信电路、装置或者它们的集合。通信子系统632可配置成使用任一个或多个通信技术(例如无线或有线通信)及关联协议(例如以太网、BluetoothTM、Wi-FiTM、WiMAX、3G/LTE等)来实行这种通信。通信子系统632可被实施为网络适配器,包括无线网络适配器。
示例计算装置600还包括多个计算机程序组件,诸如用户空间应用634和特许系统组件642。用户空间应用634可被实施为任何计算机应用(例如软件、固件、硬件或者它们的组合),所述计算机应用经由例如显示装置628或UI子系统630与最终用户直接或间接地交互。用户空间应用634的一些示例包括字操控器、文档查看器/读取器、万维网浏览器、电子邮件程序、消息传递服务、计算机游戏、照相装置和视频应用等。特许系统组件642其中还促进用户空间应用634与计算装置600的硬件组件之间的通信。特许系统组件642的部分可被实施为能够执行本文所述功能的任何操作系统,诸如Microsoft Corporation的WINDOWS的某个版本、Google, Inc.的ANDROID等。作为替代或补充,特许系统组件642的一部分可被实施为能够执行本文所述功能的任何类型的虚拟机监测器(例如类型I或类型II管理程序)。
示例特许系统组件642包括多个计算机程序组件,诸如存储器管理器模块644和密钥创建模块648。特许系统组件642的组件的每个可被实施为软件、固件、硬件或者软件和硬件的组合。例如,特许系统组件642的组件可被实施为操作系统内核、虚拟机监测器或管理程序的模块。存储器管理器模块644将存储器620的部分分配给计算装置600上运行的各种进程(例如,作为虚拟存储器地址的范围)。存储器管理器模块644被实施为例如加载器、存储器管理器服务或堆管理服务。密钥创建模块648创建秘密密钥616(1)-616(N)(例如秘密地址密钥、秘密数据密钥、秘密代码密钥),并且将它们写到处理器602对其具有读访问权的一个或多个寄存器(例如专用寄存器)。为了创建秘密密钥,密钥创建模块648可执行例如随机数发生器或者能够生成能够执行本文所述功能的秘密密钥的另一个算法。
应当注意,无数方式可用来生成或得到本文所公开实施例的密钥。例如,虽然密钥创建模块648示为作为计算装置600的部分,但是可能使用任何适当认证进程从任何适当外部源来得到一个或多个秘密密钥,以将密钥安全地传递到计算装置600,这可包括作为那些进程的部分来生成密钥。此外,特许系统组件642可以是计算装置600中或者安全地连接到计算装置600的置信执行环境(TEE)、虚拟机、处理器602、协处理器(未示出)或者任何其他适当硬件、固件或软件的部分。此外,密钥可以是“秘密的”,这意在表示其值被保持为隐藏、不可访问、变模糊或者以其他方式被保护以免受未经授权行动者(例如软件、固件、机器、外来硬件组件和人类)影响。
图7是示出按照本公开的至少一个实施例、图6的安全存储器访问逻辑的应用的简化环境图。在一些实施例中,计算装置600可在操作期间建立环境700(例如本机和/或虚拟运行时或“执行”环境)。示例环境700中所示的各种模块可被实施为硬件、固件、软件或者它们的组合。在环境700中,用户空间应用634(或特许系统组件642,例如在加载用户空间应用634中)可在计算装置600的操作期间不时地发出存储器分配702。存储器分配702可在被传递到处理器602之前由特许系统组件642的存储器分配逻辑646根据需要来转化(例如编译或解释)。
在处理器602中,响应于存储器分配702(例如代替环境“malloc”指令/函数调用)而执行地址编码逻辑652。在一个或多个实施例中,存储器管理器模块644(或存储器分配器)可包括堆分配器或栈分配器,所述堆分配器或栈分配器执行加密指针指令(EncryptBaseAddr),所述加密指针指令执行地址编码逻辑652连同与对象相对于区域的限度(在所述限度内分配对象)的大小相关的附加校验以及用于在某些情形中存储上下文信息的表管理。另外,专用指针指令(SpecializePtr)也可执行地址编码逻辑652连同确保对象被包含在另一个指针所分配的存储器之内并且对专用指针所准予的准许不大于对另一指针所准予的准许的附加校验。
尽管常规malloc指令只分配存储器并且返回(不安全)指针,但是地址编码逻辑652对包括元数据705(诸如随机化位的标签)的间接地址704进行编码,或者在其他编码中,其他元数据(例如范围准许信息、存储器分配大小、类型、位置、所有权、版本、特权级别、密码上下文ID或密钥或者它们的任何组合等)可被包含,并且返回编码间接地址706。元数据可按照明文格式被嵌入间接地址或指针(例如,标准64位寄存器或者诸如628位或756位之类的放大寄存器,以适合更多元数据)中、被嵌入另一个操作数(所述操作数被提供给指针加密/解密指令和数据访问指令)内、被存储在存储器中或控制寄存器中的表中或者经由它们的任何组合来提供。例如,标签值可被嵌入指针中,以及密码上下文ID可被存储在控制寄存器中。
类似地,用户空间应用634或特许系统组件642可不时地发出存储器存储711,所述存储器存储可由处理器602作为处理器指令来操控,其从寄存器612(或另一存储单元)进行读取并且使用间接地址614对存储器620或高速缓存进行写入(例如STORE、MOV指令)。使用STORE指令作为示例,仅在成功执行地址解码逻辑662以对编码间接地址706进行解码并且还基于数据微调和秘密数据密钥616(2)成功执行数据加密逻辑679以对将被存储在间接地址704所指向的存储器位置的数据进行加密之后,存储器存储指令逻辑670才存储数据。地址解码逻辑662的成功执行基于地址解密逻辑664的成功执行,所述地址解密逻辑使用地址微调和秘密地址密钥616(1)对编码间接地址706的加密地址切片进行解密。
类似地,用户空间应用634或特许系统组件642可不时地发出存储器加载720,所述存储器加载可由处理器102作为处理器指令来操控,其从存储器620进行读取并且使用间接地址614对寄存器612进行写入(例如LdEP或MOV指令)。使用从加密指针LOAD(LdEP)指令作为示例,仅在成功执行地址解码逻辑662以对编码间接地址706进行解码之后,从加密指针加载指令逻辑676才执行存储器访问。地址解码逻辑662的成功执行基于地址解密逻辑664的成功执行,所述地址解密逻辑使用地址微调和秘密地址密钥616(1)对编码间接地址706的加密地址切片进行解密。一旦返回间接地址704并且访问存储器620以从间接地址704所指向的存储器位置来加载数据,可通过基于数据微调和秘密数据密钥616(2)执行数据解密逻辑677,来对所加载数据进行解密。数据解密逻辑677的成功执行取决于用来创建数据微调以对数据进行解密的间接地址的部分以及用来创建数据微调的附加元数据(若有的话)是否对应于间接地址所指向的存储器位置的原始分配。
虽然地址解码逻辑662在图7中示为与存储到加密指针指令逻辑678和从加密指针加载指令逻辑676分离的模块,但是应当理解,地址解码逻辑662能够被结合到指令逻辑678和/或676中,或者能够被实施为独立指令集。进一步,应当理解,地址解码逻辑662能够被结合到其他类型的指令中或者通过其他类型的指令来引用,作为对LdEP、StEP和MOV指令的替代或补充(例如具有存储器操作数、调用、JMP等的算术指令)。例如,控制转移指令(诸如调用和JMP)能够把要执行的代码的编码指针地址加载到处理器的程序计数器寄存器中(例如指令指针)(例如RIP,其中RIP是64位代码中的指令指针寄存器)。指令指针寄存器然后能够由处理器来查询,并且因此当前程序计数器地址将是编码形式(对当前程序计数器位置的偏移)。
如果地址解码逻辑662对编码间接地址706成功解码(这包括地址解密逻辑664对编码间接地址中的加密地址切片成功解密),则原始间接地址704被返回给特许系统组件642,并且存储器访问完成,或者程序执行开始于新程序计数器位置(在控制流变化的情况下)。如果编码间接地址706没有成功解码,则引发错误。基于存储器存储711的成功完成或失败,适当检验或错误信号713被返回给用户空间应用634。类似地,基于存储器加载720的成功完成或失败,适当检验或错误信号722被返回给用户空间应用634。
按照加密基址(EBA)格式的密码编码指针
图8是示出与使用按照加密基址(EBA)格式的密码编码指针的存储器分配和访问关联的软件单元、硬件和数据流的附加细节的简化流程图800。采用基址的加密切片以及与基址处存储的数据关联的至少一项元数据对具有EBA格式的指针进行编码。在一个或多个实施例中,诸如计算装置600的计算装置包括软件单元810、硬件820和数据流830。软件单元810包括存储器分配器812、存储器分配器调用功能814和存储器访问功能816。硬件820包括指针密码和编码单元822、数据高速缓存单元824和数据密码单元826。数据流830包括原始指针831、非类型化(untyped)上下文832、加密非类型化指针833、类型化(typed)上下文834、加密类型化指针835、加密数据837和解密数据838。
加密指针(EncryptBaseAddr)指令802可由存储器分配器812来调用。例如,存储器分配器调用功能814可通过为对象请求存储器(例如malloc指令)来调用存储器分配器812,以及存储器分配器812可包括调用EncryptBaseAddr指令802的堆分配器或栈分配器。EncryptBaseAddr指令802使指针密码和编码单元822使用非类型化上下文832对原始指针831的切片进行加密。原始指针831作为EncryptBaseAddr指令802的寄存器操作数被传递,并且表示对象将被存储在其中的所分配存储器的明文基址。将被加密的基址的切片包括地址中的预定位(例如位3至34)。基址中的高位可被外部存储(例如在存储器中或寄存器中的表中)。非类型化上下文832也作为寄存器操作数被传递,并且能够包括例如上下文信息,诸如对象的存储器分配大小和准许元数据。非类型化上下文832不包括对象的类型元数据。非类型化上下文832能够用作对加密算法(例如块密码)的微调输入,以对原始指针831的切片(例如明文基址)进行加密。指针密码和编码单元822还可生成随机化位的标签,所述标签能够用作基址切片的微调的部分。在至少一个实施例中,指针密码和编码单元822通过级联标签、加密基址切片和指针833中的偏移,来生成加密非类型化指针833。偏移可被初始化为零。
存储器分配器调用功能814能够基于先前编码的指针(诸如加密非类型化指针833)来调用专用指针指令804(SpecializePtr)。在至少一个实施例中,加密非类型化指针833、非类型化上下文832和类型化上下文834能够作为SpecializePtr指令804的寄存器操作数被传递。SpecializePtr指令804使指针密码和编码单元822使用原始上下文(例如非类型化上下文832)对加密非类型化指针833的加密基址切片进行解密。基址的高地址位可被检索并且与解密基址切片级联。如果解密基址切片表示原始基址的位3至34(即,因为地址为8字节对齐),则被初始化为“0”的三个位在解密基址切片的末尾被级联,以得到原始基址。加密非类型化指针833的偏移能够被加入原始基址,以得到所分配存储器内的子区域(或者所分配存储器的相同区域)的专用基址,其中所述子区域的专用指针将被生成。例如,如果偏移已经改变,则专用地址将指向所分配存储器内的位置。如果偏移尚未改变,则专用地址将指向与原始基址相同的位置。例如,当期望对相同对象的受限访问时,这可能是期望的,因为对专用地址能够减少准许。一旦专用地址被计算,新上下文(例如类型化上下文834)能够用作对加密算法(例如块密码)的微调输入,以对特殊地址的切片进行加密。在至少一个实施例中,类型化上下文834包括存储器分配大小、准许和对象的类型。与非类型化上下文832中的存储器分配大小相比,类型化上下文834中的存储器分配大小可以是相同的或者更小。与非类型化上下文832中的准许元数据相比,类型化上下文834中的准许元数据可以是相同的或者更小。指针密码和编码单元822还可生成随机化位的标签,所述标签能够用作专用地址切片的微调的部分。用来访问存储器的相同区域的指针的标签应当匹配,以确保正确数据解密。在其他实施例中,改为可使用加密非类型化指针833中编码的标签。在至少一个实施例中,指针密码和编码单元822通过级联标签(新生成的标签或者在指针833中编码的原始标签)、加密专用地址切片和指针835中的偏移,来生成加密类型化指针835。偏移可被初始化为零。
在采用基址切片或专用地址切片、元数据(例如标签)和偏移对指针进行密码编码之后,密码编码指针可用来访问所述指针所引用的存储器位置中存储的对象。因此,加密非类型化指针833和加密类型化指针835均可能用来基于其相应准许来访问存储器的相应位置。为了说明的目的,图8进一步示出诸如加密类型化指针835的专用指针如何能够用来访问存储器。例如,存储器访问功能816能够基于先前编码的指针(诸如加密类型化指针835)来调用从加密指针加载指令806(LdEP)。在至少一个实施例中,加密类型化指针833和类型化上下文834能够作为LdEp指令806的寄存器操作数被传递。LdEP指令806使指针密码和编码单元822使用类型化上下文834作为微调对加密类型化指针835的加密专用地址切片进行解密并生成原始指针836。专用地址的高地址位(它们与基址的高地址位置相同)可被检索并且与解密专用地址切片级联。如果解密专用地址切片表示原始专用地址的位3至34(即,因为专用地址为8字节对齐),则被初始化为“0”的三个位在解密专用地址切片的末尾被级联,以得到原始专用地址。加密类型化指针835的偏移能够被加入原始专用地址,以得到原始指针836,所述原始指针是将被访问的存储器中的位置。如果不存在偏移,则原始指针836表示原始专用地址。
一旦原始指针836被生成,LdEP指令806执行访问控制校验,诸如边界和准许。如果访问控制校验成功,则来自预期存储器位置的对象(或数据)被加载到目的地操作数并且被解密。原始指针836用来将数据从存储器(诸如从数据高速缓存单元824)加载到寄存器中。在至少一个实施例中,使用微调对被访问的数据进行解密,所述微调将加密类型化指针835绑定到数据。例如,用来对数据进行加密的微调可包括原始指针836以及在加密类型化指针835中编码的标签。在一个或多个实施例中,附加上下文也可用于微调中,包括例如密码上下文标识符(或密码上下文ID)(例如被指配给指针的64位随机或确定性唯一值)和/或其他可变长度元数据(例如范围、位置、所有权、版本、特权级别等)。LdEP指令806使数据密码单元826使用相同微调对加密数据837进行解密,以生成解密数据838。地址元数据可包括与间接地址关联的随机化位的标签,以使标签对于对手是不可预测的。对手可能设法猜测标签值,使得对手能够访问指针所引用的存储器,以及与用于生成标签值的确定性方式相比,随机化标签值可使得对手将成功猜测该值是不太可能的。在一些实施例中,间接地址可包括版本号(或另一确定性值),所述版本号在时间上确定所引用的分配数据的当前所有权,作为对随机化标签值的替代或补充。即使对手能够例如因为用于生成版本号的算法是可预测的而猜测存储器的区域的当前标签值或版本号,对手也仍然可能因对手没有对密钥(所述密钥以后将用来对指针的那个部分进行解密)的访问权而无法正确生成指针的对应加密部分。
本公开的一些实施例涉及用于各种密码计算操作的指令和处理逻辑。图9是按照本公开的实施例、用于各种密码计算操作的指令和逻辑的系统900的框图。
密码计算(CC)中央处理器(CPU)可具有多个密码引擎,以对代码进行加密/解密,对被传输到存储器高速缓存以及从存储器高速缓存所传输的数据进行加密/解密,对指针进行编码/解码,并且认证代码和数据的完整性。这些引擎可要求密码密钥和/或微调,它们需要被安全存储,以防止在置信计算库(TCB)(诸如应用以及可能的操作系统(OS))外部的暴露。例如,密码密钥和/或微调可被存储在内部硬件寄存器中。在一个或多个实施例中,这些密钥对于相同硬件上运行的每个应用租户(例如应用)将是唯一的,以避免租户之间的数据泄漏。硬件将基于哪一个租户正运行被编程有正确密钥。每个并行硬件单元(例如核心)能够具有它自己的密钥寄存器集合。
系统900可包括处理器,其中具有一个或多个核心、SoC、集成电路或其他机制。例如,系统900可包括具有核心904的处理器901。虽然核心904在图9中作为示例示出和描述,但是可使用任何适当机制,包括处理器901内的多个核心。核心904可包括用于执行密码计算操作的任何适当机制,包括涉及编程128位指针密钥、数据密钥和代码密钥、在进程之间切换密钥、制作可路由指针、压缩/解压缩指针、转移对象的指针所有权以及从一个地址到不同地址的存储器移动/反转数据的那些机制。在一个实施例中,这类机制可在硬件中被实现。核心904可完全或部分由图1-8中描述的元件来实现。
在核心904上将被执行的指令可被包含在指令流902中。指令流902可由例如编译器、及时解释器或另一适当机制(可能或者可能不被包含在系统900中)来生成,或者可由产生指令流902的代码的起草人(drafter)来指定。例如,编译器可获取应用代码,并且生成采取指令流902的形式的可执行代码。指令可由核心904从指令流902来接收。指令流902可按照任何适当方式被加载到核心904。例如,将被核心904执行的指令可从存储装置、从其他机器或者从其他存储器(诸如主存储器930)来加载。指令可到达常驻存储器(诸如RAM)并且在常驻存储器中是可用的,其中从存储装置中取指令,以将被核心904执行。可由例如预取器或取单元(诸如指令取单元908)从常驻存储器中取指令。
在一个实施例中,指令流902可包括来自指令集架构(ISA)的指令,其具有基于相应指令定义的特定格式932。一般来说,本机指令直接由CPU来执行,并且包含操作码和一至三个操作数。示例指令格式932可包括具有第一操作码A和一个操作数的第一指令格式、具有第二操作码B和两个操作数的第二指令格式以及具有第三操作码C和三个操作数的第三指令。操作码包含信息,所述信息通知CPU关于什么操作将被执行。操作数告知CPU关于什么数据在将被执行的操作中将被处理。操作数的类型能够包括立即数(immediate)、寄存器和存储器。立即操作数是将被指令使用的常数值。寄存器操作数可以是将被访问的寄存器的名称/标识符。寄存器可包含将被访问的数据或者指向存储将被访问的数据的存储器位置的指针。存储器操作数可以是对存储器中包含数据或者指向存储将被访问的数据的存储器位置的指针的位置的引用。
本文所公开的一个或多个实施例包括执行密码计算操作的指令。例如,指令流902可包括“KCALL”指令和“KRET”指令,用于能够实现对于能够由多个进程安全共享的存储器中的资料库代码的单个实例的安全资料库调用和返回。资料库代码的加密进程密钥(或代码密钥)可作为操作数从调用程序被传递到指令高速缓存(例如334、471、481、682),以用于对资料库代码中的指令进行解密以供执行。可被实现的其他指令包括但不一定局限于:“EnterSecureImage”指令,用于请求加密代码图像的执行;“VerifyHash”指令,用于检验代码密钥是有效的;以及“SendUIPI”指令,用于把来自进程的中断直接发送到处理器。本文将进一步定义和描述针对这些指令的每个所执行的各种操作数和特定操作。
核心904可包括前端906,所述前端可包括指令取管线级(诸如指令取单元908)和解码管线级(诸如决定单元910)。前端906可从指令流902接收指令并且使用解码单元910对指令进行解码。解码指令可由管线的分配级(诸如分配器914)来分发、分配和调度以供执行,并且被分配给执行单元916以供执行。
执行单元916可按照任何适当方式被配置有密码计算引擎和/或微码917,以使密码计算指令扩展能够被执行。在一个非限制性示例中,核心904可包括用于密码计算原语(例如对密码编码指针进行编码/解码、对密码编码指针进行加密/解密等)的一些专用执行单元,而一些执行单元包括微码,以实现总体密码计算指令流。
将被核心904所执行的一个或多个特定密码计算指令可被包含在为由核心904的执行所定义的资料库中。在另一个实施例中,特定密码计算指令可由核心904的特定部分作为目标。例如,核心904可隐式地或者通过解码(例如经由解码单元910)以及上述指令之一的执行或尝试执行来识别这些扩展密码计算操作之一将被执行。在一些实现和情形中,扩展密码计算指令(或者所述指令的(一个或多个)特定操作)可被定向到执行单元916的特定一个执行单元,以用于执行所述指令(或者所述指令的(一个或多个)特定操作)。例如,指令(或者所述指令的特定操作)可被定向到专用执行单元,所述专用执行单元执行某个密码原语。
执行密码计算指令的执行单元916可按照任何适当方式来实现。在一个实施例中,执行单元916可包括或者可在通信上耦合到寄存器、补充处理器存储器926和其他存储器元件,以存储执行一个或多个密码计算操作所需的信息。在一个实施例中,执行单元916可包括执行密码计算操作的电路模块。
一般来说,在密码计算指令的执行期间,对通常被存储在存储器中的数据或者对附加指令(包括驻留在主存储器930中的数据或指令)的访问可通过存储器子系统920进行。此外,来自执行的结果可被存储在存储器子系统920中,并且随后被移动到主存储器930或者另外某个更长的存储存储器。存储器子系统920可包括例如存储器、RAM或高速缓存层次结构,所述高速缓存层次结构可包括高速缓存924,诸如一个或多个第1级(L1)高速缓存或第2级(L2)高速缓存,其中的一些可由多个核心904或处理器901来共享。
密码计算指令的执行还可涉及密码编码指针以及与密码计算功能相关的其他信息,例如,诸如秘密密钥、微调、上下文信息和/或要求认证的信息的凭证。密码编码指针通常被存储在寄存器922中。寄存器922可被包含在核心904中,并且还可用来存储与密码计算相关的其他信息。在一个或多个实施例中,每核心的专用寄存器923可被提供,以存储用于密码操作的秘密密钥和/或微调。处理器901还可包括补充处理器存储器926,诸如内容可寻址存储器(CAM),所述存储器可专用于存储与密码计算相关的信息。例如,专用补充处理器存储器926可以是专用高速缓存,所述专用高速缓存不是软件可访问的。因此,诸如密钥、微调、上下文信息、凭证和/或可能的密码编码指针之类的信息可被存储在专用补充处理器存储器926中。在其他实施例中,用来保护密码编码指针、数据和/或代码(以及可能的与密码计算相关的其他信息)的密钥能够被存储在另一个存储器位置(诸如固件)中、主存储器930或另一个存储装置的安全部分或者适合于执行本文所述功能的任何其他形式的安全存储器中。
在由执行单元916的执行之后,指令可由撤销单元918中的回写级或撤销级来撤销。这种执行管线化的各种部分可由一个或多个核心来执行。
图10为了说明的目的而提供在边缘计算环境之中所部署的分布式计算的层的进一步抽象概述。在更通用级,边缘计算系统可被描述成包含边缘云中进行操作的任何数量的部署,所述部署提供来自客户端和分布式计算装置的协调。
图10一般示出用于向多方利益相关者实体提供边缘服务和应用的边缘计算系统,所述多方利益相关者实体如分布在如分布于网络的层的一个或多个客户端计算节点1002、一个或多个边缘网关节点1012、一个或多个边缘聚合节点1022、一个或多个数据中心1032和全球网络云1042之间。可在或代表电信服务提供商(“telco”或“TSP”)、物联网服务提供商、云服务提供商(CSP)、企业实体或者任何其他数量的实体来提供边缘计算系统的实现。
边缘计算系统的每个节点或装置位于与层1010、1020、1030、1040、1050对应的特定层。例如,客户端计算节点1002各自位于端点层1010,而边缘网关节点1012的每个位于边缘计算系统的边缘装置层1020(本地级)。另外,边缘聚合节点1022(和/或雾装置1024,若采用雾联网配置1026或者在雾联网配置1026之间被布置或操作)位于网络接入层1030(中间级)。雾计算(或“雾化”)一般表示云计算到企业网络的边缘的扩展,通常在协调分布式或多节点网络中。雾计算的一些形式代表云计算位置来提供终端装置与云计算数据中心之间的计算、存储和联网服务的部署。雾计算的这类形式提供符合如本文所述的边缘计算的操作;本文所述的边缘计算方面的许多方面可适用于雾网络、雾化和雾配置。进一步,本文所述的边缘计算系统的方面可配置为雾,或者雾的方面可被集成到边缘计算架构中。
核心数据中心1032位于核心网络层1040(例如地区或地理中心级),而全球网络云1042位于云数据中心层1050(例如国家或全球层)。“核心”在图10的上下文中的使用是作为用于由多个边缘节点或组件可访问的集中式网络位置—在网络中更深—的术语来提供的;但是“核心”不一定表示网络的“中心”或最深位置。相应地,核心数据中心1032可位于边缘云之内、位于边缘云处或位于边缘云附近。
虽然在图10中示出客户端计算节点1002、边缘网关节点1012、边缘聚合节点1022、核心数据中心1032、全球网络云1042的说明性数量,但是应当理解,边缘计算系统可在每个层包括更多或更少的装置或系统。另外,如图10中所示,每个层1010、1020、1030、1040、1050的组件的数量一般在每个更低级(即,当移动到更靠近端点时)增加。因此,一个边缘网关节点1012可服务于多个客户端计算节点1002,以及一个边缘聚合节点1022可服务于多个边缘网关节点1012。
按照本文所提供的示例,每个客户端计算节点1002可被实施为能够作为数据的生产者或消费者进行通信的任何类型的端点组件、装置、电器或“事物”。进一步,如边缘计算系统1000中所使用的标签“节点”或“装置”不一定意味着这种节点或装置以客户端或代理/仆从/随从角色进行操作;相反边缘计算系统1000中的节点或装置的任一个表示单独实体、节点或子系统,它们包括分立或连接的硬件或软件配置,以促进或使用边缘云。
因此,边缘云从网络组件和功能特征来形成,所述网络组件和功能特征分别由层1020、1030的边缘聚合节点1022以及边缘网关节点1012并且在其之内来操作。边缘云可被实施为提供边缘计算和/或存储资源的任何类型的网络,所述资源大约位于具有无线电接入网(RAN)能力的端点装置(例如移动计算装置、IoT装置、智能装置等),所述端点装置在图10中示为客户端计算节点1002。换言之,边缘云可被设想为连接端点装置和传统移动网络接入点、同时还提供存储和/或计算能力的“边缘”,所述接入点用作进入服务提供商核心网络的入口点,所述服务提供商核心网络包括载波网络(例如全球移动通信系统(GSM)网络、长期演进(LTE)网络、5G网络等)。网络接入的其他类型和形式(例如Wi-Fi、长程无线网络)还可被用来代替这类3GPP载波网络或者与其相组合。
在一些示例中,边缘云可形成雾联网配置1026(例如雾装置1024的网络,未详细示出)的一部分或者以其他方式提供进入或跨雾联网配置1026的入口点,边缘云可被实施为分发资源和服务以执行特定功能的系统级水平和分布式架构。例如,雾装置1024的协调和分布式网络可执行IoT系统布置的上下文中的计算、存储、控制或联网方面。其他联网、聚合和分布式功能可存在于云数据中心层1050与客户端端点(例如客户端计算节点1002)之间的边缘云中。在以下小节中,在网络功能或服务虚拟化的上下文中论述这些方面的一些方面,包括使用为多方利益相关者所编排的虚拟边缘和虚拟服务。
边缘网关节点1012和边缘聚合节点1022协作向客户端计算节点1002提供各种边缘服务和安全性。此外,因为每个客户端计算节点1002可以是固定或移动的,所以每个边缘网关节点1012可与其他边缘网关装置进行协作,以在对应客户端计算节点1002围绕区域移动时传播当前提供的边缘服务和安全性。要这样做,边缘网关节点1012和/或边缘聚合节点1022的每个可支持多租赁和多方利益相关者配置,其中可跨单个或多个计算装置来支持和协调来自多个服务提供商和多个消费者(或者为其托管)的服务。
节点1002、1012、1022或1032的任一个例如可包括与对图4的系统400所示架构相似的架构,或者包括与图4的处理器470或480的任一个相似的处理器。
图11是示出示例多租户软件架构1100的简化框图,所述多用户软件架构包括支持容器A 1120A和容器B 1120B的单地址空间1110。使用密码编码指针在容器之间增强隔离。地址空间1110可包括置信容器运行时1130,所述置信容器运行时促进容器1120A与1120B之间的模拟进程间通信1132。为了简洁起见和便于描述,图11中仅示出两个容器。但是应当注意,本文所述的概念可能适用于具有许多容器的缩放实现。
使用例如本文先前所示和所述的与密码编码指针以及潜在的其他编码指针(所述其他编码指针不包括线性地址的加密部分,但是包括要区分的其他上下文信息)相关的概念,编码指针可被实现以例示多租户软件架构(例如1100)中的密码隔离。首先,不准许容器生成具有作为输入的原始指针的指针,因为这可能使容器能够访问未经授权存储器。通常,在多租户环境中,容器未被其他容器或者被置信运行时所信任。如果每个容器可能访问地址空间的任何部分,则恶意容器可能访问另一个容器的数据或代码,破坏另一个容器的数据或代码。因此,生成指向单地址空间的任何部分的加密指针的能力受到限制。另外,可允许容器执行特殊指令,以产生指针,所述指针最多提供已经由允许容器访问的现有指针所提供的准许。例如,在给定存储器中的相同对象位置的较大大小的指针的情况下,使用用于产生较小大小的编码指令的处理器指令,容器可以能够减小作为它已被指配的对象的子集的对象的大小。
每个容器可被限制到只由指针所覆盖的存储器区域,所述指针作为对那个容器的输入由其管理程序(例如操作系统或置信运行时)所提供。
在一个或多个实施例中,置信运行时1130包括容器所信任的软件。这个软件可以是特许的,但是不一定必须是特许的。连同置信软件一起,置信运行时1130还可包括按照任何适当组合的固件、安全软件模式和/或硬件,它们在被执行时负责将容器代码加载到存储器中,以用于调度容器,并且用于配置处理器存储器访问控制特征以准予每个容器精确地访问它被授权访问的存储器。它还可提供服务,例如为容器分配或解除分配私有或共享存储器的区域,在容器之间发送消息,终止容器,以及向被授权访问第一容器的一个或多个其他容器提供第一容器的密码密钥。
在多租户环境中,置信运行时1130将每个容器限制到它自己的经授权存储器区域。置信运行时1130能够生成一个或多个指针,所述指针引用特定容器被授权访问但是其他容器未被授权访问的一个或多个“私有”存储器区域。能够由置信运行时1130使用适当指令、采用原始指针来生成指向经授权存储器区域的指针。另外,置信运行时在容器代码被加载时对它进行加密,并且生成指向所述容器代码的指针。当容器代码被发起时,或者例如在执行期间,当从另一个容器接收消息时,由置信运行时1130所生成的指针能够被提供给容器代码。在一个示例图示中,当置信运行时1130发起容器A 1120A时,置信运行时1130生成覆盖容器A 1120A被授权访问的特定存储器区域的密码编码指针,并且然后向容器A 1120A提供密码指针,以在其执行期间被使用。应当注意,经授权存储器区域可包含存储器区域内可包含其自己的指针的子区域。另外,置信运行时1130还能够生成一个或多个指针,所述指针引用单地址空间内的所有容器被允许访问或者单地址空间中的容器的子集被允许访问的一个或多个“共享”存储器区域。
通常,秘密密码密钥用来对一些密码编码指针的基址切片(例如扩展基址(EBA)指针)或者使用其他密码编码格式的指针中的其他地址切片)进行加密,并且对指针所引用的数据或代码进行加密。在多租户环境中,密钥可在容器(本文中又称作“租户”)之间被切换,使得每个容器将与其他容器不同的密钥用于生成其指针的加密基址切片(以及使用其他密码编码格式的指针中的地址切片)并且用于对指针所引用的数据或代码进行加密。切换密钥能够加强隔离,而无需如同常规页表切换中一样施加附加开销的转换后备缓冲器(TLB)逐出、高速缓存逐出或其他动作。实施例还允许切换容器1122之间的存储器访问,其中一个容器转移控制,使得另一个容器可访问第二容器的代码和数据。第一容器(例如容器A1120A)可使被访问容器(例如容器B 1120B)的密钥被激活以供使用,以便成功访问被访问容器的数据和代码。
各种计算策略用来托管多租户软件架构,诸如1100。通常,可采用独立虚拟机中运行的容器代码来实现虚拟系统。虽然这为容器代码提供隔离,但是存在伴随虚拟化多租赁环境的显著性能开销。在相同主机操作系统上运行容器代码能够提供系统性能优点,但是仍然需要容器代码的隔离和安全性。
密码计算能够使容器代码能够在相同主机操作系统上运行,同时保护进程的组件免于相互影响,并且将容器代码与其他容器代码隔离。但是,可以是置信计算库的部分的某些特许实体可得到对于与密码编码指针以及那些指针所引用的对应数据和代码关联的加密和解密中使用的秘密密钥的访问权。例如,操作系统通常对多租户环境中的变化进程具有完全控制,因为它决定何时和什么进程将被切换。为了切换进程,诸如MOV cr3的指令可用来通过下列步骤来切换页表:根据特定架构采用指向页表基的指针、页目录或者采用适当页映射级(例如4或5)来填充控制寄存器3。当进程变化发生时,秘密密钥能够被暴露给置信运行时(例如1110)和/或暴露给参与工作负荷的操作的其他特许实体(例如图形处理单元(GPU))。但是,这类特许实体可能易受攻击,由此当秘密密钥被暴露给那些实体时潜在地破坏密码计算保护。如果秘密密钥被暴露给被利用的或者以其他方式有缺陷的操作系统,则例如操作系统可能潜在地篡改工作负荷,从而操纵特定进程的代码或数据。同样,诸如云服务提供商的第三方提供商、管理员或者具有对设备的物理访问权的个人可损坏特许软件或者篡改外部存储装置或存储器。因此,多租户环境的密码计算中使用的密钥需要保护。
当依靠将是可信的操作系统(或其他特许软件)时,其他问题可在应用和资料库的签名检验中发生。在一种常见情形中,服务器中的文件系统能够经由某个网络(例如因特网、本地网络等)接收签署封装(signed package),以安装和/或更新那个服务器上托管的应用和/或资料库。操作系统可配置有操作系统更新器,以检验所下载封装上的签名。但是,所下载应用和资料库的二值图像一旦在服务器上被安装/更新则可能未被签署。可按照名称来查找应用和资料库,但是名称对特定二值图像可能不是唯一的,并且可能被伪造。例如,某个版本的glibc的许多不同编译的变体可能由不同的供应商来分发。相应地,在没有所选版本实际上是预计软件的最新版本的某个检验机制的情况下信任操作系统来选择适当版本有执行过期二进制或修改二进制以及所产生数据破坏或损坏的风险。从系统的置信计算库中移除诸如操作系统、虚拟机管理器等的特许软件能够防止这种特许软件访问不正确的资料库和/或操纵与进程关联的代码或数据。
如本文所公开的密码子进程对象粒度多租户系统能够解决这些问题。本文的实施例提供利用安全引擎(例如692)的密码计算,以保护容器应用的存储器中数据和代码的保密性和完整性。嵌入式安全(例如692)引擎和密钥管理硬件(例如694)能够生成和管理每容器的数据和代码密钥,其中特定容器进程的代码密钥和数据密钥是唯一的。在一个或多个实施例中,安全引擎和密钥管理硬件进行协调,以在操作系统(例如客户操作系统、主机操作系统)或其他特许软件(例如虚拟机管理器、其他特许固件和软件)不可见的情况下生成每容器的数据和代码密钥。因此,通过阻止直接访问密码计算计算中用于对密码编码指针的部分以及所述指针所引用的数据和代码进行加密/解密的未加密密钥,从置信计算库中移除特许软件。另外,安全引擎和密钥管理硬件基于这些编码指针和密钥为容器应用代码运行时提供保密性、完整性和证实。
来看图12,图12是示出按照实施例的示例多租赁初始化进程1200的简化框图。多租赁初始化进程1200包括在引导进程期间建立每容器的相应进程密钥。进程密钥能够包括代码密钥和数据密钥,其中代码密钥对于每个容器代码图像以及与那个容器代码图像和对应进程关联的数据是唯一的。能够为资料库代码1214生成独立资料库密钥。多租赁引导进程1210能够涉及系统管理模式(SMM)和基本输入/输出系统(BIOS)程序或其他固件,其用来在例如操作系统的特许软件运行之前、计算机被引导或加电时执行启动进程。在一个示例中,安全引擎(例如692)或其他适当安全模式(例如Intel®信任域扩展的安全仲裁模式(SEAM)等)或安全处理器(例如Intel®会聚安全管理引擎(CSME)等)能够用来生成进程密钥,将所述进程密钥用于对容器代码1216及关联数据的加密,并且使用处理器/硬件密钥对于与可在多租赁环境中运行的容器代码1216和资料库代码1214关联的进程密钥进行加密。在一个或多个示例中,安全引擎配置为安全位置,其中置信代码可单独运行(例如没有操作系统干扰),并且签署密钥由硬件来保护。当操作系统引导时,它能够为容器代码1216和资料库代码1214分配存储器。容器代码1216又可称作租户代码、客户代码、消费者代码或者表示将在多租赁环境中运行的代码的任何其他适当术语,在所述多租赁环境中,代码将没有被另一代码(包括特许软件)操纵的危险。
在一个示例中,进程密钥包括代码密钥,所述代码密钥能够被指配给特定代码图像,并且用来对存储器中的代码图像进行加密(和解密)。代码图像能够包括任何类型的(例如应用、程序、资料库或者可执行或兼容执行的其他代码的)代码。在一些情形中,代码图像可以仅包括代码,而在其他情形中,代码图像能够包括代码和数据,例如,诸如全局变量和/或常数。但是如本文所使用,“代码密钥”一般表示用来对容器进程的应用或程序进行加密和解密的密钥,而“资料库密钥”一般表示用来对资料库图像(library image)进行加密和解密的密钥。进程密钥还能够包括数据密钥,所述数据密钥能够被指配给与特定代码图像关联的数据(例如由容器所使用而不与其他容器共享的数据或者由容器生成的数据)。由多个容器进程所共享的数据可通过共享数据密钥来加密。代码密钥和资料库密钥能够用来分别对容器代码1216和资料库代码1214进行加密,使用它们的线性(或逻辑)地址作为对它们的加密的微调。另外,存储器中的容器代码1216的哈希和资料库代码1214的哈希能够被生成,并且每个哈希能够采用其相应代码密钥来加密。在一些情况下,哈希可由安全引擎来签署。采用被指配给代码图像的代码密钥所加密的图像哈希能够指示哪一个加密代码密钥对应于存储器中被加密的哪一个代码图像,因此确保特定密钥是有效的(即,用来对存储器中的代码图像进行加密)。一般来说,哈希是一种算法,所述算法转换输入值,并且返回不同大小的固定长度输出值。哈希算法可以或者可以不使用密钥(例如MAC或消息认证代码)。在本文所述的实施例中可使用任何适当哈希算法。可使用的哈希算法的示例包括但不一定局限于安全哈希算法(例如SHA1、SHA2、SH3)或消息摘要5(MD5)。
在一些情形中,在将被运行的代码是先验已知的情况下,在操作系统(或另一特许软件)运行之前,进程密钥1212能够被建立和加密,以及容器代码和资料库代码能够被测量和加密,它们稍后能够由操作系统来加载以供在未来点执行。
在操作系统加载进程1220的一个示例中,操作系统能够接收容器代码1216和资料库代码1214的加密图像以及加密进程密钥。操作系统能够将容器代码1216的加密代码图像加载到第一进程1226的存储器中,并且将资料库代码1214的加密代码图像加载到第二进程1222和第三进程1224的存储器中。这通过建立页表来创建线性到物理映射。证实进程可用来向租户证明其代码(例如1216)被加载。其他实施例可使用由安全图像注入加密代码图像中的秘密密钥向租户证明预计代码正运行,给定租户知道所述秘密以及检验可能仅使用所述秘密来产生(例如通过使用秘密值生成MAC)的消息的能力。
在操作系统切换进程1230的一个示例中,操作系统可从第一进程1226切换到另一个进程。这可例如通过MOV cr3指令来实现。在至少一个实施例中,可提供新指令,以经由加密进程密钥来设置进程密钥,所述加密进程密钥在多租赁引导进程1210中被建立并且用来生成容器代码1216和资料库代码1214的加密代码图像。新指令使操作系统能够在不可见进程密钥的情况下设置进程密钥,因为采用硬件已知但操作系统未知的秘密对进程密钥进行加密。其他实施例可类似地使用推导密钥,其中进程密钥是推导密钥。能够创建信任链,其中操作系统仍然能够控制平台,但是无法查看进程中正运行的代码,因为代码图像由另一个实体(例如安全引擎692)来加密。
代码图像的加密基于线性(或逻辑)地址映射(例如,而不是物理地址)来执行,并且因此与线性地址的绑定不要求操作系统跟踪物理页或者提供对分页的任何附加硬件支持。因此,操作系统仍然能够控制全部分页操作(例如,将物理存储器又分页到盘或者其他形式的存储装置、将物理存储器分页为主存储器等)。
图13是示出按照实施例的多租赁运行时进程1300的简化框图。多租赁运行时进程1300包括在运行时期间为代码图像建立相应进程密钥,其中进程密钥对于每个代码图像和对应进程是唯一的。在多租赁运行时进程1310期间,操作系统能够调用安全引擎(例如SEAM、安全模式、安全引擎、安全模式等),以通过采用仅处理器硬件和安全引擎已知的密钥对新进程密钥1312进行加密来锁定它们。新进程密钥1312能够包括用于第一容器代码1316的第一密钥以及用于其他容器代码1314的其他密钥。另外,代码加密密钥可与每个容器的数据加密密钥不同。在一个示例中,能够使用仅是处理器(例如602)和安全引擎可用的处理器或硬件密钥对新进程密钥1312进行加密。相应地,加密密钥无法由操作系统直接解密,而是能够由处理器硬件例如在由安全引擎或者由新处理器指令所调用时被解密。
安全引擎能够加载第一容器代码1316和其他容器代码1314的明文。在至少一个实施例中,容器代码的每个实例(本文中又称作“代码图像”)能够被安排(fixed up),以能够实现代码图像的证实。例如,秘密密钥能够被注入代码图像中,从而证明它经过了这种方法。另外,隐式完整性能够通过在代码图像中周期地插入无操作(“NOP”)指令来实现,以检验代码段在执行期间未被修改,并且检验NOP仍然存在于解密图像或MAC、独立MAC表或者其他完整性机制中。第一容器代码1316和其他容器代码1314的安排代码图像(fixed up codeimage)能够使用其相应进程密钥和相应非重叠线性地址(即,位置)或者可重定基逻辑地址作为加密中的微调来加密(例如,使用可微调密码模式,诸如XTS)。指示执行准许的元数据在至少一些实施例中也可用作微调。另外,每个代码图像能够采用进程密钥1312的相应进程密钥来哈希,采用进程密钥来签署或加密,并且被返回给操作系统。
在操作系统加载进程1320的一个示例中,操作系统能够从安全引擎接收第一容器代码1316和其他容器代码1314的加密代码图像以及加密进程密钥。操作系统能够作为第一进程1326将第一容器代码1316的加密代码图像加载到存储器中(或者安全引擎可能已经将加密代码图像加载到存储器中),并且作为第二进程1322和第三进程1324将其他容器代码1314的加密代码图像加载到存储器中。OS通过建立页表来创建线性到物理映射。进程能够使用进程密钥(例如与相应资料库图像对应的资料库密钥)来扩展可执行代码(例如以加载资料库)并且建立初始状态。证实进程可用来向租户证明其代码(例如1314、1216)被加载。被注入代码图像或其他秘密中的证实密钥可用来向远程方证实。
在操作系统切换进程1330的一个示例中,操作系统可从第一进程1326切换到另一个进程(诸如第二进程1322)。这可例如通过MOV cr3指令来实现。在至少一个实施例中,操作系统能够经由新设置的加密密钥指令将第二进程1322的进程密钥(例如代码密钥和数据密钥)设置到进程密钥寄存器,所述寄存器可以是通用寄存器(GPR)、控制寄存器或MSR。可使用处理器密钥对这个密钥进行加密。处理器能够对加密进程密钥进行解密,以得到第二进程1322的代码密钥和数据密钥。代码密钥和数据密钥能够用来分别对第二进程1322的代码和数据进行解密(在它从存储器加载和执行时)。能够使用用户中断入口点来进入进程1322,以始终提供从已知代码路径的进程控制入口。
图14是示出按照实施例的多租赁运行时进程1400的简化框图。多租赁运行时进程1400示出共享资料库调用子进程,并且包括使用容器代码和共享资料库的相应进程密钥。在多租赁运行时进程1410中,操作系统能够调用安全引擎(例如SEAM、安全模式、安全引引擎、安全模式等),以通过加密来锁定新进程密钥1412。新进程密钥1412能够包括容器代码1416的第一代码密钥以及共享资料库1414的其他代码密钥(本文中又称作资料库密钥)。在一个示例中,能够使用仅是处理器(例如602)和安全引擎可用的处理器密钥对新进程密钥1412进行加密。相应地,加密密钥无法由操作系统直接解密,而是能够由处理器例如在由安全引擎所调用时被解密。
安全引擎能够加载容器代码1416和共享资料库1414的明文。在多租赁运行时进程1410的一个实施例中,安全引擎(例如692)能够在多个进程之间所共享的不同线性区域中创建非重叠共享资料库。每个代码图像(例如容器代码和每个共享资料库代码)能够被安排,以能够实现代码图像的证实。例如,秘密密钥能够被注入代码图像中。另外,隐式完整性能够通过在代码图像中周期地插入无操作(“NOP”)指令来实现,以检验代码段在执行期间未被修改,或者图像的MAC表可被构成。容器代码1416和安排代码图像和共享资料库1414的安排图像能够使用其相应进程密钥和相应非重叠线性地址(即,位置)或者逻辑地址作为加密中的微调来加密。指示执行准许的元数据在至少一些实施例中也可用作微调。另外,每个代码图像能够采用其相应进程密钥1412来哈希,每个哈希采用进程密钥来签署或加密,并且被返回给操作系统。
在操作系统加载进程1420的一个示例中,操作系统能够接收容器代码1416和共享资料库1414的加密代码图像,各自采用其相应进程密钥来加密。操作系统还能够从安全引擎接收每个共享资料库图像的线性或逻辑地址和加密进程密钥,并且能够建立初始状态。加密资料库图像可在其非重叠线性或可重定基逻辑地址范围被加载到存储器中。操作系统还能够作为第一进程1426将容器代码1416的加密代码图像加载到存储器中。OS然后可通过建立页表来创建线性到物理映射,以将适当共享资料库物理存储器位置包含到进程的线性地址空间中。
在这个示例中,第一进程1426与第二进程1424共享所述共享资料库、资料库代码1432其中之一。例如,资料库代码1432可以是一种资料库,所述资料库是容器代码1416和一些其他非置信实体所需的,但是物理存储器中的那个资料库的多个副本不是期望的(例如glibc)。在这种情形中,采用唯一进程密钥(例如资料库密钥)对共享资料库代码1432进行加密并且将共享资料库代码1432逐行(逐块)密码绑定到其相应线性地址(作为对加密的微调)使资料库代码能够由多个进程来加密和共享。在这种情形中,资料库代码关联与访问资料库代码的容器代码(或者另一个进程的代码)不同的进程密钥,从而要求密钥切换以对资料库代码进行解密。
诸如资料库调用和返回指令1430之类的新指令可由容器代码1416来执行(一旦它被起动)。这些指令还可使用资料库代码1432的加密资料库密钥。在一个示例中,容器代码1416能够经由OS来加载资料库1432,获得签署消息认证代码(MAC)或加密哈希以及资料库的加密密钥,并且检验MAC或加密哈希和加密密钥对应于资料库代码1432。容器代码1416然后可使用资料库的加密密钥来执行资料库调用(例如KCALL)指令。因此,资料库的加密密钥被设置为处理器(例如390、470、480、602)的指令高速缓存(例如334、471、482、682)的资料库调用指令上的指令高速缓存密钥。处理器能够对加密密钥进行解密,并且使用解密密钥对指令高速缓存中的指令进行解密。一旦资料库代码1432已经完成执行,则资料库返回指令(例如KRET)能够将指令高速缓存的指令高速缓存密钥重置回调用方(例如容器代码1416)的代码密钥。但是,数据可使用与进程关联的不同密钥,因为资料库代码可使用调用方的数据密钥(进程密钥)。也就是说,当由第一进程1416所调用时,资料库代码使用与容器代码1436关联的数据密钥。但是,当资料库代码由第二进程1424来调用时,不同数据密钥被编程在数据高速缓存中,并且资料库代码使用那个新数据密钥。如果资料库具有任何可写数据段(例如能够被修改的数据段,诸如全局变量),则这些可写数据段可被复制到调用所述资料库的进程的进程存储器中。因此,能够使用适当(每进程)数据密钥对可修改资料库数据进行加密和解密。
应当注意,具有不同租户代码或不同客户代码的其他进程能够使用相同种类的调用(例如KCALL和KRET)来运行具有相同加密密钥的相同资料库代码1432。因此,能够跨不一定相互信任的进程以及也可能不被信任的操作系统来共享在物理存储器中加密和存储的资料库。这种技术能够实现不同组件之间的安全调用和返回流程序列,并且在存储器中仅需要资料库代码的一个副本。所有进程能够共享被映射到相同线性或逻辑地址的相同物理存储器。
来看图15,示出按照实施例、用于基于密码计算的容器安全性的示例多租户系统1500的框图。多租户系统1500配置成在已检验平台(例如1540)上起动具有加密代码图像的容器,保护存储器中的代码和数据,并且安全地操控容器进程(例如第一容器进程1540A和第二容器进程1540B)之间的异步事件和通信。示例多租户系统1500能够包括图像注册表1560和多租户平台1510。在一个示例中,图像注册表1560能够由云服务提供商来维护,并且配置成允许容器的代码图像(诸如代码图像1562)将由诸如多租户平台1510的多租赁计算平台来发布和检索,以用于起动容器进程。在示例中,软件开发人员或用户可发布代码图像1562,所述代码图像可以是签署并且可能加密的代码。发布代码图像1562的软件开发人员或用户可与租户(诸如租户1570)关联,所述租户能够向多租户平台1510(或者其关联服务提供商)发出请求以起动代码图像1562。租户1570表示计算装置或系统,所述计算装置或系统配置用于与图像注册表1560和多租户平台1510的通信,并且可用来请求容器代码在多租户平台1510上被起动(例如第一容器进程1540)。一个或多个其他租户也可配置用于与多租户平台1510的通信,以请求容器代码在多租户平台1510上被起动(例如第二容器进程1550)。在一些情形中,租户所有者可经由用户接口给出命令,以请求多租户平台起动容器,以及在其他情形中,租户1570可被自动化,以用于在多租户平台1510上起动容器代码。
多租户平台1510表示按照一个或多个实施例的一个示例多租赁架构,其可被实现为配置成运行具有基于密码计算的容器安全性的多个容器的计算平台。在一个示例中,平台向租户提供硬件的证实,以检验它是置信平台。平台还能够证实例如其硬件、引导、操作系统。任何适当证实基础设施可用来提供平台证实(例如Intel PTT中的TPM2、SGX/TDX、安全引擎等)。多租户平台1510可包括处理器1520(例如中央处理器(CPU)、图形处理单元(GPU)等),所述处理器可根据(但不一定局限于)本文所述的各种架构(例如102、104、106、108、200、390、470、480)来实现。
安全引擎1530和密钥管理硬件1532可在多租户平台1500中配置成生成和存储每容器的进程密钥,所述进程密钥能够用来对于与特定容器关联的代码和数据进行加密和解密。进程密钥能够包括通过执行容器代码图像所例示的进程的代码密钥以及与所述进程关联的数据的数据密钥。安全引擎1530和密钥管理硬件1532可以是逻辑上独立的实体(如图15中所示)或者被组合为一个逻辑和物理实体,并且可使用任何适当安全模式(例如Intel®信任域扩展的安全仲裁模式(SEAM)、ESE等)或安全处理器(例如Intel®会聚安全管理引擎(CSME)等)、通过硬件、软件、固件或者它们的任何适当组合来实现。
在一个实施例中,安全引擎1530是多租户平台1510的置信固件组件。在一些实施例中,它可配置为运行置信固件的独立嵌入式处理器。安全引擎1530能够在与Intel®虚拟机扩展(VMX)根、环级1(ring level-1)或另一种虚拟化根模式相似的特许状态中执行。在一些实施例中,安全引擎可以完全是硬件电路模块。安全引擎能够建立到诸如操作系统(例如1522)的其他域的所定义接口。安全引擎可被实施为固件资料库,所述固件资料库能够由硬件(例如由处理器1520)来测量。安全引擎1520是置信计算库(TCB)的部分,它能够对代码和资料库图像进行测量和加密,并且还产生加密进程密钥。安全引擎1530和处理器1520可被集成或者可在逻辑和/或物理上是独立的,但是配置成使用处理器1520能够访问的处理器/硬件密钥来执行与进程密钥关联的加密和解密。
处理器1520还可包括指令高速缓存(iCache)1580(所述指令高速缓存可与图3B的指令高速缓存334、图4的高速缓存471、481或存储器432、434或者图6的指令高速缓存682相似)和数据高速缓存(dCache)1586(所述数据高速缓存可与图3B的数据高速缓存单元374、图4的高速缓存471、481或存储器432、434或者图6的数据高速缓存684相似)。指令高速缓存1580能够被耦合到或者包括控制电路模块1582,以存储加密代码,并且允许采用每个进程的控制电路模块中编程的代码密钥对加密代码的解密。数据高速缓存684能够被耦合到或者包括控制电路模块1588,以存储加密数据,并且允许采用每个进程的控制电路模块中编程的数据密钥对加密数据的解密。控制电路模块1582和1588可被组合或者是独立的,并且可与IMC 472、482相似。一些实施例可使用具有标签或其他上下文标识符的共享代码和数据高速缓存来区分用于单独高速缓存线的代码和数据密钥。
iCache 1580能够配置成在其逻辑(例如控制电路模块1582)中对代码密钥进行编程,以及当来自加密代码图像的指令的每个高速缓存线在执行期间从存储器被加载到iCache 1580中时,高速缓存线能够使用编程代码密钥和微调来解密,微调可包括指令的线性地址的至少一部分以及潜在的其他元数据)。类似地,dCache 1586能够配置成在其逻辑(例如控制电路模块1588)中对代码密钥进行编程,以及当加密数据被加载到dCache 1586中时,加密数据能够使用编程数据密钥和微调来解密,微调可包括数据的线性地址的至少一部分以及潜在的其他元数据。这些高速缓存由处理器在进程切换、进程密钥切换时被转储清除,或者以其他方式使用加标记机制来区分属于不同进程并且将独占地与其关联进程配合使用的高速缓存线。
在多租户平台1510中运行的主机操作系统1522可配置成经由容器运行时1524与安全引擎1530和密钥管理硬件1532协调管理多个容器的执行。主机操作系统1522可以是非虚拟化环境中的主机操作系统。在其他实施例中,多租户平台1510可被实现为虚拟化环境,以及主机操作系统1522可以是一个或多个虚拟机的客户操作系统。在这种情形中,还可在硬件(例如处理器1520)上实现虚拟机管理器。
在图15的示例中,多租户平台1510托管两个工作负荷,所述工作负荷包括第一容器进程1540和第二容器进程1550。第一容器进程1540包括应用1542和三个资料库文件,所述资料库文件包括资料库A 1544、资料库B 1546和资料库C 1548。第二容器进程1550包括应用1552和资料库A 1544。资料库A 1544是共享资料库,并且资料库的仅一个副本可被存储在存储器中,但是每个容器中的应用1542和1552两者均可使用如本文所公开的基于密码计算的容器安全性来安全地调用共享资料库A 1544。
对于多租户系统1500,基于密码计算的容器安全性的示例一般流程在图15中示出。在这个示例一般流程中,在1501,租户(或用户)1570能够在图像注册表1560上发布代码图像,诸如代码图像1562。代码图像1562可以是要在节点上作为容器进程起动和运行的代码。在图像注册表1560中发布的代码可被加密和签署、部分加密和签署或者被加密(包括一个或多个输入)和签署。在其他实施例中,可以不使用签署。在一个或多个实施例中,代码图像1562可被加密和签署。在其他实施例中,代码可采取明文并且被签署。在至少一个实施例中,应用于所发布代码的签名可以是数字签署的证书,所述证书属于具有所指定版本的应用(或资料库)的特定变体。可被包含在证书中的元数据字段能够包括下列至少一个:所发布代码的供应商的标识符(例如唯一完全限定域名)、应用或资料库名称、应用或资料库的版本、二进制代码和关联所发布代码的常量数据的哈希、与所发布代码关联的可写数据的初始值的哈希。
一旦代码图像被发布,在1502,请求/命令可被发送到云服务提供商,以起动容器,例如运行代码图像1562。提供商能够将工作负荷指配给工作人员节点(诸如多租户平台1510),所述工作人员节点可以是提供商的置信平台。在1502,安全引擎1530能够向租户1570证实它是可信的,如先前所述。一旦租户1570通过平台1510的证实得到满足,在1503,安全引擎1530能够从图像注册表1560拉取或接收代码图像1562,测量所述代码图像,以及如果它被加密,则对它进行解密,并且然后采用每进程的代码密钥对它进行加密。如果所述图像在从图像注册表1560被拉取时已经采用租户密钥被加密,则安全引擎1530能够执行安全密钥交换,以从租户1570得到密钥,对代码图像进行解密,然后采用代码密钥对它重新加密。在一些实现中,租户提供的密钥可用于对代码图像的重新加密。
在对代码图像1562进行加密之前,处理器1520能够使用安全引擎1530将图像证实密钥注入代码图像1562或(一个或多个)其他秘密中,以供租户1570的随后图像证实,例如以建立到从密码保护代码图像所例示的容器进程(例如第一容器进程1540)的安全通道。另外,安全引擎1530能够以某个块粒度在代码图像中周期地插入无操作(“NOP”或“no-op”)指令,以及处理器检验它们在解密时的存在。这些no-op能够用作代码内不实际执行的低熵指令,但是当代码图像在运行时被加密时,处理器1520能够检测no-op是否存在于某个块边界,并且如果NOP在解密时存在,则确信(例如通过隐式完整性)所述代码未被修改。如果所述代码按照任何方式被修改(例如物理对手或无意修改),则no-op将不会正确解密,因为它们将解密成垃圾,并且这能够被推断为对代码的篡改,并且能够采取适当动作(例如引发异常)。其他实施例可将MAC注入图像中,或者建立由处理器用来检验解密时的图像完整性的MAC表。安全引擎1530还能够生成图像的哈希,所述哈希连同图像证实密钥一起被发送到租户。
在1504,安全引擎1530请求为将基于代码图像所例示的第一容器进程1540建立进程密钥(用于代码和数据)。密钥管理硬件1532能够配置成生成每容器的进程密钥(数据和代码),并且能够在1505向安全引擎1530提供所述进程密钥。虽然密钥管理硬件1532在图15中示为与安全引擎1530分离的实体,但是在一些实现中,密钥管理硬件1532和安全引擎1530可被组合为一个逻辑和物理实体。容器进程的进程密钥能够包括:代码密钥,用于对与容器进程对应的代码图像二进制进行加密和解密;以及数据密钥,对于与容器进程关联的存储器中和静止数据是独立的。
在与本文进一步描述的扩散相关的实施例中,安全引擎1530可使用可微调块密码来生成用于扩散的密码高速缓存(例如L1数据高速缓存、L1指令高速缓存、L2高速缓存或L3高速缓存等)的租户(或容器)密钥。安全引擎1530能够采用处理器/硬件密钥和诸如哈希的完整性指示来包装密钥,以确保对密钥的任何修改或篡改能够被检测。用于扩散的密码高速缓存的这些租户密钥能够被发送到操作系统,或者能够使用来自指令集架构的独立指令被直接编程到处理器中。
在一个或多个实施例中,进程密钥可以是对称的,其中代码(或数据)能够被加密并且然后使用相同密钥被解密。可实现任何适当类型的对称算法,包括但不限于本文先前所述的各种示例,诸如块密码和可能的加密的其他类型。在其他示例中,可使用不对称密钥对。在这个示例中,指令高速缓存和数据高速缓存可设置进程的加密和解密密钥,以能够实现对数据和代码的解密以及一旦不再需要时随后对数据和代码的加密。备选地,可实现附加通信,以根据需要检索密钥对的正确密钥。可实现任何适当类型的不对称算法,包括但不限于Rivest-Shamir-Adleman(RSA)或Diffie-Hellman。
可实现用于生成进程密钥的任何适当技术。在一个示例中,租户1570可提供其自己的(一个或多个)进程密钥,并且作为包装密钥发送到多租户平台1510。在这种情形中,安全引擎1530和租户1570可进行通信以共享解密密钥,以使安全引擎1530能够对(一个或多个)包装租户密钥进行解密,其然后可能用作进程密钥并且根据需要重新加密。
在另一个示例中,进程密钥可从根(或主)密钥来得出,并且在被传递到操作系统之前被包装(即,被加密)。在这个密钥包装机制中,可使用密钥对每个密钥(例如代码密钥和数据密钥)进行加密,所述密钥被存储和/或从处理器1520(和安全引擎1530)能够访问但软件组件不可访问的硬件来生成。这个硬件(或处理器)密钥被保持为对软件隐藏,包括特许软件,诸如操作系统1522或者虚拟化环境中的虚拟机管理器。作为举例,硬件密钥可被存储在熔丝中,被存储ROM中,或者通过产生随机化位的一致集合的物理不可克隆函数来生成。数据密钥和代码密钥可与硬件密钥分开包装。密钥包装机制也可用于租户提供的进程密钥。
在另一个示例中,进程密钥可使用推导密钥。在这个示例中,唯一密钥标识符(而不是代码和数据密钥)可对代码和数据每容器进程来生成。密钥标识符可以是唯一的某个数字,例如每当指配新密钥时增加的单原子计数器值。为了从唯一密钥标识符来得到代码密钥(或数据密钥),可采用硬件密钥(例如处理器密钥)对唯一密钥标识符连同某个常数值(例如盐值)进行加密。也可使用其他密钥推导方法,诸如将唯一标识符与秘密密钥进行哈希(例如SHA3),以产生可用作推导密钥的值。因此,唯一密钥标识符可通过特许软件来传递,因为特许软件将无法得出容器进程的实际代码或数据密钥。实施例可提供每虚拟机的可迁移硬件密钥,以能够实现虚拟机跨不同硬件平台的迁移,从而允许迁移图像的密钥的正确推导。
应当注意,唯一密钥标识符(以得出代码或数据密钥)和加密代码或数据密码本质上是隐藏它所表示的实际代码或数据密钥的“替代密钥”。相应地,替代密钥可与特许(或其他)软件(诸如操作系统)共享,因为实际代码或数据密钥不是特许(或其他)软件可探知的。为了从替代密钥来得到代码密钥(或数据密钥)的实际值,适当密码功能能够使用硬件密钥(例如处理器密钥)来得到或生成由替代密钥所表示的实际代码(或数据)密钥。但是,所使用的密码功能的类型根据替代密钥是唯一密钥标识符还是加密密钥而有所不同。如果替代密钥是唯一密钥标识符,则将被应用的密码功能可以是加密算法,但是如果替代密钥是加密密钥,则将被应用的密码功能可以是解密算法。例如,如果替代密钥是加密密钥,则处理器能够使用硬件密钥对加密密钥进行解密,以得到或生成能够用于对代码或数据的加密/解密的代码或数据密钥。如果替代密钥是唯一密钥标识符,则处理器能够使用硬件密钥对唯一密钥标识符(和可选的某个常数值)进行解密,以得到或生成能够用于对代码或数据的加密/解密的代码或数据密钥。应当注意,本文描述的全部实施例(例如图11-28B)参照实施例来描述,在所述实施例中,密钥(例如代码密钥、数据密钥、资料库密钥、中断密钥、迁移密钥)由密钥管理硬件来生成,并且然后在被传递到第一和/或第二容器进程之前采用硬件密钥来加密。但是,在其他实施例中,可能得出密钥(例如代码密钥、数据密钥、资料库密钥、中断密钥、迁移密钥),如本文先前所述。在这另一实施例中,生成唯一密钥标识符,并且能够通过使用硬件密钥对唯一密钥标识符(可能连同某个常量数据一起)进行加密来得出实际共享替代密钥。因此,被实施为唯一密钥标识符的替代密钥而不是被实施为加密密钥的替代密钥会根据所述的特定功能性被传递到适当的(一个或多个)容器进程。
包装密钥和唯一密钥标识符是可在本文所公开的一个或多个实施例中使用的两种可能技术。一般来说,可使用任何技术,所述技术使分别用于对代码和数据进行加密/解密的密码代码和数据密钥的实际值能够对操作系统1522隐藏,同时给予操作系统足够信息以使它能够管理代码的执行。特别是决定何时以及向哪个进程提供硬件访问的作用。如本文所使用,使用包装进程密钥技术(例如加密代码密钥和加密数据密钥)或者使用唯一进程密钥标识符技术(例如唯一代码密钥标识符和唯一数据密钥标识符)时被传递到操作系统的信息在本文中又可称作“替代代码密钥”和“替代数据密钥”,它们本质上替代对进程的代码和数据进行加密和解密所需的实际代码和数据密钥。
安全引擎1530能够使用代码密钥以及为代码图像所分配的线性地址的至少一部分作为微调对检索代码图像1562进行加密。安全引擎1530还能够使用代码密钥对图像哈希进行加密。对于常规代码密钥和数据密钥(即,不是推导密钥),安全引擎1530能够使用硬件密钥对代码和/或数据密钥进行加密。硬件密钥可以是处理器1520但不是软件可访问的。安全引擎1530能够向主机操作系统1522发送加密图像哈希、加密代码密钥和加密数据密钥。另外,安全引擎1530可生成用于扩散的密码高速缓存的租户密钥,并且采用CPU密钥(以及确保它们未被篡改的完整性)来包装这些密钥,并且发送到操作系统1522或者使用(一个或多个)独立ISA指令将这些直接编程到处理器1520中。
应当注意,在使用推导密钥的实现中,能够采用硬件密钥对唯一代码密钥标识符连同某个常数值进行加密,以产生推导代码密钥。安全引擎1530能够使用推导代码密钥以及为代码图像所分配的线性地址的至少一部分作为微调对代码图像1562进行加密。安全引擎1530还能够使用推导代码密钥对图像哈希进行加密。安全引擎1530可以不对推导代码密钥进行加密,而是向主机操作系统1522发送加密图像哈希、唯一代码密钥标识符和唯一数据密钥标识符。
操作系统1522可在调度代码图像的执行中执行其正常功能。因为操作系统1522不知道如何对加密代码密钥进行解密(或者从唯一代码密钥标识符来得出代码密钥),所以操作系统被阻止对代码图像进行解密和潜在地操纵代码。在一个或多个实施例中,一旦操作系统1522通过执行加密代码图像准备好例示第一容器进程1540,操作系统可执行新指令,以将加密进程密钥(或唯一进程密钥标识符)传递到指令高速缓存(icache)1580。iCache1580能够检验加密代码密钥(或唯一代码密钥标识符)被绑定到加密代码图像。
如果所述检验成功,则加密代码图像能够由iCache 1580来解密和执行。应当注意,如果使用常规代码和数据密钥,则在加密代码图像被解密和执行之前,处理器能够转储清除指令和数据高速缓存1580和1586,分别建立指令和数据高速缓存的代码和数据密钥,采用适当密钥对高速缓存中的控制电路1582和1588进行编程,在寄存器中加载代码和数据密钥,并且然后执行代码图像,例如被例示为第一容器进程1540。在使用推导进程密钥的实现中,指令和数据高速缓存可以无需被转储清除,因为唯一代码密钥标识符可作为标签在每个高速缓存线上被插入,并且因此密码高速缓存将知道所述高速缓存线属于哪一个容器进程。另外,高速缓存中的加密电路将在准备好对某个代码或数据进行加密或解密时即时得出代码(或数据)密钥。在两种实现中,第一容器进程1540能够被例示,而任何特许软件或者任何其他软件无法查看代码图像和潜在地操纵代码。
在执行期间,当容器被上下文切换出时,寄存器和其他状态(包括代码和数据密钥)能够使用处理器密钥连同某个完整性信息被包装,并且被保存到存储器。可使用任何适当上下文切换方法,包括但不限于现有上下文切换指令,诸如XSAVE/XRESTORE指令。备选地,这个信息可被存储在保留存储器中,所述保留存储器不是非置信软件(例如操作系统和虚拟机管理器)可访问的。
另外,在一些情形中,可在1507在第一容器进程1540与第二容器进程1550之间建立进程间通信。另外,与第一容器进程1540关联的数据可被检索和/或被存储在存储单元1512中。
来看图16A-16B,图16A-16B示出按照实施例、与用于在多租户系统(例如1500)中建立容器代码的进程密钥的初始化进程关联的操作的示例流程图1600A-1600B。流程图1600A-1600B的一个或多个操作可由诸如多租户系统1500的多租户系统的硬件、固件和/或软件来执行。在这个示例中,一个或多个操作可由诸如租户1570的租户、诸如安全引擎1530的安全引擎、诸如处理器1520的处理器(包括指令高速缓存,诸如iCache 1580)、诸如主机操作系统1522的操作系统和/或诸如第一或第二容器进程1540或1550的容器进程来执行。虽然图1600A-1600B中参照多租户系统1500的特定实体示出具体操作和通信,但这是为了说明的目的而进行的,并且应当理解,多租户系统1500的各种其他配置基于特定实现和需要是可能的,并且在一些实施例和实现中,指令和/或操作可被组合或分离,或者由不同实体来执行。
在1602,租户可选择和/或准备远程机器(诸如多租户平台1510)的代码图像。租户公有密钥可被发送到远程机器,并且被传递到远程机器的操作系统,以请求与租户公有密钥关联的特定容器被执行。另外,在1604,租户可存储将被执行的容器的代码图像、租户公有密钥和时间戳。
在1606,操作系统为将被执行的代码图像分配存储器。在1608,操作系统能够通知安全引擎关于为代码图像所分配的存储器位置。另外,操作系统能够向安全引擎传递关于哪一个代码图像被租户选取并且请求执行。
在1610,安全引擎1530能够得到将被执行的所选代码图像。例如,安全引擎可在1604从图像注册表或者从租户来得到代码图像。安全引擎能够加载和安排代码图像。在至少一个实施例中,安全图像能够将证实密钥注入代码图像中,以供例如租户的后续图像证实,以发起代码图像。在一个示例中,可在多租户平台1510生成证实密钥。例如,证实密钥可能由多租户平台1510的安全引擎1530、密钥管理硬件1532或者任何其他适当组件来生成,并且被提供给安全引擎1530。另外,no-op指令能够以某个块粒度被插入代码图像中,使得在运行时,如果no-op存在于已知块边界,则处理器1520能够通过隐式完整性确信所述代码图像未被修改。如果代码图像已被修改,则no-op指令将在iCache 1580中解密成垃圾。
在1612,能够对安排代码图像生成图像哈希。在一个示例中,任何适当单向哈希函数可用来生成图像哈希,包括但不一定局限于安全哈希算法(例如SHA-3、SHA-2等)或消息摘要(例如MD4、MD5)。
又在1612,可使用证实密钥对代码图像生成消息认证代码(MAC)。还能够使用任何适当单向哈希函数(例如SHA1-3、MD4-5等)来生成MAC。在一个示例中,证实密钥和时间戳用 来在已更新图像上生成MAC。采用租户公有密钥来加密证实密钥,以及使用安全引擎的私有 密钥(例如安全引擎的处理器密钥或其他私有密钥)在加密证实密钥上生成数字签名。在1614,MAC、加密证实密钥以及安全引擎的签名被发送到租户1570。这种方案用来向租户发 送证实密钥和图像MAC,并且确保它绑定到安全引擎。
在1616,安全引擎1530和/或密钥管理硬件1532可生成与代码图像关联的代码和数据的进程密钥。进程密钥能够包括用于对代码图像进行加密和解密的代码密钥以及用于对与代码图像关联的数据进行加密和解密的数据密钥。在1616,安全引擎1530能够采用代码密钥和微调对安排代码图像进行加密,所述微调可包括代码图像的所分配存储器的线性地址的至少一部分(例如,每个高速缓存线的线性地址可用来对每高速缓存线的代码进行加密)和可能的附加元数据。在一个示例中,执行准许元数据可被包含在微调中或者作为附加微调来提供。这可有助于确保将被执行的代码图像是有效可执行的(例如它是可执行代码而不只是数据)。因为页表通常标记什么代码是可执行的,所以使用执行准许微调确保页表无法被恶意或无意地用来尝试运行不是有效可执行的某个图像。安全引擎1530还能够使用代码密钥对图像哈希进行加密,并且生成加密图像哈希。这能够将表示明文代码图像的图像哈希绑定到用来对存储器中的那个代码图像进行加密的密钥(即,代码密钥)。可逐个高速缓存线计算图像哈希,因为包括所述图像的每个后续高速缓存线通过安全图像成功被加密(例如,安全引擎从存储器读取/加载明文图像的下一行,采用那一行更新正运行安全哈希,以及然后采用其地址对被微调的高速缓存线进行加密,并且将它回写/存储回存储器,对一直到图像大小的每一行重复进行)。
一旦采用代码密钥和适当微调对代码图像进行加密,加密图像被加载到所分配存储器中,以作为进程1540被执行,如在1620所示。另外,加密图像哈希、证实密钥以及进入代码图像的入口点也被加载到存储器中,以能够实现所述进程的执行。但是,在所存储的加密代码图像被执行之前,控制被传递回操作系统,以管理用于执行所存储的加密代码图像的硬件资源的定时和分配。
参照图16B,在1618,安全引擎1530能够使用处理器密钥对代码密钥进行加密,所述代码密钥用来对存储器中存储的代码图像进行加密,并且还用来对未加密代码图像的图像哈希进行加密。加密密钥和加密图像哈希均能够被提供给操作系统1522,因为控制被传递回操作系统,以发起所存储的加密代码图像的执行。在1622,操作系统能够存储加密密钥和加密图像哈希(以及可能的未被加密的图像哈希)。
当操作系统1522准备好发起容器进程1540时,在1624,操作系统能够执行指令VerifyHash,以检验加密图像哈希是否已被修改,以检验从安全引擎1530所接收的加密图像哈希。VerifyHash指令可向处理器1520传递加密密钥、图像哈希和加密图像哈希以供检验。在1626,处理器1520能够采用处理器密钥对加密代码密钥进行解密,并且采用代码密钥对加密图像哈希进行解密。在1628,能够比较作为操作数从操作系统所接收的图像哈希和解密图像哈希。如果它们不匹配,则差错可在1630被返回给操作系统1522。备选地,安全进程或容器1540可调用VerifyHash指令,以检验它可能想要执行的另一个进程或资料库图像的内容。
如果检验在1628成功,则操作系统1522(或者备选地为容器进程1540)可在1632发出另一个指令,诸如EnterSecureImage。加密密钥可被传递回处理器1520。备选地,如果检验在1628成功,则处理器1520可保存或缓存在1626所生成的解密密钥,以避免在操作系统在1632指示处理器1520运行代码图像之后必须再次对它解密。
当指令被发出时,控制在1631传递给处理器1520。在1634,如果解密代码密钥在1626未被保存,则能够采用处理器密钥对于在1632在指令中传递的加密密钥进行解密。在1634,处理器1520能够转储清除任何当前存储的指令的指令高速缓存1580,和/或转储清除任何当前存储的数据的数据高速缓存。指令高速缓存1580的逻辑(例如控制电路模块1582)能够被设置或编程为使用代码密钥对加密图像进行解密,以得到能够在处理器管线中执行的解密代码(或指令)。另外,数据高速缓存1586也可被转储清除,并且其逻辑(例如控制电路模块1588)也可被设置成使用与通过执行加密图像(例如1540)所例示的进程关联的数据密钥。在1636,指令高速缓存1580在入口点开始对于在1620被保存到存储器的加密图像进行解密,并且例示进程1540。备选地,代码图像的入口点也可采用加密密钥来加密,并且作为EnterSecureImage指令的部分被传递,从而允许选择进入图像的多个入口点(实际上成为到地址指令的安全跳转JMP)。
图17示出引导进程的示例流程图1700,在所述引导进程中,租户(例如1570)能够建立与节点(例如多租户平台1510)的安全通道,以访问容器进程。被设计成提供通过计算机网络的通信安全性的任何适当密码协议可用来根据特定需要和实现来建立租户1570与平台之间的安全通道。在一个示例中,可使用作为因特网协议套件(Internet ProtocolSuite)的部分的传输层安全性(TLS)。任何安全技术可用来建立TLS通道,包括如基于不对称(例如公有/私有)密钥对的凭证。
在1702,租户1570可与多租户平台1500上的第一容器进程1540进行通信,并且发送识别已知代码图像的代码图像或消息(例如识别与租户想要访问的容器进程对应的特定代码图像的名称、版本和/或任何其他信息)。证实密钥可如在1612所述由安全引擎1530来生成,并且在图像由安全引擎在1620加载时被注入。证实密钥也可被发送到多租户平台。第一容器进程1540可经由TLS通道从租户1570接收消息或代码图像。在1704,得到加密代码图像、证实密钥(所述证实密钥在被加密之前被注入代码图像中)和图像入口点。在1706,如果被插入加密代码图像中的证实密钥对于来自租户1570的消息(或代码图像)进行解密,则在1708,能够在平台1510与租户1570之间建立安全会话。证实进程1536可向租户1570发送证实密钥。如果所接收的证实密钥匹配由租户1570先前存储的证实密钥(例如参见1614),则在1712在租户1570与容器进程(所述进程在1714正运行代码图像)之间建立安全会话。当进程在1714正运行时,代码图像能够安全地执行,因为代码和数据分别被密码绑定到线性地址以及代码密钥和数据密钥。
在另一个实施例中,证实密钥可能是由安全引擎1530所签署的公有密钥证书,其中私有密钥对加密图像保持为秘密。安全引擎的数字签名可用来建立与安全进程图像的公有密钥的TLS会话。证书也可包括动态链接器(linker)和应用二进制的哈希。
图18A-18C示出按照实施例、由容器进程所使用的共享资料库的初始化以及容器进程调用共享资料库的示例流程图1800A-1800C。流程图1800A-1800C的一个或多个操作可由诸如多租户平台1510的多租户平台的硬件、固件和/或软件来执行。在这个示例中,一个或多个操作可由安全引擎(例如1530)、包括诸如iCache(例如1580)的指令高速缓存的处理器(例如1520)、操作系统(例如1522)、容器进程(例如1540)和资料库进程(例如1544)来执行。虽然图18A-18C中参照多租户平台1510的特定实体示出具体操作和通信,但这是为了说明的目的而进行的,并且应当理解,多租户平台1510的各种其他配置是可能的,并且在一些实施例和实现中,指令和/或操作可被组合或分离,或者由不同实体来执行。
一般来说,在这个示例流程中,第一容器进程1540调用共享资料库1544。能够利用密码计算的线性绑定(其中代码被绑定到线性地址),使得安全引擎1530能够在多个进程共享的不同线性区域中创建非重叠共享资料库。备选地,逻辑地址可用来创建可重定基图像,所述图像相对于所指定基址被加密/解密,从而允许图像在线性存储器中是可重定位的。相应地,共享资料库图像的不可写代码和不可写数据能够仅被加载一次,以供多个容器进程(例如第二容器进程1545)调用。每个容器进程使用相同资料库密钥对特定共享资料库的代码进行解密。另外,用来对特定资料库代码图像进行加密的资料库密钥不同于用来对调用那个特定资料库的容器进程的代码进行加密和解密的代码密钥(又称作“容器代码密钥”或进程密钥)。例如,用来对调用共享资料库的特定容器代码图像进行加密和解密的容器代码密钥不同于用来对那个特定资料库代码图像进行加密和解密的资料库密钥。但是,用来对于与容器进程关联的数据进行加密和解密的进程密钥(“数据密钥”)由所调用资料库代码经由数据高速缓存(例如1586)隐式地使用,因为这个数据密钥在资料库代码由容器进程来调用时未改变(而经由EnterSecureImage指令来改变)。
现在将描述流程图1800A-1800C。应当注意,所述流程能够适用于可由容器进程(诸如第一容器进程1540)来调用的多个资料库。但是,为了简洁起见,通常参照单个资料库来描述流程图1800A-1800C。另外,为了简化,不描述容器应用或代码图像的初始化,因为本文中先前已经描述。应当注意,应用(或容器)代码图像的初始化可与资料库图像的初始化并发地发生。
在1802,对于需要被加载到存储器中的每个新代码图像和资料库图像,操作系统1522分配存储器。可由一个或多个容器进程(所述容器进程在新代码图像的执行时会被例示)来调用的资料库图像被提供给安全引擎1530。资料库图像可包括资料库代码和一些常量数据。在1804,安全引擎1530能够生成资料库图像的哈希。在一个示例中,任何适当单向哈希函数可用来生成资料库图像哈希,包括但不一定局限于安全哈希算法(例如SHA-3、SHA-2等)或消息摘要(例如MD4、MD5),从而在图像被逐行读取时累积哈希值。
在一些实施例中,安全引擎可通过检验来自资料库图像的发布者(例如开发人员、公司等)的数字签名来确保所使用的资料库是正确图像。在补丁更新对共享资料库被进行并且由更新的发布者来签署的情形中,这可能特别有用。在这个实施例中,资料库图像的数字签名也能够被提供给安全引擎1530。在1804,由安全引擎1530对于所接收的资料库图像来确定从操作系统1522所接收的数字签名是否匹配置信发布者的数字签名。如果签名不匹配,则可返回差错。
在1806,或者与1804并发地,安全引擎1530和/或密钥管理硬件1532可生成用于对代码进行加密和解密的资料库密钥以及与资料库图像关联的常量数据。在1806,安全引擎1530能够采用资料库密钥和微调对资料库图像(例如资料库代码和一些常量数据,若有的话)进行加密,所述微调可包括资料库图像的所分配存储器的线性地址的至少一部分(例如,每个高速缓存线的线性地址可用来对每高速缓存线的代码进行加密)和可能的附加元数据。备选地,可使用可重定基逻辑地址。一旦采用资料库密钥和适当微调对资料库图像进行加密,加密资料库图像被加载到所分配存储器中,以在由容器进程(诸如容器进程1540)所调用时被执行。
在1808,安全引擎1530能够使用资料库密钥对资料库图像哈希进行加密,并且生成加密资料库图像哈希。这能够将表示资料库图像的资料库图像哈希绑定到用来对存储器中的那个资料库图像进行加密的密钥(即,资料库密钥)。另外,安全引擎1530能够使用处理器密钥对资料库密钥进行加密,所述资料库密钥用来对存储器中存储的资料库图像进行加密,并且还用来对未加密资料库图像的资料库图像哈希进行加密。加密资料库密钥和加密资料库图像哈希均能够被提供给操作系统1522,因为控制被传递回操作系统,以管理容器代码图像的执行,其调用共享资料库代码图像并且使用页表映射将资料库的物理页加载到容器代码进程的线性地址空间中。在一个或多个实施例中,加密资料库密钥和资料库图像哈希可作为密钥句柄(handle)来提供,所述密钥句柄可通过对加密资料库密钥和资料库图像哈希共同加密来生成。
在1810,操作系统1522能够存储加密资料库密钥和加密资料库图像哈希(以及可能的未被加密的资料库图像哈希)。如在1814所示,可由安全引擎签署的资料库名称和加密资料库密钥被提供给调用资料库的容器进程(例如1540)(或者为其存储)。
应当注意,除了执行对资料库图像和资料库密钥的加密之外,安全引擎1530还准备容器代码图像,如参照图16A-16B的1610-1618所述。但是,如果调用共享资料库的容器进程已经被例示,则安全引擎1530不需要执行对资料库图像和资料库密钥的加密和哈希。也就是说,当容器进程从共享资料库调用已被其他容器所加载的功能时,则所述资料库已经被建立。在这种情形中,代码密钥已经被生成,并且在进程第一次需要资料库时被加载。因此,当前容器进程只使用所述资料库。安全引擎1530仍然可向操作系统1810发送加密资料库密钥和加密资料库图像。
一旦加密资料库密钥由操作系统1522来存储,操作系统1522可在1812发出另一个指令(诸如EnterSecureImage),以起动安全容器进程(诸如第一容器进程1540)。将被执行的加密容器图像的加密代码密钥可在EnterSecureImage指令中被传递到处理器1520。虽然图18A中未示出,但是在起动容器进程1540之前可执行检验,如图16B的1624-1630中所示。
当指令被发出时,控制在1820传递给处理器1520。在1822,能够采用处理器密钥对加密容器代码密钥进行解密。另外,处理器1520能够转储清除任何当前存储的指令的指令高速缓存1580。指令高速缓存1580的逻辑(例如控制电路模块1582)能够被设置或编程为使用容器代码密钥对加密容器代码图像进行解密,以得到能够在处理器管线中执行的解密容器代码(或指令)。另外,数据高速缓存1586也可被转储清除,并且其逻辑(例如控制电路模块1588)也可被设置成使用与通过执行加密容器代码图像所例示的进程关联的数据密钥。在1824,指令高速缓存1580在其入口点对加密容器代码图像进行解密,并且例示第一容器进程1540。
在1830,资料库的可写区域被复制到可调用所述资料库的容器进程的地址空间中。资料库和应用可在其二进制中包括某些数据段(例如变量)和可能的其他段,其能够在所述资料库或应用的整个执行中被更新。相应地,这些可写段不是由不同容器进程共享的,而是被写入可调用所述资料库或应用的每个容器进程的地址空间中。因此,在1830,第一容器进程1540能够将资料库代码图像(例如二进制)的可写数据段(和可写的其他段,若有的话)复制到第一容器进程1540和调用所述资料库的任何其他容器进程的地址空间中。一旦可写数据段被复制,则能够对每进程存储器来计算哈希。
在1832,可检验资料库图像。可读取来自密钥句柄的资料库图像哈希连同在1830所计算的对应可写数据哈希。如果密钥句柄被加密,则它可被解密,使得能够读取资料库图像哈希。可在置信资料库哈希列表中执行查找。如果未找到资料库图像哈希或可写数据哈希,则资料库代码图像不运行,并且可返回差错或者可允许程序崩溃。VerifyHash指令1624可用来检验预计图像哈希对应于加密资料库密钥,其中资料库密钥用来对资料库图像的哈希进行加密。
备选地,资料库图像或应用的发布者的数字签名可用于所述检验。如果资料库图像(或应用)的数字签名匹配可写数据段的初始值的哈希,则资料库图像(或应用)被检验。否则,可返回差错。
如果在1832的检验成功,则在1834,进程1540能够识别哪一个资料库代码图像将被加载,并且能够将所检验的加密资料库密钥复制到所识别资料库代码图像的虚拟表(vtable),这指示信任所识别资料库代码图像。
参照图18C,在1840,可使用在存储器地址(例如加密资料库图像的存储器位置的线性地址和/或加载资料库的逻辑基址)中传递的新指令(例如KCall)和加密资料库密钥来调用共享资料库。当指令被发出时,控制在1842传递给处理器1520。在1844,能够采用处理器密钥对于在1840在指令中传递的加密资料库密钥进行解密。另外,返回地址和调用方的加密代码密钥的地址(例如第一容器进程1540的加密代码密钥的地址或者加密代码密钥本身可被存储在调用栈上)能够被推送到栈存储器上。另外,共享资料库的代码密钥能够被存储在寄存器中,以及指令指针能够跳转到所加载资料库代码图像的所提供存储器地址。
在1844,处理器1520可转储清除任何当前存储的指令的指令高速缓存1580,尽管来自容器进程和共享资料库的代码均可在指令高速缓存中共存,因为它们通过地址来区分。指令高速缓存1580的逻辑(例如控制电路模块1582)能够被设置或编程为使用资料库密钥对加密资料库图像进行解密,以得到能够在处理器管线中执行的解密资料库代码(或指令)。为数据高速缓存1586所编程的数据的进程密钥未改变,因为资料库代码使用相同数据密钥对它在由为其生成数据密钥的进程所调用时访问和/或操纵的数据进行加密和解密。
在1846,指令高速缓存1580开始对加密资料库图像进行解密。指令高速缓存1580使用在其逻辑中被编程的资料库密钥对资料库代码图像中的代码进行解密。数据高速缓存1586使用进程的数据密钥对于由资料库代码在其执行期间所访问和/或操纵的数据进行解密和加密。
一旦共享资料库已经完成执行,可使用新指令(例如KRet)将控制返回给调用方(例如第一容器进程1540)。在1850,从栈来得到返回地址和调用方的加密密钥。指令高速缓存1580的逻辑(例如控制电路模块1582)能够被设置或编程为使用进程的代码密钥,所述代码密钥能够通过使用处理器密钥对调用方的加密密钥进行解密来得到。已经为数据高速缓存1586所编程的进程的数据密钥未被改变,并且数据可在进程正运行的同时继续使用相同数据密钥被解密和加密。
图19、图20和图21分别是框图,示出与调用相同共享资料库的两个并发进程关联的数据和代码的各种可能存储器布局。图19是在两个容器进程A和B调用共享资料库X以及只有资料库代码在两个进程A与B之间共享的情形中的数据和代码的可能存储器布局1900的框图。为两个容器进程所分配的存储器包括用于进程A的第一线性空间1910和用于进程B的第二线性空间1920。资料库X 1930由两个进程来调用,但是只有资料库X的代码被共享(例如属于资料库X的数据可能不被共享)。与资料库X关联的代码作为加密代码1932被存储在物理级,并且使用为资料库X所生成(或者所得出)的资料库代码密钥来加密和解密。
在图19的示例中,进程A的加密数据1912不与进程B共享,而可能仅被映射到进程A线性空间1910中,如通过.rodata 1914、.data 1915、.bss 1916、堆1917和栈1918所示。进程B的加密数据1922不与进程A共享,而可能仅被映射到进程B线性空间1920中,如通过.rodata 1924、.data 1925、.bss 1926、堆1927和栈1928所示。但是,在这个示例中,资料库X的加密代码1932的相同副本可由进程A和进程B来共享,如通过.text(代码)1933A和1933B所示。
在数据分别被存储和检索时,所有数据访问将当前每进程数据密钥用于对数据进行加密和解密。例如,在物理级,与进程A关联的数据作为加密数据1912被存储,并且使用为进程A所生成(或者所得出)的数据密钥被加密。与进程B关联的数据作为加密数据1922被存储,并且使用为进程B所生成(或者所得出)的数据密钥被加密。在这个示例中,表示为“.rodata”的常量数据包含各自采用来自程序二进制的值被初始化的只读全局分配,以及表示为“.bss”的未初始化数据包含在程序开始时归零的全局分配。还应当注意,每个进程还包含除了图19中所示代码和数据之外的代码和数据。
图20是在两个容器进程C和D调用共享资料库Y的情形中的数据和代码的可能存储器布局2000的框图。资料库代码和全局变量在两个进程C与D之间共享。为两个容器进程所分配的存储器包括用于进程C的第一线性空间2010和用于进程D的第二线性空间2020。资料库Y 2030由两个进程来调用,并且与资料库Y关联的代码和全局变量均被共享。与资料库Y关联的代码和全局变量作为加密代码和数据2032被存储在物理级,并且使用为资料库Y所生成(或者所得出)的资料库代码/数据密钥来加密和解密。
在图20的示例中,进程C的加密数据2012不与进程D共享,而可能仅被映射到进程C线性空间2010中,如通过.data 2015、.bss 2016、堆2017和栈2018所示。进程D的加密数据2022不与进程C共享,而可能仅被映射到进程D线性空间2020中,如通过.data 2025、.bss2026、堆2027和栈2028所示。但是,在这个示例中,资料库Y的代码和数据(即,全局变量)均由进程C和进程D共享。资料库Y的加密代码2032的相同副本可由进程C和进程D共享,如通过.text (代码) 2033A和2033B所示,以及全局变量的相同副本可由进程C和进程D共享,如通过.rodata 2034A和2034B所示。
在这个示例中,对.rodata全局分配(例如使用采用页表中的只读准许的RIP(指令指针寄存器)相对访问的那些分配)的数据访问自动使用资料库特定代码/rodata密钥。向处理器指示何时应当将资料库特定代码/rodata密钥用于数据访问的备选方式是通过例如在从资料库的密钥句柄中存储的范围指定来初始化的寄存器中向处理器指示.rodata段的范围。当生成指向常数全局变量的指针以使得编译器无法确保RIP相对访问始终对它执行时,编译器能够将它例如移动到.data,以支持正确功能。虽然页准许处于操作系统控制下并且可能潜在地使错误密钥被用于这种情况中,但是它们仍然无法使用这种方式来访问和/或操纵数据。
在数据分别被存储和检索时,其他数据访问将当前每进程数据密钥用于对数据进行加密和解密。例如,在物理级,与进程C关联的数据作为加密数据2012被存储,并且使用为进程C所生成(或者所得出)的数据密钥被加密。与进程D关联的数据作为加密数据2022被存储,并且使用为进程D所生成(或者所得出)的数据密钥被加密。
图21是两个容器进程E和F调用共享资料库Z的情形的可能存储器布局2100的框图。资料库代码和全局变量在两个进程E与F之间共享。因此,资料库Z的代码2132的加密块的相同副本可由进程E和进程F共享,如通过.text (代码) 2133A和2133B所示,以及全局变量的相同副本可由进程E和进程F共享,如通过.rodata 2134A和2134B所示。为两个容器进程所分配的存储器包括用于进程E的第一线性空间2110和用于进程F的第二线性空间2120。资料库Z 2130由两个进程来调用,并且与资料库Z关联的代码和全局变量均被共享。
但是,在这种情形中,位置无关密码绑定用于资料库内容。相应地,与资料库Z关联的代码和全局变量被存储在物理级,其中代码和数据的每个块的加密被绑定到与资料库开头的线性偏移而不是绝对线性地址。当进程E调用资料库Z时,进程E中的资料库Z的基址2112被存储在新寄存器(例如KLinBase寄存器)中。类似地,当进程F调用资料库Z时,进程F中的资料库Z的基址2122被存储在新寄存器(例如KLinBase寄存器)中。本文先前所述的新指令(例如KCall和KRet)可用来更新所述新寄存器(例如KLinBase寄存器)。
图22是示出按照实施例、与为调用容器进程加载共享资料库代码图像关联的示例进程的示例流程图2200。与流程图2200对应的一个或多个操作可由诸如多租户系统1500的多租户系统的硬件、固件和/或软件来执行。在这个示例中,一个或多个操作可由诸如多租户平台1510中的安全引擎1530的安全加载器1523的安全加载器来执行。在一个示例中,当容器进程尝试调用多租户系统中的共享资料库时,可执行流程图2200的操作。
在2202,安全加载器可从容器进程(例如1540)接收加载共享资料库的请求。资料库加载请求能够包括置信密码身份,诸如资料库图像哈希(例如1804)。在2204,安全加载器从文件系统中检索加密资料库代码图像,所述文件系统能够被存储在存储器中。在2206,确定所检索的内容(例如加密资料库代码图像)是否匹配资料库请求中的密码身份(例如资料库图像哈希)。在一个示例中,加密资料库密钥通过处理器密钥被解密,并且解密资料库密钥用来对所检索的加密资料库代码图像进行解密。能够基于资料库二进制的数字签名证书来检验资料库的密码身份。二进制的作者能够提供对元数据所计算的数字签名证书,诸如供应商(例如唯一完全限定域名)、资料库名称、版本、二进制代码和常量(即,只读)数据的哈希、可写数据的初始值的哈希等。安全引擎可检验与资料库关联的数字签名。
如果所检索的内容不匹配资料库请求中的密码身份,则适当差错代码能够在2208被返回,并且资料库图像可以不被加载。如果所检索的内容不匹配资料库请求中的密码身份,则在2210,安全加载器能够将资料库代码页映射为与其他进程共享。如果支持多个数据密钥,则为常量数据(例如rodata)。另外,安全加载器使用进程特定数据密钥来创建其他资料库页。
来看图23,示出按照实施例、具有多租户平台1510的附加可能细节的框图。多租户平台1510包括安全用户中断能力。多用户平台1510将第一容器进程1540示为运行应用1542,以及将第二容器进程1550示为运行应用1552。为了简洁起见,未示出资料库,并且未示出密码高速缓存1580和1586。但是,用户中断模块2320示为安全引擎1530的部分。另外,第一容器进程1540示为被调用进程(或接收方),而第二容器进程1550示为调用进程(或发送方)。相应地,作为被调用进程,第一容器进程1540包括用户中断(UI)操控器2342和唯一进程标识符2344。作为调用进程,第二容器进程1550包括用户中断(UI)操控器2352和用户目标表(UITT)2354。在至少一些实施例中,第一容器进程1540和第二容器进程1550的代码图像可分别包括安全操控器2340和2350,以用于操控异步中断,如本文将进一步描述。
为了确保容器之间的安全通信,用户中断能力的实施例允许直接向用户空间传递中断。它能够实现两个进程(例如第一容器进程1540和第二容器进程1550)之间的直接通信。它还允许在没有要求的情况下装置与进程之间的直接通信。这些直接通信不要求操作系统(诸如主机操作系统1522)的干预。操作系统可提供建立用户中断的某个初始支持。在至少一个实施例中,可使用用户中断模块2320来初始化用户中断能力,所述用户中断模块可配置为安全引擎1530的部分。
图23中示出多租户平台1510中的用户中断的示例一般流程。在这个示例一般流程中,每进程代码和数据密钥(和资料库密钥,若有的话)如本文先前所述已经被建立。当第一容器被起动时,在2301A,安全用户中断通道在第一容器进程1540与安全引擎1530之间被建立以供通信。类似地,当第二容器被起动时,在2301B,安全用户中断通道在第二容器进程1540与安全引擎1530之间被建立以供通信。当第一容器进程1540发起与第二容器进程1550的进程间通信时,在2302,第一容器进程提交进程间通信(IPC)中断注册请求,以将自身注册为中断接收方。作为注册的部分,中断接收方(例如1540)通过将UI操控器代码的线性地址存储到寄存器(例如MSR)中对每用户线程中断操控器2342进行编程。每当中断由发送方来触发时,中断操控器2342操控中断。
在接收到IPC中断注册请求时,在2303,安全处理器请求密钥管理硬件1532生成将要在通信容器进程(例如1540和1550)之间使用的共享中断密钥。密钥管理硬件1532向安全引擎1530发送中断密钥(或者中断密钥的密钥句柄)。安全引擎采用硬件密钥对中断密钥进行加密,以生成加密中断密钥。
在2304,安全引擎1530与IPC中断接收方(例如第一容器进程1540)共享加密中断密钥。安全引擎1530为中断接收方(例如第一容器进程1540)分配和初始化存储器中的唯一进程中断描述符(UPID)。例如,加密中断密钥可被存储在UPID中当前被保留和/或在用户中断通知处理期间被忽略的位位置中。安全引擎1530还可装载用户中断相关寄存器,诸如模型特定寄存器(MSR)。在一个示例中,可填充下列MSR:IA32_UINTR_HANDLER、IA32_UINTR_STACKADJUST和IA32_UINTR_MISC等。
位位置 | 名称 | 描述 |
0 | 有效位 | 如果这个位被设置,则PIR中存在一个或多个用户中断的未完成通知。 |
7:1 | 保留 | 必须为0 |
15:8 | 用户向量(UV) | 用户中断号,可在范围0-63中对齐,因此15:4必须为0。 |
63:16 | 保留 | |
127:64 | UPIDADDR | UPID的线性地址(64字节对齐,因此位69:64必须为0)。 |
在2305,中断发送方(例如第二容器进程1550)被通知关于中断注册。在2306,中断发送方(例如第二容器进程1550)向安全引擎1530自行注册IPC中断。为了注册中断发送方,安全引擎1530在发送方的每线程目标表(UITT)2354中添加中断的新条目。UITT条目包括接收方的UPID的线性地址以及将被发送的IPC中断的用户向量。另外,加密中断密钥也可被存储在UITT条目中。安全引擎采用共享中断密钥(或者潜在地采用硬件密钥)对UITT条目进行加密,并且经由在2301B初始设置的通信信道向发送方返回UITT条目索引、中断标识符(诸如中断号,区分第二进程可发起的中断与第二进程发起的其他中断)、与接收方进程(例如第一容器进程1540)有关的信息等。在一个示例实现中,UITT表中的UITT条目可具有与下列方面相同或相似的格式和信息:
位位置 | 名称 | 描述 |
0 | 有效位 | 如果这个位被设置,则PIR中存在一个或多个用户中断的未完成通知。 |
7:1 | 保留 | 必须为0 |
15:8 | 用户向量(UV) | 用户中断号,可在范围0-63中对齐,因此15:4必须为0。 |
63:16 | 保留 | |
127:64 | UPIDADDR | UPID的线性地址(64字节对齐,因此位69:64必须为0)。 |
在2307,发送方这时能够通过使用中断指令(诸如SENDUIPI(UITT_INDEX))来生成IPC中断请求。处理器1520能够检验UITT条目是有效的,并且然后能够基于接收方的线性地址(所述线性地址被存储在UITT条目中)来查找接收方的UPID。处理器1520然后能够调用接收方的UI操控器,以及接收方和发送方能够开始进程间通信。共享中断密钥可在进程间通信被建立的同时用于接收方与发送方之间的通信。例如,共享中断密钥可用来对于进程之间所共享的消息或其他数据进行加密和解密。
图24是示出用户中断期间所使用的信息的所选部分的框图。当中断发送方向处理器2420中的安全引擎注册时,处理器能够将条目2430添加到发送方用户中断目标表(UITT)2410,以提供中断发送方成功发出中断所需的信息,以建立与特定容器进程之间的进程间通信。所述进程能够使用UITT地址2402将UITT条目2430存储在适当存储器位置。除了其他信息之外,UITT条目2430还能够包括中断接收方的用户进程中断描述符(UPID)2436的线性地址、通过硬件密钥所加密的共享中断密钥2434(或者共享中断密钥的密钥句柄)和用户向量2432。用户向量2432能够识别发送方,并且包括发送方的中断操控器2352的存储器位置。接收方的UPID 2436能够被存储在公布中断请求(PIR)2440中。
图25示出按照实施例、与多租赁环境中的容器进程之间的进程间通信关联的示例操作的流程图2500。流程图2500的一个或多个操作可由诸如多租户平台1510的多租户平台的硬件、固件和/或软件来执行。在这个示例中,一个或多个操作可由安全引擎(例如1530)、包括诸如iCache(例如1580)的指令高速缓存的处理器(例如1520)、第一容器进程(例如1540)和第二容器进程(例如1550)来执行。虽然图25中参照多租户平台1510的特定实体示出具体操作和通信,但这是为了说明的目的而进行的,并且应当理解,多租户平台1510的各种其他配置是可能的,并且在一些实施例和实现中,指令和/或操作可被组合或分离,或者由不同实体来执行。
如在2502所示,第一容器进程1540在多租户平台1510上运行。又如在2504所示,第二容器进程1550在多租户平台1510上运行。可使用如本文先前所述的密码计算、采用每进程密钥来配置容器进程1540和1550。
在2506,第一容器进程1540向处理器1520注册为来自第二容器进程1550的进程间通信(IPC)中断的中断接收方。当第一容器进程1540向安全引擎发送注册请求时,这个注册经由安全引擎1530来操控。在2508,安全引擎在存储器中为第一容器进程1540分配和初始化存储器中的每进程唯一进程中断描述符(UPID)(例如2344)。另外,安全引擎1530还能够为第一容器进程1540对用户中断相关寄存器(例如MSR)和每进程用户中断操控器(例如2342)进行编程。
在2510,安全引擎1530能够例如经由密钥管理硬件(例如1532)为第一和第二容器进程1540和1550生成共享中断密钥。安全引擎1530能够采用硬件密钥(例如处理器密钥)对中断密钥进行加密。在2412,加密的共享中断密钥能够被传递到第一容器进程1540。
应当注意,图25描述一实施例,其中共享中断密钥由密钥管理硬件来生成,并且然后在被传递到第一和第二容器进程之前采用硬件密钥来加密。在其他实施例中,中断密钥可能如本文先前所述来得出。在该其他实施例中,生成唯一密钥标识符,并且能够通过使用硬件密钥对唯一密钥标识符(可能连同某个常量数据一起)进行加密来得出实际共享中断密钥。因此,唯一密钥标识符而不是加密中断密钥会被传递到第一和第二容器进程1540和1550。
在2514,安全引擎能够创建第二容器进程1550的UITT的条目。所述条目能够包含第一容器进程的UPID的线性地址和加密的共享中断密钥(或者加密的共享中断密钥的密钥句柄)。所述条目还可包含中断号,所述中断号能够是识别特定中断的编号。在一个实施例中,加密的共享中断密钥能够被存储在条目的开头处或附近,并且条目的其余部分可采用共享中断密钥(在它被加密之前)来加密。在另一个实施例中,整个条目可采用硬件密钥来加密。安全引擎1530可将UITT条目存储在第二容器进程1550的UITT表中。
在2516,安全引擎1530通知第二容器进程1550关于中断注册。第二容器进程能够自行注册为IPC中断的中断发送方。在2518,安全引擎能够经由先前被建立的安全通信信道向第二容器进程1550返回UITT条目索引、中断号以及与第一容器进程1540有关的信息。
在2520,第二容器进程1550能够经由指令来请求由处理器为第一容器进程1540来调用中断。指令可包括作为参数的UITT索引,使得处理器1520能够查找UITT条目,以确定要调用哪一个中断、哪一个实体是中断接收方以及哪一个代码将被调用(例如UI操控器2342)。例如,指令可以是SENDUIPI(UITT_INDEX)。响应于所述指令,在2522,处理器1520能够使用UITT索引参数来查找发送方的UITT(例如2354)中的UITT条目。处理器能够从UITT条目中拉取接收方的UPID的线性地址,并且使用所述线性地址来读取接收方的UPID。UPID中的信息指示要调用哪一个中断、哪一个进程正接收所述中断以及要执行哪一个代码。在2524,第一容器进程1540调用其自己的UI操控器(例如2342),以操控中断。相应地,在无需涉及特许软件(例如操作系统中断操控器)的情况下安全地实现中断。接收方容器进程而是执行其自己的UI操控器。另外,如果第一和第二容器进程共享数据,则所述数据能够使用共享中断密钥被加密和解密,所述共享中断密钥对除了第一和第二容器进程之外的软件被隐藏。通过硬件密钥所加密的共享中断密钥(或者是要求通过硬件密钥的加密以得出中断密钥的唯一密钥标识符)的使用防止诸如主机操作系统1522的特许软件访问共享数据或者了解共享数据(若它被访问)。
图26示出按照实施例、与多租赁环境中的异步事件/中断操控关联的操作的示例流程图2600。硬件装置2601和多租户平台(例如1510)的各种实体可进行通信并且执行操作,以使第一容器进程1540能够操控来自硬件装置2601的事件/中断而没有向特许软件暴露代码和数据。流程图2600的一个或多个操作可由诸如多租户平台1510的多租户平台的硬件、固件和/或软件来执行。在这个示例中,一个或多个操作可由硬件装置(例如2601)、安全引擎(例如1530)、包括诸如iCache(例如1580)的指令高速缓存的处理器(例如1520)和容器进程(例如1540)来执行。虽然图26中参照多租户平台1510的特定实体示出具体操作和通信,但这是为了说明的目的而进行的,并且应当理解,多租户平台1510的各种其他配置是可能的,并且在一些实施例和实现中,指令和/或操作可被组合或分离,或者由不同实体来执行。
一般来说,异步中断能够是一种事件,所述事件对应于由硬件装置所生成并且由处理器所检测的电信号,其中由处理器所执行的指令序列可进行响应而被改变。当容器正执行时,异步事件可能发生,包括定时器中断,这能够引起上下文切换、容器的装置输入/输出(I/O)等。用户中断进程能够配置成保护数据和代码免受多租户环境中的其他软件(包括特许软件)的影响。所述使用可包括但不一定局限于通用定时器和装置I/O中断(假定装置能够生成用户中断)或者I/O栈的事件驱动分发(例如用户空间联网和传输)。
如在2602所示,第一容器进程1540在多租户平台1510上运行。可使用如本文先前所述的密码计计、采用每进程密钥来配置第一容器进程1540。
在2604,第一容器进程1540向处理器1520注册为来自硬件装置2601的装置中断的中断接收方。当第一容器进程1540向安全引擎发送注册请求时,这个注册经由安全引擎1530来操控。在2606,安全引擎在存储器中为第一容器进程1540分配和初始化存储器中的每进程唯一进程中断描述符(UPID)(例如2344)。另外,安全引擎1530还能够为第一容器进程1540对用户中断相关寄存器(例如MSR)和每进程用户中断操控器(例如2342)进行编程。
在2608,安全引擎1530能够例如经由密钥管理硬件(例如1532)为第一容器进程1540和硬件装置2601生成进程-装置共享中断密钥。安全引擎1530能够采用硬件密钥(例如处理器密钥)对进程-装置共享中断密钥进行加密。在2410,加密的进程-装置共享中断密钥能够被传递到第一容器进程1540。
虽然图26描述一实施例,其中进程-装置共享中断密钥由密钥管理硬件来生成,并且然后在被传递到第一容器进程之前采用硬件密钥被加密,但是在其他实施例中,中断密钥可能如本文先前所述来得出。在该其他实施例中,生成唯一密钥标识符,并且能够通过使用硬件密钥对唯一密钥标识符(可能连同某个常量数据一起)进行加密来得出实际进程-装置共享中断密钥。因此,唯一密钥标识符而不是加密的进程-装置共享中断密钥会被传递到第一容器进程1540和硬件装置2601。
在2612,安全引擎能够创建硬件装置2601的UITT的条目。所述条目能够包含第一容器进程的UPID的线性地址和加密的进程-装置共享中断密钥(或者加密的进程-装置共享中断密钥的密钥句柄)。所述条目还可包含中断号,所述中断号能够是识别特定中断的编号。在一个实施例中,加密的共享中断密钥能够被存储在条目的开头处或附近,并且条目的其余部分可采用共享中断密钥(在它被加密之前)来加密。在另一个实施例中,整个条目可采用硬件密钥来加密。安全引擎1530可将UITT条目存储在硬件装置2601的UITT表中。
在2614,安全引擎1530通知硬件装置2601关于中断注册。硬件装置2601能够自行注册为装置中断的中断发送方。在2616,安全引擎能够向硬件装置2601返回UITT条目索引、中断号以及与第一容器进程1540有关的信息。
在2618,硬件装置2601能够经由指令来请求由处理器为第一容器进程1540来调用中断。指令可包括作为参数的UITT索引,使得处理器1520能够查找UITT条目,以确定要调用哪一个中断、哪一个实体是中断接收方以及哪一个代码将被调用(例如UI操控器2342)。例如,指令可以是SENDUIPI(UITT_INDEX)。响应于所述指令,在2620,处理器1520能够使用UITT索引参数来查找发送方的UITT(例如硬件装置的UITT)中的UITT条目。处理器能够从UITT条目中拉取接收方的UPID的线性地址,并且使用所述线性地址来读取接收方的UPID。UPID中的信息指示要调用哪一个中断、哪一个进程正接收所述中断以及要执行哪一个代码。在2622,第一容器进程1540调用其自己的UI操控器(例如2342),以操控中断。相应地,在无需涉及特许软件(诸如操作系统的中断操控器)的情况下安全地实现中断。接收方容器进程而是执行其自己的UI操控器。另外,如果第一和第二容器进程共享数据,则所述数据能够使用共享中断密钥被加密和解密,所述共享中断密钥对除了第一和第二容器进程之外的软件被隐藏。通过硬件密钥所加密的共享中断密钥(或者是要求通过硬件密钥的加密以得出中断密钥的唯一密钥标识符)的使用防止诸如主机操作系统1522的特许软件访问共享数据或者了解共享数据(若它被访问)。
图27示出按照备选实施例、与多租赁环境中的示例异步事件/中断操控关联的操作的流程图2700。流程图2700的一个或多个操作可由诸如多租户平台1510的多租户平台的硬件、固件和/或软件来执行。在这个示例中,一个或多个操作可由包括诸如iCache(例如1580)的指令高速缓存的处理器(例如1520)、操作系统(例如1422)和第一容器进程(例如1540)来执行。虽然图27中参照多租户平台1510的特定实体示出具体操作和通信,但这是为了说明的目的而进行的,并且应当理解,多租户平台1510的各种其他配置是可能的,并且在一些实施例和实现中,指令和/或操作可被组合或分离,或者由不同实体来执行。
如在2702所示,第一容器进程1540在多租户平台1510上运行。可使用如本文先前所述的密码计计、采用每进程密钥来配置第一容器进程1540。
在2704,如本文先前所述,可由处理器1520接收异步事件/中断。在一个实施例中,响应于在2706检测异步事件,处理器1520能够保存状态,包括例如由第一容器进程1540所使用的通用寄存器(GPR)以及第一容器进程敏感或所需的任何其他寄存器或数据。在这个实施例中,状态能够使用第一容器进程的数据密钥经由数据高速缓存(例如1586)被加密,并且按照加密形式被保存到栈。
在另一个实施例中,响应于检测异步事件,控制传递给第一容器进程1540,以及在2708,以及安全操控器(例如2340)能够在当前执行进程的入口点运行。这个安全操控器可在与第一容器进程1540关联的容器代码图像内提供。在至少一个实施例中,这个安全操控器能够作为用户级中断被调用。在2710,安全操控器能够保存与诸如第一容器进程1540所使用的容器代码图像关联的任何状态以及第一容器进程敏感或所需的任何其他寄存器或数据。在一种情形中,第一容器进程1540能够对状态信息进行加密,并且使用不安全指令将它保存到存储器(例如保存到栈)。在另一个实施例中,能够增强不安全保存指令,以在数据被存储到存储器之前对它进行加密。在这种情形中,安全操控器能够识别将被保存的状态,并且使用在数据被存储之前对它进行加密的修改指令来保存状态信息。在这些实施例中,执行进程的状态由进程本身而不是操作系统1522来保存。在备选实施例中,安全操控器能够向处理器1520提供状态信息,以使处理器对状态信息进行加密并且将它保存到栈。
一旦安全操控器已经保存状态信息(或者在自检测到异步事件以来的预定时间量到期之后),在2712,处理器1520能够确定安全操控器是否成功完成执行。如果不是的话,则在2714,处理器能够清除状态(例如清除GPR),以及在2716,向操作系统1522返回差错。
如果安全操控器成功执行,则在2718,处理器1520能够转储清除第一容器进程1540的任何秘密(例如高速缓存等)。在一个示例中,处理器1520能够清除任何当前存储的指令的指令高速缓存1580。如果使用推导密钥,并且每个高速缓存线具有标签(例如唯一密钥标识符),则转储清除密码高速缓存能够通过只切换、修改或者以其他方式遮蔽高速缓存标签来实现。编程有与第一容器进程1540关联的代码密钥的指令高速缓存1580的逻辑(例如控制电路模块1582)可被清除,使得操作系统1522无法从第一容器进程1540的容器图像中对代码进行解码。另外,数据高速缓存1586也可被转储清除,并且它的编程有与第一容器进程关联的数据密钥的逻辑(例如控制电路模块1588)也可被清除。
一旦密码高速缓存被转储清除或者以其他方式被清除,则处理器1520能够在不向操作系统暴露第一容器进程1540的任何秘密的情况下将控制返回给操作系统1522,以操控异步事件。因此,操作系统被保持在置信计算库之外。
在操控异步事件之后,操作系统能够将控制返回给第一容器进程1540的安全代码图像。在2722,恢复第一容器进程1540的安全执行的指令可由操作系统来执行。例如,诸如EnterSecureImage的指令可被执行,以及加密代码密钥可作为参数被传递到处理器1520。在2724,处理器1520能够为安全代码图像准备硬件以恢复执行,如本文先前所述。例如,恢复执行可包括采用第一容器进程的适当代码和数据密钥对密码高速缓存重新编程。
图28A-28B示出按照实施例、与多租赁环境中的容器迁移进程关联的操作的示例流程图2800A-2800B。在至少一个实施例中,一组或多组操作对应于流程图2800A-2800B的活动。图28A示出容器代码图像将从其中被迁移的源节点2820A上的示例操作以及控制和数据流。图28B示出容器代码图像将被迁移到的目标节点2820B上可能发生的示例操作以及控制和数据流。源节点2820A和目标节点2820B表示多租户平台架构,诸如本文所示和所述的那些架构(例如1510、1100)。在这个示例中,源节点2820A能够包括安全引擎2830A、处理器2840A(包括指令高速缓存和数据高速缓存)、操作系统2850A和容器进程2860A。目标节点2820B能够包括安全引擎2830B、处理器2840B(包括指令高速缓存和数据高速缓存)、操作系统2850B和容器进程2860B。处理器2840A和2840B可按照与本文所述的其他处理器(例如1520、602)相同或相似的方式来配置,以及安全引擎2830A和2830B可按照与本文所述的其他安全引擎(例如1530)相同或相似的方式来配置。操作系统2850A和2850B可按照与本文所公开的其他操作系统(例如1522)相同或相似的方式来配置,并且一般可配置成在多租户平台中运行。容器进程2860A是源节点2820A上所例示的自将被迁移到目标节点2820B的容器代码图像的执行的示例进程。容器进程2860B是目标节点2820B上所例示的在源节点上的容器代码图像被迁移到目标节点之后的示例进程。虽然图28A和图28B中参照源节点2820A和目标节点2820B的特定实体示出具体操作和通信,但这是为了说明的目的而进行的,并且应当理解,节点的各种其他配置是可能的,并且在一些实施例和实现中,指令和/或操作可被组合或分离,或者由不同实体来执行。
在一个或多个实施例中,安全引擎2830A和2830B可配置成执行安全迁移操作,如本文进一步描述。在其他实施例中,安全迁移代理可在源节点和目标节点中配置为与其对应安全引擎2830A和2830B分离的实体。例如,安全迁移代理可配置为处理器2840A的部分,但是与安全引擎2830A不同,以及安全迁移代理可配置为处理器2840B的部分,但是与安全引擎2830B不同。
在这个示例中,为容器进程2860A已经生成(或者能够从为其所生成的唯一密钥标识符来得出)包括数据密钥和代码密钥的进程密钥。进程密钥可如本文先前例如参照图16A-16B所述来生成。代码密钥用来对于与容器进程2860B对应的代码图像的代码进行加密和解密。数据密钥用来对于与容器进程2860A关联的数据进行加密和解密。
如图28A-28B中所示的容器迁移进程包括三个主要操作。第一,源节点2820A保存运行进程(例如容器进程2860A)的状态,所述状态采用运行进程的进程密钥(代码密钥)被加密。第二,源节点2820A和目标节点2820B相互认证,并且在它们建立安全TLS会话时交换迁移密钥。第三,容器状态通过所建立的TLS连接被传输到目标节点2820B。目标节点2820B执行如参照图16A-16B所述的初始化进程,例如以加载和恢复容器的运行状态,并且恢复目标节点上的执行。
参照图28A,如在2802所示,容器进程2860A在源节点2820A上运行。在2804,操作系统2850A接收迁移请求。在2806,操作系统挂起容器进程2860A的执行。在一个示例中,新指令可由操作系统来执行,以指示处理器2840A将与容器进程2860A对应的代码图像从源节点2820A迁移到目标节点2820B。指令的一个示例是InitMigration([IN] EncryptedKey)。容器进程2860A的加密代码密钥可作为指令中的参数被传递。
在2808,处理器2840A采用硬件密钥(例如处理器密钥)对加密代码密钥进行解密,所述加密代码密钥作为参数从操作系统被传递。另外,处理器2840A还能够获取执行状态的快照,包括寄存器和可能的另一存储器。一般来说,可在快照中捕获在容器进程2860A正运行的同时可能已经改变的任何动态存储器。处理器2840A能够使用解密代码密钥对快照进行加密,并且然后保存加密快照。
如在图28A中的2810以及在图27B中的2811所示,源节点2820A和目标节点2820B上的安全引擎(或独立迁移代理)能够使用其公有密钥证书相互认证,并且建立TLS会话。当TLS会话被建立以供通信时,源节点和目标节点能够交换迁移密钥(Km)。
在2812,源安全引擎2830A向目标节点2820B发送容器信息。在一个示例中,容器信息(Ci)能够包括证实密钥、初始容器代码图像、执行状态以及代码和数据密钥。初始容器代码图像可以是在源节点2820A上加载的原始容器代码图像。能够使用迁移密钥(Km)对容器信息(Ci)进行加密。另外,可对容器信息(Ci)计算SHA3哈希,以用于完整性检验。
在接收到容器信息时,在2815,目标节点2820B的安全引擎2830B使用迁移密钥(Km)对容器信息进行解密,并且使用通过容器信息所生成的哈希来检验被迁移容器的完整性。为了恢复目标主机上的容器执行,目标主机可沿用初始化过程,如本文先前参照图16A-16B所述。例如,在2817,操作系统2850B为容器代码图像分配存储器。在2819,容器代码图像能够被安排(若需要的话),使用代码密钥被加密,并且使用线性地址的至少一部分作为微调被加载到所分配存储器中。在2814,源节点2820A的操作系统2850A能够清除与源容器进程2860A关联的进程存储器和状态。
如上所述,在至少一个实施例中,源节点2820A向目标节点2820B发送使用代码密钥已被加密的容器代码图像和执行状态。备选地,源安全引擎(或源迁移代理)可发送解密容器代码图像和执行状态,而无需发送源代码和数据密钥。在这个实现中,目标节点2820B能够生成容器代码图像的代码和数据密钥的新集合。当密钥推导功能代替包装密钥用来按需生成代码和数据加密密钥时,这可以是期望的。由于得出密钥的主秘密可被绑定到平台,因此这个秘密可以不在源与目标节点之间共享。
在至少一些情形中,密码计算指针编码方案可假定平坦地址空间。但是,应用根据特定操作系统使用FS和GS相对访问,以引用具有非零段基的线程-本地存储。因此,使用密码计算指针编码方案对线程-本地存储进行加密可能潜在地引起线程-本地的加密指针表示与非线程-本地分配之间以及跨使用不同段基址的不同线程的线程-本地分配之间的冲突。为了避免这类冲突,段基址可能被结合到指针加密微调中。例如,段基址可能被添加到填充的固定地址位,以及块密码可能需要被修改以支持充分大的微调输入。
解决密码计算中的计数器模式漏洞
计数器模式加密提供保护数据的完善前向保密,假定它对给定指针位置不发生变化。例如,在一些密码计算(CC)实施例中,明文数据可在计数器操作模式中与密钥流进行XOR,以得到被存储在存储器层次结构中的明文,以及对手将无法只从密文中得到明文或者与明文有关的信息。但是,在程序执行期间,每个指针中的数据可能从其初始值被更新。对手可能能够通过观察受害者数据的变化(例如位翻转)来利用受害者。例如,在明文经过与密钥流的XOR操作以得到密文“A”并且明文的修改版本经过与同一密钥流的XOR操作以得到密文“A*”的情况下,对手可能观察A与A*之间的差异(例如通过将两者进行XOR以“消除”密钥流),并且潜在地得到与基本明文有关的信息。
解决这个漏洞的一种方式是使用完全数据扩散加密模式,例如,诸如电子码本(ECB)、异或-加密-异或(XEX)、具有密文窃取的基于XEX的微调码本模式(XTS)等。本文所述的方式可称作具有扩散的密码计算(CC)。这样,本公开的实施例可缓解计数器模式漏洞,诸如以上所述的漏洞或者本文所述的其他漏洞。例如,通过具有扩散的CC来缓解相同地址上的交叉分配重放。另外,具有扩散的CC可以以分配粒度来支持来自编码指针的认证安全上下文。进一步,具有扩散的CC可以以比作为分配的粒度的密钥域更细的粒度进行保护。
图29示出根据某些实施例的虚拟地址加密技术380的简化框图。在所示示例中,虚拟地址390经密码编码,以提供存储器中的数据对象之间的密码隔离。这样,实施例可提供如下密码保证:攻击者的虚拟地址可能仅以可忽略的概率与受害者的虚拟地址发生冲突。在所示示例中,虚拟地址390包括多个零位391、高地址位392、低地址位393和偏移394。高地址位392与非规范位%115相组合,并且作为明文输入被提供给计数器模式密码2930,其中虚拟地址390的低地址位393和大小字段2920作为微调输入被提供给密码2930。密码2930可以是32位可微调块密码,例如,诸如美国专利申请发表号US2020/01455187中公开的PRINCE密码、Simon密码或K密码。大小字段2920可指示存储器分配大小。例如,大小字段2920可指示用于二的幂(Po2)位存储器分配的指数,其中所分配的位数等于二的幂,所述幂为由大小字段所指示的数字(即,所分配位= 2size)。由密码2930所产生的密文如所示与虚拟地址390的低地址位393和大小字段2920相组合,以构成加密地址2940。
图30示出根据某些实施例的示例编码指针3000。示例编码指针3000可按照与图29的加密地址2940相似的方式被编码。在所示示例中,编码指针3000包括:调整位3001,用于调整槽边界(例如当调整位3001等于1时,编码指针地址应当增加或减少二的幂边界框的大小的一半,如通过大小字段2920或幂大小字段3002所示);幂大小字段3002,指示存储器分配的大小,如以上针对图29的大小字段2920所述;32个加密位,包括版本字段3003;canary字段3004,以及加密地址位3005,固定地址位3006(其可以是虚拟地址的低地址位,例如,如图29中所示);以及偏移3007(其可以是虚拟地址的偏移,例如,如图29中所示)。应当理解,在一些实施例中,每个存储器分配与唯一边界框关联,所述边界框的大小为二的幂。这是通过包含分配的二进制前缀描述的最小存储器区域。每分配唯一的这个边界框(boundingbox)用于产生密码秘密,所述密码秘密存在于指针编码中。
如以上针对图29所述,固定地址位3006和幂大小(PS)位3002可用作微调,以对从57至26的位进行加密。为了获得具有相同大小的相邻分配,对手的指针将在固定地址位3006中仅具有几个低阶位与目标受害者的分配有所不同。为了通过这种相邻指针来访问受害者的分配,对手必须做以下两件事:(1) 改变固定地址位以与对应受害者的位匹配;以及(2) 操纵加密32位,使得解密32位(位57-26)将与受害者的指针中的对应位匹配。要这样做,对手需要破坏指针加密算法。
图31示出根据某些实施例的受害者和对手的示例存储器分配。在一些情况下,每个存储器分配可被提供2n字节边界框(其中n = 1, 2, ...)。在密码计算(CC)环境中,每个数据对象可在计数器模式中被加密,其中计数器值通过对应分配的加密虚拟地址来微调。例如,对受害者的指针的x字节(2k-1 < x < 2k)分配3115通过如图31的2k字节边界框3110来限定。受害者能够生成受害者特定CC密钥流,并且能够在边界框3110内的任何位置执行读/写操作。但是,对手的指针A的y字节(2k < y < 2k+1)分配3125通过2k+1字节边界框3120来限定,所述边界框如所示与受害者的边界框3110重叠。对手能够生成对手特定密钥流,并且在整个边界框3120中执行读/写操作,所述边界框如所示与受害者的边界框3110重叠。对手可相应地在受害者的边界框3110中执行读/写操作。因此,对手可通过下列读取序列来访问受害者分配的数据3115:
Read1 <- Data 1 XOR {Victim Keystream} XOR {Adversary Keystream}
Read2 <- Data 2 XOR {Victim Keystream} XOR {Adversary Keystream}
其中Data1和Data 2表示受害者的边界框3110内的数据。对手然后可对每个读取进行XOR(即,Read1 XOR Read2),这会消除Read1和Read2的每个中的受害者密钥流和对手密钥流,从而允许对手得到:Data 1 XOR Data 2.这个所得值可携带与受害者的执行有关的有意义信息,并且因此为对手的利用提供潜在途径。
在以下论述中,考虑若干类型的对手,包括没有比受害者更多特权的Ring-3对手、旨在提取随机均匀分布的秘密(例如密钥)的进程内对手、旨在提取与受害者的数据有关的任何信息的进程内对手、提取任何数据的进程间对手、物理对手(例如经由冷引导或内插件(interposer))以及串通对手(例如软件进程间+物理)。全部是ring3对手,这意味着他们没有比受害者更多的特权。首先,进程内对手可能旨在提取随机均匀分布的秘密(例如密钥)。其次,进程内对手可能旨在提取任何数据。第三,进程间对手可能旨在提取不同进程的数据。最后,对手可能与VMM或内插件串通(即,它可能是软件进程间和物理对手)。
将会看到,以随机数据为目标的进程间对手永远不能够成功。这是因为根据定义,无法泄漏随机均匀分布的数据。例如,如果对手提取形式{Random Data 1} XOR {RandomData 2}的量,则对手不能够确定{Random Data 1}的位或者{Random Data 2}的位。还将会看到,利用除了重叠边界框之外的任何分配的进程内对手将无法在密码上生成访问受害者的数据的正确虚拟地址。但是,如果进程内对手以重叠边界框中的任何数据为目标,则上述问题可能存在。
以下描述基于额外加密级(有时表示为“扩散”)来提供一种解决方案,所述解决方案可在中间级高速缓存(MLC)、最后一级高速缓存(LLC)或者更靠近DRAM存储器(例如其中使用PRINCE加密)来执行。在一些实施例中,扩散可通过指针编码的大小字段(例如图29的大小字段2920或者图30的幂大小字段3002)来微调。本文所提供的解决方案是有效的,因为如果大小字段有所不同,则对抗越界访问始终双重扩散(double diffused)。当数据驻留在LLC中或者DRAM存储器中时,数据对写入被扩散——以及对读取再次被扩散。当数据驻留在L1数据高速缓存(又可称作数据高速缓存单元(DCU))上时,对手采用不同大小字段来访问受害者。由于物理地址(PA)有所不同,因此访问可被看作是DCU未命中。因此,在写入之前将存在从存储器的读取,并且数据将双重扩散。
图32示出根据某些实施例的示例扩散技术的简化框图3200。特别是,所示示例包括对具有不同密钥(密钥2)的计数器模式加密数据执行的附加加密级(又通过“扩散”所表示)。所示技术可采用如图33中所示的重叠边界框来防止进程间对手观察受害者的数据更新(例如位翻转)。所示技术可用于读和写操作,从而提供双重扩散。
在所示示例中,通过执行数据3205和密钥流/微调3215的XOR操作3220,经由操作的计数器模式,对输入数据3205(所述输入数据可以是加密操作中的明文或者解密操作中的密文)进行加密/解密。在一些情况下,所使用的计数器模式可以是具有全24轮Gimli排列的加密/解密的前向保密保护计数器模式。从加密和截取函数3210来生成密钥流/微调3215,所述加密和截取函数使用密码地址3201(例如图29的加密地址2940或者图30的指针3000)和密钥1 3202作为输入。在一些实现中,加密和截取函数3210使用Gimli排列,所述Gimli排列将密码指针和密钥转换为伪随机位串(又称作密钥流)。随后,计数器模式从这个密钥流中选择与将被加密的数据的长度同样多的连续位,并且将密钥流的所选位与数据的所选位进行XOR,以产生密文。
在一些实施例中,密钥1 3202的值可基于密码地址3201的字段。例如,密码地址3201的元数据(例如大小字段)可用作密钥选择器,以从密钥表中选择密钥1 3202,如以下所述。在其他实施例中,加密/解密的其他方式可在扩散级在3230被执行之前对数据3205执行。加密/解密级可由处理器核心的电路模块例如在处理器核心的加载和存储缓冲器数据路径中执行。
扩散3230然后经由使用密钥2 3203作为微调的块密码加密模式对计数器模式的输出3225来执行。扩散3230可实现完全混合其输入(例如所示示例中的3225和3203)的位的任何功能。作为一些示例,扩散3230可由轻量(例如轮数减少)块密码来执行,例如,诸如PRINCE密码、如美国专利申请公开号US2020/01455187中公开的K密码或者另一个轻量块密码。在一些实施例中,密钥2 3203的值可基于或者包括编码指针的大小/幂字段,诸如图29的大小字段2920或者图30的幂大小字段3002。密钥2 3203的值也可基于其他值。扩散的输出3235然后可例如在加密/写操作时被存储在存储器中(例如图33的分配3315中),或者可例如用于解密/读操作中的计算或其他操作中。扩散级可由位于处理器内的任何适当位置中的扩散引擎的电路模块来执行。扩散引擎可位于如图34中所示并且下面针对扩散引擎3450进一步描述的选项之一中。
通过实现如图32中所示的扩散技术,数据可经由所执行的读和写操作双重扩散。因此,通过如图33所示的重叠边界框来提取受害者的数据的对抗越界访问可能是不成功的,因为如上所述没有有意义信息能够被泄漏。这在以下越界访问情形中示出。使用如图33中所示和以上描述的相同示例重叠边界框情形,但是其中扩散技术也对读/写执行,对手会执行下列读取:
Read1 <- Diff2 (Diff1 (Data 1 XOR {Victim Keystream})) XOR {AdversaryKeystream}
Read2 <- Diff2 (Diff1 (Data 2 XOR {Victim Keystream})) XOR {AdversaryKeystream}
其中,Diff1表示对数据到存储器的写入所执行的扩散,以及Diff2表示对于从存储器的读取所执行的扩散。相应地,Read1 XOR Read 2返回(Diff2 (Diff1 (Data 1 XOR{Victim Keystream}))) XOR (Diff2 (Diff1 (Data 2 XOR {Victim Keystream}))),并且由此,对手无法观察与受害者的数据有关的任何信息。这是因为,当受害者的数据驻留在LLC中或者DRAM存储器中时,数据对写入已被扩散(通过受害者的大小字段所微调),并且在对手的读取期间再次被扩散(通过对手的重叠边界框大小所微调)。当受害者的数据驻留在顺利通过受害者读取的DCU上时,对手的访问具有不同的大小字段。相应地,物理地址(PA)有所不同,并且访问被看作是DCU未命中。
图33示出根据某些实施例的另一种示例扩散技术的简化框图3300。特别是,所示示例包括如图32中所示和以上所述的相同扩散技术(即,数据3305可与图32的数据3205相似地被实现,加密和截取函数可与图32的加密和截取函数3210相似地被实现,XOR 3320可与图32的XOR 3220相似地被实现,以及扩散3330可与图32的扩散3230相似地被实现),但是其中具有对扩散3330的输出所执行的附加XOR 3340。这样,所示技术可使用加密的XEX模式。最后XOR 3340在扩散3335的输出与微调值3304之间执行,其可基于与特定数据的所有者有关的上下文信息,例如为加密的计数器模式所生成的密钥流、加密虚拟地址和至少编码指针的大小字段,从而对最后XOR操作进行微调。可按照如以上针对图32的数据3235所述的相同方式来利用数据输出3345。
在某些实施例中,第一计数器模式加密级(例如图32的3210和3220或者图33的3310和3320)可在核心与DCU/L1高速缓存单元之间执行。例如,核心可通过在存储于DCU/L1高速缓存之前将数据与密钥流进行XOR对数据进行加密,并且可通过在使用所述数据之前将所述数据与密钥流进行XOR对DCU/L1高速缓存中存储的数据进行解密。附加扩散(例如图32的扩散3230或图33的扩散3330和XOR 3340)可在存储器层次结构内的任何适当位置被执行。以下论述考虑扩散可发生的各种位置。
图34示出根据某些实施例的处理器和存储器架构的简化框图3400。示例架构3400包括两个处理器核心3410和存储器层次结构,所述存储器层次结构包括用于每个核心3410的相应第1级(L1)高速缓存3411和3412(它们又可称作数据高速缓存单元(DCU))、共享第2级(L2)高速缓存3420(它又可称作中间级高速缓存(MLC))、共享第3级(L3)高速缓存3430(它又可称作最后一级高速缓存(LLC))以及主存储器3440。每个核心3410具有相应第1级数据高速缓存(L1D)3411和第1级指令高速缓存(L1I)3412。扩散引擎3450可例如基于下列考虑因素被放置在通过选项1、2、3和4所指示的位置之一中。扩散引擎3450可对加密数据执行扩散,如以上例如针对图32的扩散3230或图33的扩散3330和XOR 3340所述。
取决于通过额外扩散会引入的可负担时延(即,性能开销),扩散可在图32中所示的选项之一中执行。更靠近核心可要求更少硬件和/或协议变更,但是,它也可能因执行扩散的串行时延而引入附加性能开销。基于所执行的密码RTL合成,当以大致4 GHz时钟频率为目标时,扩散时延可从3至6个循环改变。在一些情况下,扩散可在核心3410与DCU 3411、3412之间的加载/存储管线中执行(图32中示为选项1),可将整个扩散时延添加到性能开销可能相当大的每个读/写操作。在这种情况下,可采用支持完全扩散的加密模式(例如XTS模式中的AES)来替代与密钥流的XOR加密模式。这种方式的一些优点包括对高速缓存硬件没有影响,它支持高级安全特征(例如防止串通对手),并且实现并不棘手。但是,这种方式的一个缺点在于,它伴随某个潜在串行化时延的成本。
相比之下,在加载自/存储到L3高速缓存3430中(图32中示为选项3)或者经由存储控制器加载自/存储到存储器3440中(图34中示为选项4)之前执行扩散涉及分页复杂度。在加载自/存储到L2高速缓存3420(图34中示为选项2)之前执行扩散将把扩散保持为在核心内执行,同时还保持较小的大小(例如要管理更少数量的高速缓存线),并且可相应地预计与其他选项相比具有相对较少性能开销。这个选项2的一个优点在于,不存在对数据路径时延的直接影响,而这种方式的一个缺点在于,在考虑高速缓存硬件时存在某个复杂度。
下面描述通过如下需要来指导的示例实施例:(i) 传统二进制兼容性,(ii) 对高速缓存一致性的MESI协议几乎没有变更或者没有极大变更,(iii) 使最小可能数量的元数据被存储在高速缓存中,以及(iv) 对高速缓存HW的“可行”变更,避免采用元数据来扩大高速缓存容量,等等。
图35示出根据某些实施例、在存储器层次结构中的DCU 3520与其他高速缓存单元之间所执行的扩散技术的简化框图。在所示示例中,加载和存储缓冲器数据路径3510被连接到DCU 3520,所述DCU进而被连接到扩散引擎3530。扩散引擎3530连接到层次结构中的其他高速缓存单元,诸如L2/LC和L3/LLC高速缓存单元(例如分别为图34的L2/MLC 3420 L3/LLC 3430)。
扩散引擎3530可包括硬件、固件或两者,配置成如执行以上分别针对图32、图33所述的扩散级3230、3330。也就是说,扩散引擎可经由加密逻辑3545对数据3540进行加密/解密,其中加密/解密通过存在于或附加到数据3540的物理地址(PA)3570的元数据3560来微调。例如,在某些实施例中并且如图35中所示,元数据3560可包括存在于或者被附加到PA3570的大小字段(例如图29的大小字段2920或图30的幂大小字段3002),以及大小字段可用作密钥选择器,以从密钥存储或表中选择适当密钥/微调值3550。其他实施例可完全避免需要显式存储密钥或微调,如下面进一步论述。例如,其他实施例可使用PA 3570的元数据3560即时计算密钥,其中这种计算可使用扩散引擎3530的加密逻辑3545。
通过本文的实施例所提供的安全性可源于地址中的大小字段(例如图29的大小字段2920或图30的幂大小字段3002)的使用。甚至对于小对象分配,如果采用错误大小字段进行读取,则内容将双重被扩散。扩散本身能够在任何模式中进行,甚至在电子码本(ECB)模式中。在一些实施例中,以8字节(即,64位)的粒度来执行扩散,其是由轻量块密码(诸如PRINCE)所使用的典型块长度。例如,如果我们想要从存储器中读取2个字节,则首先会需要反转包含想要读取的量的8字节对齐“区组(granule)”的扩散。
图36示出根据某些实施例、用于以子高速缓存线粒度来修改和扩散数据的示例技术3600的简图。通常,回写更新高速缓存线的所有字节,如在图36的左侧所示,其中高速缓存线3602在从核心3620到存储器3610的回写期间完整地被替换。但是,如果多个核心将被允许改变相同高速缓存线的不同实体,则可能存在对部分高速缓存线回写的需要。例如,在图36的右侧所示的示例中,元数据3606指示高速缓存线3604的哪些部分在到存储器3610的回写时将被修改。这种技术可称作“合并”。元数据3606可从先前写操作来生成,所述先前操作仅修改由元数据所指示的高速缓存线的特定部分(又通过“区组”所表示)。将会理解,高速缓存线3602、3604可以是代码或数据高速缓存线。
一种方式是始终在存储控制器级合并数据。在这种情况下,读取始终在部分回写之前。但是,这种方式以性能为代价。此外,合并元数据需要经由对存储控制器的写入进行传播。这种方式不是可行的:扩散元数据从PA中被剥离,并且通过合并元数据来替代。在另一个系列的实施例中,合并能够就在扩散被执行的高速缓存单元(例如在DCU)发生。这避免在存储控制器级的全部复杂度。这种方式将基于如下假设进行工作:描述相同物理位置的变化的所有高速缓存线是相同核心本地的。这种解决方案也是有用的,因为它避免对CPU的高速缓存一致性协议(例如MESI协议)的重大变更。更简单的第三选项当然是将采用不同大小字段的访问看作是DCU未命中访问。
图37示出根据某些实施例、用于允许合并在高速缓存层次结构内部被执行的示例技术3700。特别是,图37示出可如何在高速缓存内部使用合并元数据。本质上,这种元数据可充当关于如何扩散以及如何合并的指令。图37中,示出组关联高速缓存,包括高速缓存线数据3703、LRU计数器3702和标签位3701。还存在位向量3710(例如在每组高速缓存单元的状态中),所述位向量指示来自高速缓存线数据3703的哪些区组已被修改(例如是“相关的”)。位向量3710可包括与高速缓存线数据3703中存在的字节相同的位数。例如,由于高速缓存线在图37中所示的示例中包含8个区组,因此位向量3710具有长度8。
图38示出根据某些实施例的高速缓存路的示例组织。特别是,图38示出高速缓存单元的单个组3800,其中多个高速缓存线具有指示相同物理地址3802的标签,但是不同的大小字段3801被放置在同一组的路中。这可以是通过高速缓存硬件所增强的数据放置策略。高速缓存相应地可始终将与同一物理地址关联的条目放置在同一组上,尽管具有不同的大小字段。
在下文中,我们将使用术语“复合高速缓存线”来表示包含相同物理位置的不同高速缓存线的组。就高速缓存一致性协议如何进行工作而言,复合高速缓存线的所有高速缓存线应当被看作是单个高速缓存线。这是因为在最后一级高速缓存(LLC)中不存在大小字段。因此,复合高速缓存线的所有高速缓存线同时被修改,同时转变成无效状态,同时变为独占,或者同时被逐出。这样,只有一个核心每次具有复合高速缓存线的最新副本,而LLC甚至不知道高速缓存线是复合高速缓存线的事实。当复合高速缓存线的高速缓存线将要被逐出时,每个高速缓存线的区组位向量被读取。这些位向量指示哪些区组应当被选择为使用哪一个大小字段被扩散。扩散区组然后被合并到单个高速缓存线中,其被传播到存储器层次结构的其他级。能够使用来自复合高速缓存线的任何大小字段来扩散未被修改的区组。这是因为这种情况下的扩散操作将正确地反转在读取时对这些区组所执行的对应解密。下面针对图39A-39G示出示例。
在组关联高速缓存的每组中显式存储区组可能是高费用的。但是,存在克服这个成本的方式。例如,一旦确定需要将所述组变成复合高速缓存线,单路能够被划出并且用于存储合并元数据。LRU计数器上的不可能值可能用来指示状况就是这样。当然还存在完全避免复合高速缓存线的最简单解决方案:一次只有大小字段能够被修改,并且能够被缓存在核心中。采用不同大小字段的访问被看作是DCU未命中。这遭受来自更频繁逐出的性能成本。
图39A-39F示出根据某些实施例、由处理器的核心3920从/向存储器3910的示例读取/写入。在所示示例中,存储器3910(所述存储器可以是核心外部的存储器层次结构内的任何位置中的存储器,例如L1、L2或L3高速缓存或者主存储器)存储高速缓存线3915,所述高速缓存线包括各自具有不同大小字段(S1、S2、S3)的三个区组3911、3912、3913。图39A中,核心3920均未执行读取以加载高速缓存线3915。存储器3910中的三个区组3911、3912、3913的每个如上所述完全被扩散(例如针对图32和图33所述被加密和扩散)。
参照图39B,高速缓存线3915由核心3920A上运行的第一功能根据本文所述的扩散实施例(例如针对图32和图33所述的那些实施例)使用S2大小字段来访问/读取。因此,核心3920A正确地扩散区组3912,但是不扩散区组3911、3913,因为它们具有不同的大小字段。结果在核心3920A内部的高速缓存线3915’中示出(其中具有阴影的区组指示不正确扩散)。将会理解,高速缓存线3915’的区组3912不再被扩散,但是仍被加密。
参照图39C,高速缓存线3915由核心3920A上运行的第二功能根据本文所述的扩散实施例(例如针对图32和图33所述的那些实施例)使用S3大小字段来访问/读取。因此,核心3920A正确地扩散区组3913,但是不扩散区组3911、3912,因为它们具有不同的大小字段。结果在核心3920A内部的高速缓存线3915”中示出(其中具有阴影的区组指示不正确扩散)。将会理解,高速缓存线3915”的区组3913不再被扩散,但是仍被加密。
参照图39D,正确扩散的区组由核心3920A来解密,并且由访问它们的相应功能来修改,然后在被存储在核心3920A的DCU中之前被重新加密。经修改的区组通过区组3912’和3913’所指示。
参照图39E,经修改的区组3912’和3913’被回写到存储器3910。经修改的区组可按照如下方式被回写:使得它们仅被回写到存储器3910中的高速缓存线3915。作为示例,它们可如上所述使用元数据(例如大小字段)有选择地被回写。
参照图39F,高速缓存线3915由核心3920B上运行的功能根据本文所述的扩散实施例(例如针对图32和图33所述的那些实施例)使用S1大小字段来访问/读取。因此,核心3920B正确地扩散区组3911,但是不扩散区组3912、3913,因为它们具有不同的大小字段。结果在核心3920B内部的高速缓存线3915’’’中示出(其中具有阴影的区组指示不正确扩散)。将会理解,高速缓存线3915’’’的区组3911不再被扩散,但是仍被加密。
释放后使用
在一些情况下,进程内对手可能获得受害者刚使用并且释放的完全相同分配。为了防止这种对手利用这种情形,可使用图30的编码指针3000中的版本字段3003。特别是,CC接缝层(seam layer)可跟踪以初始4位版本号开始的每一个分配,并且在每一个UAF分配中将它增加。版本字段中的这个小变化将指针3000的加密32位字段转换成与其先前加密的值完全不同的随机数。这时使用这个指针,对手能够访问之前已被受害者(所述受害者可能在那个位置中留下某个残余数据)使用的相同分配。但是,由于新指针的加密部分是完全不同的,因此对手的读取将生成完全不同的密钥流,所述密钥流将与受害者的加密残余数据进行XOR,并且因此对手无法获得与其未加密值有关的任何线索。
进程间对手
在一些情况下,进程间对手可能也能够获得如图31所示相同的指针和对应分配。因此,进程间对手能够观察受害者的分配中的数据变化(位翻转)。以上所述的用于缓解进程内对手的类似扩散机制也能够潜在地缓解进程间对手。例如,在一些实施例中,为了防止进程间对手,扩散可通过大小字段和进程ID来微调,其中进程ID识别密码隔离的租户,并且可由CPU、特许软件(VMM或OS)或两者来设置。
物理对手
CC中的加密的计数器模式一般提供针对冷引导和内插件的保护,以提供前向保密和一次性写入保密性。但是,内插件能够观察相同位置上的数据更新的汉明距离(hamming-distance)和位翻转。针对图32和图33所述的扩散实施例也能够防止物理内插件观察位翻转。
串通物理、VMM、OS对手
这种类型的对手能够借助于串通VMM或者借助于串通内插件来执行软件或硬件绕过读取和写入。这种类型的串通对手能够揭示受害者的潜在位翻转,即使采用针对图32所述的扩散机制。例如,假定通过物理攻击或者通过CC绕过读取/写入能力,对手能够读取某个受害者的密文,并且将这个密文写入他自己的分配中。此后,对手借助于串通VMM/OS来切换到CC模式,并且从他自己的分配中读取密文。这时,如果对手的大小字段与受害者的大小字段相同(例如具有1/32或以上的概率),则后续读取操作将反转扩散。以及对手将得到:
{Key stream of adv.}XOR {Key stream of victim} XOR {data of victim}.
重复两次将返回{Data 1 of victim} XOR {Data 2 of victim},这将揭示Data1与Data 2之间的汉明距离(位翻转)。从密码观点来看,这个漏洞存在,因为计数器模式加密+扩散的工作方式像XOR+加密(XE)而不是标准XOR加密XOR(XEX)模式。但是,可采用如以上针对图33所述的扩散来缓解这个潜在漏洞。
多租赁考虑因素
扩散引擎实现还可考虑各自与不同密钥关联的多个租户的存在。当对高速缓存层次结构内部的数据进行加密和解密时,需要有效的访问每租户密钥。
在第一选项中,存在由扩散引擎(例如3440)所支持的显式密钥存储。还存在用于将密钥加载到密钥存储中的数据路径。扩散引擎访问密钥存储,并且基于元数据位来选择最适当密钥,所述元数据位存在于与读或写操作关联的物理地址中。在一个实施例中,这些元数据位指示租户的ID。这种ID又可称作“PASSID”。在这个实施例的变体中,租户ID不是从物理地址来得到,而是经由独立数据路径被传递到扩散引擎。
在第二选项中,如与以上第一选项相比,可消除在扩散引擎中存储或生成密钥的需要。按照这个选项,密钥可随每一个读或写操作被传递到扩散引擎(例如3450)。
第三选项可即时生成密钥。例如,作为物理地址的部分或者经由专用布线所传递的租户ID(例如PASSID)可用作轻量即时密钥生成机制(诸如PRINCE或Simon加密引擎)的种子。
在这些多租赁实施例的任一个中,可基于新“选择性失效”消息中包含的租户ID的值来转储清除来自高速缓存层次结构的单元的条目。这可涉及:新定序器逻辑,逐个执行与被逐出的高速缓存线关联的所有必要回写;以及适当布线,以向高速缓存的所有条目广播选择性失效消息。
要注意,指针的幂/大小字段只是能够用来微调扩散的元数据的一个示例(例如,像版本号,能够存在每高速缓存线多个)。在本公开的其他方面,推导密钥可用于进程密钥ID和/或共享资料库密钥ID和/或各种数据密钥ID。虽然仅预计这些项为每高速缓存线一个,但是这些项的任一个或全部能够是推导密钥标识符,所述推导密钥标识符作为标签通过高速缓存被传递到加密电路模块,以得出对应密钥,并且然后用以对数据进行加密/解密。
D.线性内联元数据(LIM)、带外表中存储的元数据和页内元数据。
按照一些实施例,如上所述的密码编码指针和/或密码寻址可与本小节所述的实施例配合使用,包括LIM、带外表中存储的元数据和页内元数据,即,即使元数据的部分或全部被存储在存储器中,但是实施例并不局限于此。
存储器加标记技术提供被设计成防止缓冲器溢出、上溢和释放后使用利用的存储器安全机制。当前技术将重复存储器标签用于存储器空间内的每一个数据块。例如,在使用16字节存储器块的系统中,1字节标签与每个存储器块关联。因此,16GB存储器分配可要求附加1GB以只存储标签数据——从而因检索标记元数据的多次冗余存储器访问而引起千兆字节的浪费存储器和性能影响。
在本小节中,“元数据”表示下列至少一个或多个:标签值或版本号(标签元数据)、有效范围元数据、上下文信息(例如存储器分配大小(例如通过间接地址所引用的所分配存储器的字节))、数据或代码的类型(例如通过编程语言所定义的数据或代码的类)、准许(例如间接地址的读、写和执行准许)、数据或代码的位置(例如与数据或代码的大小相组合的地址)、数据或代码的所有权、特权级别(例如用户或监督人)或者密码上下文标识符(或者密码上下文ID)(例如每个间接地址的随机化或确定性唯一值),这里只列举几个示例。如本文所使用的“元数据”还可表示密钥标识符(密钥ID)、微调、计数器、存储器访问控制(MAC)或者纠错码(ECC)。如本文所使用的“元数据”还可表示对象的隔间ID和/或限度信息。
在本小节中,“分配”表示存储对象(诸如数据或代码)的存储器的可寻址部分。
在本小节中,“限度信息”表示基于参考点来确定分配的开头和结束的信息。参考点可包括例如槽、块、页或者存储器的任何其他单元的中点、开头、结束。
在本小节中,“槽”表示高速缓存线中的存储器的单位。
在本小节中,“隔间”在本文中是指通过其隔间标识符(ID)与其他租户可区分的租户。例如,按照一个实施例,租户可与另一个租户密码隔离,但是密码隔离的租户只提供示例,而不是意在针对“隔间”的定义进行限制。如本文所使用,术语“密码隔离”意在表示产生于采用不同密钥和微调所加密的存储器的不同区域(不同隔间或租户)的隔离。被隔离存储器隔间/租户能够由虚拟机(VM)、应用、函数或线程的数据结构和/或代码来组成。在多租户环境中,密码可用来加强租户之间的隔离,而不是页表或扩展页表。隔间可在存储器分配的上下文中被定义,其中具有对于对象粒度共享的支持,以减少存储器浪费和不必要的数据副本。大多数现有解决方案是页粒度的,所述粒度不匹配编程语言的粒度。一些解决方案使用比页要小的固定粒度,但是这类解决方案仍然呈现与对象粒度共享的不匹配。需要备选方式以用于有效存储和查找对象粒度元数据。隔间用于多租户环境中,其中每个租户有权访问其自己的一个或多个私有对象,并且其中至少一些租户可具有委托其他租户对其私有对象的访问权的能力。
除了通常的明文或密文输入和密钥(例如秘密密钥116(1))之外,如本文所使用,“微调”还可表示对块密码的额外输入等等。微调包括表示值的一个或多个位。
本文提供一种存储器分配安全性校验系统。按照一些实施例的系统可包括:存储控制器电路模块;以及处理器电路模块,被耦合到存储控制器电路模块并且将被耦合到存储器电路模块,所述处理器电路模块:响应于存储器分配请求,执行存储器分配操作,包括得到存储器电路模块中的对象的存储器分配、向存储器分配指配包括存储器分配的限度信息和识别被允许访问对象的隔间的隔间标识(ID)的至少一个的第一元数据、将对象存储在存储器电路模块的存储器位置并且将元数据存储在存储器位置之一处或者存储与存储器位置不同的表中;响应于与程序对应的存储器操作请求,使用包括识别存储器电路模块中的第一元数据的位置的数据的指针来访问第一元数据,其中第一元数据对程序隐藏;以及响应于由存储控制器电路模块对第一元数据与第二元数据之间的匹配的确定,执行与存储器操作请求对应的存储器操作。
提供一种非暂态或暂态存储装置或存储介质。所述存储介质包括机器可读指令,所述指令在由处理器电路模块执行时使所述处理器电路模块执行包括下列步骤的操作:响应于存储器分配请求,执行存储器分配操作,包括得到存储器电路模块中的对象的存储器分配、向存储器分配指配包括存储器分配的限度信息和识别被允许访问对象的隔间的隔间标识(ID)的至少一个的第一元数据、将对象存储在存储器电路模块的存储器位置并且将元数据存储在存储器位置之一处或者存储在与存储器位置不同的表中;响应于与程序对应的存储器操作请求,使用包括识别存储器电路模块中的第一元数据的位置的数据的指针来访问第一元数据,其中第一元数据对程序隐藏;以及响应于对第一元数据与第二元数据之间的匹配的确定,执行与存储器操作请求对应的存储器操作。
一种存储器分配安全性校验方法包括:响应于存储器分配请求,执行存储器分配操作,包括得到存储器电路模块中的对象的存储器分配、向存储器分配指配包括存储器分配的限度信息和识别被允许访问对象的隔间的隔间标识(ID)的至少一个的第一元数据、将对象存储在存储器电路模块的存储器位置并且将元数据存储在存储器位置之一处或者存储在与存储器位置不同的表中;响应于与程序对应的存储器操作请求,使用包括识别存储器电路模块中的第一元数据的位置的数据的指针来访问第一元数据,其中第一元数据对程序隐藏;以及响应于对第一元数据与第二元数据之间的匹配的确定,执行与存储器操作请求对应的存储器操作。
提供作为对象元数据的部分的隔间ID(无论是内联存储还是存储在独立元数据表中)的一些实施例提供例如在数据中心中的浏览器和功能即服务(FaaS)工作负荷的上下文中特别有用的解决方案。
本文所述的一些系统和方法提供系统、方法以及包含指令的计算机可读介质,所述指令在槽的中点存储与存储器分配关联的元数据。按照一个实施例,槽还可包括存储器分配(在给定高速缓存线内内联,包括元数据所涉及的分配)连同限度信息或隔间ID的至少一个。按照另一实施例,分配可完全或部分(即,至少部分)处于与其相关元数据不同的高速缓存线中。
使用16GByte示例,使用传统标签元数据会要求0.5GByte的附加存储器空间来重复存储分配内包含的每个16Byte块的4位标签元数据。本文所公开的一些系统和方法有益地将这个存储器要求减少到位于槽(诸如高速缓存槽)内的中点存储器地址(或中点)的一个或多个字节,并且对应于存储器分配,例如那个相同槽内的存储器分配(例如对应于分配内包含的16字节槽中的1字节的元数据)。这种机制可能产生例如存储标签元数据所要求的存储器中的十亿倍减少。
元数据则可由系统处理器电路模块(诸如由一个或多个核心474/484)对软件(即,程序)隐藏,从而当跨槽中的存储器分配的范围使逻辑地址或索引递增时提供毗连存储器,其中处理器跳过元数据并且相应地调整线性/虚拟地址。
按照一个实施例,存储器分配边界框的中点(对应于对象被存储在分配中的给定槽大小)可由存储控制器(诸如图4的集成存储控制器逻辑(IMC)472)使用最佳拟合二的幂指针编码或者任何其他编码(其中边界框的中点可被指定用于携带元数据)来确定。元数据可每存储器分配仅被编码一次,位于分配的边界框的中点,并且可由处理器电路模块来隐藏,使得存储器电路模块对使用编码指针的软件表现为毗连分配。本文所公开的一些系统和方法使用指针编码来确定存储器分配的边界框的中点。与整个存储器分配关联的元数据被存储在所确定中点位置附近,并且可由指针来访问,使得它连同它所涉及的分配是处理器可访问的。存储器分配器资料库的C++ New运算符或C malloc函数(等等)可考虑元数据大小,并且相应地调整(增加)存储器分配,以适应元数据大小以及诸如分配的真实大小的任何附加元数据。因为元数据被存储在槽的中点(在可预测参考位置),所以处理器电路模块能够通过可靠地跳过元数据并且将元数据的大小添加到存储器访问线性/虚拟地址来隐藏标签元数据的存在,从而当经由指针来访问存储器电路模块时越过基于指针编码的中点。同时,处理器将能够基于指针编码来直接确定内联元数据的位置连同分配。
本文所公开的一些系统和方法获益于如下认识:分配大小的二的幂编码可提供最佳拟合边界框(或槽)中点值,所述中点值始终位于存储器分配之内。有益地,多个存储器槽可在较大存储器槽的二的幂大小内重叠,但是较小存储器槽的每个将具有不同的中点地址,并且较小存储器槽中点值的每个将与较大存储器槽中点值有所不同。
指针可包括多个位(例如用于64位指针的6位),以识别二的幂槽大小,以及在一个实施例中包括用于版本控制的标签值,以防止释放后使用(UAF)。实际分配存储器限度(例如偏移和阵列大小,或者边界框中点左边的实际分配大小(下限或LB)和右边的分配大小(上限或UB))也可被编码为中点元数据的部分,并且由处理器电路模块来校验,以确保给定存储器访问仅在当前存储器分配的边界地址内执行。这些限度可按照通过指针的大小字段值所识别的二的幂(Po2)边界框大小(其中使用槽大小的Po2递增)来确定大小,以优化存储器使用,其中较小边界框要求更少字节对分配的真实限度进行编码,而较大分配要求附加字节以对较大分配的真实限度进行编码。
元数据4050中的任何标签数据可与存储位置关联(分配的槽通过指针4080所引用)。
有益地,本文所公开的一些系统和方法降低用于存储元数据的存储器开销,同时提供性能优化。与现有技术的存储器加标记技术(其中处理器电路模块可按每存储器块(16B)存储一个标签,包括分配)不同,本文所公开的系统和方法的一些系统和方法提供一种处理器,所述处理器而是能够缓存元数据,诸如包括每分配的限度和隔间ID的至少一个的元数据,从而通过从存储器位置内的预定参考位置(诸如高速缓存,诸如槽,所述参考位置例如对应于分配的边界框的中点)取元数据,使缓存更为有效并且减少存储器查找。存储器分配(对象)可在与对象相同的存储器位置(高速缓存、高速缓存线或槽)具有元数据,从而完全避免从独立元数据标签表(又称作数据破坏检测DCD)的额外存储器查找。
按照一个实施例,当分配存储器时,malloc()/new可简单地考虑边界框的中点处的元数据,从而增加分配大小(例如增加一个字节或二个字节或更多,这取决于边界框的大小及关联元数据大小),并且将元数据设置在存储器分配的边界框的中点。逻辑(诸如malloc)然后可返回具有相同元数据的指针连同大小字段中的边界框的大小。当处理器采用这个编码指针格式来访问存储器(诸如高速缓存)时,处理器电路模块将从分配的边界框的中点来查找元数据值,并且与指针元数据值进行比较,从而如果存在匹配,则允许存储器访问,而如果不存在匹配,则触发错误或异常。Malloc free()然后可用来重置存储器元数据,诸如元数据的至少部分。类似地,处理器可使用元数据中的限度信息来检验存储器访问处于正确分配限度之内,例如处于从边界框中点的左边(LB)的X1字节(或者最小分配大小的另一单位)以及从边界框的中点的右边(UB)的X2字节(或者最小分配大小的另一单位)之内,其中标签X1和X2是中点元数据的独立字段。
图40是允许对存储器分配的安全性校验的说明性存储器电路模块/高速缓存电路模块471(与图4的高速缓存471或481或者与存储器432或434相似)连同处理器电路模块(例如与图4的核心474或484相似)和存储控制器电路模块4020(与图4的IMC 472或482相似)的示意图。虽然实施例并不局限于此,但是在图40的所示实施例中,根据本文所述的至少一个实施例,存储器电路模块/高速缓存电路模块471可被分摊到一个或多个二的幂(即,20至2n)槽4040中,其中相应中点地址4042包括相应唯一元数据4050,所述元数据与槽4040内的相应存储器分配4054关联。
在一些实施例中,使处理器电路模块(诸如图4的核心474/484)执行存储器操作的指令使存储控制器电路模块(诸如图4的IMC 472/482)使用指针4080来访问存储器电路模块/高速缓存电路模块471,所述指针至少包括表示用于存储器操作的地址4082以及与对应于存储器地址4082的相应存储器分配4040关联的元数据4084的数据。将元数据4084与被存储在相应存储器分配4040的中点地址4042的元数据4050进行比较。如果指针元数据4084匹配存储器分配4040内的所存储元数据4050,则准许在所指定存储器地址4082的操作。如果指针元数据4084无法匹配存储器分配4040内的所存储元数据4050,则异常被返回给处理器470。
要注意,当本小节中描述元数据的比较时,所述比较不是意味着按照限制性方式来查看,而是意味着包含指针中的元数据(诸如标签数据、隔间ID等)的全部或部分与关联对其实现访问控制的对象的元数据的比较。
在图40的存储器电路模块/高速缓存电路模块471的实施例中,每个对象4054被完全指配给给定槽(即,每槽一个对象以及每对象一个槽),这样,确保中点处的元数据4050能够易于与它所涉及的对象关联。但是,实施例并不局限于此,而是在其范围之内在高速缓存线包括元数据、隔间ID和限度信息的临时值,其不包括元数据所涉及的对象或包括元数据所涉及的对象的部分或全部。对象4054在图40中在图的底部示出一次,并且对应地通过相应槽404本身内的双尖箭头来表示。即使对象4054可处于比分配本身要大的槽中,但是按照一个实施例,分配可以无需填充以便被放置在较大槽内。按照一些实施例,在给定可用槽和对象的集合的情况下,对象可被分配给最适合对象的槽。在图40的所示实施例中,例如,32B对象4054被分配给32B槽4040,56B对象被分配给128B槽4040,48B对象被分配给256B槽,24B对象被分配给32B槽,以及96B对象被分配给128B槽。在图40的所示示例中,因为48B对象已经越过两个槽内的对齐边界,所以它被指配给较大的128B槽。虽然图40的所示示例将对象示为按照毗连方式(紧密封装)跨越槽,但是很清楚,实施例并不局限于此,而是在其范围之内包括对象到相应专用存储器槽的分配方案,只要槽的中点地址被对象越过,其中一些槽可能是空闲的,尤其是例如在涉及悬空指针的UAF情形中。按照一些实施例,对象大小可不小于最小槽的宽度的一半,以便使它们在被指配给槽时越过(即,至少部分覆盖)中点。
基于上述分配方案,在每个对象被唯一指配给专用槽并且越过槽中点的情况下,元数据4050可位于槽的中点地址,以便允许处理器快速查找它,而无需转到独立表或存储器位置以确定元数据。当前方式有时将元数据放在每个分配前面,通常在非二的幂方案中,以及在每个指针内指定指针地址与分配的开头的距离。但是,指针具有有限位数,以及指定较大距离的需要可能溢出指针的范围,其中距离大于指针能够适应的范围,也就是说,其中分配大于指针中的位能够适应的范围。按照一个实施例所使用的二的幂(Po2)方式允许每个对象到Po2槽的唯一映射,其中槽用来提供对它里面的每个对象唯一编码和加密的可能性。按照一些实施例,元数据4050也可被加密。
为了克服如上所述与分配的开头的距离/偏移过长的问题,一些实施例而是只在指针的大小字段中指定将被寻址的对象适合的槽的大小,诸如作为指针的大小字段中的大小指数的槽的Po2大小。大小将确定将由处理器所引用的特定地址位,以便确定所引用的槽。已经识别特定槽,处理器能够直接转到所识别槽的中点地址,以便读出元数据,包括限度信息或隔间ID的至少一个,以及可能包括诸如标签数据的其他元数据。但是,实施例并不局限于用于槽的Po2方案,而是可包括一种方案,其中连续增加大小的槽的可用性可基于除了二之外的整数的幂或者基于任何其他方案。
作为元数据4050的部分被存储的限度信息(其中对象已知为始终越过中点)可表达为LB和UB(其中中点作为LB和UB的参考点),并且能够被使用,而不管槽的大小,并且以便允许对缓冲器上溢的检测等等。有利地,因为所示实施例中的限度信息随对象被存储在槽中(但是实施例并不局限于此),所以它能够与对象本身基本上同时是处理器可用的,从而按照这种方式使存储器操作比现有技术的那些存储器操作更有效。按照一些实施例,限度信息允许基于已知中点参考来确定分配的位置,而无需占据指针中的大量位,其中槽和/或分配本身较大,尤其是其中指针中的位数可能不足以支持指针值与分配的开头的距离。如图40中作为举例所示的Po2方案提供紧凑编码方案,其中每次在指针的大小指数字段中添加值时,被引用的槽大小加倍,而不是如通过提供从指针值到所引用对象的开头的距离信息所负担的线性缩放。因此,有限大小字段能够在Po2方案中能够用来指定比现有技术的方案要大许多的槽大小和对象。
虽然存储控制器电路模块472/482在图40中示为与处理器电路模块470分开的框,但是在一些实施例中,处理器电路模块470/480可包括存储控制器电路模块472/482的全部或者一部分。
响应于执行引起存储器访问操作的指令,处理器电路模块470生成编码指针4080,所述编码指针至少包括表示操作中涉及的存储器地址4082的数据以及表示与对应于存储器地址4082的存储器分配4040关联的元数据4084的数据。编码指针4080可包括附加信息,诸如表示存储器分配4040的大小的数据以及如以下针对图41详细描述的指针算术。
在一些实施例中,核心474/484可将编码指针4080所携带的元数据4084与被存储在存储器分配4040的中点地址4042的元数据4050进行比较。核心474/484可进一步使用被存储在存储器位置的元数据4050来执行限度校验和/或隔间ID校验。如果由编码指针4080所携带的元数据4084匹配被存储在槽 4040的中点地址4042的元数据4050,并且进一步如果比较地址4082与限度信息的限度校验和/或比较元数据4043/4050中存储的隔间ID和当前隔间ID寄存器的内容的隔间ID校验呈现匹配,则核心474/484完成所请求操作。如果由编码指针4080所携带的元数据4084无法匹配被存储在槽4040的中点地址4042的元数据4050,和/或如果对地址的限度校验和/或隔间ID校验无法返回匹配,则核心向处理器电路模块470返回异常。
存储器电路模块/高速缓存电路模块471可包括任何数量和/或组合的电气组件、半导体装置、光存储装置、量子存储装置、分子存储装置、原子存储装置和/或能够存储信息和/或数据的逻辑元件。存储器电路模块/高速缓存电路模块471的全部或者一部分可包括暂态存储器电路模块,诸如RAM、DRAM、SRAM等。存储器电路模块/高速缓存电路模块471的全部或者一部分可包括暂态存储器电路模块,诸如:光存储介质;磁存储介质;NAND存储器;等等。存储器电路模块/高速缓存电路模块471可包括具有任何存储容量的一个或多个存储装置。例如,存储器电路模块/高速缓存电路模块471可包括具有大约下列容量的存储容量的一个或多个存储装置:512千字节或以上;1兆字节(MB)或以上;100 MB或以上;1千兆字节(GB)或以上;100 GB或以上;1太字节(TB)或以上;或者大约100 TB或以上。
在图40的所示实施例中,IMC 472/482将存储器电路模块/高速缓存电路模块471分摊到任何二的幂个槽4040中。在一些实施例中,IMC 472/482可将存储器电路模块/高速缓存电路模块471分摊到单个存储器槽4040中(即,对于使整个系统存储器被覆盖的m的值,二的幂 = 2m)。在其他实施例中,IMC 472/482可将存储器电路模块/高速缓存电路模块471分摊到两个存储器槽4040中(即,二的幂 = 2m-1)。在其他实施例中,IMC 472/482可将存储器电路模块/高速缓存电路模块471分摊到四个存储器槽4040中(即,二的幂 = 2m-2)。在其他实施例中,IMC 472/482可将存储器电路模块/高速缓存电路模块471分摊到“n”个存储器分配4040中(即,对于引起将存储器空间分为“n”个槽的值k,二的幂 = 2k)。重要的是要注意,存储器槽4040的每个中的中点地址4042不与其他存储器槽中的中点地址对齐,由此准许对相应存储器槽4040是唯一的元数据4050的存储。在一些实施例中,元数据4050可包括任何位数。例如,元数据4050可包括2位或更多、4位或更多、6位或更多、8位或更多、16位或更多或者32位或更多。
编码指针4080包括要执行存储器操作(取、存储等)的存储器地址4082。存储器地址4082可包括任何位数。例如,存储器地址4082可包括:8位或更多;16位或更多,32位或更多;48位或更多;或者64位或更多;128位或更多;256位或更多,512位或更多,一直到2的幂,所述幂为当前操作模式的线性地址宽度,例如根据被寻址的槽大小的用户线性地址宽度位。在实施例中,由编码指针4080所携带的元数据4084可包括任何位数。例如,元数据4084可包括4位或更多、8位或更多、16位或更多或者32位或更多。在实施例中,由编码指针4080所携带的地址和/或标签数据的全部或者一部分可被加密。在实施例中,元数据4050A-4050n可作为高速缓存线(例如32字节块、64字节块或128字节块、256字节块或更多、512字节块或者等于二的幂字节的块大小)被加载到处理器高速缓存电路模块4012中。在这类实施例中,在对处理器高速缓存电路模块471/481中存储的数据执行存储器操作中,IMC 472/482或其他逻辑(例如在处理器电路模块470中)将元数据4084和诸如地址4082的其他相关信息以及当前隔间ID寄存器的内容与包含所请求存储器地址的高速缓存线上存储的元数据4050进行比较。
对于在分配4040的中点地址4042之前的存储器地址(即,包含元数据4050中的标签数据的“隐藏”地址)发生的存储器操作,在成功检验元数据4050与关联存储器分配4040的元数据4084时,指针4080可简单地在所指示存储器地址4082执行操作。对于在分配4040的中点地址4042之后的存储器地址发生的存储器操作,编码指针4080可基于存储器分配4040中存储的元数据4050的大小被偏移。因此,元数据4050的存在由处理器电路模块对使用编码指针4080有权访问所述元数据的软件“隐藏”。
图41是说明性编码指针架构4100的示意图,其中编码指针4080包括多位存储器分配大小字段4110、多位可选元数据字段4120(诸如标签数据字段)、多位地址字段4130和多位指针算术字段4140。如图41中所示,编码指针4080可包括任何大小指针,例如,诸如64位指针或128位指针或者大于128位的指针。在一个实施例中,编码指针可包括x86架构指针。编码指针4080可包括更多(例如128位)或更少(例如16位、32位)位数。在实施例中,地址字段4130中使用的位数可基于如大小字段4110中表达的相应存储器分配4040的大小。例如,一般来说,较大存储器分配(20)可要求比较小存储器分配(21至2n)更少数量的地址位。地址字段4130可包括任何位数,但是要注意,在图40的所示实施例中,大小数量实际上不对应于Po2槽大小。例如,地址字段4130可适应具有如下位数的存储器地址:8位或更多;16位或更多,32位或更多;48位或更多;64位或更多;128位或更多。
仍然参照图41,大小字段4110与地址字段4130中的信息相组合将允许处理器查找给定槽的中点。地址字段4130中的特定地址位通过大小字段中指示的大小来确定。对于Po2方案,在大小字段包括大小指数信息的情况下,随着大小指数变大(对于较大槽),需要更少地址位来识别特定槽(由于具有较大槽,因此将存在更少要识别的槽)。在这种情况下,在指针算术字段240中,在指针末尾的更多位能够用于给定槽内的范围。后者导致地址字段的缩减。
如先前所述,元数据字段4120和其中的标签数据的使用是可选的。指针中的标签数据允许将被使用的指针的多个版本指向相同槽,同时仍然确保用来访问所述槽的指针版本实际上是具有访问那个槽的权限的指针。标签数据的使用对于例如缓解UAF攻击能够是有用的。在涉及悬空指针的情况下,但在使用标签数据的情况下,随指针的每个版本改变标签会引起与设法由悬空指针所访问的分配的不匹配,从而导致差错并且因此防止新分配免于通过悬空指针的未经授权访问。
可避免指针中的标签数据,例如在其他机制用来确保指针访问对象的权限的情况下,诸如在使用完整性校验的情况下。例如,完整性校验可提供一种量度,以供用于校验对象(诸如数据)的至少一部分的完整性(在它被解密和/或解压缩之后)中。更具体来说,包括完整性值的量度在对象被压缩和/或加密并且被存储在槽中之前首先可与对象的至少一部分关联。例如,完整性值可包括完整性校验值(ICV)(例如哈希)、消息认证代码(MAC)(例如当相同消息、秘密密钥和初始化向量被使用时产生的相同MAC)、消息完整性代码(MIC)(例如如果使用相同算法则产生的相同MIC)、签名(例如使用密钥对的私有密钥所产生)、哈希消息认证代码/HMAC(例如SHA3 HMAC)等或者它们的组合。在对给定槽内的对象的后续解密和/或解压缩之后,可对重新创建的对象采取相同类型的量度,并且与最初对原始对象所采取的那种类型的量度进行比较,以确定原始对象是否如所存储那样自被存储在存储装置内以来以任何方式被改变。
按照另一个实施例,值可作为数据的部分被存储,以在被访问时指示与所述数据对应的存储器位置是被释放还是被分配。后一种机制不需要指针中的附加信息,诸如需要与元数据4050中的标签信息进行比较的标签数据。
在实施例中,大小数据字段4110可包括任何位数。例如,大小数据可包括:2位或更多;4位或更多;6位或更多;或者8位或更多。大小数据字段4110提供存储器分配4040的大小的指示。元数据字段4120当存在时(要注意,按照实施例,标签字段是可选的)可包括任何位数。例如,大小数据字段4110可包括:4位或更多,6位或更多;8位或更多,16位或更多,或者32位或更多。编码指针4060还包括可准许指针算术字段4140。可准许指针算术字段4140可包括任何位数。例如,指针算术字段4140可包括:4位或更多,6位或更多;8位或更多,16位或更多,或者32位或更多。
如图41中所示,按照一个实施例,在执行包括存储器操作的指令时,处理器电路模块470和/或IMC 472/482在4150将元数据字段4120中包含的元数据4084、地址4130和/或当前隔间ID寄存器的内容与被存储在存储器分配4040的中点地址4042的元数据4050进行比较。如果元数据字段4120中包含的元数据4084匹配被存储在存储器分配4040的中点地址4042的元数据4050,并且其他元数据校验也成功,则处理器电路模块470和/或IMC 472/482在操作270完成存储器电路模块/高速缓存电路模块471中的所请求存储器操作。按照一些实施例,元数据4050可包括限度信息以及与具有访问关联元数据的对象的准许的租户对应的隔间ID的至少一个。如果元数据字段4120中包含的元数据4084无法匹配被存储在存储器分配4040的中点地址4042的元数据4050,则IMC 472/482向处理器电路模块470报告差错、错误或异常4160。在一些实施例中,分配限度元数据可被包含在元数据4050中。在这类实施例中,IMC 472/482还可检查存储器访问是否处于所指定限度之内。限度信息可包括存储器分配的坐标—例如偏移和阵列大小或者边界框中点的左边的实际分配大小和右边的分配大小。
现在参照图42,该图提供用于不同范围的槽大小的元数据4050的实施例的展开图。在所示示例中,32至64字节的槽大小包括标签数据、中点4042的一侧上并且与其相邻的LB和UB,其中1字节被分配给LIM(若隔间ID未被使用),以及2字节在隔间ID被使用的情况下被分配给LIM。这种情况下的LIM包括标签数据的4位、各自用于LB和UB的2位以及用于隔间ID的可能的4位。在所示示例中,128至256字节的槽大小包括标签数据、中点4042的两侧上并且与其相邻的LB和UB,其中2字节被分配给LIM(若隔间ID未被使用),以及4字节在隔间ID被使用的情况下被分配给LIM。这种情况下的2字节LIM包括跨越中点的标签数据的8位和各自用于LB和UB的4位以及用于隔间ID的总共16位。在所示示例中,高于512 B的槽大小包括标签数据、中点4042的两侧上并且与其相邻的LB和UB,其中10字节被分配给LIM(其中在隔间ID未被使用的情况下具有跨越中点的标签数据的8位以及各自用于LB和UB的60位,其中隔间ID在被使用的情况下各自用于LB和UB的52位,其中隔间ID在被使用的情况下隔间ID在中点的每侧为1字节),以及包括用于隔间ID的总共16位。可使用普通存储器访问或者接受输入操作数的特定指令来设置元数据,所述输入操作数指定其元数据应当被更新的槽以及元数据的值。隔间不应当被准许更新不同隔间的元数据,因此处理器应当在准许对所存储元数据的任一个的更新之前首先检查所存储元数据中的隔间ID的先前值匹配当前隔间ID寄存器的值。特许软件或者非特许软件的置信部分可被准许推翻对隔间ID的先前值的检查。
在图40-42的LIM元数据实施例中,按照一个方面,元数据因此如在图42的存储格式中所建议可被存储,使得元数据的至少一些元数据(在所示情况下,诸如标签元数据和隔间ID元数据)在槽中点附近被复制。元数据的这个复制格式允许指针访问高速缓存线或页边界的一侧(参照中点与高速缓存线或页边界重合的情况),以对元数据执行一个或多个校验,而无需访问高速缓存线或页边界的另一侧。因此,所述复制允许处理器避免必须在多个高速缓存线或页中查找元数据,尤其是对于较大分配。按照一个实施例,包括标签数据(若它存在)但在任何情况下包括限度信息或隔间ID的至少一个的元数据可被加密。在一个实施例中,只有元数据4050的部分可被加密,诸如仅标签数据(当存在时)或者仅限度信息或者元数据的其他部分。
限度信息允许完整性校验(在如上所述使用完整性值的情况下)或者其他访问控制机制基于槽内的分配的实际范围被执行。被提供给处理器的限度信息允许处理器确保指针内指定槽中的给定位置的偏移处于被指配给槽(其访问控制将被执行)的对象的限度之内。
限度信息是有用的,至少因为其他分配可能重叠覆盖多个槽的相同存储器范围。与槽对应的限度指针被允许仅使用限度信息中所指定的存储器的所指定范围。限度信息还与访问控制机制(诸如完整性校验)的概念相关。当完整性值被计算时,限度信息允许处理器确定其完整性值正被计算的存储器内的对象的范围。
按照一个实施例,存在为每一个分配所保持的限度信息的一个副本,如图42中所示。当前机制将限度信息封装到指针中,但是一些实施例将限度信息连同分配一起放在存储器槽中。在存储器槽中存储限度信息连同作为元数据的部分的分配有利地消除对扩展指针以及限度信息的多个副本的需要,其中限度信息被存储在指针本身中。后者不利地引起扩展指针,从而增加存储指针所需的存储器量、增加处理开销以及扩展寄存器状态的需要。指针需要仅包含与查找对象及关联元数据有关的偏移,但是无需包括元数据本身,要注意,包括元数据的指针通常称作能力。按照一个实施例,限度信息在被存储于槽中时可能经过密码变换(被加密)。
仍然参照图42,按照实施例,隔间标识信息(隔间ID)信息可作为元数据的部分被添加,以支持跨密码隔离隔间的零副本数据共享。
因此,在图42的实施例中,隔离能够以任意粒度级别来支持,诸如例如虚拟机之间的隔离、应用之间的隔离、功能之间的隔离、线程之间的隔离或者数据结构(例如少数字节结构)之间的隔离。隔间ID在多租户环境中是有用的,其中每个租户有权访问其自己的私有对象,并且其中至少一些租户具有委托其他租户对其私有对象的访问权的能力。处理器可将元数据4050中所访问的隔间ID与专用寄存器(例如位于核心474b/484b中的一个寄存器)中或者经由通用寄存器的当前隔间ID值进行比较,但是按照一些实施例,专用寄存器可能是优选的。专用寄存器可与模型特定寄存器(MSR)类似,所述MSR除了是由操作系统(OS)可改变的之外,可选地还是由进程/程序本身可改变的,如与通用寄存器相反,所述通用寄存器诸如从用户模式是更易于可访问的。MSR通常只是从特许软件(诸如OS或VMM)可访问的,但是一些实施例考虑使(一个或多个)MSR类型专用寄存器存储隔间ID,所述隔间ID是由非特许软件可访问的。按照一些实施例,专用寄存器可包括一个或多个专用寄存器。一旦针对专用寄存器中的当前隔间ID值来校验由指针所访问的隔间ID,如果匹配发生,则这允许租户使用指针来访问与包括给定隔间ID的元数据关联的对象。如果不存在匹配,则租户无法访问与元数据关联的对象。隔间ID可在各种租户之间共享,以便允许当访问存储器槽内的对象时在那些租户之间共享对象。隔间ID的使用允许多租户使用,其中核心能够允许由相互不信任的租户对相同对象的访问,以便使对象在租户之间被交换。
在一些实施例中,在争用对于被分配给大小字段4110的指针位引发的情况下,例如在6位可能不能够被分配给大小指数的情况下,处理器可配置成通过首先使用可用大小位,以及此后通过对剩余位尝试不同值以猜测槽大小的剩余位的值并且确定所猜测值是否产生与元数据4050中的值的匹配,来猜测缺失大小位的值。如果匹配发生,则对于与元数据对应的对象的访问会被允许。涉及猜测大小位的一些以便获得对于对象的指针访问的机制通过增加攻击者可能伪造的概率而降低安全性。
现在参照图43,按照实施例,其中与对象对应的元数据可被存储在与图42中所示的线性存储器布局(槽)分离的表中。在图43的所示元数据表4300中,每个对象的元数据不是与对象内联地被存储在存储器槽内,而是被存储在专用元数据表中,其中表格式4302对应于基于所存储元数据所涉及的对象的关联粒度的粒度4304。图43的实施例中表示的粒度4304包括二的幂粒度,包括16字节、32字节、64字节、128字节、256字节、512字节、1千字节、2千字节和4千字节,但是实施例并不局限于此,而是在其范围之内包括提供粒度的不同集合,而不管粒度变化的任何特定顺序。在图43的实施例中,虽然元数据不是与高速缓冲存储器槽内的对象内联地被存储,但是指针仍然可用来引用存储元数据的位置,而不是指针本身携带元数据,这样,避免需要复制元数据连同指针,与上述图42的有利实施例相似。
如先前所述,当前,一些机制被提供以允许指针识别访问16字节粒度(包括粒度的8字节的限度)的元数据表内的元数据(不包括限度信息或隔间ID)的位置。但是,现有机制会要求在固定大小元数据表中存储每一个16字节区组的元数据,从而当查找与每个区组有关的元数据时导致性能和存储器使用开销。现有方式或者要求将对象填充到页粒度(例如4K),从而因填充而引起大量浪费存储器,或者它们为小数据区组复制存储器(例如数据的每一个16B一个副本),从而因复制元数据而引起大量浪费存储器。这在将元数据扩展成包括隔间ID(例如元数据的16位)时尤其严重。
在图43的所示实施例中,通过而是提供多个元数据表,有利地避免提供固定大小区组的元数据表,所述表配置成按照相应存储器槽大小/区组按照对应表格式来存储元数据,其中用作元数据表的格式的基础的每个槽大小对应于其中存储与元数据对应的分配的存储器槽大小。
仍然参照图43,图42的LIM选项与图43的元数据表选项之间的共同点在于,在元数据表选项中,与每个槽大小或粒度对应的位数能够随粒度增加或减少。按照一些实施例,元数据的存储格式可能不一定涉及与存储器内的中点位置有关的信息的复制,与如图42中作为举例所示的内联元数据的部分的存储格式的实施例相反。
按照一些实施例,指针可指示其元数据在元数据表中将被访问的给定对象的粒度,例如通过在其大小字段4110中提供所述粒度或者在其线性地址空间4130中提供范围信息,其中给定范围内的所有对象已知为对应于给定粒度(图41)。范围可被存储在寄存器中,诸如在模型特定寄存器(MSR)中。在这种情况下,处理器可使用指针地址信息来查找和确定MSR中存储的对应范围,并且然后可基于所确定范围例如通过查询表来确定与那个范围对应的大小指数。一旦大小指数(槽大小)被确定,可基于元数据与所确定槽大小的相关性为元数据选择对应元数据表。
不管在图12的实施例中如何选择元数据表,无论是凭借大小字段中的位还是凭借指针的线性地址字段中识别的范围,图43的实施例有利地避免需要处理器在读取高速缓存线内的对象时跳过与那些对象有关的内联元数据,并且因此用来访问所述对象的地址无需相应地被调整,因此简化处理器操作。在元数据与对象内联地被存储在高速缓存槽中的情况下,处理器可在为程序生成线性地址以访问高速缓存线中的对象时添加元数据的大小,以防止程序直接访问元数据,因为处理器是负责基于元数据来校验访问权限的实体。要注意,图43的实施例可与图42的实施例结合使用,因为处理器可配置成访问至少内联或者至少在所选元数据表中的元数据。在如图43的示例中所述来使用可选择元数据的情况下,处理器必须经过两个操作,即,访问内联对象和访问所选元数据表中的元数据,而不是在内联地存储元数据的情况下的一个操作。按照一些实施例,处理器可配置成同时使用两种形态起作用,即,访问一些对象的内联元数据,同时访问其他对象的所选元数据表中的元数据。当将内联元数据格式或者元数据表格式用于存储元数据时,指针格式本身可以是相同的,但是指针内编码的信息对于每个可以是不同的。在某些情况下,在槽大小和对象大小可以是使得对象可能溢出页边界的情况下,如与内联元数据选项相反,使用元数据表以便避免迟缓性能可能是有利的。后一种情形中的问题在于,插入元数据可能使原本适合页的对象不再适合页。
图43的实施例可与内联元数据表相同地布置存储器中的元数据,或者它可使用将每个槽大小的元数据编组在存储器的毗连范围中的布局。可能使用内联元数据表来存储的任何类型的元数据备选地能够被存储在图43的实施例中,例如标签、限度、隔间ID、密钥ID、微调、计数器、MAC、ECC等。
可有利地由处理器在单个存储器操作中而不是两个独立存储器操作中(如采用元数据表的原本情况那样)来访问图40-42的内联元数据选项连同元数据所涉及的对象,这样产生更好的性能。另外,内联元数据方式使对象和对应元数据基本上同时是处理器可用的,并且因此缓解对象和元数据在不同时间到达处理器可能引发的任何安全性问题,尤其是在处理器可能受到推测攻击的情况下(由于没有全部所需信息以便在访问对象之前对所述对象执行访问控制),并且因此。以上相对图40-42的实施例对内联存储所述的任何元数据可按照针对图43的实施例所述的元数据表格式被存储。另外,按照实施例的元数据表可支持元数据的任何任意大小。
按照一些实施例,无论是使用与内联元数据有关的实施例还是与元数据表有关的实施例,隐藏内联元数据可用于对象,其中与对象有关的元数据在每一个高速缓存线上重复。隐藏内联元数据可以是有用的,尤其当对象过大(跨越例如多页)而无法被单个高速缓存线所容纳。在这类情况下,处理器可使用本地元数据、作为举例诸如通过标签校验或完整性校验对于对象执行访问控制,以及如果本地访问控制没有产生匹配,处理器则可访问中点以查找对象的限度。在很大的对象(例如超过存储器的一页的那些对象)被存储在高速缓存线上的极少情况下,上述二步操作可能发生。
现在参照图44,图44示出用于访问元数据而没有将元数据存储在指向所引用对象的指针中的备选实施例。在图44的实施例中,存储器分配器可将相同大小的分配4402封装到对应页中,并且通过而是对将被访问的每页4400在页的开头指示均匀分配大小4404,可选地还在页的开头以良好定域性紧密地封装元数据4406(包括限度信息、隔间ID 4406的至少一个),来避免存储与分配有关的限度的开销。图44的实施例通过将元数据保持为更靠近它所涉及的对象但不是在携带所述对象的高速缓存线中直接内联,来提供图40-42的线性内联元数据与图43的元数据表之间的混合。在图44的实施例中,所有元数据则处于与它所涉及的对象相同的页上。图44的实施例避免与具有独立表中的元数据关联的开销,其中元数据可能处于与存储对象的页不同的页上,并且其中可能需要多个页块以查找地址转换与对应元数据,潜在地要求多个转换后备缓冲器(TLB)。图44的实施例有利地提供一种机制,其中对于查找对象及其元数据可能需要单个TLB条目,但是两者最终可被存储在不同高速缓存线上。为了实现图44的格式,存储器分配器可获取页的大小,从所述页的大小中减去元数据的大小,并且将所产生值除以能够适合那个页的均匀大小分配的数量。按照图44的实施例,由于页内的分配具有均匀大小,因此在元数据中不需要限度信息,并且在指针中不需要大小信息以访问元数据和对应分配。但是,可能使用内联元数据表来存储的任何类型的元数据备选地能够被存储在图44的实施例中,例如标签、限度、隔间ID、密钥ID、微调、计数器、MAC、ECC等。图44的实施例的优点在于,它通过改为在存储器页的开头指示均匀分配大小,并且进一步在使用标签的情况下通过允许在页的开头紧密封装标签,来避免存储限度的开销。
图45是按照实施例的进程4500的流程图。在操作4502,进程4500包括响应于存储器分配请求,执行存储器分配操作,包括得到存储器电路模块中的对象的存储器分配、向存储器分配指配包括存储器分配的限度信息和识别被允许访问对象的隔间的隔间标识(ID)的至少一个的第一元数据、将对象存储在存储器电路模块的存储器位置并且将元数据存储在存储器位置之一处或者存储在与存储器位置不同的表中;在操作4504,进程4500包括响应于与程序对应的存储器操作请求,使用包括识别存储器电路模块中的第一元数据的位置的数据的指针来访问第一元数据,其中第一元数据对程序隐藏;以及在操作4506,进程4500包括响应于对第一元数据与第二元数据之间的匹配的确定,执行与存储器操作请求对应的存储器操作。
E.使用密码高速缓存的密码计算时延减少
本小节中的实施例提供对密码寻址的优化。
如本小节中所引用,“高速缓存”可表示如本领域的技术人员所理解的高速缓冲存储器,或者表示存储器层次结构内的任何快速可访问存储器元件。
如本文所引用,虽然在存储加密线性地址-线性地址对的上下文中引用内容可寻址存储器(CAM)电路模块,但是实施例并不局限于提供存储所述对的CAM电路模块。因此,适合存储相关信息的查找表的任何存储器电路模块落入实施例的范围之内。
如本文所引用,转换后备缓冲器(TLB)是用来减少访问存储器位置所花费的时间的存储器寄存器或高速缓存。它通常是芯片的存储器管理单元(MMU)的一部分。TLB将线性地址的最近转换存储到物理地址,并且能够称作地址转换高速缓存。TLB的示例在图3的存储器单元370中采取数据TLB单元372的形式给出。
所有算术和逻辑操作的操作数可被包含在寄存器中。为了对主存储器中的数据进行操作,所述数据首先被复制到寄存器中。例如在数据被复制到高速缓存之前,加载操作将数据从主存储器复制到寄存器或加载缓冲器中。存储操作将数据从寄存器或存储缓冲器(例如从高速缓存)复制到主存储器。在本小节中在上述上下文中引用加载和存储缓冲器。
图46和图47分别提供按照第一和第二实施例的流程的图示。虽然图46和图47根据连续操作来示出流程,但是实施例在其范围之内包括操作在可行的程度上相互并行的执行。
一些实施例提供专用内容可寻址存储器电路模块(CAM电路模块)(诸如专用高速缓存),以诸如采取密文-明文对的形式来存储先前解密的指针,以便绕过不久的将来对相似指针的解密。一些实施例有利地减少密码计算环境中的访问时延。一些实施例提供采取专用硬件形式的微架构特征,以便存储先前解密的指针,这个专用硬件与处理器高速缓存(诸如图4的处理器470/480的高速缓存471/481)和/或与指令和数据高速缓存(诸如图6的处理器602的指令高速缓存682和数据高速缓存684)是不同的。存储器访问单元(诸如图3的存储器访问单元364)中的地址生成单元可为最近解码的指针实现CAM(或查找表),以缩短在不久的将来对相同编码指针的访问时延,即,对于将对处理器的高速缓存中将被访问的数据进行操作的未来指令。如本小节中描述的改进例如可在图1的密码寻址层110和图3的存储器访问单元364中实现。
按照本文的一些实施例的CAM电路模块例如可与图6的补充硬件(HW)存储器696相似地实现。虽然当前描述引用“专用”CAM电路模块,但是本小节中的实施例也可包含与处理器高速缓存不同的CAM电路模块,所述CAM电路模块能够存储与指针地址对应的密文-明文对,但是还可用来存储诸如密钥或微调之类的其他数据。
实施例涉及密码编码指针的使用,例如,诸如以上在标题为“密码寻址”和“按照加密基址(EBA)格式的密码编码指针”的小节以及图8的流程图的上下文中所述的那些密码编码指针。一些实施例可由硬件(诸如由图3B的核心390或者在访问处理器470/480的高速缓存471/481中的存储器内容的上下文中的图4的计算系统400的核心474/484的任一个)来实现。图8的软件单元810和硬件820的一些可用来实现一些实施例。
实施例可用于客户端或服务器CPU或处理器中。密码高速缓存在CPU/处理器中并且尤其作为核心的部分来实现,以及内部信号从处理器外部不是可访问的。但是,可能间接地测量密码高速缓存对数据读取时延的影响。
在一些实施例中,在核心访问其高速缓存中的数据之前,可绕过将编码线性地址(eLA)解密成未加密(原始)线性地址(LA),以及另外,核心可能能够在解密之前、未经解密或者与解密同时开始对数据进行操作(即,对数据执行指令)。通过确定与先前将指针eLA解密为LA(其中密文对应于eLA,以及明文对应于LA)对应的密文-明文对是否存在于CAM电路模块中,核心可以能够得到对高速缓存数据的迅速访问,而无需等待从密码编码指针将eLA解密成LA。当来自对高速缓存的先前访问请求的eLA由核心解密为LA并且被存储在CAM电路模块中时,先前解密可能已经发生。
按照一些实施例,核心可在每次密码编码指针地址将被解码为LA时或者基于指针参数(诸如当前指针的大小字段)有选择地查找先前存储在CAM电路模块中并且与当前eLA(即,来自当前指针的eLA)对应的eLA-LA对,如下面将进一步描述。
如果在CAM电路模块中存在eLA-LA对,其中所述对的eLA(下文称作eLACAM)匹配当前eLA,则核心可假定来自eLA-LA对的LA(下文中称作LACAM)是将被使用的正确LA,然后可从LACAM的转换来得到物理地址,所述转换可由例如TLB来执行并且由核心来得到,以及在与这样得到的PA对应的存储器位置来访问处理器数据高速缓存中的数据。上述操作可代替eLA到LA解密和LA到PA转换的常规管线或者与其同时进行。
如本文所使用,eLACAM与当前eLA之间的“匹配”意味着eLACAM和当前eLA是相同或相似的,例如其中彼此相比具有少许不同偏移,但是其相应加密部分是相同的。
本小节中的实施例的优点是通过优化数据访问时延在密码存储器寻址中的性能改进。因为eLA到LA解密通常可花费多个循环,所以绕过所述循环以便能够对高速缓存数据快速执行指令能够带来关于减少存储器访问的时延的显著优点。多个循环可由如下单个操作来替代:在CAM电路模块中执行密码高速缓存表查找,以便查找eLA匹配以及其中存储的对应eLA-LA。
按照本小节中的一些实施例,通过CAM电路模块中的核心存储,并且在对来自指针的eLA进行解密以便从其中得到对应LA之后,CAM电路模块可被装载有eLA-LA对,所述eLA-LA对产生于解密。核心可在每一个解密之后或者基于指针参数(诸如基于指针大小)有选择地存储eLA-LA对。
CAM电路模块存储位置可基于CAM电路模块的空间约束并且作为时间的函数来覆写。一旦一个或多个eLA-LA对被存储在CAM电路模块中,核心可在对下一个密码编码指针进行解码时,通过首先访问CAM电路模块以确定与当前eLA的eLACAM匹配是否存在,来利用所述eLA-LA对。
CAM电路模块将存在于处理器或CPU的安全边界之内,使得未加密地址能够以安全漏洞的降低可能性被存储在其中。在这个意义上,未加密LA的CAM电路模块存储与未加密PA的TLB存储类似。按照一些实施例,因此,CAM电路模块可被放置在与核心和高速缓存(诸如数据和指令高速缓存)相同的物理芯片上。按照一些实施例,安全边界可小于物理芯片的范围,只要CAM电路模块、核心和高速缓存存在于相同安全边界之内,以及尤其是如果芯片上的其他电路模块不在通信上连接到高速缓存,除非它通过密文消息这样做。
按照一些实施例,如上所述,核心可将所有解密eLA-LA对存储在CAM电路模块中。按照一些其他实施例,核心可例如基于指针参数来选择eLA-LA对以供存储在CAM电路模块中。与只有一些eLA-LA被存储在CAM电路模块中的情形相比,如果所有解密eLA-LA被存储,则会更多地推翻CAM电路模块中的现有条目,以容纳新条目。
在存在要存储的eLA-LA对的选择的情况下,核心可实现一种算法,以选择将被迁移到CAM电路模块中的eLA-LA对。所述算法例如可选择与指针中大于阈值的未加密大小字段关联的eLA-LA对。较大eLA大小通常与具有相同eLA的未来访问请求的较大概率相关,因为它与由存储器中的指针所指向的较大数据对象相关并且因此与指针将被重新使用的较大概率相关。一般来说,所述算法可通过未来指令基于未来访问请求的概率来预测性地选择eLA-LA对。
按照一些实施例,CAM电路模块可存储eLA-LA对以供栈和堆访问。按照备选实施例,可存在分别用于栈访问和堆访问的独立CAM电路模块。
本小节中的实施例的特征在于,不仅eLA及其解密LA被存储在CAM电路模块中,而且它们的相关性也被存储(因此提到“对”被存储),这样,CAM电路模块具有查找表的功能性。按照一些实施例,解密过程可与eLA-LA对在CAM电路模块中的存储同时发生。eLA-LA对的存储是临时的,因为例如它可对于给定数量的指针/指令被存储,并且此后被覆写。
在检测到指针之后,核心因此可访问CAM电路模块,以确定所检测指针中的eLA与在前一指针的上下文中被存储在指针中的eLACAM之间的相关性。因此,按照一些实施例,eLA-LA对在CAM电路模块中的存储比引起其生成和存储的指令生存更长时间。这样,下一个指令能够利用eLA-LA对,以便减少访问时延。
现在参照图46,示出按照一些实施例的流程选项的流程图。首先要注意,图46中以虚线示出的路径(1)-(6)按照所示实施例的变化是可选路径,并且稍后将更详细说明。另外,图46中的流程、判定和动作全部服从本小节中关于每个所述的选项和变化,而不是意在要被解释为关于本小节中的可能实施例的限制。
按照实施例,在操作4602,核心可检测密码编码指针。在操作4604,核心可确定与指针关联的eLA。此后,在4606,核心可访问CAM电路模块,所述CAM电路模块存储来自前一指针的至少一个eLA-LA对。在操作4608,核心可确定eLA-LA对是否存在于CAM电路模块中,其中所述对中的eLA(eLACAM)匹配与指针关联的eLA。
在匹配的情况下,核心可在操作4610确定所述对中与eLACAM相关的LA(LACAM),以及在4612得到与LACAM关联的PA(PACAM)。核心可例如从与核心所维护的高速缓存关联的TLB来得到PACAM。在操作4614,核心可在与PACAM对应的存储器位置来访问数据,并且对所述数据进行操作,即,对所述数据执行指令。在操作4616,在完成指令的执行之后,核心可使在4614所访问的数据被撤销到主存储器,或者以其他方式从核心的执行管线中被丢弃。
在不匹配的情况下,核心可在操作4618对来自指针的eLA进行解密,并且与操作4618同时地或者在之后,将产生于解密的eLA-LA对存储到CAM电路模块中。核心可在操作4622得到与从解密所得到的LA关联的PA。核心可例如从与核心所维护的高速缓存关联的TLB来得到PA。在操作4624,核心可在与PA对应的存储器位置来访问数据,并且对所述数据进行操作,即,对所述数据执行指令。在操作4616,在完成指令的执行之后,核心可使在4624所访问的数据被撤销到主存储器,或者以其他方式从核心的执行管线中被丢弃。
按照图46的可选实施例,访问CAM电路模块的操作4606以及确定匹配是否存在于指针eLA与eLACAM之间的操作4608可与对指针eLA进行解密以得到LA的操作4618(连同将对应eLA-LA对存储在CAM电路模块中的操作4620一起)或得到从LA所转换的PA的操作4622中的一个或多个同时发生。可选实施例包括图46中以虚线示出的附加流程路径(1)-(6)。
按照这个可选实施例,当核心正访问CAM电路模块以便确定eLA-eLACAM匹配是否存在时,核心还可使用流程路径(1)在4618对指针eLA进行解密以得到LA,在4620将这样得到的eLA-LA对存储在CAM电路模块中。核心还可在4622从LA来得到PA,所述LA从解密所得到。核心可在操作4618(解密操作)和/或操作4622(分别通过流程路径(2)和(3)来得到PA的操作)期间的任何时间在4608确定是否存在eLA-eLACAM匹配。
如果基于路径(1)和(2)/(3)匹配不存在,则核心可分别在路径(5)/(6)继续在4622从LA得到PA并且在PA的存储器位置来访问数据,以及在4624对所述数据进行操作,并且然后在结束指令的执行时在4616从核心管线撤销数据或者移除数据。
如果基于流程路径(1)和(2)/(3)匹配存在,则核心可在路径(4)继续进行,以在操作4630从解密管线移除与操作4618和/或4622相关的任何数据,并且如以上更详细描述继续进行操作4610至4616。
按照本小节中的另一个实施例,作为对CAM电路模块的使用的替代和/或补充,在高速缓存数据被返回到核心之前,可按照另一种方式来绕过eLA到LA的解密和/或LA到PA的转换。按照不取决于CAM电路模块的这个第二实施例,核心可使用指针eLA或者关联LA而不使用PA来直接访问高速缓存内的存储器内容。这个第二实施例可节省由TLB进行的TLB查找操作以及得到PA的关联操作。按照这个实施例,核心能够开始直接访问加载和存储缓冲器数据路径而无需等待PA,以及在eLA(如与LA相反)用来直接访问高速缓存的情况下,核心可在开始对所返回数据执行指令之前进一步绕过如上所述等待eLA到LA解密。
按照这个第二实施例,高速缓存可以是通过eLA或LA直接线性可寻址的,即,高速缓存可配置为eLA和/或LA可寻址的(被设计用于eLA/LA直接查找)。核心可在解密之前和/或LA到PA转换之前立即从高速缓存得到数据。
下面对第二实施例的描述将参照高速缓存的eLA寻址,但是实施例在其范围之内包含eLA到LA解密以及使用LA直接访问高速缓存。
按照这个第二实施例,高速缓存本身可用来与核心使用eLA直接访问高速缓存数据并行地得到eLA到PA的转换。按照这种方式,高速缓存能够立即向核心返回数据,以便核心开始对所返回数据执行指令,同时并行地,核心并行地经过常规eLA-LA解密操作和常规。
在这种情形中,得到权限或预计数据(与原本产生于eLA到LA解密和随后的LA到PA转换以得到预计PA的PA对应的数据)的概率比较高(例如95%-99%),并且因此核心可推测基于eLA所返回的数据是预计数据,并且这样,存储器访问时延可通过eLA可寻址高速缓存显著减少。但是,在某些情况下,可能存在冲突,即,可能存在一些情形,其中由核心使用eLA访问高速缓存所访问的数据可能不是预计数据,并且因此可能不对应于预计PA。因此,一些实施例提供一种机制,以不仅使用eLA直接访问高速缓存,而且还检查所访问数据是否为预计数据。一些实施例还可在继续访问高速缓存线之前检验与被访问高速缓存线关联的eLA的地址空间标识符(ASID)匹配请求访问的指令的ASID。
第二实施例部分基于如下前提:可能存在一个eLA到不同PA的多个映射,给定高速缓存是共享资源。可跨可能将不同进程映射到同一eLA的进程使用多个PA。这则可引起eLA可寻址高速缓存中的冲突。高速缓存中的eLA数据查找可为给定指令产生所返回数据,但是所返回数据可能不对应于与当前所检测指针对应的指令,而是可能完全对应于另一个指令,并且因此是错误数据。然而,在大多数时间,应用当前正使用的eLA将很可能直接从高速缓存产生预计数据,并且因此产生本文所述的优化优点。
按照这个第二实施例的检验机制可涉及,与核心使用eLA直接访问高速缓存并且对所返回数据进行操作并行地,核心还将eLA解密成LA,并且从LA的转换(例如由TLB)来得到PA,以及将这样得到的PA与对应于所返回数据的PA进行比较,以便确保来自eLA查找的所返回数据对应于预计数据。
如果从LA的转换所得到的PA的查找和对应于所返回数据的PA产生不匹配,则核心可停止关于所返回数据是预计数据的推测,并且可从其执行管线中丢弃所返回数据。
PA从TLB进程的返回以及基于并行eLA的高速缓存访问允许核心确认被操作的数据是预计数据,并且能够允许核心继续进行更高指令并且确认所述数据。
在不匹配的情况下,核心可执行“管线核弹(pipeline nuke)”,以恢复其全部寄存器以及其管线中与所返回数据相关的所有变化,好像那个数据从未被返回一样。因此,eLA可寻址高速缓存提供核心存储器访问操作基于推测继续进行的可能性,直到进行关于所返回数据的PA是否对应于预计数据的PA的检查。按照这个第二实施例,管线核攻击(pipelinenuking)操作可被执行,只要检查操作在在所返回数据被提交回主存储器之前发生。只要所返回数据处于处理器管线之内,核心就能够始终响应于产生于检查操作的不匹配而解退或反转对数据的操作。
在管线核弹之后,一旦核心确定所返回数据不是预计数据,并且在它通过管线核攻击恢复其旧寄存器好像所返回数据从未被返回一样之后,核心可向主存储器发出访问请求,以便访问预计数据,因为高速缓存返回错误数据(高速缓存未命中)。
实施例的一个特征在于,核心可在其寄存器中存储eLA的值,因为eLA可能需要被完成,以对由高速缓存所返回并且由eLA所引用的数据进行解密,其中eLA被密码绑定到数据。核心需要知道eLA内容或值,以便对于从主存储器或者层次结构中的更高级高速缓存进入的数据正确解密和扩散。
现在参照图47,示出按照一些实施例的流程选项的流程图。图47中的流程、判定和动作全部服从本小节中关于每个所述的选项和变化,而不是意在要被解释为关于本小节中的可能实施例的限制。
按照实施例,在操作4702,核心可检测密码编码指针。在操作4704,核心可确定与指针关联的eLA。此后,在4706,核心可在与eLA对应的存储器位置来访问数据(并且这样得到“返回数据”),并且可对所返回数据进行操作。在操作4708,核心可确定所返回数据是否对应于预计数据(检查操作)。检查操作可能需要从与指针eLA对应的LA的转换所得到的PA与对应于所返回数据的PA之间的比较。
如果存在匹配,则在操作4712,在完成指令的执行之后,核心可使在4706所访问的所返回数据被撤销到主存储器,或者以其他方式从核心的执行管线中被丢弃。
在不匹配的情况下,核心可在操作4710对(一个或多个)管线进行核攻击,即,执行“管线核弹”,以恢复其全部寄存器以及其管线中与所返回数据相关的所有变化,好像那个数据从未被返回一样,并且暂停指令的执行。此后,在操作4730,核心可向主存储器发出访问请求,以从存储器来得到预计数据。
与操作4706和4708同时地,核心可在操作4714对于来自指针的eLA进行解密。核心可在操作4718得到与从解密所得到的LA关联的PA。核心可例如从与核心所维护的高速缓存关联的TLB来得到PA。核心可从操作4718移动到如上所述的操作4708和4710或4712的流程。
按照备选实施例,仅当在与指针eLA对应的高速缓存处不存在数据时,核心才可执行操作4714和4718,在此情况下,流程会从操作4706直接移动到操作4712,而无需在4708的检查操作。在这种情况下,在少数情况下,核心会未经检查而对错误数据进行工作。
按照一些实施例,可如下面所述来提供优化。
在一个选项中,核心可对于从其高速缓存中读取的数据推测性地解码,所述数据匹配有效密码编码指针格式。如果数据被成功解码,则核心可使转换被存储在其高速缓存中。按照上述的一个特征,寄存器可包括“有效密码计算(CC)指针”位,以指示当前值是否为高速缓存中可用的具有有效转换的有效CC指针。核心然后可在容许限度之内在指针算术上传播“有效CC指针”。按照相关特征,如果寄存器值指示有效CC指针,则寄存器可包括直接指向转换高速缓存条目的索引。在存储器访问时,核心则可有利地使用来自密码高速缓存的解码版本(与来自寄存器的关联偏移相组合)。
F.策略和安全元数据感知高速缓存一致性
存储器数据单元(又称作高速缓存)被注释。技术问题在架构中引发,其中存储器按照层次方式来组织,其中高速缓存(例如,诸如L1高速缓存)表示最快访问的存储器层次结构的部分。一些当前计算架构包括独立计算核心和各种关联高速缓存,其中同一高速缓存可以是独立核心可访问的。存储器层次结构可包括逐渐更大和/或更难访问部分,结束于主存储器中。存储器层次结构架构至少因可缩放性和用途而是有用的。
本文所解决的技术问题是如何确保在与核心关联的专用高速缓存中发生的变化被已知并且无缝地传播到其他核心。核心可能正改变存储器内容(即,数据),同时另一个核心可正改变另一个高速缓存线中的存储器内容的另一个版本。最后,如果一个核心推翻由另一核心进行的变更,则不存在高速缓存线之间的一致性或连贯性,并且引发关于那些各种高速缓存之中存储的存储器内容的冲突。在一个高速缓存中的一些数据/存储器内容变化可能未无缝传播到其他高速缓存的情况下,后一种情况可能发生。
实施例的目的是确保对相同数据或存储器内容单独进行的变更之间的一致性和连贯性。
当前高速缓存一致性协议存在,其目的是确保对高速缓存中的数据进行的所有变更按照如下方式发生:使得核心获悉各种高速缓存中的变更,使得能够存在关于一个核心是否推翻由另一个核心针对相同数据进行的变更的选择。最著名的这类协议之一是MESI,所述MESI代表修改(M)、独占(E)、共享(S)和无效(I)。在MESI的当前版本中,修改、独占、共享和无效具有下列含意:
1)修改(M)表示一种高速缓存线数据,所述高速缓存线数据仅存在于当前高速缓存中并且为脏,即,从主存储器中的值已被修改。在准许对(不再有效的)主存储器状态的任何其他读取之前,要求高速缓存在将来某个时间将脏数据回写到主存储器。
2)独占(E)表示一种高速缓存线,所述高速缓存线仅存在于当前高速专用缓存中并且为清洁的,即,它匹配主存储器。它可响应于读请求而在任何时间被改变成共享状态,并且备选地,它可在被写入时被改变成修改状态。
3)共享(S)表示一种高速缓存线,所述高速缓存线可被存储在其他高速缓存中并且是清洁的,即,它匹配主存储器(在共享状态中,还没有核心开始修改存储器内容,以及如果修改由一个核心进行,则所有其他核心能够被通知并且使其内容失效为脏)。所述线可在任何时间被丢弃(改变成无效状态)。
4)无效(I)指示无效的(即,未使用的)高速缓存线。
MESI背后的一个思路在于,它允许强制高速缓存线仅处于四种状态:独占、修改、共享和无效。按照MESI,通信可涉及探查,以及根据硬件实现,核心可具有探查代理,所述探查代理在一个选项中可拦截其他核心进行的读请求或写请求,确定另一核心是否正尝试读取维护正被访问的高速缓存的核心已经修改的存储器内容,确保已被修改的存储器内容传播回主存储器,并且使响应被发送以停止所述读请求。修改高速缓存存储器内容的核心可将修改内容回写到主存储器中,以及另一核心将再次发出访问最新内容的另一个读请求。
如本小节中使用的“回写”表示一个过程,通过所述过程,计算元件(诸如核心)在主存储器中仅更新存在于主存储器中的存储器内容在更新操作中由执行回写的核心的本地副本的存储器内容所替换的那些存储器内容。作为回写进程的部分,可选地,如果安全元数据与附加加密绑定,则由核心所回写的存储器内容可能被反向扩散到主存储器,这意味着它可在回写时被加密。安全元数据例如可用作密钥选择器或者用作微调。用于特定密钥的选择器可用于进一步处理内容(诸如通过扩散),所述选择器采取与高速缓存线关联的物理地址中的几个位的形式用来告知如何在高速缓存内扩散某些内容(诸如某些字节)。
通过实施例所解决的问题涉及在高速缓存一致性的上下文中的高速缓存线中的安全元数据的使用。高速缓存线可被注释有安全元数据。安全元数据可以是几个位,诸如4-5位。为了将安全元数据大小与密码计算的整体框架绑定,安全元数据的位数可与关联高速缓存线(在所述高速缓存线内,扩散将被实现)中的存储器分配的大小字段相关。经由位向量的设置位可进一步指示哪些区组将要作为扩散的部分被改变。
在高速缓存线被注释有安全元数据的情况下,高速缓存一致性造成特殊问题。例如,如果核心开始读取或写入,则它需要不仅考虑将被寻址的存储器内容的地址,而且还要考虑与高速缓存线中的内容关联的安全元数据,以便能够成功地访问所述内容。一些实施例解决一种状况,其中访问请求(即,读请求或写请求)针对存储器内容,但是其中读请求包括安全元数据(又称作密码颜色或者如上所述的密钥选择器或微调值),所述安全元数据不同于用以注释尝试被访问的高速缓存线的安全元数据。
本小节中的一些实施例涉及不同方式,所述方式可针对在使用不匹配用来注释高速缓存线内的存储器内容的安全元数据的同时对存储器内容的访问请求(例如读请求或写请求)被采取,即,本文中称作“冲突”或“不匹配”的状况,所述状况可由维护高速缓存(其高速缓存线将被访问)的核心来检测。如本文所使用的“冲突”或“不匹配”将与“违规”加以区分,所述违规表示产生于恶意攻击的“冲突”或“不匹配”,而不是例如产生于有缺陷软件或者产生于预取器采用错误安全元数据来访问数据的尝试。
实施例包含由给定装置本地的核心和/或由远程核心使用安全元数据进行读和写访问的上下文中的高速缓存一致性。远程访问表示由远程装置进行的访问,所述远程装置也就是一种装置,所述装置不同于包含本地核心及其本地高速缓存的装置,例如通过云网络(诸如图10中所示的一个网络)在通信上连接到包含本地核心及其本地高速缓存的装置的装置。
更简单的实施例针对维护尝试被访问的高速缓存(下文中称作“将被访问的高速缓存”)的核心可将安全元数据看作是与来自尝试访问高速缓存的核心(下文中称作“访问核心”)的访问请求关联的物理地址的部分,并且不执行任何操作,也就是说,将读/写请求与包括不匹配尝试被访问的存储器内容的地址的物理地址的请求相似地来处理。
备选地,与激进方式有关的实施例可包括核心响应于例如在读或写操作之后检测到冲突而引起对主存储器的更新,并且使将被访问的高速缓存内的尝试被访问的存储器内容失效。
按照另一个实施例的备选方式可涉及核心的探查代理的使用。探查代理可检测另一个核心使用与核心的将采用探查代理来被访问的高速缓存中的给定存储器内容关联的安全元数据不同的安全元数据尝试访问,以及然后可中断主程序的执行,并且采用异常操控器来调用异常,这将操控冲突。在这种状况中,冲突可被看作是完整性违规。按照一些选项,核心可引发异常,和/或异常操控器可根据所调用异常的数量以不同方式来操控冲突。作为举例,在所检测冲突的数量等于或大于给定阈值的情况下,核心可调用异常操控器。
按照一些实施例,如与整个高速缓存线相反,而是高速缓存线的区组集合相互之间可被注释有不同安全元数据。例如,核心可采用第一安全元数据来注释其将被访问的高速缓存中的高速缓存线的8字节组或者给定位数组或者给定位数,以及采用第二安全元数据来注释另一个给定位数。
按照一个实施例,如果另一个核心尝试访问注释有第二安全元数据的高速缓存线的不同区组集合,则维护高速缓存线的核心可确定其他核心采用它在将被访问的高速缓存的相同高速缓存线中尝试访问的存储器内容的不同安全元数据进行操作,则不对其他核心对高速缓存线的访问作出反应,而是好像其他核心正从另一个高速缓存线访问存储器内容一样起作用,也就是说,允许其他核心对高速缓存线的不同区组集合的访问,好像它是对具有其自己的安全策略的不同高速缓存线的访问一样。维护将被访问的高速缓存的核心可确定另一核心采用不同安全元数据进行操作以凭借与将不同安全元数据看作由另一核心所使用的核心的通信来访问将被访问的高速缓存的高速缓存线中的数据。后一种通信可对应于对MESI协议的更新或修订。在这种情况下,核心配置成使用第一安全元数据(第一安全策略)在将被访问的高速缓存的高速缓存线中其自己的(一个或多个)区组中执行其自己的访问,并且确定另一个核心正尝试使用与第一安全元数据不同的第二安全元数据(第二安全策略)来访问相同高速缓存线中的一个或多个其他区组,核心。
适合采用相应元数据来注释高速缓存线的单独区组的核心允许对相同高速缓存线的变更同时和单独发生,而具有不同安全元数据并且对应于不同安全域的区组由不同核心来访问。后一种功能性提供不同核心之间的巨大性能益处。
本文在本小节内的实施例的上下文中描述的阈值策略的目的是检测无害访问。在威胁或恶意软件/攻击的情况下发生的不匹配的数量与导致不匹配的无害访问相比通常较高,因为攻击者会以较高频率在给定时间量之内设法猜测存储器的某些区域的正确安全元数据。后者涉及与存储器访问关联的窗口的概念以及那个时间窗口内的尝试存储器访问的数量。试探法允许区分由有缺陷软件所引起的违规以及由可能持续的攻击者所引起的违规。按照更宽容策略,在违反阈值的暂时数量被超过的情况下,核心可中断访问,并且使异常被引发。
如果访问请求是来自攻击者或者来自实现有缺陷软件的核心,使用使存储器内容的副本失效的激进策略,则冲突的确定可以是关于软件中存在某个缺陷的指示。在这种情况下,尝试访问的核心将使其本地副本失效,并且重新发出读请求以再次读取主存储器,并且采用正确安全元数据来获得正确副本。如果来自主存储器的后续读请求再次引起冲突,则代码中可能存在持久缺陷,在此情况下,访问的数量可能超过给定(预设、预定)阈值,并且引起异常,该进程可帮助捕获代码中的缺陷。
更宽容策略是采用存储器内容的本地副本继续工作,即使另一个核心可能采用不同安全元数据正访问存储器内容。在宽容策略的这个版本中,如与缺陷相反,可针对给定阈值来跟踪冲突,其中假定软件/代码中不存在缺陷。核心可采用其本地副本中的存储器内容(包括其本地安全元数据)继续工作,同时允许另一个核心采用不同安全元数据尝试对存储器内容的访问并且解决其自己的冲突。后一种方式表明核心中针对其本地副本和所使用代码(安全元数据)的置信。
将被使用的各种策略可采取位向量的形式被存储在策略寄存器(诸如专用寄存器、模型特定寄存器(MSR),例如每个核心一个)中,并且由各种核心来访问,以设置其策略并且将被相应地配置。备选地,可在引导时间在核心实现策略。
如上所述,激进策略意味着每次核心尝试采用安全元数据的不同值进行读取或写入(检测到冲突)时,核心可立即回退,并且基本上使它正尝试访问的存储器内容失效。按照宽容策略,核心认为它具有正确代码/正确安全元数据,并且如果另一个核心尝试采用不同安全元数据来读取相同存储器内容,它将读取垃圾,并且将操控其自己的一致性冲突,这意味着具有不同安全元数据的相同存储器内容的多个副本将存在于不同高速缓存中。
按照一些实施例,在激进策略中,独占、修改和共享的概念将具有与如上所述的当前MESI协议中相同的含意,但是在宽容策略中,独占、修改和共享的概念将具有不同含意,如下所述:
1)独占:
a)按照MESI的当前版本:只有一个核心具有本地副本,并且这一个副本未被修改;
b)按照本小节中的一些实施例:
i)如果激进策略成立,则独占意味着只有一个核心具有副本,并且这一个副本未被修改;
ii)如果更宽容策略成立,则独占意味着只有一个核心具有被注释有相同安全元数据的副本,并且这个副本未被修改。
2)修改(基于主存储器中的值):
a)按照MESI的当前版本:只有一个核心具有本地副本,并且这一个副本已被修改;
b)按照本小节中的一些实施例:
i)如果激进策略成立,则修改意味着只有一个核心具有副本,并且这一个副本已被修改;
ii)如果更宽容策略成立,则修改意味着只有一个核心具有被注释有相同安全元数据的副本,并且这个副本已被修改;但是可存在被注释有不同元数据的其他副本。
3)共享:
a)按照MESI的当前版本:多于一个核心具有本地副本,并且这个副本在每个核心中是相同的;
b)按照本小节中的一些实施例:
i)如果激进策略成立,则共享意味着若干核心具有被注释有相同安全元数据的相同副本,并且没有被注释有其他安全元数据的其他副本存在于本地核心高速缓存中;
ii)如果更宽容策略成立,则共享意味着若干核心具有被注释有相同安全元数据的相同副本,但是被注释有其他安全元数据的其他副本存在于本地核心高速缓存中。
回到编码,策略可采取位向量编码的形式,它可被存储在寄存器(诸如每个核心的MSR)中。按照位向量的第一实施例:
1)第一位可指示安全元数据感知一致性是对高速缓存线的区组还是对整个高速缓存线进行操作。例如,区组可能过于复杂而无法实现,或者特定偏斜已经关断区组,在此情况下,第一位会被设置为零。如果被设置成表明安全元数据将对区组进行操作,则策略位向量可伴随表明哪些区组将被访问的另一个位向量。
2)在当访问高速缓存线的相同区组时检测到安全元数据不匹配的情况下,第二位可指示是否失效。第二位确定策略是激进还是宽容。与安全元数据和对应区组关联的读请求可被广播,以及核心可通过其探查代理来确定所述访问是针对具有不同安全元数据的相同区组,而不管安全元数据是共享还是修改的。因此,第二位将确定核心在这种情况下是否将使它的注释有本地安全元数据的本地副本失效,并且回写存储器内容(例如位被设置为1),或者备选地,它可因读取而回写存储器内容,但是不使这个副本失效而是保持这个副本,并且独占地保持它(例如位被设置为0)。
3)在当访问高速缓存线的不同区组时检测到安全元数据不匹配的情况下,第三位可指示是否失效。仅当第一位被设置为一时,第三位才可被设置为1,但是第二位可被设置为1或零。
4)第四位可指示每个高速缓存一致性代理是否保持过去不匹配的状态信息。
5)第五位可指示在不匹配的情况下是否调用异常操控器。因此,位4可提供对冲突或不匹配检测的软件解决方案。例如,如果位4被设置为1,则每次检测到冲突时,异常操控器可被调用,可按照这种方式使所述异常操控器针对不匹配采取进一步步骤。
6)第六位可指示用于调用异常操控器的策略。一旦检测到不匹配,或者当由高速缓存一致性代理所保持的状态包括具有某些特定值的一个或多个计数器时,这可立即进行。
例如在上述示例实施例中的位4、5和6,位向量可通过调用异常操控器以中断主软件的操作,来为核心高速缓存一致性代理设置影响所述主软件的执行的可能性。
虽然在以上描述中提供位向量的示例,但是实施例并不局限于此,而是在其范围之内包括提供任何位数的位向量,以指示以上所述或本文所述的策略的任一个。
按照实施例,计数器(所述计数器确定在时间窗口内是否已经达到冲突检测的阈值)可以是策略寄存器(诸如MSR)的部分。
本小节中的实施例(诸如相对本文所述的高速缓存一致性协议和策略所述的那些实施例)非常适合于分布式存储器系统,诸如与图10的计算节点的任一个关联的那些存储器系统。
实施例可被部署在单个系统(诸如SoC)中的核心之间,诸如包括多个核心和高速缓存(核心可以是CPU、GPU、xPU或者任何其他核心)的图4的计算系统400。实施例可进一步被部署在分布式存储器系统中,其中存储器被分布在不同边缘计算节点(诸如图10的节点1002、1012、1022和1032)之间。在分布式存储器部署的情况下,策略寄存器可存在于控制器节点,并且可存储边缘计算网络(诸如图10的网络)内的一个或多个节点的一个或多个核心(在这种情况下为计算核心,诸如图4的核心474/484)的高速缓存一致性策略。控制器节点可适合将其策略寄存器中存储的高速缓存一致性策略(诸如本文所述的那些)传送到边缘计算网络内的其他节点的计算核心。控制器节点可进一步包括计数器,以跟踪与其耦合的节点的每个计算核心的冲突的历史,并且基于与每个计算核心关联的冲突的历史进行关于如何分配存储器的判定。备选地或者与控制器节点相结合,在分布式存储器系统(诸如与图10的边缘计算网络关联的一个存储器系统)中,对于那个节点的每个计算核心,每个不同节点内可能存在策略寄存器。
按照一些实施例,高速缓存一致性策略可在检测到冲突时判定核心的行为。下面以及在图48-52的上下文中针对这些策略的示例。在图48-52中,E命中和E未命中分别表示读请求或者写请求中的物理地址相对核心的本地高速缓存的存储器内容的物理地址的匹配。图48-52呈现基于访问是读访问还是写访问、我们在本地高速缓存上具有E命中还是E未命中以及进一步相对本地高速缓存中的数据是具有安全元数据匹配还是不匹配(即,我们具有本地高速缓存中的存储器内容的安全元数据与关联访问操作的安全元数据之间的不匹配)。
图48涉及E命中和安全元数据未命中的情况下的读请求,并且其中在尝试所述访问的核心的本地高速缓存中存在将被访问的存储器内容的单个副本。如果核心正尝试读取,则此后存在关于将被读取的内容处于那个核心的本地高速缓存中(E命中)的确定以及关于与所述读请求关联的安全元数据是命中还是未命中的另一确定。在安全元数据未命中(图48)的情况下,核心可在4802发出主存储器读请求。
此后,在状态共享(S)的存储器内容的多个副本存在于多个核心的情况下,所述流程将移动到图49所示的流程。
在核心的本地高速缓存处的存储器内容的单个副本(下文中称作“副本”)的情况下,所述流程移动到关于那个副本是具有状态独占(E)还是修改(M)的确定。如果副本具有状态E,则本地核心在4822使其副本失效,并且将状态设置成无效(I),在4824在其高速缓存中存储主存储器值,并且在4826将新存储的状态设置成E。如果副本具有状态修改,则主存储器访问在4810在本地核心被中止,本地核心在4812将修改版本回写到主存储器,在4814将副本的状态从E设置成I,在4816重新发出主存储器访问,在4818在其本地高速缓存中存储内容的主存储器值(在这种情况下,如果安全元数据不正确,则来自主存储器的存储器条目会采用错误密钥被解密,并且存储器内容则会表现为随机),并且最后将其状态设置为E。
仍然参照图48,按照一些实施例,在开始于操作4822或4810的分支的每个,发出读请求的本地核心可实现与所示策略不同的策略(因此虚线包围与那些操作对应的框)。如图48中所示,发出读请求的核心可实现下列策略的任一个,作为开始于操作4822或4810的分支的相关操作的补充、替代和/或与其结合(因此虚线用于操作的分支):
1)例如,如果它正访问高速缓存线中具有不同安全元数据值的相同区组,则使本地副本失效,并且按照图48的流程继续进行;
2)(未示出)如果访问具有不同安全元数据值的不同区组,则忽略不匹配;和/或
3)(未示出)检查以确定当前检测的不匹配的数量是否超过阈值,以及如果超过阈值,则引发异常,例如当正访问高速缓存线中具有不同安全元数据(SM)的相同区组时,所述异常调用异常操控器来中断软件。
在本小节中的实施例的上下文中忽略不匹配意味着不使其自己的存储器内容失效。在一些选项中,忽略可包括使用计数器来跟踪特定时间窗口内的不匹配,以及例如基于所述不匹配来调用异常操控器以采取进一步动作。在高速缓存线内的相同区组由核心尝试访问但是具有与(一个或多个)探查核心的安全元数据不同的安全元数据的情况下,保持计数器的这后一种选项可适用,在此情况下,如果计数器数值例如超过预定阈值,则可能存在违规。
在按照本小节中的实施例进行忽略或失效的每种情况下,所述的核心可将其本地高速缓存中的存储器内容回写到主存储器。
在本小节的一些实施例中改变存储器内容的状态之后可接着向其他核心传送指示存储器内容的新状态的信号。
图49涉及E命中和安全元数据未命中的情况下的读请求,并且其中在各种核心中存在将被访问的具有状态S的存储器内容的多个副本。图49是图48的流程的分支在由核心发出主存储器读请求并且以其为基础的关于在各种核心存在处于状态S或共享的尝试被读取的存储器内容的多个副本(具有相同安全元数据的相同副本)的确定之后的延续。在这种情况下,高速缓存一致性协议可用来引起直接地或者通过内插件(诸如主存储器)对核心广播读请求,以允许探查核心或者探查核心的高速缓存一致性代理来确定读请求针对存储器内容和关联安全元数据被发出。
图49中,所有探查核心和本地核心可在4902将存储器内容的状态从S设置为I,以及本地核心可在4904在其本地高速缓存中存储存储器内容的主存储器值,并且此后在4906将其状态设置为E。
仍然参照图49,按照一些实施例,在操作4904,探查核心可实现与所示策略不同的策略(因此虚线包围与操作4902和4904对应的框)。因此,如图49中所示,探查核心可实现下列策略的任一个,作为开始于操作4902的分支的相关操作的补充、替代和/或与其结合(因此虚线用于操作的分支):
1)例如,如果本地核心正访问高速缓存线中具有不同安全元数据值的相同区组,则使本地副本(Q202)失效;
2)如果本地核心正访问相同区组但是策略规定如此,则忽略不匹配;
3)如果访问相同高速缓存线中的不同区组,则忽略不匹配;和/或
4)检查以确定当前检测的不匹配的数量是否超过阈值,以及如果超过阈值,则引发异常,例如上述(1)、(2)或(3)成立,所述异常调用异常操控器来中断软件。
图50涉及具有E未命中的读请求(用作读请求的部分的物理地址未引起存储器内容尝试被读取)的情况下的实施例,并且其中在尝试访问的核心的本地高速缓存中存在将被访问的存储器内容的单个副本,其中单个核心相对存储器内容处于状态E或M。在图51中的A和B针对没有存储器内容的副本和存储器内容的多个副本存在的情况,其描述如下。
如果核心正尝试读取,则此后存在关于将被读取的内容不在那个核心的本地高速缓存中(E未命中)的确定。在E未命中的情况下,核心可在5002发出主存储器读请求,以便广播读请求,并且允许其他核心的探查代理知道所述读请求的存在。此后,在零副本存在于任何核心或者状态共享(S)的存储器内容的多个副本存在于多个核心的情况下,所述流程将移动到图51所示的流程。
在核心的本地高速缓存处的存储器内容的单个副本的情况下,所述流程移动到关于那个副本是具有状态独占(E)还是修改(M)的确定。如果副本具有状态E,则存在关于是否存在(一个或多个)探查核心与尝试所述读取的本地核心之间的安全元数据不匹配或冲突的确定。
在没有不匹配的情况下,本地核心在5010中止其主存储器访问,探查核心在5012将其存储器内容的副本放在总线上(或者以其他方式将它与本地核心共享),并且探查和本地核心在5014将其状态设置为S。
在不匹配的情况下,按照激进实施例,探查核心将其状态从E设置为I,在5016使其副本失效(在此情况下,不需要对主存储器的回写)。本地核心在5018在5018在其高速缓存中存储主存储器副本,并且在5020将新存储的状态设置为E。
如果副本具有状态M,则可在5022在本地核心中止主存储器访问。然后,存在关于是否存在(一个或多个)探查核心与尝试所述读取的本地核心之间的安全元数据不匹配或冲突的确定。
在没有不匹配的情况下,探查核心在5024将其存储器内容的副本放在总线上(或者以其他方式将它与本地核心共享),并且探查和本地核心在5026将其状态设置为S。
在不匹配的情况下,包括其安全元数据的存储器内容的修改版本在5028被复制回主存储器,探查核心在5032将其副本状态设置为I,本地核心在5036重新发出其主存储器访问,在5030在其高速缓存中存储存储器内容的主存储器值及其关联元数据,并且在5034将其状态设置为E。
仍然参照图50,按照一些实施例,在开始于操作5016或5028的分支的每个,探查核心可实现与所示策略不同的策略(因此虚线包围与那些操作对应的框)。
如图50中所示,探查核心可实现下列策略的任一个,作为开始于操作5016的分支的相关操作的补充、替代和/或与其结合(因此虚线用于操作的分支):
1)如果采用不同安全元数据值访问与在高速缓存线(Q316)中发出初始读请求的核心相同的区组,则使其本地副本失效;在这种情况下,策略2)可与下面的策略4)共同使用;
2)如果访问相同区组但是策略规定如此,则忽略不匹配(在此情况下,5018和5020可能不发生,本地核心可在其本地高速缓存中存储探查核心的存储器内容,并且将其状态设置为S);在这种情况下,策略1)可与下面的策略4)共同使用;
3)如果访问具有不同安全元数据值的不同区组,则忽略不匹配(在此情况下,5018和5020可能不发生,本地核心可在其本地高速缓存中存储探查核心的存储器内容,并且将其状态设置为S);和/或
4)检查以确定当前检测的不匹配的数量是否超过阈值,以及如果上述1)或2)成立,则引发异常(在此情况下,5018和5020可能不发生,以及异常操控器可确定后续步骤)。
在策略2)和3)的情况下,探查核心可能不响应本地核心。在上述策略2)的情况下,如果本地核心正尝试访问与探查核心相同的区组,则探查核心可忽略不匹配。在策略2)、3)和4)的任一个中,探查核心可对其本地副本继续工作,同时因状态I,本地核心可将探查核心高速缓存感知为具有零副本,并且尝试得到从主存储器(Q318)本身尝试被读取的存储器内容。这后一种操作可使本地核心从主存储器读取垃圾,如果它采用元数据不匹配读取主存储器,该冲突可引发进一步异常,这可由操作系统(OS)或另一个操控器来应对。在策略3)的情况下,探查核心可通过将副本放在总线上来响应本地核心。
如图50中所示,探查核心可实现下列策略的任一个,作为开始于操作5028的分支的相关操作的补充、替代和/或与其结合(因此虚线用于操作的分支):
1)如果由本地核心进行的读访问针对高速缓存线中具有不同安全元数据值的相同区组,则将其副本回写到主存储器,然后使那个本地副本失效;
2)如果由本地核心进行的读访问针对相同区组但策略规定如此,则将其副本回写到主存储器,然后忽略不匹配;
3)如果由本地核心进行的读访问针对具有不同安全元数据值的不同区组,则不将其副本回写到主存储器,并且忽略不匹配;和/或
4)检查以确定当前检测的不匹配的数量是否超过阈值,以及如果上述1)或2)成立,则引发异常。
在上述策略2)至4)中,探查核心可将它的尝试被访问的存储器内容继续保持在状态M,从而知道不同安全元数据由本地核心用来尝试读取存储器内容。
策略2)可应用于将访问相同但具有与本地核心的安全元数据不同的安全元数据的区组的一组核心。在这种情况下,它们可在如下假设下忽略不匹配:探查核心的安全元数据是有效安全元数据。
图51涉及具有E未命中的读请求(用作读请求的部分的物理地址未引起存储器内容尝试被读取)的情况下的实施例,并且其中在尝试访问的核心的本地高速缓存中存在将被访问的存储器内容的多个副本,其中探查核心相对存储器内容处于状态S(分支B),或者其中没有存储器内容的副本存在(分支A)。图51是图50的如其中对A和B的页外引用中所示的延续。
如果本地核心正尝试读取,则此后存在关于将被读取的内容不在那个核心的本地高速缓存中(E未命中)的确定。在E未命中的情况下,核心可在5002发出主存储器读请求,以便广播读请求,并且允许其他核心的探查代理知道所述读请求的存在。此后,在零副本存在于任何核心的情况下,所述流程将移动到分支A,以及在状态共享(S)的存储器内容的多个副本存在于多个核心的情况下,所述流程将移动到分支B。
在探查核心的任何位置没有存储器内容的副本的情况下,在分支A,所述流程移动到在5104在其高速缓存存储主存储器副本的本地核心,并且在5106将新存储的状态设置为E。
在探查在状态S的核心处的存储器内容的多个副本的情况下,我们移动到流程的分支B,并且确定是否存在探查核心与本地核心之间的安全元数据不匹配。这种情况是,若干探查核心拥有副本,并且副本与相同安全元数据关联,因此状态S。
在没有不匹配的情况下,本地核心在5108中止其主要存储器访问,任意探查核心在5110将其存储器内容的副本放在总线上(或者以其他方式将它与本地核心共享),并且本地核心在5112将其状态设置为S。
在不匹配的情况下,按照激进实施例,探查核心将其状态从S设置为I,在5114使其副本失效(在此情况下,不需要对主存储器的回写)。本地核心在5116在其高速缓存中存储主存储器副本,并且在5118将新存储的状态设置为E。
仍然参照图51,按照一些实施例,在开始于操作5114的分支的每个,探查核心可实现与所示策略不同的策略(因此虚线包围与那些操作对应的框)。
如图51中所示,探查核心可实现下列策略的任一个,作为开始于操作5114的分支的相关操作的补充、替代和/或与其结合(因此虚线用于操作的分支):
1)如果访问高速缓存线中具有不同安全元数据的相同区组,则使本地副本失效;
2)如果访问相同区组但是策略规定如此,则忽略不匹配;
3)如果访问具有不同安全元数据的不同区组,则忽略不匹配;
4)检查以确定当前检测的不匹配的数量是否超过阈值,以及如果1)或2)成立,则引发异常。
图52涉及在左分支上具有E命中或者右分支上具有E未命中(用作读请求的部分的物理地址未通向尝试被读取的存储器内容)的写请求的情况下的实施例。
图52中,本地核心尝试开始写入存在于其本地高速缓存中并且处于M、E或S的状态中的某个存储器内容。如果它处于M状态中,则这意味着本地核心已经开始写入这个存储器内容,并且它在安全元数据方面不同于主存储器内容。如果它处于E状态,则这意味着它先前被读取,但从未被写入。如果它处于S状态中,则这意味着本地核心对它进行读取,但是若干其他核心对它进行读取,并且核心全部具有完全相同的副本(相同存储器内容以及那个内容的相同安全元数据)。
在E命中的情况下,存在关于本地核心状态是M、E还是S的确定。图52的流程进一步假定在将被写入的高速缓存上存在写请求与存储器内容副本之间的安全元数据不匹配(若它存在)。仅作为举例,不匹配可能通过释放后使用缺陷或者恶意攻击所引起。
如果本地核心处于M状态中,则本地核心在5220通过写入具有其关联安全元数据的尝试被写入的存储器内容来更新其高速缓存线,并且状态保持为M。
如果本地核心处于E状态中,则本地核心在5222通过写入具有其关联安全元数据的尝试被写入的存储器内容来更新其高速缓存线,并且在5224将状态从E改变成M。
如果本地核心处于S状态中,则按照激进方式,本地核心广播传送以在5230将存储器内容的状态从S设置为I,以及探查核心在5232将其存储器内容的条目状态从S设置为I。然后在5226,本地核心在5226通过写入具有其关联安全元数据的尝试被写入的存储器内容,并且通过将其条目状态从S设置为M,来更新其高速缓存线。
在E未命中(本地核心没有它想要修改的存储器内容的副本,而一个或多个其他核心可能有)的情况下,本地核心在5202向其他核心广播具有修改意图的读取(RWITM)消息,并且此后存在关于是否存在尝试被读取和修改的存储器内容的副本的确定。
如果没有副本存在,则本地核心在5204把来自主存储器的值存储到其高速缓存中,采用其自己的安全元数据对它进行修改,并且将其状态设置为M。
如果副本存在,则存在关于探查核心状态是M、E还是S的确定。
如果状态为M,则在5206阻止RWITM,以及探查核心在5208将存储器内容的修改版本回写到主存储器,并且在5210将状态设置为I。此后,在5212,本地核心重新发出另一个RWITM消息,以及在5214,本地核心在其高速缓存中存储来自主存储器的存储器内容及关联安全元数据,对它进行修改,并且将其状态设置为M。
如果状态为E或S,则探查核心响应于RWITM而按照激进方式在5216将其状态设置为I,以及在5218,本地核心在其高速缓存中存储来自主存储器的存储器内容及关联安全元数据,对它进行修改,并且将其状态设置为M。
仍然参照图52,按照一些实施例,在开始于操作5114的分支的每个,探查核心可实现与所示策略不同的策略(因此虚线包围与那些操作对应的框)。
如图52中所示,本地核心可实现下列策略的任一个,作为开始于操作5220或5222的分支的相关操作的补充、替代和/或与其结合(因此虚线用于操作的分支),其中本地核心是那个副本的唯一所有者:
1)如果访问高速缓存线中具有不同安全元数据值的相同区组,则增加不匹配计数器;
2)如果访问具有不同tv值的不同区组,则忽略不匹配;
3)检查当前检测的不匹配的数量是否超过阈值,以及如果(1)成立,则引发异常。
如图52中所示,本地核心可实现下列策略的任一个,作为开始于操作5230的分支的相关操作的补充、替代和/或与其结合(因此虚线用于操作的分支)(其中若干核心拥有所述副本,全部处于共享状态中):
1)如果访问高速缓存线中具有不同安全元数据值的相同区组,则增加不匹配计数器;
2)如果访问具有不同安全元数据值的不同区组,则忽略不匹配;
3)检查当前检测的不匹配的数量是否超过阈值,以及如果(1)成立,则引发异常。
探查核心可实现下列策略的任一个,作为开始于操作5230的分支的相关操作的补充、替代和/或与其结合(因此虚线用于操作的分支):
1)如果访问高速缓存线中具有不同tv值的相同区组,则使其本地副本失效;
2)如果访问相同区组但策略规定如此,则忽略无效广播和不匹配,在此情况下,探查核心可将其区组回写到主存储器或者可能不会;
3)如果访问具有不同tv值的不同区组,则忽略无效广播和不匹配;
4)检查以确定当前检测的不匹配的数量是否超过阈值,以及如果1)或2)成立,则引发异常。
虽然根据某些实现和一般关联方法来描述本公开,但这些实现和方法的变更和置换将是本领域的那些技术人员将会清楚知道的。例如,本文所述的动作能够按照与如所述顺序不同的顺序来执行,并且仍然实现期望结果。作为一个示例,附图所示的进程不一定要求所示的特定顺序或依次顺序来实现预期结果。在某些实现中,多任务和并行处理可以是有利的。其他变化落入以下权利要求书的范围之内。
本文所述的架构仅作为举例来提供,并且预计是非排他和非限制性的。此外,所公开的各种部分预计只是逻辑划分,而无需必然表示物理分离硬件和/或软件组件。某些计算系统可在单个物理存储器装置中提供存储器元件,而在其他情况下,存储器元件可在功能上分布于许多物理装置。在虚拟机管理器或管理程序的情况下,功能的全部或部分可采取通过虚拟化层运行的软件或固件的形式来提供,以提供所公开逻辑功能。
要注意,对于本文所提供的示例,可在单个计算系统方面来描述交互。但是,这只是为了清楚和示例的目的而进行。在某些情况下,可更易于通过仅引用单个计算系统来描述流程的给定集合的功能性的一个或多个。此外,用于深度学习和恶意软件检测的系统是易于可缩放的,并且能够跨大量组件(例如多个计算系统)以及更复杂/精密布置和配置来实现。相应地,所提供的示例不应当限制范围或者禁止如潜在地应用于无数其他架构的计算系统的广义理论。
如本文所使用,除非另加明确相反说明,否则词语‘...至少一个’的使用表示所述项、元件、条件或活动的任何组合。例如,‘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元素。
说明书中对“一个实施例”、“实施例”、“一些实施例”等的引用指示所述的(一个或多个)实施例可包括特定特征、结构或特性,但是可能或者可能不一定每一个实施例都包括那个特定特征、结构或特性。此外,这类词语不一定指同一实施例。
虽然本说明书包含许多具体实现细节,但是这些不应当被理解为对任何实施例或者可要求保护的范围的限制,而是应当被理解为对特定实施例特定的特征的描述。本说明书中在独立实施例的上下文中描述的某些特征也能够在单个实施例中组合地实现。相反,在单个实施例的上下文中描述的各种特征也能够单独在多个实施例中或者在任何适当的子组合中实现。此外,虽然特征在上文中可描述为通过某些组合来起作用并且甚至最初这样要求保护,但是来自要求保护的组合的一个或多个特征在一些情况下能够脱离组合,并且要求保护的组合可针对子组合或者子组合的变化。
类似地,上述实施例中的各种系统组件和模块的分离不应当被理解为在全部实施例中都要求这种分离。应当理解,所述程序组件、模块和系统一般能够共同集成在单个软件产品中或者封装到多个软件产品中。
因此描述了本主题的特定实施例。其他实施例落入本公开的范围之内。许多其他更改、置换、变更、改变和修改是本领域的技术人员可确定的,并且预计本公开包含如落入所附权利要求书的范围之内的所有这类更改、置换、变更、改变和修改。
示例
下列示例涉及按照本说明书的实施例。系统、设备、方法和机器可读存储介质实施例能够包括下列示例的一个或多个组合:
示例AA1提供一种处理器,包括:第一电路模块,用于:使用第一代码密钥对第一代码图像进行编码;将加密的第一代码图像加载到存储器中由处理器上运行的操作系统为第一代码图像所分配的存储器区域中;以及向操作系统发送与第一代码密钥对应的替代密钥,其中第一代码密钥对操作系统隐藏;以及包括控制电路模块的指令高速缓存;以及被耦合到指令高速缓存的第二电路模块,所述第二电路模块用于:从操作系统接收替代密钥;响应于来自操作系统的执行第一代码图像以例示第一进程的第一请求,使用硬件密钥来执行第一密码功能,以从替代密钥来生成第一代码密钥;以及采用第一代码密钥对指令高速缓存的控制电路模块进行编程,以使第一代码图像能够使用第一代码密钥被解密。
示例AA2包括示例AA1的主题,并且替代密钥是第一代码密钥的加密版本。
示例AA3包括示例AA2的主题,并且第一电路模块进一步用于:在采用第一代码密钥对第一代码图像进行加密之前,从根密钥来生成第一代码密钥;以及使用硬件密钥对第一代码密钥执行第二密码功能,以生成替代密钥,其中第二密码功能包括加密算法。
示例AA4包括示例AA1的主题,并且替代密钥是唯一密钥标识符。
示例AA5包括示例AA4的主题,并且第一电路模块进一步用于:在采用第一代码密钥对第一代码图像进行加密之前,生成唯一密钥标识符;使用硬件密钥对唯一密钥标识符执行第一密码功能,以得到第一代码密钥;以及使用硬件密钥对第一代码密钥执行第二密码功能,以生成替代密钥,其中第二密码功能包括解密算法。
示例AA6包括示例AA1-AA5的任一个的主题,并且第一电路模块进一步用于:在对第一代码图像进行加密之前,将证实密钥注入第一代码图像;以及将证实密钥发送到被授权访问第一代码图像的用户。
示例AA7包括示例AA1-AA6的任一个的主题,并且第一电路模块进一步用于:在对第一代码图像进行加密之前,以给定块粒度将多个无操作指令注入第一代码图像中,其中第二电路模块进一步用于:在执行第一代码图像的解密指令之前,基于解密指令来确定第一代码图像是否已被修改。
示例AA8包括示例AA1-AA7的任一个的主题,并且第二电路模块进一步用于:在执行第一代码图像之前,确定第一代码密钥是否有效,其中确定第一代码密钥是有效的包括确定第一代码密钥是为第一进程建立的。
示例AA9包括示例AA1-AA8的任一个的主题,并且第一电路模块进一步用于:建立将被用于对将与第一进程关联的数据进行加密和解密的数据密钥。
示例AA10包括示例AA1-AA9的任一个的主题,并且第二电路模块进一步用于:至少部分基于微调对第一代码图像进行加密,所述微调包括与存储第一代码图像的存储器区域对应的线性地址的至少一部分。
示例AA11包括示例AA10的主题,并且微调进一步包括执行准许元数据,所述元数据指示第一代码图像是否具有执行准许。
示例AA12包括示例AA1-AA11的任一个的主题,并且硬件密钥被存储在处理器的熔丝中,被存储在被耦合到处理器的只读存储器(ROM)中,或者由被耦合到处理器的物理不可克隆函数所生成。
示例AA13包括示例AA1-AA12的任一个的主题,并且硬件密钥是处理器上运行的操作系统不可访问的。
示例AA14包括示例AA1-AA13的任一个的主题,并且第一代码图像响应于接收来自操作系统的将第一代码图像加载到存储器区域中的初始请求而被加密。
示例AA15包括示例AA1-AA14的任一个的主题,并且处理器进一步包括:数据高速缓存,包括数据高速缓存控制电路模块,其中第二电路模块用于:采用与第一进程关联的第一数据密钥对数据高速缓存控制电路模块进行编程,其中存储在第一进程的数据高速缓存中的第一数据将要使用数据高速缓存控制电路模块中编程的第一数据密钥被解密。
示例AA16包括示例AA15的主题,并且第一数据将要至少部分基于微调被解密,所述微调包括第一数据的线性地址的至少一部分。
示例AA17包括示例AA15-AA16的任一个的主题,并且第二电路模块用于:从操作系统接收第二替代密钥;响应于来自第一进程的执行资料库图像以例示资料库进程的第二请求,使用硬件密钥来执行第一密码功能,以从第二替代密钥来生成资料库密钥;以及采用资料库密钥对指令高速缓存的控制电路模块进行编程,以使资料库图像能够使用资料库密钥被解密。
示例AA18包括示例AA17的主题,并且资料库进程的数据高速缓存中存储的第二数据将要使用数据高速缓存控制电路模块中编程的第一数据密钥被解密。
示例AA19包括示例AA17-AA18的任一个的主题,并且第二电路模块进一步用于:从操作系统接收第三替代密钥;响应于来自操作系统的执行第二代码图像以例示要与第一进程并发运行的第二进程的第三请求,使用硬件密钥来执行第一密码功能,以从第三替代密钥来生成第二代码密钥;以及采用第二代码密钥对指令高速缓存的控制电路模块进行编程,以使第二代码图像能够使用第二代码密钥被解密。
示例AA20包括示例AA19的主题,并且第二电路模块进一步用于:响应于来自第二进程的执行资料库图像的第四请求,采用资料库密钥对指令高速缓存的控制电路模块进行编程,以使资料库图像能够使用资料库密钥被解密。
示例AM1提供方法,包括:使用第一代码密钥对第一代码图像进行加密;将加密的第一代码图像加载到存储器中由在被耦合到存储器的处理器上运行的操作系统为第一代码图像所分配的存储器区域中;向操作系统发送与第一代码密钥对应的替代密钥,其中第一代码密钥对操作系统隐藏;在处理器从操作系统接收替代密钥;响应于来自操作系统的执行第一代码图像以例示第一进程的第一请求,使用硬件密钥来执行第一密码功能,以从替代密钥来生成第一代码密钥;以及采用第一代码密钥对处理器中指令高速缓存的控制电路模块进行编程,以能够实现使用第一代码密钥对第一代码图像的解密。
示例AM2包括示例AM1的主题,并且替代密钥是第一代码密钥的加密版本。
示例AM3包括示例AM2的主题,并且所述方法进一步包括:在采用第一代码密钥对第一代码图像进行加密之前,从根密钥来生成第一代码密钥;以及使用硬件密钥对第一代码密钥执行第二密码功能,以生成替代密钥,其中第二密码功能包括加密算法。
示例AM4包括示例AM1的主题,并且替代密钥是唯一密钥标识符。
示例AM5包括示例AM4的主题,并且所述方法进一步包括:在采用第一代码密钥对第一代码图像进行加密之前,生成唯一密钥标识符;使用硬件密钥对唯一密钥标识符执行第一密码功能,以得到第一代码密钥;以及使用硬件密钥对第一代码密钥执行第二密码功能,以生成替代密钥,其中第二密码功能包括解密算法。
示例AM6包括示例AM1-AM5的任一个的主题,并且所述方法进一步包括:在对第一代码图像进行加密之前,将证实密钥注入第一代码图像;以及将证实密钥发送到被授权访问第一代码图像的用户。
示例AM7包括示例AM1-AM6的任一个的主题,并且所述方法进一步包括:在对第一代码图像进行加密之前,以给定块粒度将多个无操作指令注入第一代码图像中,其中第二电路模块进一步用于:在执行第一代码图像的解密指令之前,基于解密指令来确定第一代码图像是否已被修改。
示例AM8包括示例AM1-AM7的任一个的主题,并且所述方法进一步包括:在执行第一代码图像之前,确定第一代码密钥是否有效,其中确定第一代码密钥是有效的包括确定第一代码密钥是为第一进程建立的。
示例AM9包括示例AM1-AM8的任一个的主题,并且所述方法进一步包括:建立用于对于与第一进程关联的数据进行加密和解密的数据密钥。
示例AM10包括示例AM1-AM9的任一个的主题,并且所述方法进一步包括:至少部分基于微调对第一代码图像进行加密,所述微调包括与存储第一代码图像的存储器区域对应的线性地址的至少一部分。
示例AM11包括示例AM10的主题,并且微调进一步包括执行准许元数据,所述元数据指示第一代码图像是否具有执行准许。
示例AM12包括示例AM1-AM11的任一个的主题,并且硬件密钥被存储在处理器的熔丝中,被存储在被耦合到处理器的只读存储器(ROM)中,或者由被耦合到处理器的物理不可克隆函数所生成。
示例AM13包括示例AM1-AM12的任一个的主题,并且硬件密钥是处理器上运行的操作系统不可访问的。
示例AM14包括示例AM1-AM13的任一个的主题,并且第一代码图像响应于接收来自操作系统的将第一代码图像加载到存储器区域中的初始请求而被加密。
示例AM15包括示例AM1-AM14的任一个的主题,并且所述方法进一步包括:采用与第一进程关联的第一数据密钥对于被耦合到数据高速缓存的数据高速缓存控制电路模块进行编程,其中被存储在第一进程的数据高速缓存中的第一数据使用数据高速缓存控制电路模块中编程的第一数据密钥被解密。
示例AM16包括示例AM15的主题,并且第一数据至少部分基于微调被解密,所述微调包括第一数据的线性地址的至少一部分。
示例AM17包括示例AM15-AM16的任一个的主题,并且所述方法进一步包括:从操作系统接收第二替代密钥;响应于来自第一进程的执行资料库图像以例示资料库进程的第二请求,使用硬件密钥来执行第一密码功能,以从第二替代密钥来生成资料库密钥;以及采用资料库密钥对指令高速缓存的控制电路模块进行编程,以能够实现使用资料库密钥对资料库图像的解密。
示例AM18包括示例AM17的主题,并且资料库进程的数据高速缓存中存储的第二数据使用数据高速缓存控制电路模块中编程的第一数据密钥被解密。
示例AM19包括示例AM17-AM18的任一个的主题,并且所述方法进一步包括:从操作系统接收第三替代密钥;响应于来自操作系统的执行第二代码图像以例示要与第一进程并发运行的第二进程的第三请求,使用硬件密钥来执行第一密码功能,以从第三替代密钥来生成第二代码密钥;以及采用第二代码密钥对指令高速缓存的控制电路模块进行编程,以能够实现使用第二代码密钥对第二代码图像的解密。
示例AM20包括示例AM19的主题,并且所述方法进一步包括:响应于来自第二进程的执行资料库图像的第四请求,采用资料库密钥对指令高速缓存的控制电路模块进行编程,以能够实现使用资料库密钥对资料库图像的解密。
示例BP1涉及处理器,所述处理器包括:存储器层次结构,存储加密数据;核心;以及电路模块,用于通过下列步骤从加密数据来得到明文数据:基于编码指针来访问加密数据;使用计数器模式块密码对加密数据进行解密;以及对解密的输出执行扩散操作,其中扩散操作完全混合解密的输出的位和微调值;其中核心将使用明文数据来执行指令。
示例BP2包括示例BP1的主题,其中,微调值基于编码指针中的字段。
示例BP3包括示例BP2的主题,其中,编码指针中的字段是指示加密数据的存储器分配大小的大小字段。
示例BP4包括示例BP1-BP3的任一个的主题,其中,扩散操作包括块密码。
示例BP5包括示例BP4的主题,其中,块密码是PRINCE密码或K密码其中之一。
示例BP6包括示例BP4的主题,其中,扩散操作进一步包括对块密码的输出和第二微调值执行XOR操作。
示例BP7包括示例BP1-BP6的任一个的主题,其中,计数器模式块密码对加密数据进行解密包括对加密数据和密钥流执行XOR操作。
示例BP8包括示例BP7的主题,其中,密钥流基于编码指针和密钥来生成。
示例BP9包括示例BP8的主题,其中,密钥基于编码指针的字段。
示例BP10包括示例BP1-BP9的任一个的主题,其中,编码数据被存储在第1级(L1)高速缓存、第2级(高速缓存)和第3级(L3高速缓存)其中之一中。
示例BP11包括示例BP1-BP10的任一个的主题,其中,编码指针包括大小字段,指示加密数据的存储器分配大小、加密位集合和未加密位集合。
示例BP12包括示例BP11的主题,其中,电路模块将通过下列步骤来访问加密数据:对编码指针进行解码,以得到加密数据的存储器地址,其中解码包括:基于大小字段和未加密位对编码指针的加密位进行解密;以及从解密位和未加密位来得到存储器地址;以及使用存储器地址来访问存储器层次结构中的加密数据。
示例BP13包括示例BP1-BP12中的任一个的主题,其中,执行指令包括基于明文数据来生成修改数据,以及电路模块进一步用于:对修改数据执行扩散操作;使用计数器模式块密码对扩散操作的输出进行加密;以及将加密的输出存储到存储器层次结构中。
示例BP14包括示例BP13的主题,其中,电路模块将基于指示已被修改的高速缓存线的区组的位向量有选择地将高速缓存线的子集存储到存储器层次结构。
示例BM1涉及一种方法,包括:由处理器核心基于编码指针来访问存储器层次结构中存储的加密数据;使用计数器模式块密码对加密数据进行解密;对解密的输出执行扩散操作,其中扩散操作完全混合解密的输出的位和微调值;以及由处理器核心使用扩散操作的输出来执行指令。
示例BM2包括示例BM1的主题,其中,微调值基于编码指针中的字段。
示例BM2包括示例BM2的主题,其中,编码指针中的字段是指示加密数据的存储器分配大小的大小字段。
示例BM4包括示例BM1-BM3的任一个的主题,其中,扩散操作包括块密码。
示例BM5包括示例BM4的主题,其中,块密码是PRINCE密码或K密码其中之一。
示例BM6包括示例BM4的主题,其中,扩散操作进一步包括对块密码的输出和第二微调值执行XOR操作。
示例BM7包括示例BM1-BM6的任一个的主题,其中,计数器模式块密码对加密数据进行解密包括对加密数据和密钥流执行XOR操作。
示例BM8包括示例BM7的主题,其中,密钥流基于编码指针和密钥来生成。
示例BM9包括示例BM8的主题,其中,密钥基于编码指针的字段。
示例BM10包括示例BM1-BM9的任一个的主题,其中,编码数据从第1级(L1)高速缓存、第2级(高速缓存)或第3级(L3高速缓存)来访问。
示例BM11包括示例BM1-BM10的任一个的主题,其中,编码指针包括大小字段,指示加密数据的存储器分配大小、加密位集合和未加密位集合。
示例BM12包括示例BM11的主题,其中,访问加密数据包括:对编码指针进行解码,以得到加密数据的存储器地址,其中解码包括:基于大小字段和未加密位对编码指针的加密位进行解密;以及从解密位和未加密位来得到存储器地址;以及使用存储器地址来访问存储器层次结构中的加密数据。
示例BM13包括示例BM1-BM12中的任一个的主题,其中,执行指令包括基于扩散操作的输出来生成修改数据,以及所述方法进一步包括:对修改数据执行扩散操作;使用计数器模式块密码对扩散操作的输出进行加密;以及将加密的输出存储到存储器层次结构中。
示例BM14包括示例BM13的主题,其中,存储加密的输出包括基于指示已被修改的高速缓存线的区组的位向量选择将高速缓存线的子集存储到存储器层次结构。
示例CA1提供设备、系统、处理器、机器可读介质、方法和/或基于硬件、固件和/或软件的逻辑,其中A1的示例包括存储器分配安全性校验系统,包括:存储控制器电路模块;以及处理器电路模块,被耦合到存储控制器电路模块并且将被耦合到存储器电路模块,所述处理器电路模块用于:响应于存储器分配请求,执行存储器分配操作,包括得到存储器电路模块中的对象的存储器分配、向存储器分配指配包括存储器分配的限度信息和识别被允许访问对象的隔间的隔间标识(ID)的至少一个的第一元数据、将对象存储在存储器电路模块的存储器位置并且将元数据存储在存储器位置之一处或者存储在与存储器位置不同的表中;响应于与程序对应的存储器操作请求,使用包括识别存储器电路模块中的第一元数据的位置的数据的指针来访问第一元数据,其中第一元数据对程序隐藏;以及响应于由存储控制器电路模块对第一元数据与第二元数据之间的匹配的确定,执行与存储器操作请求对应的存储器操作。
示例CA2包括示例CA1的主题,并且可选地,其中第二元数据是下列至少一个:在指针的元数据字段中;或者被存储在与指针不同的存储器位置。
示例CA3包括示例CA1的主题,并且可选地,其中:存储器电路模块对应于高速缓存电路模块;存储器位置包括存储器电路模块的高速缓存线内的槽;处理器电路模块将在槽内存储对象,并且在槽的中点地址存储第一元数据;以及识别存储器位置中的第一元数据的位置的数据包括识别中点地址的位置的数据。
示例CA4包括示例CA3的主题,并且可选地,其中处理电路模块响应于存储器操作请求而将生成指针,并且在程序正访问对象的同时跨存储器分配调整物理或虚拟地址的增量,以对程序隐藏第一元数据。
示例CA5包括示例CA1的主题,并且可选地,其中第一元数据进一步包括标签数据。
示例CA6包括示例CA3的主题,并且可选地,其中限度信息包括关于与存储器位置的较高位对应的中点地址的一侧上的存储器分配的范围的上限信息以及关于与存储器位置的较低位对应的中点地址的另一侧上的存储器分配的范围的下限信息,以及其中存储控制器电路模块将基于上限信息和下限信息来确定存储器分配的限度。
示例CA7包括示例CA1的主题,并且可选地,其中存储控制器电路模块将存储器电路模块分配为一个或多个二的幂存储器分配,所述存储器分配对应于一个或多个二的幂存储器分配之一。
示例CA8包括示例CA1的主题,并且可选地,其中存储控制器电路模块将确定匹配是否存在于隔间ID与对应于指针的当前隔间ID之间,所述当前隔间ID被存储在专用隔间ID寄存器中。
示例CA9包括示例CA3的主题,并且可选地,其中在槽内存储对象包括每槽存储一个对象。
示例CA10包括示例CA1的主题,并且可选地,其中存储控制器电路模块将在第一元数据的存储之前对第一元数据的全部或部分进行加密。
示例CA11包括示例CA3的主题,并且可选地,其中查找位置的数据包括指针的大小字段(所述大小字段包括关于槽的大小的信息)中的数据以及指针的地址字段中的数据。
示例CA12包括示例CA1的主题,并且可选地,其中存储控制器电路模块将在执行与存储器操作请求对应的存储器操作之前对所述对象执行完整性值校验。
示例CA13包括示例CA3的主题,并且可选地,其中存储器电路模块包括多个专用元数据表,所述专用元数据表不同于高速缓存线,并且适合基于槽的大小按照某种格式将第一元数据存储在多个专用元数据表的可选择专用元数据表中。
示例CA14包括示例CA1的主题,并且可选地,其中存储器电路模块包括带外表(所述带外表包括页),存储器位置对应于带外表的页,所述页仅存储相同大小的存储器分配,将对象存储在存储器电路模块的存储器位置并且将元数据存储在存储器位置之一处或者存储在不同于存储器位置的表中包括将对象和元数据存储在页中。
示例CA15包括示例CA1的主题,并且可选地,其中元数据的至少一些元数据在存储器位置的中点地址附近被复制。
示例CA16包括示例CA1的主题,并且可选地,存储控制器电路模块响应于关于第二元数据不匹配第一元数据的确定而进一步生成异常。
示例CA17包括示例CA1的主题,并且可选地,其中第一元数据是下列至少一个:标签、密码密钥、密钥标识符、微调值、计数器值、聚合密码媒体访问控制(MAC)值和纠错码(ECC)。
示例CM1包括一种存储器分配安全性校验方法,包括:响应于存储器分配请求,执行存储器分配操作,包括得到存储器电路模块中的对象的存储器分配、向存储器分配指配包括存储器分配的限度信息和识别被允许访问对象的隔间的隔间标识(ID)的至少一个的第一元数据、将对象存储在存储器电路模块的存储器位置并且将元数据存储在存储器位置之一处或者存储在与存储器位置不同的表中;响应于与程序对应的存储器操作请求,使用包括识别存储器电路模块中的第一元数据的位置的数据的指针来访问第一元数据,其中第一元数据对程序隐藏;以及响应于对第一元数据与第二元数据之间的匹配的确定,执行与存储器操作请求对应的存储器操作。
示例CM2包括示例CM1的主题,并且可选地,其中第二元数据是下列至少一个:在指针的元数据字段中;或者被存储在与指针不同的存储器位置。
示例CM3包括示例CM1的主题,并且可选地,其中:存储器电路模块对应于高速缓存电路模块;存储器位置包括存储器电路模块的高速缓存线内的槽;所述方法进一步包括将在槽内存储对象,并且在槽的中点地址存储第一元数据;以及识别存储器位置中的第一元数据的位置的数据包括识别中点地址的位置的数据。
示例CM4包括示例CM3的主题,并且可选地,进一步包括响应于存储器操作请求而生成指针,并且在程序正访问对象的同时跨存储器分配调整物理或虚拟地址的增量,以对程序隐藏第一元数据。
示例CM5包括示例CM1的主题,并且可选地,其中第一元数据进一步包括标签数据。
示例CM6包括示例CM3的主题,并且可选地,其中限度信息包括关于与存储器位置的较高位对应的中点地址的一侧上的存储器分配的范围的上限信息以及关于与存储器位置的较低位对应的中点地址的另一侧上的存储器分配的范围的下限信息,所述方法进一步包括基于上限信息和下限信息来确定存储器分配的限度。
示例CM7包括示例CM1的主题,并且可选地,进一步包括将存储器电路模块分配为一个或多个二的幂存储器分配,所述存储器分配对应于一个或多个二的幂存储器分配之一。
示例CM8包括示例CM1的主题,并且可选地,进一步包括确定匹配是否存在于隔间ID与对应于指针的当前隔间ID之间,所述当前隔间ID被存储在专用隔间ID寄存器中。
示例CM9包括示例CM3的主题,并且可选地,其中在槽内存储对象包括每槽存储一个对象。
示例CM10包括示例CM1的主题,并且可选地,进一步包括在第一元数据的存储之前对第一元数据的全部或部分进行加密。
示例CM11包括示例CM3的主题,并且可选地,其中查找位置的数据包括指针的大小字段(所述大小字段包括关于槽的大小的信息)中的数据以及指针的地址字段中的数据。
示例CM12包括示例CM1的主题,并且可选地,进一步包括在执行与存储器操作请求对应的存储器操作之前对所述对象执行完整性值校验。
示例CM13包括示例CM3的主题,并且可选地,其中存储器电路模块包括多个专用元数据表,所述专用元数据表不同于高速缓存线,并且适合基于槽的大小按照某种格式将第一元数据存储在多个专用元数据表的可选择专用元数据表中。
示例CM14包括示例CM1的主题,并且可选地,其中存储器电路模块包括带外表(所述带外表包括页),存储器位置对应于带外表的页,所述页仅存储相同大小的存储器分配,将对象存储在存储器电路模块的存储器位置并且将元数据存储在存储器位置之一处或者存储在不同于存储器位置的表中包括将对象和元数据存储在页中。
示例CM15包括示例CM1的主题,并且可选地,其中第一元数据的至少一些元数据在存储器位置的中点地址附近被复制。
示例CM16包括示例CM1的主题,并且可选地,进一步包括响应于关于第二元数据不匹配第一元数据的确定而生成异常。
示例CM17包括示例CM1的主题,并且可选地,其中第一元数据是下列至少一个:标签、密码密钥、密钥标识符、微调值、计数器值、聚合密码媒体访问控制(MAC)值和纠错码(ECC)。
示例DA1包括计算系统的设备,所述设备包括:存储器元件;核心,耦合到存储器元件,所述核心检测密码编码指针;使用来自指针的加密地址来访问存储器元件内的存储器内容,而无需对加密地址进行解密;以及对存储器内容执行指令。
示例DA2包括示例DA1的主题,其中,存储器内容对应于所返回存储器内容,所述核心进一步对加密地址进行解密,以从其中得到未加密地址,同时执行指令;确定是否存在所返回存储器内容与关联指令的预计存储器内容之间的匹配;以及响应于关于匹配不存在的确定,暂停指令的执行。
示例DA3包括示例DA2的主题,所述核心在解密之后进一步得到与未加密地址的转换对应的物理地址,其中确定是否存在匹配包括将物理地址与所返回存储器内容的物理地址进行比较。
示例DA4包括示例DA2-DA3中的任一个的主题,其中,响应于关于匹配存在的确定,在确定是否存在匹配之后并且在完成指令的执行之后,使所返回存储器内容被撤销到主存储器。
示例DA5包括示例DA1的主题,其中,加密地址是指针加密地址;以及未经解密地使用加密地址包括访问与存储器元件分开的内容可寻址存储器(CAM)电路模块中的信息,所述信息包括CAM加密地址-CAM未加密地址对,所述CAM未加密地址对应于CAM加密地址的未加密版本;确定匹配是否存在于CAM加密地址与指针加密地址之间;以及响应于关于匹配存在的确定,使用CAM未加密地址来访问存储器内容。
示例DA6包括示例DA5的主题,其中,使用CAM未加密地址来访问存储器内容包括得到与CAM未加密地址的转换对应的CAM物理地址;以及使用CAM物理地址来访问存储器内容。
示例DA7包括示例DA5的主题,所述核心响应于关于匹配不存在的确定而进一步对指针加密地址进行解密,以从其中得到指针未加密地址;以及使用指针未加密地址来访问存储器内容。
示例DA8包括示例DA7的主题,其中,使用指针未加密地址来访问存储器内容包括得到与指针未加密地址的转换对应的指针物理地址;以及使用指针物理地址来访问存储器内容。
示例DA9包括示例DA5的主题,其中,所述核心在访问CAM电路模块中的信息或者确定匹配是否存在于CAM加密地址与指针加密地址之间的至少一个动作的同时进一步对指针加密地址进行解密,以从其中得到指针未加密地址;以及响应于关于匹配不存在于CAM加密地址与指针加密地址之间的确定,使用指针未加密地址来访问存储器内容。
示例DA10包括示例DA5的主题,其中,密码编码指针是第二密码编码指针,以及加密地址是第二加密地址,所述核心在检测第二密码编码指针之前进一步检测包括第一加密地址的第一密码编码指针;对第一加密地址进行解密,以从其中得到第一未加密地址;以及将第一加密地址和第一未加密地址存储在CAM电路模块中,第一加密地址和第一未加密地址对应于CAM加密地址-CAM未加密地址对。
示例DM1包括在计算系统的设备将被执行的方法,所述方法包括:检测密码编码指针;使用来自指针的加密地址来访问所述设备的存储器元件内的存储器内容,而无需对加密地址进行解密;以及对存储器内容执行指令。
示例DM2包括示例DM1的主题,其中,存储器内容对应于所返回存储器内容,所述方法进一步包括对加密地址进行解密,以从其中得到未加密地址,同时执行指令;确定是否存在所返回存储器内容与关联指令的预计存储器内容之间的匹配;以及响应于关于匹配不存在的确定,暂停指令的执行。
示例DM3包括示例DM2的主题,所述方法进一步包括在解密之后得到与未加密地址的转换对应的物理地址,其中确定是否存在匹配包括将物理地址与所返回存储器内容的物理地址进行比较。
示例DM4包括示例DM2-DM3中的任一个的主题,进一步包括响应于关于匹配存在的确定,在确定是否存在匹配之后并且在完成指令的执行之后,使所返回存储器内容被撤销到主存储器。
示例DM5包括示例DM1的主题,其中,加密地址是指针加密地址;以及未经解密地使用加密地址包括访问与存储器元件分开的内容可寻址存储器(CAM)电路模块中的信息,所述信息包括CAM加密地址-CAM未加密地址对,所述CAM未加密地址对应于CAM加密地址的未加密版本;确定匹配是否存在于CAM加密地址与指针加密地址之间;以及响应于关于匹配存在的确定,使用CAM未加密地址来访问存储器内容。
示例DM6包括示例DM5的主题,其中,使用CAM未加密地址来访问存储器内容包括得到与CAM未加密地址的转换对应的CAM物理地址;以及使用CAM物理地址来访问存储器内容。
示例DM7包括示例DM5的主题,所述方法进一步包括:响应于关于匹配不存在的确定而对指针加密地址进行解密,以从其中得到指针未加密地址;以及使用指针未加密地址来访问存储器内容。
示例DM8包括示例DM7的主题,其中,使用指针未加密地址来访问存储器内容包括得到与指针未加密地址的转换对应的指针物理地址;以及使用指针物理地址来访问存储器内容。
示例DM9包括示例DM5的主题,进一步包括在访问CAM电路模块中的信息或者确定匹配是否存在于CAM加密地址与指针加密地址之间的至少一个动作的同时对指针加密地址进行解密,以从其中得到指针未加密地址;以及响应于关于匹配不存在于CAM加密地址与指针加密地址之间的确定,使用指针未加密地址来访问存储器内容。
示例DM10包括示例DM5的主题,其中,密码编码指针是第二密码编码指针,以及加密地址是第二加密地址,所述方法进一步包括在检测第二密码编码指针之前检测包括第一加密地址的第一密码编码指针;对第一加密地址进行解密,以从其中得到第一未加密地址;以及将第一加密地址和第一未加密地址存储在CAM电路模块中,第一加密地址和第一未加密地址对应于CAM加密地址-CAM未加密地址对。
示例DAA1包括计算系统的设备,所述设备包括:存储器元件;内容可寻址存储器(CAM)电路模块;以及核心,耦合到存储器元件并且耦合到CAM电路模块,所述核心检测包括加密地址的密码编码指针;对加密地址进行解密,以从其中得到未加密地址;以及将加密地址和未加密地址作为相关对存储在CAM电路模块中。
示例DAA2包括示例DAA1的主题,其中,密码编码指针是第一密码编码指针,加密地址是第一加密地址,以及未加密地址是第一未加密地址,所述核心在存储相关对之后进一步检测包括第二加密地址的第二密码编码指针;访问CAM中的相关对;确定匹配是否存在于第二加密地址与来自相关对的第一加密地址之间;以及响应于关于匹配存在的确定,使用第一未加密地址来访问存储器内容;以及对存储器内容执行指令。
示例DAA3包括示例DAA2的主题,其中,使用第一未加密地址来访问存储器内容包括得到与第一未加密地址的转换对应的第一物理地址;以及使用第一物理地址来访问存储器内容。
DAA4.权利要求DAA2-DAA3的任一个的设备,所述核心响应于关于匹配不存在的确定而进一步对第二加密地址进行解密,以从其中得到第二未加密地址;以及使用第二未加密地址来访问存储器内容。
示例DAA5包括示例DAA4的主题,其中,使用第二未加密地址来访问存储器内容包括得到与第二未加密地址的转换对应的第二物理地址;以及使用第二物理地址来访问存储器内容。
示例DAA6包括示例DAA2的主题,其中,所述核心在访问相关对或者确定匹配是否存在于第一加密地址与第二加密地址之间的至少一个动作的同时进一步对第二加密地址进行解密,以从其中得到第二未加密地址;以及响应于关于匹配不存在于第一加密地址与第二加密地址之间的确定,使用第二未加密地址来访问存储器内容。
示例DMM1包括一种在计算系统的设备将被执行的方法,所述方法包括检测包括加密地址的密码编码指针;对加密地址进行解密,以从其中得到未加密地址;以及将加密地址和未加密地址作为相关对存储在设备的内容可寻址存储器(CAM)电路模块中。
示例DMM2包括示例DMM1的主题,其中,密码编码指针是第一密码编码指针,加密地址是第一加密地址,以及未加密地址是第一未加密地址,所述方法进一步包括在存储相关对之后检测包括第二加密地址的第二密码编码指针;访问CAM中的相关对;确定匹配是否存在于第二加密地址与来自相关对的第一加密地址之间;以及响应于关于匹配存在的确定,使用第一未加密地址来访问存储器内容;以及对存储器内容执行指令。
示例DMM3包括示例DMM2的主题,其中,使用第一未加密地址来访问存储器内容包括得到与第一未加密地址的转换对应的第一物理地址;以及使用第一物理地址来访问存储器内容。
示例DMM4包括示例DMM2-DMM3中的任一个的主题,所述方法进一步包括:响应于关于匹配不存在的确定而对第二加密地址进行解密,以从其中得到第二未加密地址;以及使用第二未加密地址来访问存储器内容。
示例DMM5包括示例DMM4的主题,其中,使用第二未加密地址来访问存储器内容包括得到与第二未加密地址的转换对应的第二物理地址;以及使用第二物理地址来访问存储器内容。
示例DMM6包括示例DMM2的主题,其中,所述方法进一步包括:在访问相关对或者确定匹配是否存在于第一加密地址与第二加密地址之间的至少一个动作的同时对第二加密地址进行解密,以从其中得到第二未加密地址;以及响应于关于匹配不存在于第一加密地址与第二加密地址之间的确定,使用第二未加密地址来访问存储器内容。
示例EA1包括计算系统的设备,包括:高速缓存;以及核心,耦合到本地高速缓存,所述核心用于:检测对应于访问请求的第一安全元数据与对应于高速缓存的高速缓存线中的存储器内容的第二安全元数据之间的冲突;以及响应于检测到冲突而执行下列的至少一个:使高速缓存线中的存储器内容失效;或者通过不使高速缓存线中的存储器内容失效以准许访问请求访问高速缓存线中的存储器内容,来忽略所述冲突。
示例EA2包括示例EA1的主题,所述核心响应于检测到冲突而:确定访问请求是针对由核心所访问的高速缓存线的相同区组还是针对由核心所访问的高速缓存线的不同区组;响应于关于访问请求是针对相同区组的确定而:通过不使高速缓存线中的存储器内容失效来忽略所述冲突;以及执行以下中的至少一个:将其高速缓存中的存储器内容回写到主存储器或者保持计数器以确定所检测冲突的数量是否超过阈值;以及响应于关于访问请求是针对不同区组的确定,通过不使高速缓存线中的存储器内容失效来忽略所述冲突。
示例EA3包括示例EA1-EA2中的任一个的主题,其中,高速缓存支持被注释有相互之间不同的安全元数据的区组以及由多个其他核心对区组的同时访问和改变。
示例EA4包括示例EA1-EA2中的任一个的主题,所述核心保持计数器以确定所检测冲突的数量是否超过阈值,以及响应于关于所检测冲突的数量超过阈值的确定,调用异常操控器来中断核心上的软件的操作。
示例EA5包括示例EA1-EA4中的任一个的主题,其中,访问请求是来自核心的读请求,以及其中高速缓存线中的存储器内容的物理地址对应于与访问请求关联的物理地址,所述核心响应于检测到冲突而:使高速缓存线中的存储器内容失效;以及将存储器内容的主存储器版本存储在高速缓存线中。
示例EA6包括示例EA1-EA4中的任一个的主题,其中,访问请求是来自另一个核心的读请求,以及其中高速缓存线中的存储器内容的物理地址对应于与访问请求关联的物理地址,所述核心响应于检测到冲突而:使高速缓存线中的存储器内容失效;以及将存储器内容的主存储器版本存储在高速缓存线中。
示例EA7包括示例EA1-EA4中的任一个的主题,其中,访问请求是来自另一个核心的读请求,以及其中高速缓存线中的存储器内容的物理地址不对应于与访问请求关联的物理地址,所述核心响应于检测到冲突而:使高速缓存线中的存储器内容失效;以及将存储器内容的主存储器版本存储在高速缓存线中。
示例EA8包括示例EA7的主题,其中,在高速缓存线中的存储器内容如与存储器内容的主存储器版本相比被修改的情况下,核心响应于检测到冲突而:将其高速缓存中的存储器内容回写到主存储器;在使高速缓存线中的存储器内容失效之后重新发出主存储器访问;以及将存储器内容的主存储器版本存储在高速缓存线中。
示例EA9包括示例EA1-EA4中的任一个的主题,其中,访问请求是来自核心的写请求,以及其中高速缓存线中的存储器内容的物理地址对应于与访问请求关联的物理地址,所述核心响应于检测到冲突而:向计算系统的其他核心广播失效消息,以使其他核心使其相应存储器内容失效;使高速缓存线中的存储器内容失效;以及基于写请求采用已更新存储器内容来更新其高速缓存。
示例EA10包括示例EA1-EA4中的任一个的主题,其中,访问请求是来自另一个核心的写请求,高速缓存线中的存储器内容的物理地址不对应于与访问请求关联的物理地址,以及高速缓存线中的存储器内容对高速缓存线是独占的或者与所述另一个核心共享,所述核心用于:检测来自所述另一个核心的修改意图的读取(RWITM)广播消息;以及响应于检测到RWITM,使高速缓存线中的存储器内容失效。
示例EA11包括示例EA1-EA4中的任一个的主题,其中,访问请求是来自另一个核心的写请求,高速缓存线中的存储器内容的物理地址不对应于与访问请求关联的物理地址,以及高速缓存线中的存储器内容如与存储器内容的主存储器版本相比被修改,所述核心用于:检测来自另一个核心的修改意图的读取(RWITM)广播消息;阻止RWITM消息;将存储器内容回写到主存储器中;以及使高速缓存线中的存储器内容失效。
示例EA12包括示例EA1-EA11中的任一个的主题,所述核心包括策略寄存器,以存储高速缓存一致性策略位向量,所述位向量包括下列至少一个:指示高速缓存线是否以逐个区组为基础支持对于与相应不同安全元数据关联的区组的访问请求,或者高速缓存线是否支持对于与其安全元数据关联的整个高速缓存线的访问请求的位;指示是否响应于当访问请求是针对由核心所访问的高速缓存线的相同区组时检测到冲突而使高速缓存线中的存储器内容失效的位;指示是否响应于当访问请求是针对由核心所访问的高速缓存线的不同区组时检测到冲突而使高速缓存线中的存储器内容失效的位;指示是否保持关于时间窗口内的过去不匹配的数量的信息的位;指示是否响应于检测到冲突而调用异常操控器的位;或者指示用于调用异常操控器的策略(包括是否在紧接检测到冲突之后或者当已经检测到如由计数器所保持的不匹配的阈值数量时调用异常操控器)的位;其中核心将进一步对位向量进行解码,以便配置有由位向量所设置的高速缓存一致性策略。
示例EA13包括示例EA1-EA12中的任一个的主题,其中,所述另一个核心属于计算系统或者通过无线或有线网络在通信上将被耦合到所述计算系统的另一个计算系统。
示例EM1包括一种在计算系统的处理器将被执行的方法,所述方法包括:检测对应于对处理器的核心的访问请求的第一安全元数据与对应于处理器的高速缓存的高速缓存线中的存储器内容的第二安全元数据之间的冲突;所述高速缓存被耦合到核心;以及响应于检测到冲突而执行下列中的至少一个:使高速缓存线中的存储器内容失效;或者通过不使高速缓存线中的存储器内容失效以准许访问请求访问高速缓存线中的存储器内容,来忽略所述冲突。
示例EM2包括示例EM1的主题,进一步包括响应于检测到冲突而:确定访问请求是针对由核心所访问的高速缓存线的相同区组还是针对由核心所访问的高速缓存线的不同区组;响应于关于访问请求是针对相同区组的确定而:通过不使高速缓存线中的存储器内容失效来忽略所述冲突;以及执行以下中的至少一个:将其高速缓存中的存储器内容回写到主存储器或者保持计数器以确定所检测冲突的数量是否超过阈值;以及响应于关于访问请求是针对不同区组的确定,通过不使高速缓存线中的存储器内容失效来忽略所述冲突。
示例EM3包括示例EM1-EM2中的任一个的主题,其中,高速缓存支持被注释有相互之间不同的安全元数据的区组以及由多个其他核心对区组的同时访问和改变。
示例EM4包括示例EM1-EM2中的任一个的主题,进一步包括保持计数器以确定所检测冲突的数量是否超过阈值,以及响应于关于所检测冲突的数量超过阈值的确定,调用异常操控器来中断核心上的软件的操作。
示例EM5包括示例EM1-EM4中的任一个的主题,其中,访问请求是来自核心的读请求,以及其中高速缓存线中的存储器内容的物理地址对应于与访问请求关联的物理地址,所述方法进一步包括响应于检测到冲突而:使高速缓存线中的存储器内容失效;以及将存储器内容的主存储器版本存储在高速缓存线中。
示例EM6包括示例EM1-EM4中的任一个的主题,其中,访问请求是来自另一个核心的读请求,以及其中高速缓存线中的存储器内容的物理地址对应于与访问请求关联的物理地址,所述方法进一步包括响应于检测到冲突而:使高速缓存线中的存储器内容失效;以及将存储器内容的主存储器版本存储在高速缓存线中。
示例EM7包括示例EM1-EM4中的任一个的主题,其中,访问请求是来自另一个核心的读请求,以及其中高速缓存线中的存储器内容的物理地址不对应于与访问请求关联的物理地址,所述方法进一步包括响应于检测到冲突而:使高速缓存线中的存储器内容失效;以及将存储器内容的主存储器版本存储在高速缓存线中。
示例EM8包括示例EM7的主题,其中,在高速缓存线中的存储器内容如与存储器内容的主存储器版本相比被修改的情况下,所述方法进一步包括响应于检测到冲突而:将其高速缓存中的存储器内容回写到主存储器;在使高速缓存线中的存储器内容失效之后重新发出主存储器访问;以及将存储器内容的主存储器版本存储在高速缓存线中。
示例EM9包括示例EM1-EM4中的任一个的主题,其中,访问请求是来自核心的写请求,以及其中高速缓存线中的存储器内容的物理地址对应于与访问请求关联的物理地址,所述方法进一步包括响应于检测到冲突而:向计算系统的其他核心广播失效消息,以使其他核心使其相应存储器内容失效;使高速缓存线中的存储器内容失效;以及基于写请求采用已更新存储器内容来更新其高速缓存。
示例EM10包括示例EM1-EM4中的任一个的主题,其中,访问请求是来自另一个核心的写请求,高速缓存线中的存储器内容的物理地址不对应于与访问请求关联的物理地址,以及高速缓存线中的存储器内容对高速缓存线是独占的或者与所述另一个核心共享,所述方法进一步包括:检测来自所述另一个核心的修改意图的读取(RWITM)广播消息;以及响应于检测到RWITM,使高速缓存线中的存储器内容失效。
示例EM11包括示例EM1-EM4中的任一个的主题,其中,访问请求是来自另一个核心的写请求,高速缓存线中的存储器内容的物理地址不对应于与访问请求关联的物理地址,以及高速缓存线中的存储器内容如与存储器内容的主存储器版本相比被修改,所述方法进一步包括:检测来自所述另一个核心的修改意图的读取(RWITM)广播消息;阻止RWITM消息;将存储器内容回写到主存储器中;以及使高速缓存线中的存储器内容失效。
示例EM12包括示例EM1-EM11中的任一个的主题,进一步包括存储高速缓存一致性策略位向量,所述位向量包括下列至少一个:指示高速缓存线是否以逐个区组为基础支持对于与相应不同安全元数据关联的区组的访问请求,或者高速缓存线是否支持对于与其安全元数据关联的整个高速缓存线的访问请求的位;指示是否响应于当访问请求是针对由核心所访问的高速缓存线的相同区组时检测到冲突而使高速缓存线中的存储器内容失效的位;指示是否响应于当访问请求是针对由核心所访问的高速缓存线的不同区组时检测到冲突而使高速缓存线中的存储器内容失效的位;指示是否保持关于时间窗口内的过去不匹配的数量的信息的位;指示是否响应于检测到冲突而调用异常操控器的位;或者指示用于调用异常操控器的策略(包括是否在紧接检测到冲突之后或者当已经检测到如由计数器所保持的不匹配的阈值数量时调用异常操控器)的位;其中所述方法进一步包括对位向量进行解码,以便配置有由位向量所设置的高速缓存一致性策略。
示例EM13包括示例EM1-EM13中的任一个的主题,其中,所述另一个核心属于计算系统或者通过无线或有线网络在通信上将被耦合到所述计算系统的另一个计算系统。
示例FA1提供设备,包括:处理器,包括第一电路模块,以执行安全引擎以:在存储器中创建第一进程的中断描述符;生成与第一中断密钥对应的替代中断密钥,以用于第一进程与第二进程之间的通信;将替代中断密钥传递到第一进程并且传递到第二进程;以及向第二进程提供中断描述符的加密存储器地址,其中第一电路模块进一步用于:从第二进程接收中断第一进程的第一中断请求;使用第一中断密钥对于由第一中断请求所指示的中断描述符的加密存储器地址进行解密;以及采用第一中断请求来更新中断描述符。
示例FA2包括示例FA1的主题,并且第一电路模块将进一步执行安全引擎以:将替代中断密钥存储在中断描述符中。
示例FA3包括示例FA1-FA2中的任一个的主题,并且第一电路模块将进一步执行安全引擎以:创建第二进程的用户中断目标表的条目,其中所述条目包括替代中断密钥;以及采用所述条目来更新用户中断目标表。
示例FA4包括示例FA3的主题,并且第一电路模块将进一步执行安全引擎以:在更新用户中断目标表之前,采用第一中断密钥对条目进行加密。
示例FA5包括示例FA4的主题,并且对第一中断请求中的中断描述符的加密存储器地址进行解密将包括:接收用户中断目标表中的加密条目的索引;基于所述索引从用户中断目标表中检索加密条目;以及使用第一中断密钥对加密条目进行解密。
示例FA6包括示例FA3-FA5中的任一个的主题,并且所述条目包括要在中断第一进程的第一中断请求中包含的第二进程的中断标识符。
示例FA7包括示例FA3-FA6中的任一个的主题,并且所述条目进一步包括中断描述符的存储器位置的指示。
示例FA8包括示例FA1-FA7中的任一个的主题,并且第一电路模块将进一步执行安全引擎以:使第一中断密钥被生成;以及采用硬件密钥对第一中断密钥进行加密,以生成替代中断密钥。
示例FA9包括示例FA1-FA8中的任一个的主题,并且第一电路模块将进一步执行安全引擎以:使唯一密钥标识符作为替代中断密钥被生成;以及使用硬件密钥对替代中断密钥进行加密,以生成第一中断密钥。
示例FA10包括示例FA1-FA9中的任一个的主题,并且第一电路模块将进一步执行安全引擎以:在存储器中创建第一进程的第二中断描述符;生成与第二中断密钥对应的第二替代中断密钥,以用于第一进程与硬件装置之间的通信;将第二替代中断密钥传递到第一进程并且传递到第二进程;以及向硬件装置提供第二中断描述符的加密存储器地址,并且其中第一电路模块进一步用于:从硬件装置接收中断第一进程的第二中断请求;使用第二中断密钥对于由第二中断请求所指示的第二中断描述符的加密存储器地址进行解密;以及采用第二中断请求来更新第二中断描述符。
示例FA11包括示例FA1-FA10中的任一个的主题,并且进一步包括示例AA1-AA10中的任一个的特征(只要那些方法步骤对示例FA1-FA10的方法步骤不是冗余的)。
示例FM1提供方法,包括:在存储器中创建第一进程的中断描述符;生成与第一中断密钥对应的替代中断密钥,以用于第一进程与第二进程之间的通信;将替代中断密钥传递到第一进程并且传递到第二进程;向第二进程提供中断描述符的加密存储器地址;从第二进程接收中断第一进程的第一中断请求;使用第一中断密钥对第一中断请求中的中断描述符的加密存储器地址进行解密;以及采用第一中断请求来更新中断描述符。
示例FM2包括示例FM1的主题,并且将替代中断密钥存储在中断描述符中。
示例FM3包括示例FM1-FM2中的任一个的主题,并且所述方法进一步包括:创建第二进程的用户中断目标表的条目,其中所述条目包括替代中断密钥;以及采用所述条目来更新用户中断目标表。
示例FM4包括示例FM3的主题,并且所述方法进一步包括:在更新用户中断目标表之前,采用第一中断密钥对所述条目进行加密。
示例FM5包括示例FM4的主题,并且对第一中断请求中的中断描述符的加密存储器地址进行解密包括:接收用户中断目标表中的加密条目的索引;基于所述索引从用户中断目标表中检索加密条目;以及使用第一中断密钥对加密条目进行解密。
示例FM6包括示例FM3-FM5中的任一个的主题,并且所述条目包括要在中断第一进程的第一中断请求中包含的第二进程的中断标识符。
示例FM7包括示例FM3-FM6中的任一个的主题,并且所述条目进一步包括中断描述符的存储器位置的指示。
示例FM8包括示例FM1-FM7中的任一个的主题,并且所述方法进一步包括:使第一中断密钥被生成;以及采用硬件密钥对第一中断密钥进行加密,以生成替代中断密钥。
示例FM9包括示例FM1-FM8中的任一个的主题,并且所述方法进一步包括:使唯一密钥标识符作为替代中断密钥被生成;以及使用硬件密钥对替代中断密钥进行加密,以生成第一中断密钥。
示例FM10包括示例FM1-FM9中的任一个的主题,并且所述方法进一步包括:在存储器中创建第一进程的第二中断描述符;生成与第二中断密钥对应的第二替代中断密钥,以用于第一进程与硬件装置之间的通信;将第二替代中断密钥传递到第一进程并且传递到第二进程;以及向硬件装置提供第二中断描述符的加密存储器地址;从硬件装置接收中断第一进程的第二中断请求;使用第二中断密钥对第二中断请求中的第二中断描述符的加密存储器地址进行解密;以及采用第二中断请求来更新第二中断描述符。
示例FM11包括示例FM1-FM10中的任一个的主题,并且进一步包括示例AM1-AM10中的任一个的方法步骤(只要那些方法步骤对示例FM1-FM10的方法步骤不是冗余的)。
计算机相关方法、部件加功能和一般多项引多项示例:
示例G1包括一种设备,所述设备包括执行示例AM1-AM20、BM1-BM14、CM1-CM17、DM1-DM10、DMM1-DMM6、EM1-EM13和FM1-FM10的任一个的方法的一个或多个元素的部件。
示例G2包括一个或多个非暂态计算机可读介质,所述非暂态计算机可读介质包括指令,以在由电子装置的一个或多个处理器对所述指令的执行时使电子装置执行示例AM1-AM20、BM1-BM14、CM1-CM17、DM1-DM10、DMM1-DMM6、EM1-EM13和FM1-FM10的任一个的方法的一个或多个元素。
示例G3包括机器可读存储装置,所述机器可读存储装置包括机器可读指令,所述指令在被执行时实现示例AM1-AM20、BM1-BM14、CM1-CM17、DM1-DM10、DMM1-DMM6、EM1-EM13和FM1-FM10的任一个的方法。
示例G4包括一种设备,包括:一个或多个处理器和一个或多个计算机可读介质,所述计算机可读介质包括指令,所述指令在由一个或多个处理器执行时使所述一个或多个处理器执行示例AM1-AM20、BM1-BM14、CM1-CM17、DM1-DM10、DMM1-DMM6、EM1-EM13和FM1-FM10的任一个的方法。
示例G5包括一种系统,所述系统包括如权利要求AA1-AA20、BA1-BA14和FA1-FA10的任一个的处理器,并且进一步包括被耦合到所述处理器的主存储器。
示例G6包括一种系统,所述系统包括如权利要求CA1-CA17、DA1-DA10、DAA1-DAA6和EA1-EA13的任一个的设备,进一步包括被耦合到所述设备的主存储器。
示例G7包括示例G5和G6的任一个的系统,进一步包括输入/输出子系统。
示例G8包括示例AA1-AA20的任一个的设备,并且进一步包括如权利要求BA1-BA14、CA1-CA17、DA1-DA10、DAA1-DAA6、EA1-EA13和FA1-FA10的任一个的特征(只要那些特征对示例AA1-AA20的特征不是冗余的)。
示例G9包括示例AM1-AM20的任一个的方法,并且进一步包括如权利要求BM1-BM14、CM1-CM17、DM1-DM10、DMM1-DMM6、EM1-EM13和FM1-FM10的任一个的特征(只要那些特征对示例AA1-AA20的特征不是冗余的)。
示例G10包括一种设备,所述设备包括执行示例AM1-AM20、BM1-BM14、CM1-CM17、DM1-DM10、DMM1-DMM6、EM1-EM13和FM1-FM10以及KM1-KM7的任一个中描述或涉及的方法或者本文所述的任何其他方法或进程的一个或多个元素的逻辑、模块或电路模块。
示例G11包括如AM1-AM20、BM1-BM14、CM1-CM17、DM1-DM10、DMM1-DMM6、EM1-EM13和FM1-FM10的任一个或者其部分(portion或part)中描述或涉及的方法、技术或进程。
示例G12包括一种设备,包括:一个或多个处理器和一个或多个计算机可读介质,所述计算机可读介质包括指令,所述指令在由一个或多个处理器执行时使所述一个或多个处理器执行如示例AM1-AM20、BM1-BM14、CM1-CM17、DM1-DM10、DMM1-DMM6、EM1-EM13和FM1-FM10的任一个或者其部分(portion或part)中描述或涉及的方法、技术或进程。
示例G13包括如本文的示例的任一个或者其部分(portion或part)中描述或涉及的信号。
示例G14包括如本文的示例的任一个或者其部分(portion或part)中描述或涉及或者在本公开中以其他方式描述的数据报、分组、帧、段、协议数据单元(PDU)或消息。
示例G15包括采用如本文的示例的任一个或者其部分(portion或part)中描述或涉及或者在本公开中以其他方式描述的数据所编码的信号。
示例G16包括采用如本文的示例的任一个或者其部分(portion或part)中描述或涉及或者在本公开中以其他方式描述的数据报、分组、帧、段、协议数据单元(PDU)或消息所编码的信号。
示例G17包括一种携带计算机可读指令的电磁信号,其中,由一个或多个处理器对计算机可读指令的执行使所述一个或多个处理器执行如示例AM1-AM20、BM1-BM14、CM1-CM17、DM1-DM10、DMM1-DMM6、EM1-EM13和FM1-FM10的任一个或者其部分中描述或涉及的方法、技术或进程。
示例G18包括一种计算机程序,所述计算机程序包括指令,其中由处理元件对程序的执行使所述处理元件执行如示例AM1-AM20、BM1-BM14、CM1-CM17、DM1-DM10、DMM1-DMM6、EM1-EM13和FM1-FM10的任一个或者其部分中描述或涉及的方法、技术或进程。
Claims (30)
1.一种处理器,包括:
第一电路模块,用于:
使用第一代码密钥对第一代码图像进行加密;
将所加密的第一代码图像加载到存储器中由所述处理器上运行的操作系统为所述第一代码图像所分配的存储器区域中;以及
向所述操作系统发送与所述第一代码密钥对应的替代密钥,其中所述第一代码密钥对所述操作系统被隐藏;以及
指令高速缓存,包括控制电路模块;以及
第二电路模块,耦合到所述指令高速缓存,所述第二电路模块用于:
从所述操作系统接收所述替代密钥;
响应于来自所述操作系统的执行所述第一代码图像以例示第一进程的第一请求,使用硬件密钥来执行第一密码功能,以从所述替代密钥来生成所述第一代码密钥;以及
采用所述第一代码密钥对所述指令高速缓存的所述控制电路模块进行编程,以使所述第一代码图像能够使用所述第一代码密钥被解密。
2.如权利要求1所述的处理器,其中,所述第一电路模块进一步用于:
在采用所述第一代码密钥对所述第一代码图像进行加密之前,从根密钥来生成所述第一代码密钥;以及
使用所述硬件密钥对所述第一代码密钥执行第二密码功能,以生成所述替代密钥,其中所述第二密码功能包括加密算法。
3.如权利要求1所述的处理器,其中,所述第一电路模块进一步用于:
在采用所述第一代码密钥对所述第一代码图像进行加密之前,生成唯一密钥标识符;
使用所述硬件密钥对所述唯一密钥标识符执行所述第一密码功能,以得到所述第一代码密钥;以及
使用所述硬件密钥对所述第一代码密钥执行第二密码功能,以生成所述替代密钥,其中所述第二密码功能包括解密算法。
4.如权利要求1所述的处理器,其中,所述第一电路模块进一步用于:
在对所述第一代码密钥进行加密之前,将证实密钥注入所述第一代码图像中;以及
将所述证实密钥发送到被授权访问所述第一代码图像的用户。
5.如权利要求1所述的处理器,其中,所述第二电路模块进一步用于:
在执行所述第一代码图像之前,确定所述第一代码密钥是否有效,其中确定所述第一代码密钥是有效的包括确定所述第一代码密钥是为所述第一进程建立的。
6.如权利要求1所述的处理器,其中,所述第二电路模块进一步用于:
至少部分基于微调对所述第一代码图像进行加密,所述微调包括与存储所述第一代码图像的所述存储器区域对应的线性地址的至少一部分。
7.如权利要求6所述的处理器,其中,所述微调进一步包括执行准许元数据,所述元数据指示所述第一代码图像是否具有执行准许。
8.如权利要求1-7中的任一项所述的处理器,其中,所述硬件密钥被存储在所述处理器的熔丝中,被存储在被耦合到所述处理器的只读存储器(ROM)中,或者由被耦合到所述处理器的物理不可克隆函数所生成。
9.如权利要求1-7中的任一项所述的处理器,其中,所述硬件密钥是所述处理器上运行的所述操作系统不可访问的。
10.如权利要求1-7中的任一项所述的处理器,其中,所述处理器进一步包括:
数据高速缓存,包括数据高速缓存控制电路模块,其中所述第二电路模块用于:
采用与所述第一进程关联的第一数据密钥对所述数据高速缓存控制电路模块进行编程,其中被存储在所述第一进程的所述数据高速缓存中的第一数据将要使用所述数据高速缓存控制电路模块中编程的所述第一数据密钥被解密。
11.如权利要求10所述的处理器,其中,所述第二电路模块将用于:
从所述操作系统接收第二替代密钥;
响应于来自所述第一进程的执行资料库图像以例示资料库进程的第二请求,使用所述硬件密钥来执行所述第一密码功能,以从所述第二替代密钥来生成资料库密钥;以及
采用所述资料库密钥对所述指令高速缓存的所述控制电路模块进行编程,以使所述资料库图像能够使用所述资料库密钥被解密。
12.如权利要求11所述的处理器,其中,所述资料库进程的所述数据高速缓存中存储的第二数据将要使用所述数据高速缓存控制电路模块中编程的所述第一数据密钥被解密。
13.如权利要求11所述的处理器,其中,所述第二电路模块进一步用于:
从所述操作系统接收第三替代密钥;
响应于来自所述操作系统的执行第二代码图像以例示要与所述第一进程并发运行的第二进程的第三请求,使用所述硬件密钥来执行所述第一密码功能,以从所述第三替代密钥来生成第二代码密钥;以及
采用所述第二代码密钥对所述指令高速缓存的所述控制电路模块进行编程,以使所述第二代码图像能够使用所述第二代码密钥被解密。
14.如权利要求13所述的处理器,其中,所述第二电路模块进一步用于:
响应于来自所述第二进程的执行所述资料库图像的第四请求,采用所述资料库密钥对所述指令高速缓存的所述控制电路模块进行编程,以使所述资料库图像能够使用所述资料库密钥被解密。
15.一种方法,包括:
使用第一代码密钥对第一代码图像进行加密;
将所加密的第一代码图像加载到存储器中由被耦合到所述存储器的处理器上运行的操作系统为所述第一代码图像所分配的存储器区域中;
向所述操作系统发送与所述第一代码密钥对应的替代密钥,其中所述第一代码密钥对所述操作系统被隐藏;
在所述处理器从所述操作系统接收所述替代密钥;
响应于来自所述操作系统的执行所述第一代码图像以例示第一进程的第一请求,使用硬件密钥来执行第一密码功能,以从所述替代密钥来生成所述第一代码密钥;以及
采用所述第一代码密钥对所述处理器中的指令高速缓存的控制电路模块进行编程,以能够实现使用所述第一代码密钥对所述第一代码图像的解密。
16.如权利要求15所述的方法,进一步包括:
在采用所述第一代码密钥对所述第一代码图像进行加密之前,从根密钥来生成所述第一代码密钥;以及
使用所述硬件密钥对所述第一代码密钥执行第二密码功能,以生成所述替代密钥,其中所述第二密码功能包括加密算法。
17.如权利要求15所述的方法,进一步包括:
至少部分基于微调对所述第一代码图像进行加密,所述微调包括与存储所述第一代码图像的所述存储器区域对应的线性地址的至少一部分。
18.如权利要求15-17中的任一项所述的方法,其中,所述硬件密钥是所述处理器上运行的所述操作系统不可访问的。
19.如权利要求15-18中的任一项所述的方法,进一步包括:
采用与所述第一进程关联的第一数据密钥对被耦合到数据高速缓存的数据高速缓存控制电路模块进行编程,其中被存储在所述第一进程的所述数据高速缓存中的第一数据使用所述数据高速缓存控制电路模块中编程的所述第一数据密钥被解密。
20.如权利要求19所述的方法,进一步包括:
从所述操作系统接收第二替代密钥;
响应于来自所述第一进程的执行资料库图像以例示资料库进程的第二请求,使用所述硬件密钥来执行所述第一密码功能,以从所述第二替代密钥来生成资料库密钥;以及
采用所述资料库密钥对所述指令高速缓存的所述控制电路模块进行编程,以能够实现使用所述资料库密钥对所述资料库图像的解密。
21.一种包括指令的机器可读存储介质,所述指令在由处理器执行时使所述处理器执行操作,包括:
使用第一代码密钥对第一代码图像进行加密;
将所加密的第一代码图像加载到存储器中由被耦合到所述存储器的处理器上运行的操作系统为所述第一代码图像所分配的存储器区域中;
向所述操作系统发送与所述第一代码密钥对应的替代密钥,其中所述第一代码密钥对所述操作系统被隐藏;
在所述处理器从所述操作系统接收所述替代密钥;
响应于来自所述操作系统的执行所述第一代码图像以例示第一进程的第一请求,使用硬件密钥来执行第一密码功能,以从所述替代密钥来生成所述第一代码密钥;以及
采用所述第一代码密钥对所述处理器中的指令高速缓存的控制电路模块进行编程,以能够实现使用所述第一代码密钥对所述第一代码图像的解密。
22.如权利要求21所述的机器可读存储介质,其中,所述操作进一步包括:
在采用所述第一代码密钥对所述第一代码图像进行加密之前,生成所述唯一密钥标识符;
使用所述硬件密钥对所述唯一密钥标识符执行所述第一密码功能,以得到所述第一代码密钥;以及
使用所述硬件密钥对所述第一代码密钥执行第二密码功能,以生成所述替代密钥,其中所述第二密码功能包括解密算法。
23.如权利要求21-22中的任一项所述的机器可读存储介质,其中,所述操作进一步包括:
采用与所述第一进程关联的第一数据密钥对被耦合到数据高速缓存的数据高速缓存控制电路模块进行编程,其中被存储在所述第一进程的所述数据高速缓存中的第一数据使用所述数据高速缓存控制电路模块中编程的所述第一数据密钥被解密。
24.如权利要求23所述的机器可读存储介质,其中,所述操作进一步包括:
从所述操作系统接收第二替代密钥;
响应于来自所述第一进程的执行资料库图像以例示资料库进程的第二请求,使用所述硬件密钥来执行所述第一密码功能,以从所述第二替代密钥来生成资料库密钥;以及
采用所述资料库密钥对所述指令高速缓存的所述控制电路模块进行编程,以能够实现使用所述资料库密钥对所述资料库图像的解密。
25.如权利要求24所述的机器可读存储介质,其中,所述操作进一步包括:
从所述操作系统接收第三替代密钥;
响应于来自所述操作系统的执行第二代码图像以例示要与所述第一进程并发运行的第二进程的第三请求,使用所述硬件密钥来执行第一密码功能,以从所述第三替代密钥来生成第二代码密钥;以及
采用所述第二代码密钥对所述指令高速缓存的所述控制电路模块进行编程,以能够实现使用所述第二代码密钥对所述第二代码图像的解密。
26.一种处理器,包括:
存储器层次结构,存储加密数据;
核心;以及
电路模块,用于通过下列步骤从所加密数据来得到明文数据:
基于编码指针来访问所加密数据;
使用计数器模式块密码对所加密数据进行解密;以及
对所述解密的输出执行扩散操作,其中所述扩散操作完全混合所述解密的输出的位和微调值;
其中所述核心将使用所述明文数据来执行指令。
27.一种存储器分配安全性校验系统,包括:
存储控制器电路模块;以及
处理器电路模块,耦合到所述存储控制器电路模块,并且将被耦合到存储器电路模块,所述处理器电路模块用于:
响应于存储器分配请求,执行包括得到所述存储器电路模块中的对象的存储器分配的存储器分配操作,向所述存储器分配指配第一元数据,所述第一元数据包括所述存储器分配的限度信息以及识别被允许访问所述对象的隔间的隔间标识(ID)的至少一个,将所述对象存储在所述存储器电路模块的存储器位置,并且将所述元数据存储在所述存储器位置之一处或者存储在与所述存储器位置不同的表中;
响应于与程序对应的存储器操作请求,使用包括识别所述存储器电路模块中的所述第一元数据的位置的数据的指针来访问所述第一元数据,其中所述第一元数据对所述程序被隐藏;以及
响应于由所述存储控制器电路模块对所述第一元数据与第二元数据之间的匹配的确定,执行与所述存储器操作请求对应的存储器操作。
28.一种计算系统的设备,所述设备包括:
存储器元件,
核心,耦合到所述存储器元件,所述核心用于:
检测密码编码指针;
使用来自所述指针的加密地址来访问所述存储器元件内的存储器内容,而无需对所加密地址进行解密;以及
对所述存储器内容执行指令。
29.一种计算系统的设备,包括:
高速缓存;以及
核心,耦合到所述高速缓存,所述核心用于:
检测对应于访问请求的第一安全元数据与对应于所述高速缓存的高速缓存线中的存储器内容的第二安全元数据之间的冲突;以及
响应于检测到冲突,进行一下中的至少一个:所述高速缓存线中的所述存储器内容失效或者通过不使所述高速缓存线中的所述存储器内容失效以准许所述访问请求访问所述高速缓存线中的所述存储器内容来忽略所述冲突。
30.一种设备,包括:
处理器,包括第一电路模块,用于执行安全引擎以:
在存储器中创建第一进程的中断描述符;
生成与第一中断密钥对应的替代中断密钥,以便用于所述第一进程与第二进程之间的通信;
将所述替代中断密钥传递到所述第一进程并且传递到所述第二进程;以及
向所述第二进程提供所述中断描述符的加密存储器地址,其中所述第一电路模块进一步用于:
从所述第二进程接收中断所述第一进程的第一中断请求;
使用所述第一中断密钥对于由所述第一中断请求所指示的所述中断描述符的所述加密存储器地址进行解密;以及
采用所述第一中断请求来更新所述中断描述符。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US202062976319P | 2020-02-13 | 2020-02-13 | |
US62/976,319 | 2020-02-13 | ||
US202063122444P | 2020-12-07 | 2020-12-07 | |
US63/122,444 | 2020-12-07 | ||
PCT/US2020/067072 WO2021162792A1 (en) | 2020-02-13 | 2020-12-26 | Cryptographic computing in multitenant environments |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114902225A true CN114902225A (zh) | 2022-08-12 |
Family
ID=77292605
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202080092944.XA Pending CN114902225A (zh) | 2020-02-13 | 2020-12-26 | 多租户环境中的密码计算 |
Country Status (5)
Country | Link |
---|---|
US (1) | US20230027329A1 (zh) |
EP (1) | EP4104087A4 (zh) |
JP (1) | JP2023514484A (zh) |
CN (1) | CN114902225A (zh) |
WO (1) | WO2021162792A1 (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116185310A (zh) * | 2023-04-27 | 2023-05-30 | 中茵微电子(南京)有限公司 | 一种存储器数据读写调度方法及装置 |
CN116611527A (zh) * | 2023-05-22 | 2023-08-18 | 北京百度网讯科技有限公司 | 量子电路处理方法、装置及电子设备 |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11216366B2 (en) | 2020-02-13 | 2022-01-04 | Intel Corporation | Security check systems and methods for memory allocations |
US11928472B2 (en) | 2020-09-26 | 2024-03-12 | Intel Corporation | Branch prefetch mechanisms for mitigating frontend branch resteers |
US11748211B2 (en) * | 2020-12-17 | 2023-09-05 | EMC IP Holding Company LLC | Automatic update of network assets using gold images |
WO2022139850A1 (en) | 2020-12-26 | 2022-06-30 | Intel Corporation | Cryptographic computing including enhanced cryptographic addresses |
US11972126B2 (en) | 2021-03-26 | 2024-04-30 | Intel Corporation | Data relocation for inline metadata |
FR3123469B1 (fr) * | 2021-05-26 | 2023-09-01 | Idemia France | Contremesures par infection améliorées |
US11874776B2 (en) * | 2021-06-25 | 2024-01-16 | Intel Corporation | Cryptographic protection of memory attached over interconnects |
US11954045B2 (en) | 2021-09-24 | 2024-04-09 | Intel Corporation | Object and cacheline granularity cryptographic memory integrity |
US20230098640A1 (en) * | 2021-09-26 | 2023-03-30 | Ceremorphic, Inc. | Core Processor and Redundant Branch Processor with Control Flow Attack Detection |
US11853574B1 (en) * | 2022-06-21 | 2023-12-26 | Dell Products L.P. | Container flush ownership assignment |
US20220335140A1 (en) * | 2022-06-30 | 2022-10-20 | Intel Corporation | Cryptographic computing isolation for multi-tenancy and secure software components |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9374228B2 (en) * | 2012-10-12 | 2016-06-21 | International Business Machines Corporation | Verifying a geographic location of a virtual disk image executing at a data center server within a data center |
US10425229B2 (en) * | 2016-02-12 | 2019-09-24 | Microsoft Technology Licensing, Llc | Secure provisioning of operating systems |
US10326744B1 (en) * | 2016-03-21 | 2019-06-18 | EMC IP Holding Company LLC | Security layer for containers in multi-tenant environments |
US10460124B2 (en) * | 2016-06-20 | 2019-10-29 | Netapp, Inc. | Per-volume tenant encryption and external key manager |
US10708247B2 (en) * | 2018-09-27 | 2020-07-07 | Intel Corporation | Technologies for providing secure utilization of tenant keys |
-
2020
- 2020-12-26 CN CN202080092944.XA patent/CN114902225A/zh active Pending
- 2020-12-26 EP EP20918345.8A patent/EP4104087A4/en active Pending
- 2020-12-26 US US17/791,000 patent/US20230027329A1/en active Pending
- 2020-12-26 JP JP2022540601A patent/JP2023514484A/ja active Pending
- 2020-12-26 WO PCT/US2020/067072 patent/WO2021162792A1/en unknown
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN116185310A (zh) * | 2023-04-27 | 2023-05-30 | 中茵微电子(南京)有限公司 | 一种存储器数据读写调度方法及装置 |
CN116185310B (zh) * | 2023-04-27 | 2023-07-14 | 中茵微电子(南京)有限公司 | 一种存储器数据读写调度方法及装置 |
CN116611527A (zh) * | 2023-05-22 | 2023-08-18 | 北京百度网讯科技有限公司 | 量子电路处理方法、装置及电子设备 |
CN116611527B (zh) * | 2023-05-22 | 2023-11-21 | 北京百度网讯科技有限公司 | 量子电路处理方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
EP4104087A1 (en) | 2022-12-21 |
EP4104087A4 (en) | 2024-04-10 |
US20230027329A1 (en) | 2023-01-26 |
JP2023514484A (ja) | 2023-04-06 |
WO2021162792A1 (en) | 2021-08-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109508555B (zh) | 使用可信域在虚拟化系统中提供隔离 | |
US20230027329A1 (en) | Cryptographic computing in multitenant environments | |
US10325118B2 (en) | Cryptographic cache lines for a trusted execution environment | |
EP3671515B1 (en) | Method and apparatus for trust domain creation and destruction | |
US11669335B2 (en) | Secure arbitration mode to build and operate within trust domain extensions | |
EP3198453B1 (en) | Memory initialization in a protected region | |
EP3757839B1 (en) | Scalable virtual machine operation inside trust domains within the trust domain architecture | |
CN111353158A (zh) | 信任域架构与多密钥总存储器加密技术在服务器中的共存 | |
US10255199B1 (en) | Evicting clean secure pages without encryption | |
US11288206B2 (en) | Supporting memory paging in virtualized systems using trust domains | |
EP4020299A1 (en) | Memory address bus protection for increased resilience against hardware replay attacks and memory access pattern leakage |
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 |