CN110851231A - 使用扩展分页和存储器完整性的安全公用云 - Google Patents
使用扩展分页和存储器完整性的安全公用云 Download PDFInfo
- Publication number
- CN110851231A CN110851231A CN201910656038.7A CN201910656038A CN110851231A CN 110851231 A CN110851231 A CN 110851231A CN 201910656038 A CN201910656038 A CN 201910656038A CN 110851231 A CN110851231 A CN 110851231A
- Authority
- CN
- China
- Prior art keywords
- key
- memory
- domain
- guest
- key domain
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45545—Guest-host, i.e. hypervisor is an application program itself, e.g. VirtualBox
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/10—Address translation
- G06F12/1009—Address translation using page tables, e.g. page table structures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1408—Protection against unauthorised use of memory or access to memory by using cryptography
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1416—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights
- G06F12/1425—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block
- G06F12/1441—Protection against unauthorised use of memory or access to memory by checking the object accessibility, e.g. type of access defined by the memory independently of subject rights the protection being physical, e.g. cell, word, block for a range
-
- 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
-
- 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/53—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 executing in a restricted environment, e.g. sandbox or secure virtual machine
-
- 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
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
- H04L9/3242—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions involving keyed hash functions, e.g. message authentication codes [MACs], CBC-MAC or HMAC
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/4557—Distribution of virtual machine instances; Migration and load balancing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45587—Isolation or security of virtual machine instances
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/50—Indexing scheme relating to G06F9/50
- G06F2209/5011—Pool
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2212/00—Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
- G06F2212/10—Providing a specific technical effect
- G06F2212/1052—Security improvement
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computer Hardware Design (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Databases & Information Systems (AREA)
- Power Engineering (AREA)
- Computing Systems (AREA)
- Data Mining & Analysis (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- General Health & Medical Sciences (AREA)
- Storage Device Security (AREA)
Abstract
主机虚拟机监视器(VMM)“盲”操作而无需主机VMM具有访问客户虚拟机(VM)内的数据的能力或者直接访问控制客户VM的执行流程的控制结构的能力。客户VM在存储器的受保护区域(称为密钥域)内执行,该区域甚至主机VMM都不能访问。与客户VM的执行状态(例如,虚拟机控制结构(VMCS))和存储器映射(例如,扩展页表(EPT))有关的虚拟化数据结构也位于受保护的存储器区域中,并且也用密钥域密钥加密。不拥有其他密钥域的密钥域密钥的主机VMM和其他客户VM不能直接修改这些控制结构,也不能访问受保护的存储器区域。然而,使用VMPageIn和VMPageOut指令,主机VMM能在密钥域中构建虚拟机,并将VM页页入和页出密钥域。
Description
相关申请的交叉引用
本申请要求在2018年8月20日以David Durham、Siddhartha Chhabra、GeoffreyStrongin和Ronald Perez的名义提交的题为“Secure Public Cloud Using ExtendedPaging and Memory Integrity”的美国临时专利申请No.62/719,979的优先权,其公开通过参考结合于此。
技术领域
实施例涉及公用云的安全性,并且具体地说,使公用云服务的消费者能够确保在云中执行的消费者的过程和消费者的私有数据被保护免受其他人(包括公用云服务提供商)的访问和修改。
背景技术
术语“云计算”用于描述基于网络的计算(通常通过因特网)。根据维基百科,“云计算根据需要向计算机和其他装置提供共享处理资源和数据。云计算是用于实现对可配置计算资源(例如,网络、服务器、存储装置、应用和服务)的共享池的无处不在的按需访问的模型,其能用最少的管理努力快速供应和释放。云计算和存储解决方案给用户和企业提供了各种能力,以在第三方数据中心中存储和处理它们的数据。云计算依赖于资源共享来实现规模的一致性和经济性,类似于网络上的公用事业(如电网)”。(来源:维基百科,https://en.wikipedia.org/wiki/Cloud_computing,2016年8月11日访问,引文省略。)
目前的高容量网络、低成本计算机和存储装置的可用性以及硬件虚拟化、面向服务的架构以及自主和公用计算的广泛采用已经导致云计算的生长。随着计算需求的增加,公司能通过向云服务提供商请求附加资源来按比例扩大,并且然后随着需求的减少再次按比例减小。
云计算提供资源即服务。“云计算提供商根据不同的模型提供他们的“服务”,其中每个国家标准与技术研究院(NIST)的三个标准模型是基础设施即服务(IaaS)、平台即服务(PaaS)以及软件即服务(SaaS)。这些模型提供越来越多的抽象;从而,它们经常被描绘为栈中的层,其中基础设施即栈用作底层;平台即服务用作中间层;并且软件即服务用作顶层。这些层能彼此独立地实现。例如,人们能提供在物理机器(裸金属)上实现的SaaS,而无需使用下层的PaaS或IaaS层;并且相反,人们能在IaaS上运行程序并直接访问它,而不必将其包装为SaaS。”(来源:维基百科,https://en.wikipedia.org/wiki/Cloud_computing,2016年8月11日访问,引文省略。)
“云计算的NIST定义将服务模型定义如下:
软件即服务(SaaS)。提供给消费者的能力是使用在云基础设施上运行的提供商的应用。应用通过瘦客户端接口(诸如web浏览器(例如,基于web的电子邮件))或程序接口从各种客户端设备可访问。消费者不管理或控制下层的云基础设施,包括网络、服务器、操作系统、存储装置或者甚至单独的应用能力,带有有限的用户特定应用配置设置的可能的例外。
平台即服务(SaaS)。提供给消费者的能力是将使用由提供商支持的编程语言、库、服务和工具创建的消费者创建或获取的应用部署到云基础设施上。消费者不管理或控制下层的云基础设施,包括网络、服务器、操作系统或存储装置,但能控制已部署的应用于及可能还有应用托管环境的可能配置。
基础设施即服务(SaaS)。提供给消费者的能力是提供处理、存储、网络和其他基本计算资源,其中消费者能够部署和运行任意软件,其能包括操作系统和应用。消费者不管理或控制下层的云基础设施,但能控制操作系统、存储装置和已部署的应用;并且可能对选择连网组件(例如,主机防火墙)具有受限的控制。”(来源:维基百科,https://en.wikipedia.org/wiki/Cloud_computing,2016年8月11日访问,引文省略。)
用于云计算的一种促成技术是虚拟化。“虚拟化软件将物理计算装置分成一个或多个“虚拟”装置,其中每个都能容易地使用和管理以执行计算任务。硬件虚拟化是将计算机作为完整的硬件平台的虚拟化、其元件部分的某些逻辑抽象或仅运行各种操作系统所需的功能性。虚拟化对用户隐藏了计算平台的物理特征,相反呈现另一个抽象计算平台,”经常被称为“虚拟机”。(来源:维基百科,https://en.wikipedia.org/wiki/Hardware_virtualization,2016年8月11日访问,引文省略。)控制虚拟化的软件被称为“监管程序”或“虚拟机监视器”。 用于代表消费者创建虚拟机的监管程序/虚拟机监视器的提供和执行是由公用云服务提供商提供的服务的示例。
附图说明
图1是示出典型虚拟机环境的框图。
图2是示出根据本发明的一个实施例的虚拟机环境的框图。
图3是根据本发明的一个实施例的云服务环境的框图。
图4是示出能用于实现本发明的实施例的设备的图解。
图5是根据本发明的一个实施例的由云服务的消费者执行的方法的流程图。
图6是根据本发明的一个实施例的由云服务提供商执行的方法的流程图。
图7是示出根据本发明的一个实施例的消费者域镜像的组件的图解。
图8是示出根据本发明的一个实施例的数据物理地址的图解。
图9是示出根据本发明的一个实施例的虚拟到物理存储器映射的图解。
图10是示出根据本发明的一个实施例的另一虚拟到物理存储器映射的图解。
图11是示出根据本发明的一个实施例的由云服务提供商进行的用于向消费者提供域镜像的初始步骤的图解。
图12是示出根据本发明的一个实施例的用于向消费者提供域镜像的消费者和云服务提供商之间消息的图解。
图13是示出根据本发明的一个实施例的消费者提供加密的域镜像的图解。
图14是示出根据本发明的一个实施例的用于加密域镜像并建立密钥域的云服务环境的组件之间的消息的图解。
图15是示出根据本发明的一个实施例的用于将消费者的加密域镜像加载到支持密钥域的服务器的存储器中的云服务环境的组件之间的消息的图解。
图16是示出根据本发明的一个实施例的密钥域的初始化的图解。
图17是根据本发明的一个实施例的在执行创建密钥域操作中的支持密钥域的服务器的CPU的操作方法的流程图。
图18是示出根据本发明的一个实施例的域镜像的验证的图解。
图19是示出根据本发明的一个实施例的用于验证域镜像的云服务环境的组件之间的消息的图解。
图20是根据本发明的一个实施例的在执行散列密钥域操作中的支持密钥域的服务器的CPU的操作方法的流程图。
图21是示出根据本发明的一个实施例的密钥域之间的切换的图解。
图22是示出根据本发明的一个实施例的在密钥域内执行时云服务环境的组件之间的消息的图解。
图23是根据本发明的一个实施例的在执行切换密钥域操作中的支持密钥域的服务器的CPU的操作方法的流程图。
图24是根据本发明的一个实施例的在响应于页未命中而执行分页结构的遍历中的支持密钥域的服务器的CPU的操作方法的流程图。
图25是示出根据本发明的一个实施例的域镜像的生长的图解。
图26是示出根据本发明的一个实施例的用于生长域管理器(VMMlet)的基于云的环境的组件之间的消息的图解。
图27是示出根据本发明的一个实施例的用于运行域管理器(VMMlet)的组件之间的消息的图解,运行域管理器用于从存储器管理器请求更多存储器页的云服务提供商环境。
图28是示出根据本发明的一个实施例的示出在单个CPU上调度VM时请求附加存储器页的云服务环境的组件之间的消息的图解。
图29是示出根据本发明的一个实施例的运行域管理器(VMMlet)的图解。
图30是示出根据本发明的一个实施例的由域管理器(VMMlet)管理的密钥域内的以及由另一个域管理器(OSlet)管理的第二密钥域内的多个虚拟机的图解。
图31A是示出根据本发明的一个实施例的根据物理存储器地址确定完整性行位置和插槽的图解。
图31B是示出存储在数据存储器地址空间中的数据行和存储在完整性数据地址空间中的完整性值的图解。
图32是示出能用于实现本发明的实施例的系统的图解。
图33是示出能用于实现本发明的实施例的系统的图解。
图34是示出能用于实现本发明的实施例的系统的图解。
图35示出了一种环境,其中不信任的消费者虚拟机在受保护的环境中操作,其中能验证由不可信的云服务提供商的虚拟机监视器采取的动作。
图36示出了虚拟机监视器(主机VMM)访问用于在受保护的密钥域内运行的客户虚拟机的虚拟机控制结构的数据流。
图37示出了代表虚拟机监视器行动的代理编辑用于在受保护的密钥域内运行的客户虚拟机的虚拟机控制结构的过程。
图38示出了用于客户虚拟机保护其虚拟机控制结构免受由受损的虚拟机监视器的修改的中断处理程序驱动。
图39示出了图38的中断处理程序驱动的操作。
图40示出了在退出虚拟机时虚拟化异常处理程序/垫片(shim)在保存处理器寄存器状态时的操作。
图41示出了密钥域的创建以及加密的客户代码镜像连同其(一个或多个)加密的控制结构在加密存储器中的安装。
图42示出了用于创建密钥域并将加密的客户代码镜像连同其(一个或多个)加密的控制结构安装到加密的存储器中的备选过程。
图43示出了用于主机VMM验证消费者提供的代理VMCS的过程的一个实施例。
图44是示出用于主机VMM请求代理修改另一客户虚拟机的扩展页表的数据流的数据流图。
图45是示出加载用于客户虚拟机的虚拟机控制结构、验证虚拟机控制结构、启动客户虚拟机、执行客户虚拟机代码镜像以及退出客户虚拟机以将控制返回给主机虚拟机监视器的流程图。
图46示出了用于更新消费者的客户VM镜像的过程。
图47示出了将页添加到消费者的客户VM工作载荷的过程。
图48图示了根据本发明的实施例的密钥域架构。
图49A和49B图示了根据本发明的实施例的创建和使用密钥域的方法。
图50图示了根据本发明的实施例的数据物理地址内的KeyID。
图51图示了根据本发明的实施例的VMPageIn和VMPageOut指令的使用。
图52A和图52B图示了根据本发明的实施例的执行VMPageIn和VMPageOut指令的方法。
图53图示了根据本发明的实施例的安全VM的端到端供应。
具体实施方式
在当今的已知虚拟化环境中,主机虚拟机监视器(VMM/监管程序(下文中将简称为“VMM”或“主机VMM”)具有对主机VMM管理的客户虚拟机(VM)的完全控制。主机VMM能读取/写入客户VM存储器,修改客户VM控制流程(单步、倒回、重复、调试),读取/修改客户VM寄存器状态,读取/修改客户VM控制结构等等。然而,对客户VM的执行的这种完全控制造成如下安全风险:主机VMM受损,并且可能修改客户VM,使得暴露驻留在客户VM内的消费者的秘密和数据。
在典型的虚拟化环境中,通过从一个虚拟机切换到另一个虚拟机,与虚拟机的执行状态有关的数据结构被VMM所修改。这些数据结构可以包括虚拟机控制结构(VMCS)和存储器映射(例如,页表和扩展页表(EPT))。VMCS是存储器中的数据结构,其对于每个客户VM的每个逻辑处理器存在一次,而客户VM由主机VMM管理。在多处理器系统中,同时执行客户VM的每个处理器都可以具有独特的VMCS。随着不同VM之间的执行上下文的每次改变,针对当前正在执行的VM恢复VMCS,从而定义VM的虚拟处理器的状态。当执行上下文从客户VM切换(VMExits)回主机VMM时,使用相同的VMCS结构从VMCS的主机状态区域恢复主机的处理器状态。
用于客户VM的操作系统将使用其自己的页表在虚拟与客户物理存储器地址(GPA)之间形成其自己的存储器映射。然后,VMM使用扩展页表(EPT)将客户物理地址(GPA)映射到由硬件用于访问物理存储器的实际物理地址(PA)。然而,VMM使用这些VMM控制的存储器映射能损坏客户VM。
本文给出的公开引入了用于主机VMM操作的新模型,其中主机VMM“盲”操作,而没有访问客户VM内的数据的能力,或者直接访问控制客户VM的执行流程的控制结构的能力。客户VM在存储器的受保护区域内执行,该区域甚至主机VMM都不能访问。在一个实施例中,客户VM在其中执行的存储器的受保护区域被实现为密钥域,其用消费者提供的密钥域密钥加密。密钥域在下面参考图1-30详细描述。在另一实施例中,使用范围寄存器来实现存储器的受保护区域,其中指定的寄存器阻止主机VMM(和其他软件)访问客户VM的受保护存储器区域。出于本申请的目的,将关于密钥域描述客户VM的受保护存储器区域,尽管本文描述的技术适用于使用其他技术实现的受保护存储器区域,以使得消费者的客户VM对主机VMM不可访问。
与客户VM的执行状态(例如VMCS)和存储器映射有关的虚拟化数据结构也位于受保护存储器区域(密钥域)中。这些虚拟化数据结构用密钥域密钥加密。没有拥有其他密钥域的密钥域密钥的主机VMM和其他客户VM无法直接修改这些控制结构,也无法访问受保护存储器区域。
为了使主机VMM能够管理客户VM的执行而不直接修改客户VM的控制结构,引入了另一种类型的客户VM,本文称为“客户代理VM”,或简称为“代理”。主机VMM启动代理以在客户VM在其中执行的受保护密钥域内操作,与客户VM一起工作以保护客户VM免受篡改。在一个实施例中,虚拟化环境实现了使代理能够代表主机VMM访问和修改控制其他客户VM的执行流程和寄存器状态的控制结构的策略。通过修改其他客户VM的控制结构,代理能执行诸如将消费者提供的镜像加载到客户VM以及为在受保护存储器区域(本文称为密钥域)内的多个客户VM创建或修改附加VMCS和EPT的功能。要注意,由主机VMM在传统虚拟化环境中提供的功能性相反在由主机VMM请求时由代理实现,使代理成为主机VMM的中介。
更进一步,使用代理作为主机VMM和客户VM之间的中介允许代理证实VMM不会将客户VM误配置成泄露机密数据,注入代码或数据,或者修改客户VM的执行流程。此外,本文公开的技术实现了相互验证,其中主机VMM能被确保客户VM不能影响主机VMM状态,而同时客户VM被确保主机VMM不能访问或影响客户VM状态。
从而,在一个实施例中,EPT控制结构也可以被放置在由主机VMM不可访问的客户VM的受保护存储器内。为了防止客户VM通过恶意修改EPT来暗中破坏主机VMM的安全性,正在运行的客户VM不应该能够修改其自己的EPT。可以给予具有另一个VMCS的另一个可信VM修改另一个客户VM的EPT的访问权,但是不能给予修改其自己的EPT的能力。备选地,在具有单个客户VM的实施例中,客户VM可以使用其自己的存储器加密密钥(密钥域密钥)来代表主机VMM加密存储器结构。然后,客户VM将所得到的密文返回给主机VMM,以便在主机VMM的控制下代表客户VM安装到正确的存储器位置中。
使用散列密钥域(HashKD)指令,主机VMM能验证客户创建的数据结构(诸如EPT)是否匹配主机VMM的预期,并且不允许客户VM访问主机或其他客户VM的存储器空间。HashKD指令不会揭示客户VM的存储器内容或秘密,但生成代表性的SHA散列值,主机VMM能使用该散列值来验证存储器内容,而无需调用客户VM。例如,如果HashKD指令产生与扩展页表(EPT)的预期散列值匹配的值,则主机VMM被确保客户VM正确配置了存储器,并且能安全地启动客户VM。
在与本公开一致的一个实现中,英特尔®的虚拟化技术(VT)和可信执行技术(TXT)与由VMM不可访问(但初始对TXT可访问)的受保护存储器范围或存储器加密技术(诸如英特尔®的总存储器加密(TME)、具有完整性的TME(TMEi)或存储器加密引擎(MEE))结合使用。该实施例从客户虚拟机(VM)/工作载荷的可信代码库(TCB)中移除公用云服务提供商的虚拟机监视器(VMM)/监管程序代码。这些技术保护消费者的工作载荷免受主机VMM的访问,仍然使主机VMM能够保持对平台的完全控制,并管理在平台上运行的客户虚拟机。
存储器加密技术保护客户VM工作载荷免受物理攻击,并防止主机VMM访问VM(加密的)存储器。云服务提供商的软件、管理员以及对云服务提供商的服务器具有物理访问权的任何人都不能访问或修改受保护的客户VM。
本公开通过保护消费者的数据免受被云服务提供商、被主机VMM、被其他客户VM、被管理员或具有物理访问权的其他人、被政府等的访问来防止包括在客户虚拟机内的消费者数据的暴露。使用本文描述的技术提供的保护有效地提供了与消费者在私有云(住宅内)中运行相同工作载荷相同级别的机密性和安全性。通过使消费者能够验证在云中运行的公用云服务提供商的过程尚未损害消费者的代码和数据,在消费者和公用云服务提供商之间建立相互信任的关系。类似地,公用云服务提供商能够验证在云中运行的消费者的过程尚未损害公用云服务提供商的代码和数据。
现在参考图1,示出了示出典型虚拟机环境100的组件的框图。示出了在云服务提供商的服务器中提供的虚拟机环境的典型实现。在服务器硬件110上运行的是虚拟机监视器(VMM)层120。在所示出的典型虚拟机环境100中,VMM层120是在云服务提供商的服务器硬件110上创建和运行虚拟机(VM)(诸如VM1 1301、VM2 1302和VM3 1303)的计算机软件或固件。VM VM1 1301、VM2 1302和VM3 1303中的每一个在图1中都被示为独立块,表示全都在公共VMM层120的控制下的不同VM。VMM层120向VMM控制的VM提供对服务器资源(诸如服务器硬件110)的访问。
VMM层120使用诸如VM控制结构(VMCS)124和扩展页表(EPT)126之类的数据结构来控制VM的执行。VMCS是存储器中的数据结构,每个VM存在一次,同时它由VMM管理。随着不同VM之间的执行上下文的每次改变,针对当前VM恢复VMCS,定义VM的虚拟处理器的状态。扩展页表(EPT)用于启动VM的虚拟处理器,具有特权为“不受限制的客户”。
VMM层120的软件或固件由云服务提供商提供,并且是每个VM的可信计算库(TCB)的一部分。根据维基百科,“计算机系统的可信计算库(TCB)是对其安全性至关重要的所有硬件、固件和/或软件组件的集合,在某种意义上,在TCB内部发生的缺陷或漏洞可能危及整个系统的安全属性。相比之下,TCB之外的计算机系统的部分必须不能够以将泄露比授予给他们的更多的任何特权的方式而行为不端....现代操作系统力图减小TCB的大小,使得其代码库的详尽检查(借助于手动或计算机辅助软件审计或程序验证)变得可行。”(参见维基百科,https://en.wikipedia.org/wiki/Trusted_computing_base,2016年8月9日访问。)
在图1的正常虚拟机环境100中,由云服务提供商提供的VMM 122在VM VM1 1301、VM21302和VM3 1303中的每一个的TCB中。在TCB中包括VMM 122阻止诸如VM1 1301的具体VM查看、测量或信任控制该具体VM的VMM 122。云服务提供商能在没有VM VM1 1301所有者的知识的情况下在任何时间改变VMM 122。更进一步,VM之间不存在密码加密分离。如果VMM已受损,则破坏的VM能经由受损的VMM访问第二VM中的私有数据,该VMM仍被第二VM信任。
为了接收控制消费者的过程/VM的VMM是值得信任的确保的消费者,大多数已知技术使用硬件来测量在云中的远程机器上运行的软件/固件(在这种情况下,是VMM 122),并且回头向消费者证明,在云中的远程机器上运行的软件/固件是消费者预期的软件/固件的版本。由于公用云服务提供商的VMM被包括在消费者的TCB中,消费者无法独立评估由公用云服务提供商所做的值得信任性的证明。
图2是根据本发明的一个实施例的虚拟机环境200的框图。在此环境中,引入了密钥域和域管理器的概念。密钥域是存储器的密码加密分离部分,其中对存储在属于密钥域的存储器位置中的数据的访问需要使用关联的密钥域密钥来解密数据。域管理器可以使用密钥域来密码加密地分离属于不同所有者的数据;在云服务环境中,域管理器可以使用密钥域来密码加密地分离属于云服务(诸如银行服务)的不同消费者的数据。
例如,在图2的虚拟化环境200中,密钥域KD1 2501和KD2 2502用于分离属于不同虚拟机VM1 2301和VM2 2302的数据。属于虚拟机VM1 2301和VM2 2302中的每一个的数据例如可以包括属于每个虚拟机VM1 2301和VM2 2302的消费者秘密(诸如银行帐号、社会安全号码等)。作为另一示例,属于虚拟机VM1 2301和VM2 2302中的每一个的数据可以包括将被执行以保护云服务提供商的环境内的每个相应虚拟机的秘密的计算机代码(也称为代码镜像或简称镜像)。
相应域管理器(VMMlet 2221和2222)代表其各自的主机所有者VM1 2301和VM22302起到与虚拟机监视器(VMM,诸如图1的VMM 122)的作用类似的作用。域管理器(VMMlet)在VM内提供VMM功能性,而不是如图1中所示的完全独立的VMM层。域管理器(VMMlet)是具有创建、退出和重新开始执行VM的能力的特权代码。这些特权可以被称为“VMxroot”功能性,并且包括执行诸如虚拟机控制结构(VMCS)保存/恢复、通用寄存器(GPR)保存/恢复和/或VMexit/VMresume之类的命令的能力。更进一步,域管理器(VMMlet)控制关键资源,诸如中断描述符表(IDT)、高级可编程中断控制器(APIC)指令和诸如页表和扩展页表(EPT)的分页数据结构。在一些实施例中,域管理器(VMMlet)部分可以仅由控制VM的数据结构组成,诸如VMCS、其关联的数据结构和与VM关联的EPT。
域管理器(VMMlet)将其主机VM的访问限制于称为密钥域的存储器的对应密码加密分离部分。属于密钥域的每个物理存储器位置的内容都使用公共密钥域密钥进行硬件加密。当硬件将数据写入属于密钥域的存储器位置时,使用密钥域密钥加密数据;当硬件从属于密钥域的存储器位置读取数据时,使用密钥域密钥对数据进行解密。
在一个实施例中,密钥域密钥由拥有密钥域的消费者创建,并且被直接安全地提供给云服务提供商的服务器硬件。在其他实施例中,消费者可以将由另一个实体(诸如云服务提供商的服务器)提供的密钥翻译成用于加密属于密钥域的存储器位置的另一个密钥。在又一些其他实施例中,可以使用不同的密钥来加密属于密钥域的不同IP块(存储器位置的集合);例如,可以使用不同的密钥来根据用于加密其他消费者秘密的密钥加密包括消费者VM镜像的代码的IP块。尽管在本发明的范围内还有其他实施例,为了简化本文的实施例的描述,本申请描述了属于由拥有密钥域的消费者创建的密钥域密钥所加密的密钥域的每个物理存储器位置的内容。
如果使用错误的密钥域密钥解密属于密钥域的物理存储器位置的内容,则所得到的明文将被破坏。更进一步,如果存储器受到完整性保护,并且使用错误的密钥域密钥解密属于密钥域的物理存储器位置的内容,则所得到的明文将不满足用于属于密钥域的物理存储器位置的完整性判据。虽然本发明的范围不要求属于密钥域的存储器位置是完整性保护的,但是可以使用存储器完整性保护来增强本文描述的技术的安全性。
在一个实施例中,使用未使用的物理地址比特(或通过高速缓存传递的其他元数据)来定义密钥域。例如,因为与使用64比特物理存储器地址能寻址的物理存储器位置相比,在系统中安装的物理存储器位置可能更少,所以未使用的最高有效地址比特能用于在不同的密钥域之间进行选择。两个不同的密钥域地址能是对相同物理存储器位置的别名。然而,当来自该物理存储器位置的数据被读入高速缓存中时,高速缓存在全地址解析下独立地保有密钥域地址(例如,包括全64比特物理存储器地址)。在考虑全64比特物理存储器地址的未使用物理地址比特时独特标识的密钥域地址确定物理存储器位置所属的密钥域。通过标识物理存储器位置所属的密钥域,还标识能用于解密该物理存储器位置的内容的密钥域密钥。
存储器管理器能在对相同物理存储器位置的别名的不同地址值之间进行选择;即,存储器管理器能基于地址别名在不同的密钥域之间进行选择。在一个实施例中,使用由密钥域的所有者(消费者)创建的密钥域密钥来计算完整性检查值(ICV,诸如密钥控散列消息认证码(HMAC))。存储器管理器能访问完整性检查值表(或其授权部分)以确定是否使用了正确的密钥域密钥来访问数据。如果使用错误的密钥域密钥来解密数据,则所得到的明文将被破坏,并且将与完整性检查值表中的对应完整性检查值不匹配。
在一个实施例中,当数据被读入高速缓存行中时,数据被压缩以提供密钥域标识符/选择器和/或完整性检查值的空间(即,未使用的地址比特被嵌入到高速缓存行中)。当写入存储器时,密钥域标识符/选择器还可以被包括在压缩数据中。当对于压缩数据行读取存储器时,将指定密钥域的实际未使用的地址比特与嵌入在压缩数据高速缓存中的密钥域标识符/选择器值进行比较。如果密钥域值匹配,则数据被解压缩并转发到高速缓存。压缩是一种完整性优化,以避免每次在存储器中访问该数据时都需要查阅完整性检查值表。更进一步,将密钥域压缩到高速缓存行中减轻了一些高速缓存包括作为元数据的密钥域标识符的需要。虽然本发明的一些实施例可以压缩写入高速缓存行或存储器的数据,但是不需要压缩数据来实现本发明。
如果在将指定密钥域的实际未使用的地址比特与嵌入在压缩数据高速缓存中的密钥域标识符/选择器值进行比较时,密钥域值不匹配,则确定哪个密钥域当前被授权。如果用于读取存储器的地址对应于当前密钥域,则使数据清零(即,将数据比特设置为零),并执行旧密钥域地址的高速缓存驱逐。(尽管两个密钥域地址都是对相同物理存储器位置的别名,但高速缓存在全地址解析下独立保有密钥域地址。)
再次参考图2,VM1 2301和VM2 2302中的每一个都显示具有其自己的域管理器(VMMlet)2221和2222。域管理器VMMlet1 2221被显示在VM1 2301内部,而域管理器VMMlet22222被显示在VM2 2302内部,以表示每个相应域管理器(VMMlet)的代码被包括在相应VM的代码内。当消费者请求需要虚拟化的服务时,云服务提供商向消费者提供实现域管理器(VMMlet)功能性的代码镜像。由云服务提供商提供的域管理器(VMMlet)镜像被合并到消费者的域(VM)镜像中。
拥有VM1 2301的消费者能在将VMMlet1 2221合并到消费者的域(VM1 2301)镜像之前,测量并验证域管理器(VMMlet) 2221代码。通过将消费者的VM置于消费者的VM镜像的整个软件栈(包括域管理器(VMMlet))的控制之下,消费者能测量、验证和信任用于实例化在消费者的VM内运行的域管理器(VMMlet)的镜像。最后,消费者基于物理地址创建存储器位置相关的域启动镜像(包括域管理器镜像),用消费者自己的密钥域密钥加密域启动镜像,并将加密的域启动镜像提供给将启动该域启动镜像的云服务提供商服务器。
在一个实施例中,消费者在云服务提供商服务器上的经证明的SGX(Intel®软件防护扩展)飞地中创建加密的域启动镜像。在该实施例中,域启动镜像用飞地内部的密钥域密钥进行加密,并且加密的域启动镜像(以及任何关联的ICV值)被写入飞地外部的存储器。
当云服务提供商从消费者接收加密的域启动镜像(包括域管理器镜像)时,云服务提供商能测量、验证和信任消费者加密的域启动镜像包括被提供给消费者的相同域管理器镜像。在一个实施例中,云服务提供商的服务器硬件提供了一种用于测量消费者加密的域启动镜像的域管理器部分(创建其散列)的机制,因此云服务提供商然后能证明包括在消费者加密的域启动镜像中的域管理器镜像与云服务提供商提供的域管理器镜像相同(并且因此被云服务提供商信任)。在一个实施例中,测量域管理器镜像的散列函数是位置相关的,使得域管理器镜像必须被加载到云服务提供商服务器的存储器的正确存储器位置中以被恰当解密。例如,即使两个不同存储器位置的内容相同(例如全为零),但仅加载到正确存储器位置中的域管理器镜像才将会产生预期的位置相关散列结果。位置相关的散列验证功能的属性提供了如下一种安全优势:在尝试更改域管理器镜像的行为时,对手不能在存储器中重新布置域管理器镜像的加密部分。
在此合作模型中,域管理器镜像由消费者和云服务提供商两者验证。消费者能信任由公用云服务提供商提供的域管理器镜像,并信任云服务提供商的硬件将加强对于消费者虚拟机(VM)的安全性和机密性。此验证对VM的安全性是重要的,因为域管理器(VMMlet)具有完全的vmxroot特权,包括执行诸如虚拟机控制结构(VMCS)保存/恢复、通用寄存器(GPR)保存/恢复和/或vmexit/vmresume之类命令的能力。更进一步,中断描述符表(IDT)、高级可编程中断控制器(APIC)指令和分页数据结构(诸如页表和/或扩展页表(EPT))在密钥域中被加密。在一些实施例中,域管理器镜像仅由VM控制结构(诸如VMCS)和关联的数据(诸如控制消费者的VM行为的EPT)组成,而不包括能驻留在消费者的密钥域之外的VMX根操作所使用的代码或数据。
这种合作模式通过将测量和验证移动到消费者,使消费者能够信任由云服务提供商提供的特权软件。消费者能确保由云服务提供商的服务器硬件保证的消费者自己的工作载荷在云中的安全性。云服务提供商然后能重新验证使用了正确的域管理器镜像。此模型极大地简化了对于提供真正安全的公用云基础的硬件要求。不需要对虚拟机(VM)的操作系统(OS)部分进行任何改变。实现的大部分复杂性都被包括在域管理器(VMMlet)的设计中,域管理器是一种能容易地被修补、更新、测量和认证的软件。在一个实现中,硬件指令用于创建密钥域、在密钥域之间切换以及通过计算对应于密钥域的存储器位置的内容的散列值并将散列值与对于密钥域的有效内容的预期散列值进行比较来验证密钥域的内容。
再次参考图2,处理器(包括在硬件210中)响应于由存储器管理器240发出的命令而使用SwitchKD(切换密钥域)指令在VM 2301和2302以及它们各自的密钥域KD1 2501和KD22502之间切换。从一个密钥域切换到另一个密钥域(例如,从密钥域KD2 2502切换到KD12501)的结果是对具体物理存储器别名的控制被传递到被授权访问当前密钥域KD1 2501的VM(2301)。经由密钥域密钥访问的不同硬件密钥域防止消费者私有数据跨VM的信息泄漏,并且甚至防止对手访问外部物理存储器管理器240。密钥域标识符/选择器(例如,物理地址的一部分)保持在高速缓存中VM存储器区域分离。在一个实施例中,代替切换密钥域指令,VMX根vmlaunch/vmresume指令将密钥域切换到包括通过由vmptrld指令提供的地址中的密钥域标识符所标识的VMCS的密钥域,vmptrld指令从vmptrld指令中规定的地址加载指向当前VMCS的指针。然后,vmexit将切换回VMX根密钥域或共享存储器区域。
在一个实施例中,存储器212的一部分212s被共享,并用于跨密钥域密码加密边界通信。换句话说,共享存储器未加密,并且能用于在VM之间传递消息,否则这些VM只能访问属于每个具体VM被授权的密钥域的存储器位置。共享存储器被示为具有物理地址,其中一个比特,本文被描述为“k比特”,被禁用。k比特用于确定当前密钥域是否被用于限制VM对属于密钥域(诸如密钥域KD1 2501或KD2 2502之一)的存储器位置的访问,或者允许跨共享存储器212s中的密钥域共享未加密的信息。k-比特向CPU指示在物理地址中指示的密钥域是否应该被设置为共享密钥域(明文/!k)或当前活动的密钥域(加密的)。
已经关于管理虚拟机的域管理器(VMMlet)描述了上述实施例,尽管本发明不限于此。类似的密钥域模型能用于支持过程或容器;尽管没有对应的VMM,但OS内核(或微内核)服务于类似的目的。每个密钥域中的每个过程或容器镜像都将具有由云服务提供商测量的协作OS内核组件(在此称为域管理器或OSlet)。域管理器(OSlet)以类似于域管理器(VMMlet)的方式响应于存储器管理器命令、中断、调度、资源管理等。
现在参考图3,示出了根据本发明的实施例的云服务环境的框图。如图3值所示,网络300能用于允许消费者向公用云服务提供商请求服务,包括虚拟化服务。如所见,网络300能对应于任何类型的通信网络,并且能包括经由给定网络(诸如互联网320)互连的许多不同类型的计算装置。
云存储装置310能作为包括各种计算装置、存储装置等的数据中心的一部分来提供。作为一个示例,云存储装置310能是包括多个存储组件的存储装置,诸如磁盘、光学或基于半导体的存储装置。云存储装置310例如能充当各种应用(包括实例化虚拟机以响应于消费者的请求而提供服务的虚拟机监视器(VMM)应用)的主拷贝的储存库。在图1中所示的实施例中,VMM应用的主拷贝以VMM镜像312的形式存储。VMM镜像312是包括被设计成以虚拟机监视器(VMM)的形式提供虚拟机平台的软件栈的软件镜像。
从而,如在图3中进一步看到的,在相同的位置,例如作为相同数据中心的一部分,一个或多个公用云服务提供商服务器,诸如公用云提供商服务器3151和3152能耦合到云存储装置310。在各种实施例中,公用云服务提供商服务器能用于服务消费者服务请求,包括虚拟化请求。例如,每个公用云服务提供商服务器可以代表消费者托管一个或多个虚拟机。在图3中所示的示例中,公用云提供商服务器3151托管两个虚拟机,VM1 3401和VM2 3402。类似地,公用云提供商服务器3152托管两个虚拟机,VM1 3403和VM2 3404。
如图3中所示,能存在各种消费者装置,例如云服务消费者装置3301和3302。这种云服务消费者装置可以是给定用户的个人装置,诸如智能电话、平板电脑、台式电脑等。备选地,云服务消费者装置可以是用于消费云服务的组织的服务器。此外,云服务消费者装置可以经由软件进行仿真。换句话说,仿真器或模拟器能用软件仿真云提供商的硬件,使得消费者可以在消费者的装置上运行云提供商的硬件的仿真器。
云服务消费者装置3301和3302中的每一个都提供相应的云服务消费者3311和3312以及相应的VM镜像3321和3322。云服务消费者3311和3312例如可以是用于请求云服务的云服务应用的客户端组件。诸如云服务消费者3311和3312之类的云服务消费者在此被称为“消费者”。VM镜像3321和3322可以被存储在耦合到相应云服务消费者装置3301和3302的存储装置(未示出)中。这些VM镜像由消费者提供给云服务提供商,并用于创建在云提供商的服务器3151上运行的安全VM,诸如VM1 3401。
当根据本文描述的技术在云服务提供商的服务器上已经建立了安全VM时,消费者然后可以使用该VM与消费者的密钥一起代表消费者创建附加的VM。从而,一旦能在云服务提供商的云中安全地建立一个消费者VM,该VM然后能执行图3中消费者装置的所有操作,包括创建附加的安全VM。
同样,消费者能与多个云服务提供商建立安全VM,并且这些安全VM能使用消费者的秘密密钥经由安全通信信道进行安全交互。
图4是示出根据本发明的一个实施例的设备的图解。示出了根据实施例的保护公用云环境安全的设备400。设备400可包括任何计算装置和/或数据平台,诸如膝上型电脑、个人数字助理(PDA)、媒体内容播放器、成像装置、移动因特网装置(MID)、任何智能装置诸如智能电话、智能平板、智能TV、计算机服务器等,或者它们的组合。此外,设备400可以包括具有计算功能性(例如,个人数字助理/PDA、膝上型电脑、智能平板)、通信功能性(例如,无线智能电话)、成像功能性、媒体播放功能性(例如,智能电视/TV)等或其组合(例如,移动因特网装置/MID)的任何平台。
图示的设备400包括存储器412。存储器412可以在处理器411的外部(例如,外部存储器),和/或可以例如通过存储器总线耦合到处理器411。此外,存储器412可以被实现为主存储器。存储器412例如可以包括易失性存储器、非易失性存储器等,或者它们的组合。例如,存储器412可以包括动态随机存取存储器(DRAM),其被配置为一个或多个存储器模块,诸如例如双列直插式存储器模块(DIMM)、小轮廓DIMM(SODIMM)等、只读存储器(ROM)(例如,可编程只读存储器(PROM)、可擦除PROM (EPROM)、电EPROM (EEPROM)等)、相变存储器(PCM)等,或者它们的组合。
存储器412可以包括以行和列布置的存储器单元阵列,被划分成独立可寻址的存储位置。从而,对存储器412的访问可以涉及使用存储位置的地址,诸如例如标识包括存储存储器位置的行的行地址和标识包括存储存储器位置的列的列地址。此外,设备400内部的装置和/或设备400外部的装置可以实现对存储器412的访问。对存储器412的访问可以涉及例如直接存储器存取(DMA)。
可以使用加密和完整性检查来保护存储器412。在一个实施例中,使用称为可微调块密码的加密技术。可微调块密码接受第二输入,称为微调,连同要加密的明文或密文输入。微调连同密钥一起选择由密码计算的排列。例如,微调函数可以使用物理存储器地址作为对块密码的微调,以将未加密数据与物理存储器地址绑定。微调函数445可以包括例如XTS(基于“异或”-加密-“异或”/XEX的具有密文窃取的微调码本模式)算法、Liskov、Rivest和Wagner(LRW)算法等,或者它们的组合。
关于存储器412的完整性,在一个实施例中,使用基于具有完整性的存储器加密的硬件能力,这在美国专利9,213,653 B2“Memory Integrity”中被描述,下文称为具有完整性的总存储器加密引擎或TMEi。在另一个实施例中,具有完整性的存储器加密由存储器加密引擎(MEE)提供,如在美国专利No.8,819,455“Parallelized Counter Tree Walk forLow Overhead Memory Replay Protection”中所描述的。然而,本发明不限于这些实现,因为能使用经由存储器位置相关(“微调”)的密码提供存储器加密的任何密码加密机制。更进一步,能使用任何存储器完整性机制来增强独自通过加密提供的安全性,尽管对于本发明的实现,存储器完整性机制不是必需的。
处理器411可以包括任何类型的处理器,诸如例如微处理器、嵌入式处理器、数字信号处理器(DSP)、中央处理单元(CPU)、图形处理单元(GPU)、视觉处理单元(VPU)、网络处理器、执行代码以实现本文描述的技术的装置等等,或者它们的组合。处理器411可以包括一个或多个核,诸如例如核416和核418。核416、418可以包括单线程核、每核包括多于一个硬件线程上下文(或“逻辑处理器”)的多线程核等等,或者它们的组合。核416、418可以包括指令解码器以识别和/或解码指令(例如,来自指令寄存器),以激活适当的电路以执行指令,以验证指令流(例如,操作码等)将计算等等,或者它们的组合。
例如,核416、418可以执行一个或多个指令,诸如读指令、写指令、擦除指令、移动指令、算术指令、控制指令等等,或者它们的组合。核416、418例如可以执行一个或多个指令以在寄存器(未示出)和存储器412之间移动数据(例如,程序数据、操作码、操作数等),以从存储器412读取数据,以将数据写入存储器412,以使用数据执行算术运算(例如,加、减、逐比特运算、比较等),以执行与数据关联的控制操作(例如,分支等),诸如此类,或者它们的组合。指令可以包括任何代码表示,诸如例如二进制代码、八进制代码和/或十六进制代码(例如机器语言)、符号代码(例如汇编语言)、十进制代码、字母数字代码、高级编程语言代码等,或者它们的组合。从而,例如,可以使用十六进制代码表示x86指令集的操作代码(例如操作码),包括用于加法操作的字节值“00”、用于移动操作的字节值“8B”、用于递增/递减操作的字节值“FF”,诸如此类。
处理器411可以包括内部存储装置,诸如例如包括一级或多级的处理器高速缓存。在相同芯片上,处理器高速缓存可以不加密和/或可以与处理器411共享相同管芯。此外,处理器高速缓存可以被集成到核416、418中的一个或多个上。图示的处理器411包括高速缓存413,高速缓存413可以存储由处理器411的一个或多个组件利用的数据(例如,指令、操作数、程序数据等)。高速缓存413可以包括任何类型的高速缓存,诸如例如指令高速缓存、数据高速缓存、单级高速缓存、多级高速缓存、共享高速缓存、严格包括性高速缓存、排他性高速缓存等,或者它们的组合。例如,高速缓存413可包括多级高速缓存,诸如2级(L2)、3级(L3)、4级(L4)或其它级高速缓存、最后一级高速缓存(LLC)等,和/或它们的组合。核416、418可以检查数据是否位于高速缓存413中,以执行一个或多个指令和/或其他数据(例如,程序数据等),其中高速缓存未命中可使数据以固定大小的块(例如,高速缓存行)从存储器412传输到高速缓存413。
例如,每个核416、418可以经由诸如存储器控制器417的相应存储器控制器与相应存储器耦合,经由共享存储器控制器与共享存储器耦合,经由共享存储器控制器与相应存储器耦合,等等,或者它们的组合。此外,共享高速缓存可以与共享存储器控制器耦合,多个高速缓存可以与多个相应存储器控制器耦合,等等,以及它们的组合。例如,存储器控制器417可以在核416、418之间共享,可以与高速缓存413(例如,共享多级高速缓存)耦合,并且可以将核416、418与存储器412(例如,共享DRAM)耦合。存储器控制器417可以与存储器412(例如,外部存储器、DRAM等)耦合。
处理器411还包括存储器加密引擎415。图示的存储器加密引擎415包括可以加密未加密数据的加密器441。未加密数据可以包括例如明码电文数据、明文数据等等,或者它们的组合。明码电文数据可以经受以特殊格式(例如超文本传输标记语言(HTML)、富文本格式(RTF)等)编码,并由适当的程序(例如,文字处理器、文本编辑器等)读取而不需要解密。明文数据可以包括预加密数据,诸如例如在传送和/或存储之前要加密的明码电文数据。此外,明文数据可以包括后解密数据,诸如例如是对接收到和/或检索到的数据进行解密的结果的数据。
此外,明文数据可以包括以任何格式可编码的数据,诸如音频/视频数据(例如,运动画面专家组(MPEG)数据等)、图像数据(例如,联合摄影专家组(JPEG)数据等)、金融数据(例如自动传输机(ATM)交易数据等),诸如此类,或者它们的组合。明文数据可以包括程序数据,诸如例如至少一部分程序、操作系统(OS)、应用、虚拟机(例如虚拟机监视器(VMM)代码等),诸如此类,或者它们的组合。明文数据还可以包括例如包括操作码、操作数等或其组合的指令。
未加密数据可以包括多个比特。多个比特可以包括以任何代码表示(诸如二进制代码、八进制代码、十六进制代码、符号代码、十进制代码、字母数字代码、较高级编程语言代码等等,或者它们的组合)的一个或多个比特(例如,字节等)。例如,存储器参考指令可以包括用于操作码的比特、用于地址的比特等等,其中存储器参考指令的比特可以用十六进制代码(例如机器语言)、符号代码(例如汇编语言)等等或者它们的组合来表示。此外,多个比特可以被翻译成二进制代码和/或从二进制代码翻译,其中二进制代码可以由核416、418执行,可以在存储器412排序,可以从存储器412中取出,等等,或者它们的组合。
加密器441可以包括任何类型的密码来生成密文数据,诸如例如在任何期望的操作模式中的块密码。块密码可以包括固定的块大小,其中块密码可以被重复实现以加密大于块大小的数据。例如,块密码可以包括在传播密码分组链接(PCBC)操作模式中的高级加密标准(AES)。此外,块密码可以包括可扩展的块大小。
在一个示例中,块密码是Threefish,其可以被实现为获得任何长度(例如,256比特、512比特、1024比特等)的可扩展的块大小。例如,Threefish可以利用可以包括存储器地址和/或位置的微调(例如,128比特)以及可以与块相同宽度的密钥。Threefish可以利用若干轮(例如,72轮)对于256比特和1024比特的块进行加密,利用若干轮(例如,80轮)对于1024比特的块进行加密,诸如此类。Threefish可以利用函数MIX,包括加法运算、按常数的旋转运算和“异或”(XOR)运算。例如,在每组MIX函数(例如,按块大小分别为2、4或8)之后可以排列单词。子密钥可以被注入到系统中,例如,每若干轮(例如,4轮),其中子密钥可以由密钥、微调和计数器值部分生成。该密钥和微调可以在末尾给出额外的单词(例如,所有其他单词的“异或”)。
图示的存储器加密引擎415还包括解密器442,解密器442可以解密密文数据以生成未加密数据。解密器442可以包括加密器441的逆转。例如,解密器442可以包括AES-PCBC的逆转。此外,解密器442可以包括Threefish的逆转。例如,子密钥可以按相反的顺序应用,其中每轮都包括反向单词排列,后面是反向MIX函数。从而,未加密数据(例如明文数据)可以被实现为对加密器441输入,以在未加密数据将被存储在存储器412中时(例如写指令),生成未加密数据(例如密文数据)的不可读拷贝,其中解密器442可以被实现成解密密文数据,并且当密文数据将从存储器412中被取出时(例如读指令),生成未加密数据。
存储器加密引擎415可以包括高速缓存行监视器,以从多个地址别名中标识对应于释放的地址别名的高速缓存行,并转储清除所标识的高速缓存行。存储器加密引擎415还可以包括完整性检查值选择器443,以确定应用于未加密和/或加密数据行(例如,由多个地址别名中的至少一个起别名)的完整性检查值。存储器加密引擎415还可以包括存储器初始化器,以写入存储器中的位置,而无需首先读取在存储器中的该位置处先前存储的数据。存储器加密引擎415可以包括分配器,以将转储清除的高速缓存行指配/绑定到数据行物理地址。
存储器加密引擎415还可以包括高速缓存行解释器,以为每个高速缓存行确定数据物理存储器地址,如图31A中所图示,其包括:数据行字节;数据行物理地址,包括完整性行插槽选择器和完整性行索引;以及由数据物理存储器地址的未使用地址比特形成的密钥域选择器。完整性行索引标识存储器中的完整性行地址位置,并且完整性行插槽选择器标识完整性行地址中的完整性行插槽,其中完整性行插槽值被存储并用于确定地址别名是否有效。
存储器加密引擎415可进一步包括别名管理器,以确定标识别名地址的多个高速缓存行的数据行物理地址,其中别名地址是对单个存储器位置的别名。存储器加密引擎415可以包括完整性检查值计算器,以用有效的完整性值设置高速缓存行的密钥域选择器,以将高速缓存行指定为当前有效的地址别名。存储器加密引擎415可以包括用于从高速缓存行的数据物理存储器地址的数据行物理地址读取加密数据行的数据检索器,以及用于解密加密数据行的解密器428。解密的数据行可以为解密的数据行标识数据行物理地址、完整性行索引和完整性行插槽选择器(例如,如图31A所图示)。存储器加密引擎415可以包括用于读取存储在完整性行路插槽中的完整性行插槽值的插槽值解释器以及用于确认完整性行插槽值和解密数据(例如数据行)的数据物理存储器地址的密钥域选择器之间匹配的比较器(例如完整性验证器444)。完整性验证器444可以确定完整性值的明文(例如,存储在完整性检查行中的拷贝)和数据行的明文(例如,数据行的拷贝部分)之间的不匹配/匹配,这指示完整性值和/或数据行的错误破坏或有效性。完整性验证器444可以进一步将数据的散列值与数据的预期散列值进行比较。
存储器加密引擎415和/或别名管理器可以将别名比特(例如,完整性行插槽选择器、完整性行索引、密钥域选择器和/或有效完整性值或它们的某种组合)与数据行字节分开存储在单独位置(例如,别名比特高速缓存行和/或别名比特存储器位置)中,存储器加密引擎415、数据检索器和/或别名管理器可以检索别名比特并将其与请求(例如,对于由对应数据行物理地址标识的数据的请求)进行比较以确保具体访问控制策略匹配。在别名比特与请求比较失败(例如,不匹配结果)的情况下,存储器加密引擎415和/或别名管理器可以将不匹配情况报告(例如,发出警报)为错误或故障中的一个或多个。
存储器加密引擎415数据检索器(或核416、418)可以从多个高速缓存行中的至少一条高速缓存行的数据物理存储器地址的数据行物理地址读取加密的数据行。解密器442可以解密加密的数据行,其中解密的数据行标识用于解密的数据行的数据行物理地址、完整性行索引和完整性行插槽选择器。比较器(例如,完整性验证器444)可以标识在存储的完整性行插槽值和解密的数据行的数据物理存储器地址的密钥域选择器之间的不匹配,并且存储器加密引擎415和/或比较器响应于不匹配标识,可以使存储器加密引擎415或其组件转储清除高速缓存行,并将不匹配情况报告为错误或故障中的一个或多个。
存储器加密引擎415可以进一步包括完整性值嵌入器,以为每个高速缓存行嵌入具有数据物理存储器地址的有效完整性值的数据行字节。存储器加密引擎415还可以包括压缩器,以压缩嵌入有有效完整性值的数据行字节。加密器441可以加密嵌入有有效完整性值的压缩数据行字节。存储器加密引擎415可进一步包括数据行写入器,以写入由数据行物理地址、到密钥域选择器的有效完整性值、数据行物理地址以及嵌入有有效完整性值的加密和压缩的数据行字节所标识的存储器中的位置。
存储器加密引擎415和/或压缩器可以确定具体高速缓存行的数据行字节是不可压缩的,并且代替尝试将别名比特(例如,完整性行插槽选择器、完整性行索引、密钥域选择器和/或有效完整性值,或它们的某种组合)嵌入到具有数据行字节的数据行,可以单独存储有效完整性值(例如,在诸如另一高速缓存行和/或存储器位置的单独位置中)。
当密文要从存储器412中取出时(例如,读取操作),这里讨论的图示的密文可以被解密以生成未加密数据。图示的存储器加密引擎415可进一步包括微调功能445,以利用物理存储器地址作为对块密码的微调,以将未加密数据与物理存储器地址绑定。微调函数445可以包括例如XTS(基于“异或”-加密-“异或”/XEX的具有密文窃取的微调码本模式)算法、Liskov、Rivest和Wagner(LRW)算法等,或者它们的组合。微调功能445可以例如扩展原始物理存储器地址,将该地址与未加密数据“异或”,并用密钥通过加密器441运行结果,以将未加密数据绑定到该地址。
图示的存储器加密引擎415可进一步包括解码器447,以解码未加密数据并识别一个或多个指令。例如,当基本上整个数据行(例如,64字节高速缓存行)从存储器102中取出并被解密时,未被破坏的未加密数据(例如,有效的明文)可以包括操作码。从而,当解码器447解码明文数据时,解码器447可以识别指令集的操作码,诸如例如x86指令集等。
图示的存储器加密引擎415可进一步包括密钥/微调值选择器448,以针对存储器412中的物理位置从多个密钥(例如,密钥域)中选择密钥和/或从多个微调(例如,微调域)中选择微调。例如,图示的存储器加密引擎415可以包括功能检测器,以确定功能(例如,程序、中间件、操作系统、固件、虚拟机、VMM、操作系统(OS)内核等)或功能的一部分(例如程序的一部分等)是第一次启动,或者是第一次被给予对存储器412中物理位置的访问权。作为响应,当功能(和/或其一部分)被给予访问权时,密钥/微调值选择器448可以为存储器中的物理位置选择密钥和/或微调(例如,来自密钥域的密钥、来自相同密钥域的不同密钥、来自不同密钥域的不同密钥、来自微调域的微调、来自相同微调域的不同微调、来自不同微调域的不同微调等)。
密钥/微调值选择器448可以基于根据数据行的物理存储器地址的比特(诸如未使用的地址比特)确定的值来选择密钥。特定物理存储器位置的密钥域可以由要被选择成确定该值的若干未使用的地址比特来定义。例如,具体物理存储器位置可以同时属于具体密钥域,其中未使用的地址比特可以用于定义该密钥域(例如,密钥域包括对于利用四个未使用地址比特的单个物理存储器位置的16个密钥)。从而,物理存储器位置可以基于位置映射到的域在不同的点使用不同的密钥。密钥/微调值选择器448可以通过例如使用可由设备400保护的秘密主密钥(例如,在可信的执行环境中)加密该值(例如,0001、0010等)来导出密钥。此外,密钥/微调值选择器448可以通过例如使用该值作为指向阵列的指针而从受保护密钥的阵列中检索密钥来导出密钥。
而且,密钥/微调值选择器448可以通过设置将被微调功能445用作微调的物理存储器地址的比特来选择微调。在这方面中,对于XTS模式的微调将包括物理存储器地址的未使用的地址比特和使用的地址比特。从而,当由密钥/微调值选择器448选择/改变未使用的地址比特时,不同的密文将由用于微调的不同地址(即使实际上指的是相同的物理存储器位置)产生。
图示的存储器加密引擎415还包括逻辑449,其可以利用处理器410的组件,诸如例如核416、418、加密器441、解密器442等,以维护(例如,确保、验证、测试等)存储器412的安全性和完整性。
从组件(例如内部或外部装置、加速器等)引起的存储器破坏可以在这些组件访问具有可能涉及具体密钥域或别名和微调的地址的存储器时被检测到。这些装置可以使用当前的且正确的地址来访问存储器。类似地,并且相反地,当使用不正确或非当前的地址时,也可以检测到破坏这种装置的存储器的软件。
尽管图4中中未图示,但是设备400可以包括具有处理器411的芯片上的其他元件。例如,处理器411可以包括与存储器加密引擎415集成的输入输出(IO)控制逻辑。此外,设备400可以包括例如IO模块,有时称为芯片集的南桥,其用作主机装置并且可以与例如如下装置通信:前/后图像传感器(例如,二维相机、三维相机等)、麦克风、显示器(例如屏幕)、运动传感器(例如加速计、陀螺仪等)、大容量存储装置(例如硬盘驱动器/HDD、光盘、闪存等)、提供各种各样通信功能性的网络接口(例如,蜂窝电话、WiFi、WiMax全球定位系统(GPS)、扩展频谱(例如,900 MHz)、其他射频(RF)等)。处理器411和IO模块可以例如被实现为片上系统(SoC)。
此外,虽然示例已经出于说明目的示出了单独的组件,但是应当理解,设备400的组件中的一个或多个可以被组合,可以驻留在相同和/或不同的物理和/或虚拟位置,等等,或者它们的组合。例如,逻辑449可以包括存储器加密引擎415的组件中的一个或多个以执行其对应的功能性,这些组件可以驻留在与核416、418、存储器412等或其组合相同或不同的位置。此外,存储器加密引擎415的一个或多个组件可以用计算机程序代码(诸如可以与用逻辑硬件实现的存储器加密引擎415的一个或多个组件对接的软件值选择器)实现。
由设备400提供的功能性中的一些可以由处理器高速缓存的存储器/DRAM(动态随机存取存储器)侧上的片上系统(SoC)IP块来输送,使得该功能性能够被用于在主机处理器(例如中央处理单元/CPU)核上以及在其它IP块和加速器(诸如通用图形处理单元(GPGPU)和集成图形(例如Intel®处理器图形))上运行的软件。
图示的设备400采用未使用的物理地址比特(和/或通过高速缓存传递的其他元数据)来操纵密码加密的存储器完整性值指针(例如,实现一个或多个访问控制策略),使得软件存储器分配例程能够控制指针的指配(例如,“malloc”和“free”)。设备400一般可以使用未使用的地址比特作为密钥域。例如,系统中安装的外部物理存储器可能比由64比特物理存储器地址实际能寻址的少,因此最高有效地址比特可以用于在不同的“密钥域”之间进行选择,因为高速缓存仍然可以以物理存储器地址全解析将这些地址输送给设备400。图示的设备400可以使用对于虚拟存储器的5级分页和64比特寻址,以允许软件存储器分配器/管理器(例如,图2的存储器管理器240)在对相同物理存储器位置的别名的不同地址值之间进行选择。软件存储器分配器/管理器可以控制完整性值表(或其授权部分)来确定哪个别名当前有效,使得由软件对无效别名/地址的使用然后可以引发硬件中的故障,该故障可以被报告给软件监视器以处置存储器违规。
图5是根据本发明的一个实施例的由云服务的消费者执行的方法的流程图。在“向云服务提供商请求服务”框502中,消费者向云服务提供商请求服务。例如,请求可以针对虚拟化服务,或者请求可以要执行事务,云服务提供商将为该事务建立虚拟机或其他进程来执行该事务。
云服务提供商标识支持密钥域的服务器或一组服务器以服务于消费者的请求。在“从云服务提供商接收域管理器镜像和存储器位置相关的地址信息”框504中,消费者从云服务提供商接收域管理器镜像和存储器位置相关的地址信息,这里也称为修复变量信息。存储器位置相关的地址信息确切地标识正服务于消费者的请求的(一个或多个)服务器的存储器中的物理位置。该存储器位置相关的地址信息可以包括用于正服务于消费者的请求的(一个或多个)服务器的存储器中页的物理地址、页表的物理地址、控制寄存器信息(例如CR3值)、中断描述符表寄存器信息等。域管理器镜像可以包括(一个或多个)页表结构,页表结构将域管理器镜像的线性/虚拟地址映射到域管理器镜像在云服务提供商服务器的存储器中将位于的物理地址。
控制然后从“从云服务提供商接收域管理器镜像和存储器位置相关的地址信息”框504传递到“测量域管理器镜像”框506,在此消费者测量域管理器镜像以确保域管理器镜像尚未受损。消费者可以使用已知的白名单技术验证域管理器镜像,诸如计算域管理器镜像的散列,并将散列值与主域管理器镜像(其已知未被破坏)的主散列值进行比较;源代码能被检查并重新编译成匹配镜像;可以验证镜像的政府认证;可以确认该镜像与开源软件一致,等等。如果镜像不会泄露消费者数据,则认为该镜像是值得信任的。例如,如果使用消费者的秘密密钥保护所有通信,并且文件/存储器页在保存和/或向或从存储装置恢复时被加密和完整性检查,则镜像可以被认为是值得信任的。
从“测量域管理器镜像”框506,控制传递到“验证”判定点508。如果域管理器镜像未被验证,则控制传递到“错误”框522,其中消费者处置其中云提供商的域管理器镜像尚未验证的情形。在这种情形下,消费者可能选择不使用该具体公用云服务提供商的服务。
如果域管理器镜像在“验证”判定点508处被验证,则控制传递到“创建域启动镜像”框510。在框510,消费者创建域启动镜像,该镜像将在云服务提供商的服务器上执行以“启动”密钥域。启动密钥域可以包括,例如,创建密钥域,使硬件用密钥域密钥加密存储在属于密钥域的存储器位置中的数据,以及将数据存储在属于密钥域的存储器位置中(诸如要执行以初始建立密钥域的代码)。
在一个实施例中,消费者使用由云服务提供商在“从云服务提供商接收域管理器镜像和存储器位置相关的地址信息”框504中提供的存储器位置相关的地址信息来修改提供商提供的域管理器镜像,作为要执行以启动密钥域的代码的一部分。例如,消费者可以修改域管理器镜像的页表,使得在给定域管理器镜像将位于的物理存储器地址的情况下,更新(修复)页表中的物理地址。一旦更新了分页结构,通过执行域管理器镜像的代码、数据和程序使用的所有线性/虚拟地址就将映射到云服务提供商的服务器上的正确的对应物理存储器地址。在一个实施例中,消费者使用消费者的密钥域密钥加密修复的域管理器镜像,并使用消费者的密钥域密钥为加密的修复域管理器镜像创建完整性检查值(ICV)。
在一个实施例中,消费者创建包括加密的修复域管理器镜像的域启动镜像,以便分发到云服务提供商服务器。消费者还将秘密密钥包括在域启动镜像中,以便分页、迁移、证明、通信以及由在执行的域进程(例如,VM、操作系统等)提供的其他功能。当域启动镜像被加密时,域启动镜像中包括的对应页表结构也被加密。
因为域启动镜像是使用存储器位置相关的“微调”密码被加密(并被完整性检查),因此对手不能在存储器周围移动域启动镜像的各部分。页表将域启动镜像的程序和数据映射到云服务提供商的服务器上的正确物理存储器地址,因此,给定域启动镜像被密码加密地绑定到正确的物理存储器位置的情况下,程序行为就不能被恶意改变。换句话说,如果域启动镜像没有被加载到云服务提供商的服务器上的正确物理存储器位置,则无法正确解密域启动镜像。更进一步,完整性检查值能检测修改域启动镜像内容和/或域启动镜像被加载到存储器中的位置的任何尝试。
控制从“创建域启动镜像”框510传递到“验证支持密钥域的服务器的/组的证书并获得支持密钥域的服务器的/组的公钥”框512。
在框512中,消费者验证所标识的云服务提供商服务器的/组的证书,并获得所标识的支持密钥域的服务器的/组的公钥。
控制从框512传递到“与验证的(一个或多个)支持密钥域的服务器交换密钥域密钥”框514。消费者与在框512中验证的(一个或多个)支持密钥域的服务器交换密钥域密钥。密钥域密钥交换的一个方面是,密钥域密钥由消费者仅以加密形式直接提供给支持密钥域的服务器的硬件(诸如图4的存储器加密引擎415)。因为支持密钥域的服务器的软件不接收密钥域密钥,所以在不请求硬件执行解密的情况下,支持密钥域的服务器软件就不能解密密钥域的内容。在一个实施例中,在将加密的密钥域密钥提供给支持密钥域的服务器的硬件之前,消费者使用在框512中获得的服务器的/组的公钥来加密消费者的密钥域密钥。
在另一个实施例中,密钥域密钥可以在消费者和服务器硬件之间协商。可以用硬件(例如微代码、固件、CSME、SMM)直接生成密钥域密钥,其中服务器硬件能提供其独特(或组)身份和公钥/CERT,并且然后Diffie Hellman密钥交换(或RSA)能完成与消费者的密钥域密钥交换。该实施例要求消费者在线以在启动域镜像时执行密钥交换。
此密钥交换使运行在验证的支持密钥域的服务器上的虚拟机能够访问用消费者的密钥域密钥加密的域启动镜像数据,而无需暴露密钥域密钥本身。加密的消息通过支持密钥域的服务器上的云服务提供商的软件栈传递。支持密钥域的服务器硬件为命令提供密码加密端点。例如,消费者能用服务器的公钥加密用于密钥域的密钥,并将该加密的密钥域密钥发送给云服务提供商。云服务提供商然后可能在支持密钥域的服务器硬件上发出指令,诸如创建密钥域(CreateKD)指令,以创建新密钥域。此外,提供商还能使用相同的创建密钥域(CreateKD)指令来重新创建密钥域,例如,如果VM已经被挂起并将被重新开始的话。
控制从“与验证的(一个或多个)支持密钥域的服务器交换密钥域密钥”框514传递到“加密包括用于交换密钥域密钥的验证的支持密钥域的服务器的域管理器镜像的域启动镜像”框516。一旦建立了密钥域密钥(或之前,当它是消费者的密钥时),消费者就使用密钥域密钥来加密域启动镜像,包括用于消费者与之交换密钥域密钥的特定服务器的域管理器镜像。给定由云服务提供商作为修复变量信息提供的存储器位置相关的地址信息,消费者加密域启动镜像。在一个实施例中,使用称为可微调块密码的加密技术。可微调块密码接受第二输入,称为微调,连同要加密的明文或密文输入。微调连同密钥一起选择由密码计算的排列。在加密消费者的域启动镜像时,支持密钥域的服务器的物理存储器地址被用作微调,使得所得到的加密启动镜像存储器位置相关。加密启动镜像被描述为存储器位置相关,因为加密的启动镜像在其能被正确解密之前必须被加载到云服务提供商服务器的正确物理存储器地址中。
在一个实施例中,使用基于XEX的具有密文窃取的微调码本模式(XTS)加密域启动镜像。消费者使用页地址微调和密钥域密钥以存储器位置相关的XTS模式加密域启动镜像。域启动镜像将加载到的正确物理地址被包括在加密的每个块的XTS微调中。在其他实施例中,也可以使用其他可微调密码,诸如Liskov、Rivest和Wagner (LRW)或计数器模式密码。
消费者也可以使用密钥域密钥计算域镜像的完整性检查值(ICV,诸如密钥控散列消息认证码(HMAC))。在一个实施例中,完整性检查值也是存储器位置相关的,使得在验证数据的完整性时将存储器中的对应数据行的地址/存储器位置考虑在内。在消费者知道对应于消费者的加密启动镜像的服务器上的ICV表的地址位置的情形下,消费者可以将ICV值包括在加密启动图像中。使用指示ICV表的正确服务器存储器地址的微调,ICV值表也可能用密钥域密钥进行加密。云服务提供商服务器然后会将加密启动镜像的ICV部分加载到在ICV表的那些相同服务器存储器地址处的ICV表的正确插槽中。
从“加密包括用于交换密钥域密钥的验证的支持密钥域的服务器的域管理器镜像的域启动镜像”框516,控制传递到“用支持密钥域的服务器建立密钥域”框518。在框518中,消费者向支持密钥域的服务器发送创建密钥域的请求。该请求可以包括加密的密钥域密钥,该密钥域密钥用作对于将由支持密钥域的服务器的处理器执行的创建密钥域(CreateKD)指令的输入值。要使用的密钥域选择器/标识符是由云服务提供商的存储器管理器做出的本地判定,因为云服务提供商的存储器管理器需要管理受限的密钥域名称空间。消费者不需要知道密钥域选择器/标识符,并且由云服务提供商能改变密钥域选择器/标识符的值,以避免本地冲突。实际的密钥域密钥为消费者的VM镜像提供安全性,而密钥域选择器/标识符告诉云服务提供商服务器的硬件密钥域密钥当前被本地存储在哪个插槽/寄存器中。
从框518,控制传递到“向(一个或多个)支持密钥域的服务器发送加密域启动镜像”框520。加密的域启动镜像被发送到云服务提供商,并且在支持密钥域的服务器上的云服务提供商的软件栈将域启动镜像在正确的物理存储器地址加载到存储器中(即,存储器的k比特关(即,未加密)区域中)。
图6是根据本发明的一个实施例的由云服务提供商执行的方法的流程图。控制开始于“响应于消费者对服务的请求,给消费者提供域管理器镜像”框602。消费者的请求可以专门针对虚拟化服务,或者消费者的请求可以是执行云服务提供商将经由虚拟机或其他过程为消费者执行的事务。
控制从“响应于消费者对服务的请求,给消费者提供域管理器镜像”框602进行到“为域管理器镜像分配空间并向发出请求的消费者提供存储器位置相关的地址信息”框604。在此框中,云服务提供商为域管理器镜像分配存储器中的空间,并通知发出请求的消费者用于所分配的存储器空间的存储器位置相关的地址信息。该存储器位置相关的地址信息尤其可以包括存储器中的页的物理地址、页表的物理地址、控制寄存器信息、中断描述符表寄存器信息等。存储器位置相关的地址信息还可以包括预期的入口点。作为备选实施例,云服务提供商能创建消费者能重新验证为正确的已经修复的域镜像。
如上参考图5的“向云服务提供商请求服务”框502所提到,云服务提供商可以标识能提供密钥域能力的一组服务器。例如,一组服务器中的每个服务器可以使用相同的密钥,称为组密钥,诸如直接匿名证明/增强隐私标识符(DAA/EPID)的组公用验证密钥。DAA是一种支持匿名的数字签名算法。不像传统数字签名算法,其中每个实体都有独特公用验证密钥和独特私有签名密钥,DAA提供了与许多(通常是数百万个)独特私有签名密钥关联的公共组公用验证密钥。DAA被创建使得装置可能向外方证明它是什么类型的装置(以及可选地,装置上运行的是什么软件),而不需要提供装置身份,即,证明该装置是一组中的真实可靠的成员,而不暴露是哪个成员。EPID通过提供附加的实用程序来增强DAA,该实用程序能够在给定由私钥创建的签名的情况下撤销该密钥,即便该密钥本身仍然未知。
从框604,控制进行到“与消费者交换密钥域密钥”框606,其中支持密钥域的服务器从消费者获得密钥域密钥。密钥域密钥由消费者作为加密密钥提供,其中消费者的密钥域密钥已经用支持密钥域的服务器的公钥加密。在一个实施例中,支持密钥域的服务器的存储器管理器使加密的密钥域密钥被写入支持密钥域的服务器的插槽/寄存器中,并且存储器加密引擎(诸如图4的存储器加密引擎415)从插槽/寄存器中读取加密的密钥域密钥,并且使用支持密钥域的服务器的私钥解密密钥域密钥。
从框606,控制进行到“响应于消费者提供域启动镜像,将域启动镜像加载到存储器中的分配空间中”框608。当消费者向支持密钥域的服务器提供VM工作载荷时,消费者提供用消费者的密钥域密钥加密的域启动镜像。支持密钥域的服务器将域启动镜像加载到在框604中分配的物理存储器空间中。域启动镜像被安装在云服务提供商的服务器上的物理存储器中在经由存储器位置相关的地址信息与消费者通信的物理存储器位置。由云服务提供商(例如,使用物理地址的一部分,诸如k比特)可以使共享的、未加密的存储器位置可用,以便最初将该加密的启动镜像加载到存储器中。
因为多个服务器可共享相同公钥,所以标识存储器位置相关的地址信息可能需要解决多个服务器之间的存储器冲突。在一个实施例中,解决了一组中的多个服务器之间的存储器位置冲突,因为在服务器的存储器中的位置相关的镜像是消费者的域启动镜像,该镜像能是暂时的。也就是说,域启动镜像用于启动消费者的较大域(VM)镜像,该镜像能在由云服务提供商选择的存储器中的任何地方进行分页。在启动消费者的较大域镜像之后,加密镜像的位置相关部分能从存储器中移除(已经执行了启动消费者的较大域镜像的功能)。从而,存储器使用情况能由云服务提供商来管理,云服务提供商为位置相关启动镜像腾出空间,使用位置相关启动镜像将域镜像的其余部分启动到可变存储器中,并且然后释放由域启动镜像占用的空间(例如,为用于碰巧与那些相同的存储器位置重叠的不同密钥域的不同域启动镜像腾出空间)。
在软件控制下,消费者的域镜像能在多个阶段子启动。第一阶段是执行域启动镜像,该镜像由消费者根据存储器位置相关的地址信息进行加密。第二阶段是启动消费者的域镜像的其余部分,它不需要被加载到云服务提供商的服务器上的具体物理存储器位置。
从框608,控制进行到“创建和初始化存储器中的密钥域”框610。在一个实施例中,支持密钥域的服务器从消费者接收创建密钥域的请求。该请求可以包括加密的密钥域密钥,该密钥域密钥可用作对于将由支持密钥域的服务器执行的创建密钥域(CreateKD)指令的输入值。CreateKD指令还可以通过使处理器核停顿、转储清除旧密钥域的高速缓存和翻译后备缓冲器(TLB)以及用密钥域的新密钥初始化存储器加密引擎来初始化新密钥域。用新密钥域密钥初始化存储器加密引擎可以包括将密钥域密钥写入由存储器加密引擎硬件可访问的存储器插槽/寄存器。备选地,这些初始化功能可以经由单独的初始化密钥域(InitKD)指令来执行。
从框610,控制进行到“测量域启动镜像”框612。云服务提供商验证在消费者的加密域启动镜像中存在预期的域管理器镜像。这种验证确保特权代码诸如VMX根组件和数据结构被包括在消费者的加密域启动镜像中。
在一个实施例中,存储器管理器使用散列密钥域(HashKD)指令来验证域启动镜像的页包括提供商的域管理器(VMMlet)镜像。“安全散列”函数,诸如由国家标准和技术研究所(NIST)定义的安全散列算法3 (SHA3),被用于计算用于加密的域启动镜像内的提供商的域管理器镜像的散列值。安全散列算法使用散列函数变换数据,散列函数可以是一种包括逐比特运算、模块化加法和压缩函数的算法。散列函数然后产生固定大小的字符串,它看起来一点也不像原始输入字符串。这些算法被设计成单向函数,这意味着一旦原始输入数据已经被变换成散列值,实际上就不可能将散列值再变换回原始输入数据。
云服务提供商能通过根据本地存储器中的消费者的加密域启动镜像构造域管理器镜像来验证在消费者的域启动镜像内存在域管理器镜像。云服务提供商然后能对用于构造的域管理器镜像的本地存储器位置的内容,执行HashKD指令使用的相同验证函数(即散列函数)。如果本地存储器位置的内容的验证函数(散列)值与散列KD指令的结果匹配,则云服务提供商能被确保,提供商的域管理器镜像被正确地合并为消费者的加密域启动镜像的一部分。
在一个实施例中,HashKD指令能为高速缓存行提供散列值,或者在另一个实施例中,HashKD指令能一次为多达一页存储器提供散列值。
在一个实施例中,HashKD指令仅提供散列值,使得没有域启动镜像中的消费者秘密被泄露给云服务提供商。消费者的秘密能在域启动镜像的VMX非根部分中,例如,作为在域管理器(VMMlet)之上运行的操作系统的一部分。仅作为HashKD指令的结果提供散列值使云服务提供商能够仅验证加密域启动镜像的提供商的部分(域管理器镜像部分)。独立于加密域启动镜像的消费者修改的部分(包括消费者秘密)验证提供商的部分防止消费者的秘密公开给云服务提供商。
从框612,控制进行到“验证”判定点614。如果域启动镜像测量未被验证,则控制进行到“错误”框626,其中云服务提供商可以向消费者报告验证失败。如果镜像测量在“验证”判定点614处得到验证,则控制进行到“执行消费者的域启动镜像并验证入口点”框616。
在“执行消费者的域启动镜像并验证入口点”框616,支持密钥域的服务器的栈将在预期的入口点执行消费者的域启动镜像(如经由存储器位置相关地址(“修复变量”)信息提供给消费者的)。存储器管理器VM将消费者加密的域启动镜像加载到未加密的存储器页中(其中k比特被禁用)。新密钥域被发起。
在一个实施例中,支持密钥域的服务器的处理器执行切换密钥域(SwitchKD)指令,提供目的地密钥域标识符/选择器、入口点地址和控制寄存器信息作为输入。此外,在一个实施例中,由消费者(例如,使用密钥域密钥或其衍生物)计算的密钥控散列消息认证码(HMAC)被用于验证入口点地址和控制寄存器信息是正确的。
在执行域启动镜像之前,支持密钥域的服务器可以关闭中断。在一个实施例中,在切换密钥域之后执行的第一指令是表示密钥域切换的预期入口点的特殊的类似ENDBRANCH的指令。在ENDBRANCHKD指令之后的目的地域管理器(VMMlet)代码验证VMM处于受保护模式。目标域管理器(VMMlet)代码还验证控制寄存器和中断描述符表寄存器等是正确的。然后,目的地域管理器(VMMlet)代码重新启用中断,并从保存的状态重新开始执行。
在一个实施例中,使用HMAC函数来实现SwitchKD指令以验证消费者的域启动镜像。这种实现是SwitchKD的优选实施例,因为它是最灵活的。消费者能使用利用服务器硬件(例如,密钥域密钥或其衍生物)建立的秘密来计算用于进入密钥域的预期处理器状态上的HMAC(例如,SHA3 HMAC)(例如,验证用于指令指针、栈指针、CR0、CR3、CR4、IDTR、GDTR、LDTR、能影响VM安全性的任何MSR等的处理器的寄存器)。SwitchKD指令的HMAC实现能由消费者的域镜像动态建立,并且通过计算多个HMAC可以支持多个入口点,消费者的域镜像中的每个独特有效入口点一个HMAC。使用HMAC动态定义新入口点的这种灵活性允许服务器从原始加密域启动镜像开始,在固定的初始入口点执行原始加密域启动镜像,然后在内部(从密钥域内)将该域启动镜像拷贝到新的动态指配的存储器位置(根据提供商的存储器管理策略),以及为新的动态指配的存储器位置建立的新入口点位置。现在,然后能由云服务提供商释放原始域启动镜像以及原始域启动镜像被密码加密地绑定到的静态存储器位置,只将动态重新指配的VM镜像留在存储器中由提供商的存储器管理器软件动态定义的位置。这样,即使不同消费者的多个初始启动镜像碰巧在存储器中重叠,但它们也能被顺序加载,转变到动态存储器位置,释放该域启动镜像的存储器位置用于下一个消费者的域启动镜像,诸如此类,其中在创建每个动态镜像时,每个正在执行的域镜像都使用用于新入口点的消费者的密钥域密钥来重新计算HMAC。
备选地,当创建新密钥域(CreateKD)时,入口点值(指令指针寄存器、栈指针寄存器、控制寄存器、中断描述符表寄存器等)能由消费者用支持密钥域的服务器建立,并由云服务提供商验证。
当支持密钥域的服务器执行域启动镜像时,页表被处理器的控制寄存器(即CR3)参考,该寄存器规定用于页表结构的根的物理地址。在切换到密钥域中时,必须将控制寄存器设置为正确值。在一个实施例中,切换密钥域(SwitchKD)指令包括密钥控散列参数,诸如SHA3 HMAC。密钥控散列参数被用于确保由云服务提供商服务器的处理器在执行域启动镜像时可操作地使用镜像内的正确页表结构(并且从而,所有存储器映射都是正确的)。密钥控散列参数被用于确认在进入域启动镜像时云服务提供商的服务器处理器状态是正确的,因为处理器将对照云服务提供商服务器的处理器控制寄存器状态、指令指针、栈指针等来证实密钥控散列参数(HMAC)。
从“执行消费者的域启动镜像并验证入口点”框616,控制进行到“将消费者的域镜像的其余部分加载到存储器中”框618。支持密钥域的服务器将消费者的域镜像的其余部分加载到存储器中。消费者的域镜像的其余部分可以包括例如图25的域镜像2532的其余部分,包括(一个或多个)操作系统、(一个或多个)应用、脚本或其他代码。
从“将消费者的域镜像的其余部分加载到存储器中”框618,控制然后进行到“使用域启动镜像中包括的秘密密钥验证消费者的域镜像的附加页”框620。正在运行的已验证域镜像现在能使用来自域启动镜像的秘密密钥来验证消费者的域镜像的附加页。例如,域启动镜像可以包括用于分页、迁移、证明、通信和其他功能的秘密密钥。
从“使用域启动镜像中包括的秘密密钥验证消费者的域镜像的附加页”框620,控制进行到“执行消费者密钥域内的安全操作”框624。一旦消费者域(VM)镜像已经被恰当执行并且对应的密钥域已经被切换,域管理器就能完成加载操作系统,并向云服务提供商请求存储器管理器的附加资源(存储器页、IO资源等)。保存和恢复存储器操作(例如涉及VM控制结构、控制寄存器等)留在密钥域内,由存储器加密引擎硬件直接执行,并且不暴露给云服务提供商。因为域管理器镜像源自云服务提供商的软件,一旦被验证,正在执行的域管理器就将服从存储器管理器命令并与其他域管理器合作。此外,像正常的VMM一样,域管理器将保护服务器的硬件和资源免受消费者域的较低特权的代码(诸如操作系统、应用等)的其余部分的影响。
图7是示出根据本发明的一个实施例的消费者域镜像(例如,消费者VM镜像)的组件的图解。消费者域镜像710包括静态提供商提供的域管理器部分712和动态消费者提供的部分714。在一个实施例中,静态提供商提供的域管理器部分712对应于域管理器(VMMlet),其是实例化和管理消费者虚拟机的特权代码。静态提供商提供的域管理器部分712还可以向云提供商服务的硬件发出创建密钥域的命令,提供消费者的加密的密钥域密钥以用于加密属于新创建的密钥域的存储器位置。静态提供商提供的域管理器部分712还可以向云提供商服务的硬件发出切换到不同密钥域的命令,为控制要切换到的密钥域提供消费者的加密的密钥域密钥。然后,可以使由域管理器(VMMlet)管理的虚拟机操作在当前活动的密钥域内。域管理器(VMMlet)特权代码能由消费者测量和验证,由此使消费者能够信任域管理器(VMMlet)特权代码作为其可信计算库的一部分。
为了在云提供商服务器的存储器中建立消费者域镜像710,消费者创建在云提供商服务器的存储器中执行的加密域启动镜像。域启动镜像可以仅包括下面所需的基本代码:(1)使云服务提供商服务器硬件创建新密钥域或切换到云服务提供商服务器的存储器内的现有密钥域;以及(2)使一些基线代码在该密钥域内操作。例如,域启动镜像可以创建新虚拟机或使现有虚拟机访问由在(1)中提供的代码部分建立的密钥域的存储器位置内的数据。
域启动镜像由消费者创建,因为它将出现在云服务提供商服务器的存储器的指定存储器位置。例如,消费者可以使用存储器位置相关密码用消费者的密钥域密钥加密域启动镜像,以将域启动镜像密码加密地绑定到云服务提供商服务器的存储器的指定存储器位置。一旦加密的域启动镜像被加载到由存储器位置相关密码指定的存储器位置中,正在执行的加密域启动镜像然后能引导将附加域镜像代码(诸如动态消费者提供的部分714代码)动态加载到消费者的域镜像710中。在一个实施例中,动态消费者提供的部分714对应于消费者域镜像的较低特权的代码,诸如操作系统、应用等。
在一个实施例中,消费者的加密域启动镜像至少包括域管理器(VMMlet)特权代码。在至少一个实施例中,消费者的加密域启动镜像还包括一些消费者提供的代码。
因为域启动镜像由消费者在消费者自己的环境中使用消费者的密钥域密钥进行加密,所以正在执行的加密静态部分712能被描述为在密钥域的“外部”进行。因为只有消费者知道密钥域密钥,所以云服务提供商不能在不破坏消费者的加密域启动镜像的情况下创建代码、向消费者的加密域启动镜像添加代码或修改消费者的加密域启动镜像。
一旦包括在消费者的域启动镜像中的代码开始代表消费者在密钥域内执行,正在执行的消费者的域启动镜像代码就能接管并扩展消费者的域镜像710。扩展消费者的域镜像710包括例如向消费者的域镜像710动态添加新代码(诸如动态消费者提供的部分714)。能使用由消费者确定的协议从密钥域内向消费者的域镜像710添加新代码和/或对其进行修改(例如,消费者的域镜像710可以仅在新扩展代码段被验证之后才被扩展)。
当消费者的域镜像710从密钥域内写入存储器时,来自那些存储器写入操作的数据由存储器加密引擎进行加密,并用存储器地址进行微调。因此,从密钥域内执行的读和写入操作也是位置相关的,因为它们是根据在密钥域内执行的代码创建的。这种操作能被描述为由存储器加密引擎“在密钥域内部”进行。换句话说,在密钥域外部执行的云服务提供商软件不能修改或重新布置消费者域镜像的这个动态创建的部分。
在一个实施例中,已经动态扩展的消费者域镜像能被转换成消费者域镜像的静态版本。例如,当从消费者域镜像实例化的虚拟机的执行已经被挂起并且将要重新开始时,可能执行从动态到静态消费者域镜像的转换。在虚拟机被挂起时可能捕获动态消费域镜像的拷贝,动态消费域镜像的拷贝可能被转储清除到存储器,并且可能保存绑定到来自存储器的地址的密文。消费者可能重新计算与存储器地址关联的任何完整性检查值,并重新创建消费者域镜像以合并那些完整性检查值。当虚拟机要被重新开始时,重新创建的消费者域镜像可能被作为静态消费者域镜像重新启动。
如参考图5和6所描述的,由消费者创建的加密域启动镜像包括消费者域管理器(VMMlet)镜像,该镜像是云服务提供商提供的域管理器(VMMlet)镜像的修改版本。提供商提供的域管理器(VMMlet)镜像被修改成合并了用于云服务提供商的指定服务器的存储器位置相关的地址信息。消费者域管理器镜像被静态绑定到指定服务器和指定服务器的存储器地址,这意味着消费者域管理器镜像必须在指定服务器的指定存储器地址被安装和执行以便恰当运作。
云服务提供商执行消费者的加密域启动镜像(包括消费者的域管理器(VMMlet)镜像),这将使初始静态域管理器镜像将被安装在指定服务器的指定静态存储器地址。初始静态域管理器镜像作为消费者域管理器(VMMlet)在云服务提供商的服务器上执行。消费者域管理器(VMMlet)通过使消费者VM镜像的代码被加载到存储器中并作为消费者域(VM)执行,来代表消费者管理虚拟机。消费者域(VM)通过服务器的存储器加密引擎对服务器的存储器中的数据执行操作。用于消费者域(VM)镜像的存储器印迹随着消费者域(VM)镜像的内容动态改变而动态增长和收缩。
图8是示出根据本发明的一个实施例的数据物理地址870的图解。数据物理地址870可用于确定密钥或微调,如上面所讨论的。
如上所述,能使用数据物理地址870的未使用的物理地址比特874(也称为别名比特874)(或者备选地,通过高速缓存传递的其他元数据)来定义密钥域。例如,因为在系统中安装的物理存储器将可能比使用64比特物理存储器地址能寻址更少,所以未使用的最高有效地址比特874能用于在不同的密钥域之间进行选择。如上所述,术语“密钥域”指的是用公共密钥域密钥加密的一组存储器位置。数据物理地址870的未使用比特例如可用于确定当加密和/或解密物理存储器地址的存储器时要使用哪个密钥和/或微调。基于未使用的地址/别名比特874,能为相同的数据物理地址870选择不同的密钥。例如,加密技术XTS(基于XEX的具有密文窃取的微调码本模式)可以将未使用的地址/别名比特874用于对于相同物理存储器位置的微调,其中不同的地址别名可以导致不同的密文,即使数据是相同的。
数据物理地址的剩余比特876被用于标识数据被存储所在的存储器中的位置的物理存储器地址。虽然两个密钥域地址能是对相同的外部存储器位置的别名,但是当来自物理存储器位置的数据被读取到高速缓存中时,高速缓存以全地址解析(例如,包括全64比特物理存储器地址)独立地保有密钥域地址。
可以基于未使用的地址比特选择不同的密钥(例如,XTS可以将别名比特用于对于相同物理存储位置的微调),其中不同的地址别名可导致不同的密文,即使数据是相同的。
因为当由于未填充的存储器而存在未使用的地址比特时,未使用的地址比特874为对用于密钥域的存储器中的相同物理地址的别名,所以密钥域选择器能被设置为未使用的地址比特的值。备选地,如果要共享存储器中的物理地址中的数据(即,不限于具体密钥域),则密钥域选择器能被设置为零。
在一个实施例中,“k比特”字段872表示数据物理地址870的一个比特,在这种情况下,是数据物理地址870的最高比特。k比特能由页表或扩展页表中的域管理器(VMMlet)或虚拟机(VM)来设置,以指示由存储器存取产生的数据是否应该用对应的密钥域密钥进行加密。当k比特=0时,k比特被说成被禁用,并且由存储器存取产生的数据不由密钥域密钥进行加密(尽管有可能可使用共享密钥对数据进行加密)。当k比特=1时,k比特被说成被启用,并且存储器存取的结果用密钥域密钥加密。k比特字段872也能被用于指定是共享的并且不需要密钥域加密的存储器范围。在备选实施例中,k比特能是与高速缓存行关联的附加元数据,并且通过高速缓存而不是数据物理地址的成分来携带。
在当系统具有充分的已安装存储器使得使用数据物理地址870的所有地址比特(除了一个k比特872以外)时的情形下,当k比特为真/启用时,密钥域地址消耗总填充的存储器的物理范围(对应于密钥域的物理地址比特)。当k比特为关/禁用时,密钥域选择器比特874参考所有存储器范围,但是作为明文(或共享),使得所有填充的存储器都作为共享存储器可寻址。
图9是示出根据本发明的一个实施例的虚拟到物理存储器映射的图解。当今,许多计算机系统使用虚拟存储器系统来管理存储器并将存储器分配给在系统内运行的各种进程。虚拟存储器允许在系统上运行的每个进程就像它具有对由控制系统提供的全地址范围的控制一样操作。操作系统(OS)将用于每个进程的虚拟地址空间映射到用于系统的实际物理地址空间。从物理地址到虚拟地址的映射通常通过使用页表来实现。
本文使用的术语“地址空间”是指存储器中对应于给定过程或虚拟机(VM)的一组地址,并且“地址空间标识符(ASID)”可以是标识ASID所关联的一个或多个地址空间的任何数字、代码或其他记号。
图9表示没有别名的情况;即,系统中有充分的存储器可用,使得密钥域选择器地址比特974与页地址976和高速缓存行选择器978一起用于选择由数据行物理地址975参考的实际物理存储器位置。在此,每个单独的密钥域将位于物理存储器920的非重叠范围内。
图9示出了根据本发明的实施例的虚拟地址到物理地址映射。物理存储器920中的物理页822内的物理地址924可以使用虚拟地址900来寻址。如所示,虚拟地址900包括多个字段来索引多级分页结构960以访问物理地址924,物理地址924寻址物理存储器920内的具体物理页922。注意,多级分页结构960只是用于访问物理存储器位置的多级分页结构的一个示例。虽然参考64比特虚拟地址描述了多级分页结构960,但是不同的页表结构可以用于32比特虚拟地址、物理地址扩展(PAE)扩展模式地址或其他类型的虚拟地址。
在虚拟地址900中,偏移字段902(诸如64比特地址的比特0-11)用于寻址物理存储器920的物理页922内的物理地址924(如由指针903所示)。页表条目字段904(标题为“表”,诸如64比特地址的比特12-20)寻址页表930中的页表条目932(如由指针962c所示)。页目录条目906(标题为“目录”,诸如64比特地址的比特21-29)寻址页目录640中的页目录条目942(如由指针962b所示)。页目录指针909(标题为“PDP”,诸如64比特地址的比特30-38)寻址页目录指针表(PDPT)950中的页目录指针条目952(如由指针962a所示)。OS分页结构960的基址可以使用诸如CR3的控制寄存器中的指针961来访问。以这种方式,64比特线性地址可以用于实现多级分页9结构以访问物理地址。
图9还示出了与物理存储器920的物理页922的物理地址924对应的数据物理地址970的成分。“k比特”字段972表示数据物理地址970的一个比特,在这种情况下,是数据物理地址970的最高比特。k比特能由页表或扩展页表中的域管理器(VMMlet)或虚拟机(VM)来设置,以指示由存储器存取产生的数据是否应该用对应的密钥域密钥进行加密。当k比特=0时,k比特被说成被禁用,并且由存储器存取产生的数据不由密钥域密钥进行加密(尽管有可能可使用共享密钥对数据进行加密)。当k比特=1时,k比特被说成被启用,并且存储器存取的结果用密钥域密钥加密。k比特字段772也能被用于指定是共享的并且不需要密钥域加密的存储器范围。在备选实施例中,k比特能是与高速缓存行关联的附加元数据,并且通过高速缓存而不是数据物理地址的成分来携带。
在数据物理地址970中,“未使用的地址比特:密钥域选择器”字段974可以表示用于区分密钥域的一组未使用的地址比特。如果两个数据物理地址中的未使用的地址比特具有不同的值,则它们为存储器中的相同物理地址的别名。“页地址”字段976表示物理存储器920中的物理页922的地址。“高速缓存行选择器”字段978表示由“页地址”字段976参考的页内的高速缓存行。“页地址”字段976和“高速缓存行选择器”字段978一起构成“数据行物理地址”字段975,字段975表示物理存储器920中的实际物理位置。“高速缓存行字节”字段979包括高速缓存行中的字节数。
现在参考图10,示出了根据本发明的实施例的另一虚拟地址到物理地址映射。如图10中所示,别名的物理存储器1010中的别名的客户物理页1012内的别名的客户物理地址1014可以使用虚拟地址1000来寻址。如所示,虚拟地址1000包括多个字段来索引多级分页结构1060以访问别名的客户物理地址1014,物理地址924寻址物理存储器1020内的具体页1022。注意,多级分页结构1060只是用于访问物理存储器位置的多级分页结构的一个示例。虽然参考64比特虚拟地址描述了多级分页结构1060,但是不同的页表结构可以用于32比特虚拟地址、物理地址扩展(PAE)扩展模式地址或其他类型的虚拟地址。
别名的物理存储器1010还包括别名的客户物理页1016,页1016表示别名为相同物理存储器位置1022的别名的客户物理存储器610的第二范围。
在虚拟地址1000中,偏移字段1002(诸如64比特地址的比特0-11)用于寻址别名的物理存储器1010的别名的客户页1012内的别名的客户物理地址1014(如由指针1003所示)。页表条目字段1004(标题为“表”,诸如64比特地址的比特12-20)寻址页表1030中的页表条目1032(如由指针1062c所示)。页目录条目1006(标题为“目录”,诸如64比特地址的比特21-29)寻址页目录640中的页目录条目1042(如由指针1062b所示)。页目录指针1008(标题为“PDP”,诸如64比特地址的比特30-38)寻址页目录指针表(PDPT)1050中的页目录指针条目1052(如由指针1062a所示)。OS分页结构1060的基址可以使用诸如CR3的控制寄存器中的指针1061来访问。以这种方式,64比特线性地址可以用于实现多级分页结构以访问物理地址。
图11是示出根据本发明的一个实施例的由云服务提供商进行的用于向消费者提供域镜像的初始步骤的图解。
在图11中所示的示例中,包括硬件1110的云服务提供商服务器的存储器管理器1140为域镜像1122分配存储器1112中的空间1114,并且通知发出请求的消费者存储器位置相关地址(“修复变量”)信息。该存储器位置相关地址(“修复变量”)信息尤其可以包括存储器中页的物理地址(诸如构成空间1114的页的物理地址)、页表的物理地址、控制寄存器信息、中断描述符表寄存器信息等)。作为备选实施例,云服务提供商能创建消费者能重新验证为正确的已经修复的域镜像。确切地说,需要更改的域镜像部分是页表中的物理存储页地址,如图9中所示,页表条目832。页表条目932指向物理存储器920中的物理页922。域镜像能被视为一系列页(例如,各4K字节),其中每个页都给予物理页地址(其在存储器中的位置)。镜像验证然后包括在给定包括域镜像的页内容的情况下,检查通过页表的虚拟到物理映射是正确的。
图12是示出根据本发明的一个实施例在消费者1201和云服务提供商的存储器管理器1240之间的向消费者提供域管理器镜像(诸如图11的VMMlet镜像1122)的消息的图解。
响应于消费者对于服务的请求,云服务提供商的服务器的软件(即,存储器管理器1240)被配置为向消费者提供域管理器镜像(诸如图11的VMMlet镜像1122)。存储器管理器1240还向消费者发送用于域管理器镜像的存储器位置相关的地址信息,本文也称为修复变量信息。消费者验证域管理器镜像是否有效,或者使用第三方验证域管理器镜像是否有效。
如参考图11所述,在确定域管理器(VMMlet)镜像有效之后,消费者使用标识由云服务提供商提供的存储器位置的存储器位置相关的地址信息作为修复变量信息来修改由云服务提供商提供的已验证的域管理器镜像,以创建域启动镜像来启动域管理器(VMMlet)。备选地,域管理器镜像可以由云服务提供商“修复”,使得域管理器镜像准备在分配的存储器位置运行。
在一个实施例中,消费者还可以向域启动镜像添加消费者自己的组件,诸如用于安全通信的消费者的秘密密钥。具有用于安全通信的方法允许消费者的基本域启动镜像使用消费者的秘密密钥从消费者安全地检索消费者的域(VM)镜像的其余部分。消费者还可以在域启动镜像中包括消费者自己的操作系统、应用等。
最后,当消费者的域启动镜像包括任何消费者提供的组件时,消费者对域启动镜像进行加密。参考图13进一步描述“修复”域管理器(VMMlet)镜像和创建加密的域启动镜像。
图13是示出根据本发明的一个实施例的用于加密域启动镜像并建立密钥域的云服务环境的组件之间的消息的图解。如上所述,消费者1301修改由云服务提供商提供的已验证的域管理器镜像,以创建用于域管理器(VMMlet)的域启动镜像。然后使用存储器位置相关的“微调”密码和消费者的密钥域密钥对域启动镜像进行加密。
消费者1301还可以使用密钥域密钥计算用于加密域启动镜像的完整性检查值(ICV,例如,密钥控散列消息认证码(HMAC)值)。ICV可以被计算为位置相关值,并用于验证加密域启动镜像的关联存储器位置的内容以及定位。
消费者1301请求云服务提供商存储器管理器1340标识在云服务提供商网络中的提供密钥域管理功能性的服务器。云服务提供商存储器管理器1340(在此示例中,从具有CPU 1311的服务器)获得支持密钥域的服务器的服务器证书,并将服务器证书提供给消费者1301。消费者1301验证该服务器证书由认证所标识的服务器提供密钥域管理功能性的机构签名。
消费者1301用云服务提供商的与支持密钥域的服务器的证书对应的支持密钥域的服务器的公钥来加密消费者的密钥域密钥。消费者1301向云服务提供商存储器管理器1340发送加密的密钥域密钥、加密的启动镜像和(可选的)完整性检查值(ICV),云服务提供商存储器管理器1340向支持密钥域的服务器的CPU 1311提供创建密钥域(CreateKD)命令。在一个实施例中,云服务提供商存储器管理器1340标识要用于新密钥域的密钥域地址选择器,向支持密钥域的服务器的CPU 1311提供密钥地址域选择器。支持密钥域的服务器的CPU1311创建并初始化密钥域。初始化密钥域可以包括转储清除(由先前密钥域地址选择器标识的)任何先前密钥域的高速缓存,以及转储清除高速缓存了用于先前密钥域的地址映射的翻译后备缓冲器。作为对按创建密钥域指令的一部分来执行初始化功能的备选,支持密钥域的服务器的CPU 1311可以执行初始化密钥域(InitKD)指令来转储清除高速缓存和翻译后备缓冲器。支持密钥域的服务器的CPU 1311也可以向存储器加密引擎1315(在图13中示为具有完整性的总存储器加密引擎,被指定为TMEi 1315)提供加密的密钥域密钥和标识新密钥域的密钥域地址选择器,尽管备选实施例要使用存储器加密引擎(MEE)。
图14是示出根据本发明的一个实施例的消费者为域管理器(VMMlet)提供加密的启动镜像的图解。如上面参考图5、12和13所描述的,消费者使用密钥域密钥和由云服务提供商提供的存储器位置相关的地址信息来加密域启动镜像。在一个实施例中,消费者使用页地址微调和密钥域密钥,在存储器位置相关的XTS模式下加密域启动镜像。
在图14中,消费者1410向云服务提供商的存储器管理器1440发送修复的VMMlet1462(其是图10的提供商的原始VMMlet 1022的修改版本)作为加密域(VM)启动镜像1460的一部分。云服务提供商的存储器管理器1440将加密VM启动镜像1460的修复的VMMlet镜像1462加载到在共享存储器1412s内已经预留的先前分配的存储器空间1414(如图10的空间1014)中。因为共享存储器1412是未加密的存储器页(其中k比特被禁用),所以存储器管理器1440需要确保加密的VM启动镜像被完全加载到物理存储器1412中,并且不保持高速缓存驻留。将加密的VM启动镜像1460写入物理存储器1412能通过或者从高速缓存转储清除加密的VM启动镜像1460(例如,使用CLFLUSH指令)或者使用未高速缓存/写通/非时间性存储器存取来实现。用于写入操作的这些技术确保消费者的加密镜像数据被直接写入经过硬件1410的存储器加密引擎并进入存储器1412(并且不保持高速缓存驻留)。
图15是示出根据本发明的一个实施例的用于将消费者1501的加密域镜像加载到支持密钥域的服务器的存储器1512中的云服务环境的组件之间的消息的图解。如上面关于图11所描述的,云服务提供商的软件,诸如支持密钥域的服务器的存储器管理器1540,将消费者加密的域启动镜像加载到存储器1512的未加密存储器页(其中k比特被禁用)。云服务提供商的软件(即存储器管理器1540)也会将加密域镜像的ICV写入ICV表。ICV表能是由存储器加密引擎(TMEi)引擎1515管理和保护的存储器1512的受保护范围。不是存储器管理器1540的一部分的软件成分对该存储器地址范围的写入操作可以被存储器加密引擎(TMEi)1515拦截,存储器加密引擎(TMEi)1515同样能配置存储器1512中的ICV值。
类似地,存储器加密引擎(TMEi)1515可以防止软件从该受保护的存储器范围读取ICV值,以防止被恶意软件重放ICV值。一旦ICV值已经被建立,则只有存储器加密引擎(TMEi)1515能读取ICV值。防止软件重放ICV值防止动态域镜像内容(例如,在域启动镜像之后提供的消费者的域镜像的其余部分)的重放。静态镜像内容(例如,域启动镜像)能被重放,因为静态镜像内容的ICV值由消费者提供。
ICV本身提供数据和数据位置(地址)的完整性检查,并且ICV使用用于加密ICV正在检查的数据行的密钥域密钥或其派生进行密钥控。(例如,HMAC使用秘密密钥,Galois/计数器模式(GCM)和IPHash也如此。)
在一个实施例中,扩散的高速缓存行数据的部分拷贝用密钥域密钥进行XTS加密,以计算安全的ICV。在一个实施例中,ICV表条目用与它们用于完整性检查的存储器位置相同的密钥域密钥加密。用相同的密钥域密钥密码加密地加密ICV和ICV保护的存储器位置中的数据,确保ICV与它们保护的数据属于相同的密钥域。
用于密钥域的地址选择器也在未加密的存储器中提供(其中k比特被禁用)。当将由消费者使用消费者的密钥域密钥计算的ICV写入ICV表时,该地址还指示包括用于密钥域的ICV的ICV表中的位置。(换句话说,对于从消费者的加密域启动镜像写入存储器的每一条数据行,都有对应的完整性检查值被写入该数据行的ICV表)。
没有密钥域用于将消费者的加密域启动镜像数据写入存储器1512(因为消费者的域启动镜像数据已经被消费者加密)。换句话说,存储器管理器1540可以将消费者的加密域启动镜像写入存储器1512中的共享的、未加密的位置,而不需要任何附加的加密。(存储器管理器1540将消费者的加密镜像加载到存储器1512中,使得当用消费者的密钥开启存储器加密时(将k比特设置为1或“启用”),存储器加密引擎(TMEi)1515将在从存储器1512读取消费者的镜像时恰当地解密该镜像)。
支持密钥域的服务器的CPU 1511从存储器1512中的未加密位置获得密钥域的地址选择器,并将密钥域的地址选择器提供给存储器加密引擎(TMEi)1515。存储器加密引擎(TMEi)1515然后将加密的启动镜像写入支持密钥域的服务器的存储器1512。类似地,支持密钥域的服务器的CPU 1511获得指示包括密钥域的ICV的ICV表中的位置的地址。CPU 1511向存储器加密引擎(TMEi)1515提供包括密钥域的ICV的ICV表的位置。存储器加密引擎(TMEi)1515然后用密钥域的ICV更新存储器1512中的ICV表。存储器管理器1540或者从高速缓存1513转储清除这些值(例如,通过发出要用执行CLFLUSH指令的命令),或者使用未高速缓存/写通/非时间性存储器存取来确保ICV数据被直接写入存储器1512。
更新在支持密钥域的服务器的存储器中的密钥域的完整性检查值(ICV)是一个只写入操作,使得云服务提供商的软件(存储器管理器1540)不能读取密钥域的ICV。这种只写入操作防止动态镜像数据的重放。只有域启动镜像ICV能就地重放(消费者知道该地点,因为消费者创建了加密启动镜像和ICV)。该功能性允许提供商挂起、存储并随后重新开始VM,重新使用消费者的域启动镜像,而无需向云服务提供商的软件(甚至不向存储器管理器1540)暴露附加的ICV,诸如当存储器由在当前密钥域内执行的应用更新时动态创建的那些ICV。
图16是示出根据本发明的一个实施例的密钥域的初始化的图解。支持密钥域的服务器的存储器管理器1640能通过向域管理器(VMMlet)1622发出初始化密钥域(InitKD)命令来初始化新密钥域1650。IntKD命令使支持密钥域的服务器的CPU 1611执行IntKD指令,该指令使核停顿,转储清除旧密钥域的高速缓存,转储清除包括旧密钥域映射的所有翻译后备缓冲器和地址空间标识符(ASID),并用密钥域地址选择器的新密钥域密钥初始化支持密钥域的服务器的存储器加密引擎(TMEi)。
在一个实施例中,密钥域的初始化是由创建密钥域(CreateKD)指令执行的动作之一。下文对创建密钥域(CreateKD)指令的参考可以指这样的CreateKD指令:不仅根据服务器的公钥加密的密钥域密钥创建密钥域,而且还通过使核停顿、转储清除旧密钥域的高速缓存、转储清除包括旧密钥域映射的所有翻译后备缓冲器和地址空间标识符(ASID)以及用密钥域地址选择器的新密钥域密钥初始化支持密钥域的服务器的存储器加密引擎(TMEi)来初始化新域。
图17是根据本发明的一个实施例的在执行创建密钥域操作中支持密钥域的服务器的CPU的操作方法的流程图。在“接收具有加密的密钥域密钥的创建密钥域命令”框1710中,支持密钥域的服务器CPU接收具有输入参数KD_Id、本地密钥域标识符(密钥域地址选择器)和Encrypted_Key、加密的密钥域密钥的创建密钥域命令。控制进行到“使用服务器的私钥解密加密的密钥域密钥,并解密可选配置策略”框1720,其中使用服务器的私钥解密加密的密钥域密钥,私钥是对云服务提供商未知/未暴露的秘密密钥。可选地,也可以再次使用服务器的私钥来解密配置策略,或者备选地,可以使用服务器的私钥来解密策略数据的散列值。控制进行到“解密的密钥域密钥和策略有效”判定点1730。可以评估的策略数据的示例包括服务器预期已经安装的存储器量、服务器应该使用的加密算法、已插入的CPU数量、是否允许硬件调试等。该策略数据通过硬件与服务器的当前配置进行比较,以确保在使用消费者的密钥域密钥之前,服务器的配置按消费者的预期是有效的。如果解密的密钥域密钥和配置策略无效,则控制进行到“返回错误”框1740,其中CPU返回响应于创建密钥域命令的错误。
在“解密的密钥域密钥和策略有效”判定点1730,如果解密的密钥域密钥和配置策略有效,则控制进行到“建立新密钥域”框1750。在建立新密钥域中,支持密钥域的服务器的CPU防止其他CPU使用密钥域标识符,或者以其他方式验证其他CPU当前没有使用密钥域标识符,对于密钥域标识符转储清除高速缓存,对于密钥域标识符转储清除所有翻译后备缓冲器地址空间标识符,并且在存储器加密引擎中设置当前密钥域标识符和密钥域密钥。然后,控制进行到“为新密钥域标识符指配ASID标签并重新开始”框1760,其中为新密钥域标识符指配新的地址空间标识符(ASID)标签,并且发出创建密钥域命令的过程重新开始。更进一步,如果之前停顿,则重新启用所有处理器。
图18是示出根据本发明的一个实施例的域镜像的验证的图解。支持密钥域的服务器的存储器管理器1840的验证散列函数1846使用散列密钥域(HashKD)指令来验证密钥域1850的域镜像(例如,VMMlet 1822)是正确的。域镜像中的一些值将是用于机器特定变量/修复(诸如在页表中使用的物理地址)的值。云服务提供商能虚拟地重构这些机器特定变量的散列值(替代当前地址值)。当所得到的HashKD散列值匹配镜像的域管理器(VMMlet)提供商/静态部分的散列的预期值时,消费者和云服务提供商两者同意域启动镜像是正确的。一些其他镜像位置可包括消费者的秘密(密钥/代码/数据,例如在域镜像的OS部分中)。这些位置能被散列,但是散列值不会向云服务提供商公开存储器明文(从而还有秘密)。散列值可以具有最小粒度,诸如不小于高速缓存行或不小于存储器页(例如4KB)。
当安全VM第一次执行时,安全VM可以关闭其密钥域中的HashKD功能性,因为HashKD可以在初始化时用于通读密钥域,向云服务提供商提供域管理器(VMMlet)由消费者恰当供应的可见性。否则,可能不需要HashKD功能性。
图19是示出根据本发明的一个实施例的用于验证域镜像的云服务环境的组件之间的消息的图解。在第一消息中,云服务提供商软件(诸如支持密钥域的服务器的存储器管理器1940)请求要在其中安装了消费者的用于域管理器(VMMlet)的加密启动镜像的存储器位置上执行的散列密钥域(HashKD)功能。CPU 1911执行散列密钥域(HashKD)指令,经由高速缓存1913向存储器加密引擎(TMEi)1915提供标识要散列的密钥域的当前地址选择器。存储器加密引擎(TMEi)1915从安装加密的启动镜像的存储器位置读取加密的数据行,并且存储器加密引擎(TMEi)1915使用由地址选择器标识的密钥域的密钥来解密数据行。存储器加密引擎(TMEi)1915将解密的数据发送到高速缓存1913,用地址和密钥域地址选择器标记解密数据。支持密钥域的服务器的CPU 1911为解密数据创建散列值,将所得到的散列值存储在CPU 1911的寄存器中或存储器1912的存储器位置中,并且云提供商的软件(即,存储器管理器1940)验证散列值与初始提供给消费者的域镜像的预期散列值相匹配。
图20是根据本发明的一个实施例的在执行散列密钥域操作中支持密钥域的服务器的CPU的操作方法的流程图。在“接收散列密钥域命令”框2010,支持密钥域的服务器的CPU接收具有密钥域标识符和物理地址的输入参数的散列密钥域命令。控制进行到“密钥域标识符和地址有效”判定点2020,其中支持密钥域的服务器的CPU确定密钥域标识符和物理地址是否有效。为了进行这种确定,支持密钥域的服务器的CPU可以验证物理地址指向被填充的存储器位置,并且存在对于物理地址的页表映射和读取准许。支持密钥域的服务器的CPU也可以验证密钥域标识符具有安装在用于该密钥域标识符的存储器加密引擎(TMEi)中的对应密钥域密钥。如果密钥域标识符和物理地址无效,则控制进行到“返回错误”框2030,其中错误被返回给散列密钥域命令的发出者。如果密钥域标识符和物理地址在“密钥域标识符和地址有效”判定点2020处有效,则控制进行到“在物理地址中设置密钥域标识符,设置k比特,读取在物理地址处的存储器位置的内容”框2040。物理地址的未使用比特被设置为密钥域标识符,k比特值被设置为1,以指示将从在物理地址处的存储器位置读取加密数据,并且在物理地址处的存储器位置的内容由存储器加密引擎(TMEi)使用由密钥域标识符标识的密钥域的密钥域密钥来读取。当读取在物理地址处的存储器位置的内容时,存储器加密引擎(TMEi)使用密钥域密钥来解密内容。存储器加密引擎(TMEi)将在物理地址处的存储器位置的解密内容放入高速缓存中,并且支持密钥域的服务器的CPU通过对高速缓存中的解密内容进行散列来计算散列值、散列值,诸如SHA2/3散列值。控制进行到“返回存储器内容的散列值”框2050,其中散列值被返回给HashKD命令的发出者。HashKD指令的发出者然后能确定是否切换到已验证的密钥域。
图21是示出根据本发明的一个实施例的密钥域之间的切换的图解。到新密钥域的切换由支持密钥域的服务器的存储器管理器2140发起,以从一个密钥域切换到另一个密钥域。例如,可以响应于由支持密钥域的服务器接收到的对服务的新消费者请求,发起到新密钥域的切换。先前已经向消费者提供了域管理器镜像,存储器管理器2140获得修复版本的域管理器镜像(例如,VMMlet 2122),其包括消费者经由未加密(k比特禁用)存储器2112提供的存储器位置相关的地址信息,诸如入口点地址2123。存储器管理器2140向硬件2110的CPU发出切换密钥域(SwitchKD)命令,这使域管理器镜像(VMMlet)2122在支持密钥域的服务器的存储器中的入口点地址2123开始执行,由此建立密钥域2150。
在一个实施例中,消费者在进入新密钥域之前计算预期处理器状态的HMAC值。预期处理器状态的HMAC值包括:指令指针的预期值;栈指针;控制寄存器(诸如控制寄存器0、3和4);以及特殊描述符表寄存器,诸如GDTR、LDTR、可与包括域管理器镜像的加密域启动镜像的正确执行有关的任何MSR以及IDTR。例如,该HMAC值将确保在密钥域内恰当执行(即,中断被关闭),或者否则,不进入新密钥域,并且密钥域之间不发生切换。
新密钥域内部的域管理器(VMMlet)的执行可以使用切换密钥域(SwitchKD)指令来完成。该CPU指令使用密钥域密钥来确定HMAC值,以在进入时证实处理器的当前处理器状态。例如,散列函数可以根据与计算预期处理器状态的HMAC值所使用的信息相同信息(包括指令指针、栈指针、控制寄存器和特殊描述符表寄存器)来计算。如果预期处理器状态的计算的HMAC值与在进入时CPU的当前处理器状态的散列值不匹配,则切换密钥域指令将失败。密钥域选择器将保持不变,并且域管理器(VMMlet)的执行不会切换到新密钥域。
在另一个实施例中,到新密钥域中的控制流程传输终止在结束分支密钥域(ENDBRANCHKD)指令上。将控制流改变到两者另一个密钥域的新密钥域的唯一方式是在要执行的下一指令是结束分支密钥域指令所在的入口点进入新密钥域。对于改变密钥域的这种要求向消费者确保控制流程传输通过预期的入口点。
在正确执行切换密钥域(SwitchKD)指令后,域管理器(VMMlet)现在在密钥域内被测量并正确运行。所有其他功能性都由软件提供,以加载消费者的域(VM)镜像的其余部分,以执行安全存储、通信、分页(例如,为了页出,消费者的域(VM)镜像需要通过域管理器(VMMlet))、迁移、输入/输出(I/O)等。
图22是示出根据本发明的一个实施例的在密钥域内执行时云服务环境的组件之间的消息的图解。在一个实施例中,消费者在进入新密钥域之前,计算对于预期处理器状态的散列消息认证码(HMAC)值。预期处理器状态的HMAC值包括:指令指针的预期值;栈指针;控制寄存器(诸如控制寄存器0、3和4);以及特殊描述符表寄存器,诸如GDTR、LDTR、任何相关MSR以及IDTR。例如,该HMAC值将确保处理器状态使得域管理器(VMMlet)的恰当执行发生在密钥域内(即,中断被关闭)。
在下一次通信中,云服务提供商软件(诸如支持密钥域的服务器上的存储器管理器2240)发出切换KD命令,以使支持密钥域的服务器的CPU 2211切换密钥域。CPU 2211设置密钥域选择器,并检查预期的处理器状态HMAC值是否匹配针对当前CPU状态计算的HMAC值。如果HMAC值匹配,则切换密钥域,转储清除指令流水线,为密钥域标识符改变翻译后备缓冲器(TLB)地址空间标识符(ASID)标签,并且在新密钥域中执行域管理器(VMMlet)。当在k比特被启用的新密钥域中执行时,使用设置为密钥域选择器值的地址来访问密钥域的存储器位置。当在新密钥域中执行时,存储器加密引擎(TMEi)2215能从存储器2212读取和写入密钥域加密数据,并且检查和/或更新加密数据的完整性检查值(ICV)。如果ICV值与加密数据一致,则加密数据被解密到用于地址和密钥域选择器的高速缓存2213中。
图23是根据本发明的一个实施例的在执行切换密钥域操作中支持密钥域的服务器的CPU的操作方法的流程图。在“接收具有密钥域标识符、CPU状态和预期HMAC值的输入参数的切换密钥域命令”框2310,由CPU接收切换密钥域命令。切换密钥域命令的输入参数包括要切换到的密钥域标识符、要切换到新密钥域的预期CPU状态以及处理器状态的预期HMAC值。控制进行到“预期HMAC值匹配CPU状态”判定点2320。在判定点2320,确定当前的CPU状态和/或作为对SwitchKD指令的参数规定的所建议的CPU状态是否匹配预期的HMAC值。一些CPU状态信息(诸如指令指针)是由SwitchKD指令设置为参数的状态。如果HMAC还与指令指针参数匹配,则SwitchKD将相应地在CPU中设置指令指针寄存器,在新密钥域中重新开始,在该指令位置开始执行。备选地,所有CPU状态值都可以是SwitchKD的参数,意味着,如果HMAC匹配该建议的输入状态,则SwitchKD将把所有寄存器状态都填充到输入参数。在判定点2320,如果处理器状态的预期HMAC值与针对当前CPU状态计算的HMAC值或被规定为对SwitchKD指令的参数的所建议的CPU状态不匹配,则在“返回错误(不切换密钥域)”框2330中,不切换密钥域,并将错误返回给切换密钥域命令的发出者。
在“预期HMAC值与CPU状态匹配”判定点2320,如果处理器状态的预期HMAC值与针对当前CPU状态计算的HMAC值匹配,则控制进行到“切换到新密钥域”框2340。在“切换到新密钥域”框2340,转储清除CPU流水线,并且或者将用于翻译后备缓冲器(TLB)的地址空间标识符(ASID)标签设置为新密钥域标识符,或者转储清除TLB。当前密钥域被设置为密钥域标识符,并且CPU寄存器被设置为匹配CPU状态输入参数值。控制然后进行到“进行分支以在由CPU状态的指令指针指示的位置执行指令”框2350。在框2350,支持密钥域的服务器的CPU进行分支以在如由作为对SwitchKD指令的输入参数所提供的CPU状态的指令指针指示的位置执行指令。在完成SwitchKD指令的执行后,域管理器(VMMlet)将在新密钥域内操作。
图24是根据本发明的一个实施例在响应于页未命中而执行分页结构的遍历中的支持密钥域的服务器的CPU的操作方法的流程图。控制开始于“在页未命中时,处理器遍历分页结构”框2410。一旦遇到页未命中(其中在翻译后备缓冲器内没有找到CPU尝试读取或写入的页),支持密钥域的服务器的CPU开始遍历分页结构(诸如参考图9描述的OS分页结构860或参考图9描述的OS分页结构960)。例如,支持密钥域的服务器的CPU可以开始读取用于指向分页结构的基址的指针的控制寄存器3(CR3)。然后控制进行到“分页结构错误配置”判定点2420,其中CPU确定分页结构是否如预期配置的。例如,CPU确定对操作系统的页故障是否已经发生,或者对域管理器(VMMlet)的VMExit是否已经发生。这些故障仍然与引起故障的域(VM)镜像在相同密钥域内。如果分页结构没有按预期配置,则控制进行到“硬故障,CPU报告错误”框2430,其中CPU引起硬故障,并向过程报告遇到页未命中的错误。
在“分页结构错误配置”判定点2420,如果分页结构恰当配置,则控制进行到“确定指配给当前密钥域的ASID标签”框2440。指配给当前密钥域的地址空间标识符(ASID)标签被确定,并且控制进行到“K比特被设置”判定点2450。如果ASID标签的K比特没有被设置,则控制进行到“使用地址原样使TLB填充有K比特关”框2460。在框2460,支持密钥域的服务器的CPU使翻译后备缓冲器(TLB)按原样填充有物理地址。保持物理地址原样能够实现直接从未加密的存储器读取数据,而无需使用密钥域密钥。
在“K比特被设置”判定点2450,如果ASID标签的k比特被设置,则控制进行到“得到当前密钥域并用密钥域标识符替换较高的物理地址比特”框2470。当前密钥域是根据由切换密钥域(SwitchKD)指令设置的内部处理器状态确定的,该指令将当前密钥域设置为新密钥域的密钥域标识符,如参考图23所描述的。物理地址中的较高比特用当前密钥域的密钥域标识符/选择器替换,其中k比特(在一个实施例中其是最高比特)被启用。然后,控制进行到“利用地址和ASID标签设置翻译后备缓冲器”框2480,其中利用当前密钥域的物理地址(包括密钥域选择器和启用的k比特,或k比特=1)和ASID标签设置翻译后备缓冲器。
图25是示出根据本发明的一个实施例的域管理器(VMMlet)的生长的图解。在消费者的域启动镜像已经被加载并且域管理器(VMMlet)正在执行之后,例如可能需要生长域管理器(VMMlet),以包括附加存储器来加载消费者的VM镜像的剩余部分。一旦具有消费者秘密密钥2523的安全域管理器(VMMlet)2522在密钥域2550中运行,消费者就能将消费者的VM镜像2532的其余部分安全地传递到域管理器(VMMlet)2522。消费者的VM镜像2532的其余部分可以包括例如(一个或多个)操作系统、(一个或多个)应用、脚本或其他代码。
消费者和域管理器(VMMlet)2522之间的安全通信信道能通过到消费者网络的传输层安全性/安全套接字层(TLS/SSL)连接,使用向云服务提供商给出的原始加密的域启动镜像的消费者的秘密密钥2523启用。换句话说,如果原始加密的域启动镜像具有在域管理器(VMMlet)之上的带有OpenSSL栈的操作系统以及消费者的秘密密钥,则该OpenSSL软件栈能被执行以从消费者的网络检索消费者的VM镜像2532的其余部分。
运行在域管理器(VMMlet)2522之上的操作系统可以支持全卷存储加密,使得操作系统能安全地在来自k比特关(共享)通道的加密的页、文件等中进行分页,其中存储器管理器2540充当中介。一旦原始加密的域启动镜像被加载到存储器中并正在执行,域管理器(VMMlet)2522可以允许诸如操作系统之类的其他软件使用期望的任何安全方法在来自消费者的附加信息中进行分页。
为消费者的VM镜像2532的其余部分添加存储器页可使域管理器(VMMlet)2522需要附加的存储器分配。在一个实施例中,域管理器(VMMlet)2522可以通过向存储器管理器2540请求更多存储器而生长。存储器管理器2540能向域管理器(VMMlet)2522分配附加存储器,如由“分配存储器”动作2501所示出的。该附加存储器使消费者能够执行只写入操作,诸如非时间性移动(MOVNT)操作(用于写入存储器而不首先读取存储器的非高速缓存的写入组合操作),以从消费者或消费者授权的第三方写入在域/VM工作载荷镜像中的附加页。例如,消费者能经由到域(VMMlet)2522的安全连接来提供VM镜像2532的其余部分,包括(一个或多个)操作系统、(一个或多个)应用、脚本或其他代码。
图26是示出根据本发明的一个实施例的用于生长域管理器(VMMlet)的云服务环境的组件之间的消息的图解。消费者2601将VM镜像的其余部分发送给云服务提供商软件,诸如支持密钥域的服务器的存储器管理器2640。在一个实施例中,VM镜像的其余部分经由传输层安全性(TLS)/安全套接字层(SSL)通信会话从消费者传递到正在运行的域管理器(VMMlet),使用消费者的秘密密钥(诸如图25的密钥2523)从消费者传递到正在运行的域镜像的TLS栈。
如上参考图25所描述的,消费者的秘密密钥被包括为向云服务提供商给出的消费者的加密域启动镜像的一部分。在由图26表示的时间点,消费者的VM安全地运行且自给自足,运行消费者在VMMlet顶上提供的任何软件(类似于在VMM顶上运行的操作系统)。数据分组从消费者2601经由存储器管理器2640通过共享的、未加密的存储器(即,k比特被禁用的存储器2612)发送到正在运行的域管理器(VMMlet)。这些数据分组可以包括软件加密的数据流,在运行域管理器(VMMlet)顶上的消费者的VM内运行的消费者的软件能解密和验证该数据流。
云提供商软件可以代表消费者通过共享的、未加密的存储器(即,具有k比特被禁用的存储器2612)经由CPU 2611和存储器加密引擎(TMEi)2615发送VM镜像其余部分的数据。VM镜像其余部分的数据被显示为从CPU 2611通过存储器加密引擎(TMEi)2615流向存储器2612,如由两个“写数据”动作所图示的。当VM镜像其余部分的数据被提供给云服务提供商时,云服务提供商软件可以使CPU 2611执行切换密钥域(SwitchKD)指令,以切换到用于消费者的运行域管理器(VMMlet)的密钥域。备选地,CPU 2611可以向正运行在另一线程或另一CPU上的消费者的运行域管理器(VMMlet)提供控制。这些由CPU 2611执行的动作由图26的“SwitchKD(或在另一CPU/线程上运行的KD)”示出。
正在运行的域管理器(VMMlet)将数据(包括VM镜像的其余部分)从未加密存储器拷贝到加密存储器,加密存储器是消费VM的密钥域的一部分。如由“读取数据”动作所示,存储器加密引擎(TMEi)2615从未加密存储器读取数据。在“用共享!k KD选择器读取地址的数据”动作中,在CPU 2611上运行的域管理器(VMMlet)从由密钥域地址选择器标识的未加密存储器位置读取数据,该密钥域地址选择器被提供有未加密存储器中的数据。
正在运行的域管理器(VMMlet)可以处理数据、用软件解密数据、执行完整性检查等等。例如,正在运行的域管理器(VMMlet)可以请求存储器加密引擎(TMEi)2615用在未加密存储器中提供的密钥域地址选择器将加密数据写入存储器地址。如图26的“k比特开存储器存取将地址设置成KD选择器;在第一次写入新存储器地址时使用MOVNT指令”动作,CPU2611将加密数据和关联的完整性检查值写入存储器2612中的密钥域标识符/选择器中规定的地址(其中k比特被启用,指示在将数据写入存储器2612之前用密钥域密钥对数据进行加密)。
将数据写入存储器地址建立了存储器位置的“所有者”。当在密钥域之间切换时,存储器位置的所有者从一个密钥域的所有者变为另一个密钥域的所有者。当密钥域改变时,用于加密存储在属于密钥域的存储器位置中的数据的对应密钥域密钥相应地改变。
当从属于密钥域的存储器位置读取数据时,使用“当前”密钥域密钥。在切换密钥域指令之后,必须建立新的“当前”密钥域密钥。如上所述,“当前”密钥域密钥是在将数据写入存储器位置时建立的,由此建立了存储器位置的新所有者。当从存储器位置读取数据时,读取操作将使用“当前”密钥域密钥。如果在新密钥域的所有者已经写入存储器位置之前从存储器位置读取数据,则读取操作将使用当前密钥域密钥,该密钥域密钥尚未被改变成反映密钥域的新所有者。读取操作将不成功,因为存储器位置的当前完整性检查值将属于先前的密钥域。完整性检查将失败,因为读取器不能读取属于另一密钥域的数据。
为了缓解此问题,当建立新密钥域时,新密钥域的所有者将新数据写入密钥域内的存储器位置,而无需首先尝试读取存储器位置。在写入操作时,将为新密钥域计算新完整性检查值(ICV);从而,新密钥域的所有者现在将拥有该存储器内容(并且能够读和写该存储器位置,而没有完整性故障)。
在一个实施例中,MOVNT指令用于对新存储器地址执行第一写入操作。存储器加密引擎(TMEi)将加密数据和ICV写入存储器,由此完成将数据从未加密存储器拷贝到加密存储器的过程,加密存储器是消费者VM的密钥域的一部分。
MOVENT指令是写组合操作,这意味着MOVENT指令不要求读操作提取存储器内容,因为不需要当前内容。MOVNT指令可以绕过高速缓存,并且直接写入存储器。作为使用MOVNT指令的备选,正在运行的域管理器(VMMlet)可以使用未高速缓存的写入操作将数据从未加密存储器拷贝到加密存储器,加密存储器是消费者VM的密钥域的一部分。通过写入存储器地址而无需首先从该存储器地址读取数据,创建新完整性检查值(ICV)(经由对于所有权写入)。
一旦安装了全消费者域(VM)镜像,域(VM)就将作为普通VM运作,使用秘密密钥与消费者、消费者授权的第三方以及其他授权的VM建立安全通信。安全存储是通过用消费者秘密密钥加密文件系统中的全卷和/或文件来实现的。安全通信是经由IPSec/TLS和消费者秘密密钥实现的。证明是使用消费者的秘密密钥(PKI等)实现的。云服务提供商的基础设施中的服务器之间的域(VM)的安全迁移能通过使用消费者的秘密密钥来加密VM镜像页(并计算那些VM镜像页的完整性检查值)来实现。VM镜像页然后能与消费者的域管理器(VMMlet)页一起发送到云服务提供商的基础设施中的其他服务器,以安全地将消费者的VM镜像从一个服务器迁移到另一服务器。
图27是示出用于正在运行的域管理器(VMMlet)向云服务提供商的存储器管理器软件请求更多存储器页的在云服务提供商环境的组件之间的消息的图解。在这种环境下,多个CPU同时共享存储器2712。云提供商软件(例如,存储器管理器)2740在支持密钥域的服务器的第一CPU1上运行。虚拟机2730在支持密钥域的服务器的第二CPU2上运行。VM 2730请求附加存储器,如在VM 2730和存储器管理器2740之间的“要求更多存储器”动作中所示。(实际上,作为运行在VMMlet顶上的VM 2730的一部分的操作系统可能要求更多存储器。操作系统可以使VMExit退出VM 2730,由此调用主机VMMlet,主机VMMlet然后向云提供商的存储器管理器2740请求更多存储器)。运行在CPU2上的域管理器(VMMlet)代表消费者的VM2730经由共享的未加密存储器(其中k比特被禁用)发送写请求,如在VM 2730和存储器加密引擎(TMEi)2715之间的“!k请求消息”动作所示。存储器加密引擎(TMEi) 2715将存储器请求传递到共享存储器2712,而不处理该请求,因为k比特被禁用。CPU1上的存储器管理器2740读取对于由CPU2上的VM 2730写入的附加存储器的请求,如从存储器2712到CPU1上的存储器管理器2740的虚线所指示的。运行在CPU2(即VM 2730)上的域镜像等待响应,诸如中断(IPI),如在VM 2730的“等待响应,例如中断(IPI)”动作中所示的。当由云服务提供商的存储器管理器软件2740提供空闲存储器位置时,CPU1上的存储器管理器2740将响应数据写入共享存储器2712(其中k比特被禁用),如从CPU1上的存储器管理器2740到共享存储器2712的虚线所示出的。CPU2上的VM 2730从共享存储器2712读取响应数据(其中k比特被禁用),如共享存储器2712和存储器加密引擎(TMEi)2715之间的“读取响应数据”动作中所示。存储器加密引擎(TMEi)2715将响应数据传递到CPU2上的VM 2730,如由从TMEi 2715到CPU2上的VM 2730的“!k响应消息”动作所示。VM 2730更新VM的密钥域中的页表,如由VM 2730和存储器加密引擎(TMEi)2715之间的“更新VM的密钥域中的页表”动作所示。存储器加密引擎(TMEi) 2715将加密数据和完整性检查值写入存储器2712(其中k比特被启用),如由存储器加密引擎(TMEi)2715和共享存储器2712之间的“写入加密数据和ICV”动作所示。托管VM2730的域管理器(VMMlet)使CPU2执行MOVENT指令,以将数据写入VM的密钥域中的新分配的存储器,如由VM 2730和存储器加密引擎(TMEi)2715之间的“MOVENT到VM的密钥域中的新分配的存储器”动作所指示的。作为响应,存储器加密引擎(TMEi)2715将加密数据和ICV写入新分配的加密存储器。
图28是示出了示出在单个CPU上调度VM的同时请求附加存储器页的云服务环境的组件之间的消息的图解。云服务提供商的存储器管理器2840判定关于哪个VM当前正在执行的调度方案。在云服务提供商的CPU/核上运行的域管理器(VMMlets)接收计时器事件,并基于存储器管理器命令队列(k比特禁用的共享存储器区域)将时间让给其他VM。切换密钥域(SwitchKD)操作用于切换到另一域管理器(VMMlet)。
参考图28,VM 2830在“准备到存储器管理器的消息”动作中准备向存储器管理器2840请求附加存储器的消息,并在VM 2830与存储器加密引擎(TMEi)2815之间的“高速缓存中的!k请求”动作中,将消息放入高速缓存2813中以被读取到未加密(k比特被禁用)存储器2812中。存储器加密引擎(TMEi)2815在存储器加密引擎(TMEi)2815和存储器2812之间的“写请求数据”动作中将请求数据写入存储器2812(其中k比特被禁用)。在“保存处理器状态”动作中VM 2830保存处理器状态,并将在高速缓存2813中的保存的VM处理器状态置于“保存状态处于VM的KD k比特开”。VM的保存状态处理器状态被写入VM的密钥域加密(k比特被启用)存储器。在存储器加密引擎(TMEi)2815和存储器2812之间的“写入加密数据和ICV”动作中,存储器加密引擎(TMEi) 2815将保存的VM处理器状态作为加密数据与ICV一起写入VM的密钥域加密(k比特被启用)存储器2812。保存VM的处理器状态使域管理器(VMMlet)能够在以后使用保存的处理器状态重新开始执行VM。在一个实施例中,在处理器状态已经被保存之后,域管理器(VMMlet)使寄存器清零,使得在切换到另一密钥域之后VM的秘密不可用。
为了使存储器管理器2840能够为VM 2830分配附加存储器,密钥域从VM 2830密钥域切换到存储器管理器2840密钥域。在VM 2830和存储器管理器2840之间的“SwitchKD到提供商”动作中,VM 2830向云服务提供商发送切换密钥域指令。在“恢复处理器状态”动作中,存储器管理器2840开始恢复与存储器管理器2840密钥域关联的处理器状态。在存储器2812和存储器加密引擎(TMEi)2815之间的“读取加密数据和ICV”动作中,从存储器2812读取存储器管理器2830密钥域的加密数据和完整性检查值。存储器加密引擎(TMEi)2815解密当前密钥域的数据,并将解密的数据发送到高速缓存(假设对应的ICV值是正确的)。在存储器加密引擎(TMEi)2815和存储器管理器2840之间的“从存储器管理器的KD恢复状态”动作中,存储器管理器2840从存储器管理器2840密钥域恢复处理器状态。
在存储器2812和存储器加密引擎(TMEi)2815之间的“读取请求数据”动作中,存储器加密引擎(TMEi)2815将附加存储器请求数据从存储器2812的k比特禁用的命令队列读取到高速缓存2813中。在存储器加密引擎(TMEi)2815和存储器管理器2840之间的“高速缓存中的!k数据请求”动作中,存储器管理器2840读取保存在高速缓存2813中的附加存储器数据请求。
在存储器管理器2840和存储器加密引擎(TMEi)2815之间的“!k提供空闲存储器位置”动作中,存储器管理器2840经由未加密(k比特被禁用)存储器命令队列发送消息,以向存储器加密引擎(TMEi)2815提供空闲存储器位置。在存储器加密引擎(TMEi)2815和存储器2812之间的“写响应数据”动作中,存储器加密引擎(TMEi)2815向存储器2812写入响应数据,包括为VM 2830分配的空闲存储器位置的地址。响应于来自VM 2830的请求已经完成了附加存储器的分配,在“将状态保存在存储器管理器的KD中”动作中,存储器管理引擎2840将当前处理器状态保存在控制器的密钥域中。在存储器加密引擎(TMEi)2815和存储器2812之间的“写入加密数据和ICV”动作中,存储器加密引擎(TMEi)2815将加密数据(保存的处理器状态)和完整性检查值写入存储器2812中的存储器管理器2840密钥域。存储器管理器2840然后执行切换密钥域(SwitchKD)操作,以切换回VM的密钥域。
响应于切换到VM 2830密钥域,在“恢复处理器状态”动作中,VM 2830开始恢复VM2830保存的处理器状态。在存储器加密引擎(TMEi)2815和存储器2812之间的“读取加密数据和ICV”动作中,存储器加密引擎(TMEi)2815读取VM 2830密钥域的加密数据(包括处理器状态)和完整性检查值。在存储器加密引擎(TMEi)2815和VM 2830之间的“从VM的KD恢复状态”动作中,VM 2830从其VM 2830密钥域恢复保存的处理器状态。
在切换到存储器管理器2840密钥域之前VM 2830先前正在执行的时候,VM 2830已经请求了附加存储器。在存储器加密引擎(TMEi)2815和存储器2812之间的“读取响应数据”动作中,存储器加密引擎(TMEi)2815读取对于附加存储器的请求的响应数据,并在高速缓存2813中为VM 2830提供响应数据。在VM 2830和存储器加密引擎(TMEi)2815之间的“更新VM的KD中的页表”动作中,VM 2830更新VM 2830密钥域中的页表以反映新分配的存储器位置。在存储器加密引擎(TMEi)2815和存储器2812之间的“写入加密数据和ICV”动作中,存储器加密引擎(TMEi)2815将加密数据(更新的页表)和完整性检查值写入存储器2812。
为了建立新分配的存储器的所有权,VM 2830然后在VM 2830和存储器加密引擎(TMEi)2815之间的“MOVNT到在VM的KD中的新分配的存储器”动作中,对VM的密钥域中的新分配的存储器执行MOVNT操作(或者在写入存储器位置之前不读取存储器位置的内容的其他写入操作)。MOVNT操作将VM 2830建立为新分配的存储器的所有者。在存储器加密引擎(TMEi)2815和存储器2812之间的“写入加密数据和ICV”动作中,存储器加密引擎(TMEi)2815将加密数据和ICV写入存储器2812。作为该写入操作的一部分,存储器加密引擎(TMEi)2815为VM 2830密钥域中新分配的存储器计算新完整性检查值。新完整性检查值将确保VM2830密钥域密钥能用于解密新分配的存储器的内容。
图29是示出正在运行的域管理器(VMMlet)2922的图解。在运行域管理器(VMMlet)2922之前,支持密钥域的服务器的存储器管理器2940在为域管理器(VMMlet)执行域启动镜像之前验证处理器状态的散列。一旦处理器状态得到验证,就执行域启动镜像以运行域管理器(VMMlet)。
存储器管理器2940经由未加密(k比特被禁用)存储器2912向正在运行的域管理器(VMMlet)2922发出命令。类似地,支持密钥域的服务器的硬件2910经由未加密的(k比特被禁用)存储器2912向正在运行的域管理器(VMMlet)发出直接存储器存取(DMA)请求。响应于接收到这些命令或DMA请求,域管理器(VMMlet)2922与支持密钥域的服务器硬件2910交互,以设置和/或存取寄存器值,处理中断,执行VM进入和退出等等。
存储器管理器2940判定关于VM当前正在执行的调度方案;在图29中,当前正在执行的VM是VM2 2930,并且关联的密钥域是密钥域2950。切换密钥域(SwitchKD)操作用于切换到另一域(VM)。
一旦加载了VM镜像的动态部分(即,未包括在域启动镜像中的VM镜像的剩余部分),就能在VM内本地创建动态入口点。例如,响应于切换密钥域(SwitchKD)指令,可以基于密钥域密钥来计算新的密钥控散列消息认证码(HMAC)。
中断和VM退出指令被输送到在支持密钥域的服务器的CPU/核上运行的当前域管理器(VMMlet)。正在运行的域管理器(VMMlet)判定中断/异步事件是针对当前正在运行的域管理器(VMMlet)还是针对另一个域管理器(VMMlet)。如果中断/异步事件是针对另一个域管理器(VMMlet),则域管理器(VMMlet)将调度正确的域管理器(VMMlet)或通知存储器管理器。
关于资源管理,分页是通过软件实现的,而不是经由硬件分页机制。域管理器(VMMlet)用软件加密页(包括完整性元数据)(例如,使用Intel® AES新指令(AESNI)加速AES加密),更新页表和扩展页表,并通过k比特被禁用的存储器发送加密页以便存储或迁移。
关于输入/输出操作,可以使用直接指配或虚拟化装置模型。用于DMA和存储器映射的输入/输出(MMIO)的k比特指定的未加密存储器区域是非加密的。虽然直接指配DMA是可能的,但MMIO/PCIe装置空间必须是k比特被禁用的(未加密的)存储器。处理器必须确保密钥域事务只对动态随机存取存储器(DRAM)被允许而不对装置空间被允许。
图30是示出由域管理器(VMMlet)管理的密钥域内的多个虚拟机以及由另一种类型的域管理器(OSlet)管理的第二密钥域的图解。
因为域管理器(VMMlet)是全功能的VMM,所以域管理器(VMMlet)能在其密钥域内托管多个客户操作系统(OS)。VM2 3033和VM3 3034被显示为在域管理器(VMMlet)3022的密钥域KD1 30502内运行,并且过程3031被显示为在OSlet 3060的密钥域KD2 30501内运行。如同在域管理器(VMMlet)之间切换的情况一样,存储器管理器3040发出切换密钥域(SwitchKD)命令以在域类型之间切换;即,发出SwitchKD命令以在域管理器(VMMlet)和域管理器(OSlet)之间切换。
消费者想要被确保公用云服务提供商不能访问他们的工作载荷,即便由政府颁发的授权令这样做。用由本文描述的安全公用云环境提供的特征,云服务提供商、现场管理员或技术人员无法访问安全VM数据,即使VMM本身被重写(因为消费者能测量他们的整个TCB)。
已经关于管理虚拟机的域管理器(VMMlet)描述了上述实施例,不过本发明不限于此。相同模型能支持容器;尽管没有对应的VMM,但OS内核是等效的。每个密钥域中的每个容器镜像都将具有由提供商测量的协作内核组件(本文称为域管理器(OSlet))。域管理器(OSlet)以类似于域管理器(VMMlet)的方式响应于存储器管理器命令、中断、调度、资源管理等。
图31A和31B图示了根据物理存储器地址作为存储器加密引擎的硬件功能来确定完整性行位置和插槽。未使用的地址比特通过高速缓存传递,但它们未被使用,因为它们对应于未填充的物理存储器。未使用的比特被用于编码地址中的密钥域(KD)选择器信息。能基于用于数据行和对应完整性检查值的存储器位置相关加密的未使用的地址比特来选择不同的密钥。
根据实施例,物理存储器地址3100可用于确定如上所述的密钥或微调,和/或用于与数据行3116 (3116a-3116h)关联的完整性值的完整性检查行3112和插槽3114(3114a-3114h)。物理存储器地址3100可以包括多个地址比特,这些地址比特可以被分区成多个区段。数据物理存储器地址3100的区段可以被标识为数据行字节3102、包括完整性行插槽选择器3110和完整性行索引3108(例如,到完整性检查行3112的偏移)的数据行物理地址3104(数据的存储器中的实际位置)以及对相同物理存储器的别名的未使用地址比特3106(例如,别名比特)。未使用的地址比特3106通过高速缓存,但是由于未填充的外部存储器而未使用,可以用于编码数据物理存储器地址3100中的别名信息。相应地,能基于未使用的地址比特选择不同的密钥。例如,加密技术XTS(具有密文窃取的基于XEX的(基于“异或”加密“异或”的)微调码本模式)可以将别名比特用于对于相同物理存储器位置的微调,其中不同的地址别名可导致不同的密文,即使数据是相同的。
存储器选择器(例如,图4的存储器加密引擎415)可以读取数据行物理地址3104,并标识对应的完整性行地址3112和完整性行插槽(例如,3114a-3114h),以用于证实数据行字节3102和/或存储在完整性行插槽(例如,3114a-3114h)中的完整性检查值的有效性。别名比特3106中的值可以作为用于解密数据行字节的密文存储在完整性行插槽(例如,3114a-3114h)中,和/或与从由别名比特3106标识的完整性行插槽(例如,3114a-3114h)读取的值进行比较,以证实数据行字节。
值得注意的是,并非存储器的所有比特都是可寻址的,因为例如,部署在计算平台中的实际存储器可能远远小于为其供应最大量地址空间的最大量的可能存储器。例如,并非所有64比特(64比特系统)的物理存储器都是可寻址的(例如,用足够的DIMM占用)。从而,否则物理存储器地址3100的未使用的比特可以用于确定例如当加密和/或解密用于具体数据行的存储器时要使用哪个密钥和/或微调。
用于物理存储器地址3100的密钥域和/或微调域可以是任何大小。在图示的示例中,值选择器可以使用未使用的地址比特3106来导出用于相同物理存储器地址3100的密钥和/或微调。例如,软件值选择器可以从由未使用的地址比特3106的四个最高有效比特定义的16个密钥(和/或16个微调)当中进行选择。在一个示例中,将第一比特设置为0(0000)或为1(0001)可用于导出密钥微调(例如,如果将比特设置为1,则用1加密,如果设置为0,则用0加密)或微调(例如,如果将比特设置为1,则在地址中使用1进行微调,如果设置为0,则在地址中使用0进行微调,等等)。从而,可以使用不同的密钥和/或微调。在这种情况下,当用错误的密钥和/或错误的微调解密数据时,第一完整性检查将失败,和/或当相对不恰当解密的数据检查完整性值时,第二完整性检查将失败。
此外,完整性检查行和/或插槽可以从物理存储器地址3100中确定和选择。例如,完整性行选择器可以从物理存储器地址3100的完整性行索引区段3108中选择完整性检查行,和/或插槽选择器可以从物理存储器地址3100的完整性行插槽选择器区段3110中选择插槽。
如图31B中所示,数据行可以被存储在数据存储器地址空间中,并且完整性值(例如,ICV、拷贝等)可以被存储在完整性数据地址空间中。例如,数据存储器地址空间中的数据行从地址0开始,并且完整性数据存储器地址空间中的完整性检查行从远离地址1000处的数据行的1000个高速缓存行开始。
虽然在实施例中可以实施各种策略以在每一个数据行和每一个完整性检查行(和/或其每一个插槽)之间进行映射,但是使用数据行地址可以是确定和选择适当完整性检查行和适当插槽的有效方法。例如,可能不需要查找表来确定用于完整性值的适当完整性检查行和/或插槽。在这点上,由每一个数据行3116a-3116h的中间比特定义的值可以映射到完整性检查行3112(由从具有地址0-7的数据行3116a-3116h到完整性检查行3112的箭头所指示的),并且由每一个数据行3116a-3116h的最低有效比特定义的值可以映射到要适应每一个数据行3116a-3116h的具体完整性值的适当插槽3114a-3114h(由箭头的位置所指示的)。
一般而言,选择适当的完整性检查行和适当的插槽可以基于诸如(D-Dstart)/8+Istart的函数,其中从要访问的数据行的地址D中减去数据存储器区域的开始的地址Dstart,其中Istart是完整性值存储器地址空间的开始,并且其中按8的整数除法可以通过将地址偏移右移3(或者选择顶部比特减去前3比特)来进行。此外,一旦提取了适当的完整性检查行,对于适当插槽的偏移就可以由(D-Dstart)%8确定,其中模运算可以选择地址的最低有效3比特。应当理解,虽然可以使用3比特来从完整性检查行上的8个插槽中进行选择,但是完整性检查行可以在大小方面不同(例如,一半大小),使得可以使用4比特来从每个完整性检查行的16个插槽中进行选择,以节省完整性值开销,等等。
中间比特和/或最低有效比特也可以用作对存储在特权/安全存储器位置中的指配的位置阵列的索引,以标识映射。还可以有隐含的映射,其中可以为具有地址0的数据行3116a自动选择第一完整性检查行3112的第一插槽3114a,为具有地址1的数据行3116b自动选择第一完整性检查行3112的第二插槽3114b,等等。可以使用任何功能、映射和/或指配,使得具有地址0-7的数据行3116a- 3116h可以被映射到完整性数据地址空间中的任何地方,可以被映射到完整性检查行3112中的任何地方,等等。
实现了安全公用云环境,除了存储器加密引擎之外,没有附加性能开销。在一个实施例中,存储器加密引擎被提供为如在美国专利No.8,819,455“Parallelized CounterTree Walk for Low Overhead Memory Replay Protection”中所描述的存储器加密引擎(MEE)。在另一个实施例中,提供了具有完整性的存储器加密引擎,如在美国专利9,213,653“Memory Integrity”中所描述的。在具有完整性的总存储器加密(TMEi)引擎的安全公用云环境的一个实现中,TMEi引擎仅以3%的开销操作。最后,只有最少的硬件改变用来确保安全公用云环境,利用存储器加密引擎(诸如TMEi引擎)并将大部分复杂性推给软件(特别是VMM)。这些特征允许VMM的简单验证,以及对于支持安全公用云环境功能性的硬件的快速上市时间。
图32是示出根据本发明的一个实施例的系统的图解。如所看到的,系统3200可以是智能电话或其它无线通信器或者任何其它IoT装置。基带处理器3205被配置成执行有关要从系统传送或由系统接收的通信信号的各种信号处理。基带处理器3205又耦合到应用处理器3210,应用处理器3210可以是执行OS的系统的主CPU和其它系统软件,还有用户应用,诸如许多众所周知的社交媒体和多媒体应用。应用处理器3210可进一步配置成执行对于装置的各种其它计算操作。
应用处理器3210又能耦合到用户界面/显示器3220,例如触摸屏显示器。此外,应用处理器3210可以耦合到存储器系统,包括非易失性存储器(即闪存3230)和系统存储器(即DRAM 3235)。在一些实施例中,闪存3230可以包括安全部分3232,在其中可以存储和操作密钥、其他秘密和其他敏感信息。这些存储装置中的一个或多个可以存储用于提供本文描述的安全公用云的信息。如进一步看到的,应用处理器3210还耦合到捕获装置3245,诸如能记录视频和/或静态图像的一个或多个图像捕获装置。
仍参考图32,通用集成电路卡(UICC)3240包括订户身份模块,在一些实施例中,订户身份模块包括存储安全身份信息的安全存储装置3242。系统3200可以进一步包括安全性处理器3250,其可以实现可信执行环境(TEE),并且其可以耦合到应用处理器3210。更进一步,应用处理器3210可以实现安全操作模式(诸如针对给定指令集架构的Intel®软件防护扩展(SGX))以及用于托管可信执行环境(TEE)的电路。安全性处理器3250和/或应用处理器3210可以被配置成参与支持提供如本文所述的安全公用云的操作。包括一个或多个多轴加速度计的多个传感器3225可以耦合到应用处理器3210,以能够实现各种各样的感测信息的输入,诸如运动和其他环境信息。此外,一个或多个认证装置3295可以用于接收例如用于认证操作的用户生物测定输入。
如进一步所图示的,提供近场通信(NFC)无接触接口3260,其在NFC近场中经由NFC天线3265通信。虽然在图4中示出了单独的天线,但要理解,在一些实现中,可以提供一个天线或一组不同的天线以能够实现各种类型的无线功能性。功率管理集成电路(PMIC)3215耦合到应用处理器3210以执行平台级功率管理。为此,PMIC 3215可以向应用处理器3210发出功率管理请求以按期望进入某些低功率状态。更进一步,基于平台约束,PMIC 3215也可以控制系统3200的其它组件的功率级。
为了能够实现诸如在一个或多个IoT网络中的传送和接收通信,可以在基带处理器3205与天线3290之间耦合各种电路。确切地说,可以存在射频(RF)收发器3270和无线局域网(WLAN)收发器3275。一般而言,RF收发器3270可以用于根据给定无线通信协议(诸如例如按照码分多址(CDMA)、全球移动通信系统(GSM)、长期演进(LTE)或其它协议的3G或4G通信协议)接收和传送无线数据和呼叫。此外,可以存在GPS传感器3280,其中位置信息被提供给安全性处理器3250,其可以用于某些安全性操作中。还可以提供其它无线通信,诸如无线电信号(例如AM/FM)和其它信号的接收或传送。此外,经由WLAN收发器3275,还能实现诸如根据Bluetooth™或IEEE 802.11标准的本地无线通信。
现在参考图33,示出了根据本发明的另一实施例的系统的框图。如图32中所示,多处理器系统3300能被实现为点对点互连系统,诸如支持密钥域的服务器系统。系统3300包括经由点对点互连3350耦合的第一处理器3370和第二处理器3380。如图5中所示,处理器3370和3380中的每个都可以是多核处理器(诸如SoC),包括第一和第二处理器核(即,处理器核3374a和3374b以及处理器核3384a和3384b),尽管在处理器中可以存在潜在的许多更多核。此外,处理器3370和3380各可包括安全引擎3375和3385,以执行本文所描述的安全公用云操作。
仍参考图33,第一处理器3370进一步包括存储器管理器中枢(MCH)3372以及点对点(P-P)接口3376和3378。类似地,第二处理器3380包括MCH 3382以及P-P接口3386和3388。如图33中所示,MCH 的3372和3382将处理器耦合到相应存储器,即存储器3332和存储器3334,它们可以是本地附连到相应处理器的主存储器(例如DRAM)的部分。第一处理器3370和第二处理器3380可以分别经由P-P互连3352和3354耦合到芯片集3390。如图33z2所示,芯片集3390包括P-P接口3394和3398。
更进一步,芯片集3390包括接口3392以通过P-P互连3339将芯片集3390与高性能图形引擎3338耦合。芯片集3390又可以经由接口3396耦合到第一总线3316。如图33中所示,各种输入/输出(I/O)装置3314可以与将第一总线3316耦合到第二总线3320的总线桥3318一起耦合到第一总线3316。各种装置可以耦合到第二总线3320,例如包括键盘/鼠标3322、通信装置3326和数据存储单元3328,诸如非易失性存储装置或其它大容量存储装置。如所看到的,数据存储单元3328可以包括代码3330,在一个实施例中,包括用于执行本文描述的安全公用云操作的代码。如进一步看到的,数据存储单元3328还包括可信存储装置3329,以存储要保护的敏感信息。另外,音频I/O 3324可以耦合到第二总线3320。
实施例可以被用在其中IoT装置可包括可穿戴装置或其他小形状因子IoT装置(诸如致动器和/或传感器)的环境中。现在参考图34,示出了根据另一实施例的模块3400的框图。在一个具体实现中,模块3400可以是Intel® Curie™模块,其包括适配在单个小模块内的多个组件。模块3400可以被配置成参与本文描述的安全公用云操作。如所示,模块3400包括核心3410(当然,在其他实施例中,可以存在多于一个的核)。这种核可以是相对低复杂性的有序核,诸如基于Intel Architecture® Quark™设计。在一些实施例中,核3410可以实现可信执行环境。核3410耦合到包括传感器中枢3420的各种组件,传感器中枢3420可以被配置成与多个传感器3480(诸如一个或多个生物测定、运动环境或其他传感器)交互。存在电力输送电路3430连同非易失性存储装置3440。在一实施例中,该电路可以包括可再充电电池和再充电电路,其在一个实施例中可以无线接收充电电力。可以存在一个或多个输入/输出(I/O)接口3450,诸如与USB/SPI/I2C/GPIO协议中的一个或多个可兼容的一个或多个接口。此外,存在无线收发器3490,其可以是Bluetooth™低能或其他短程无线收发器,以实现如本文所述的无线通信。要理解到,在不同的实现中,IoT模块能采取许多其他形式,这些形式与典型的通用CPU或GPU相比,具有小形状因子、低功耗要求、受限的指令集、相对慢的计算吞吐量或以上任何一项。
如上面参考图1-34所描述的,消费者可以向云服务提供商提供加密域镜像。在图1-34的讨论中,消费者的加密域镜像包括将作为消费者的工作载荷执行的代码和关联的数据。上面在消费者虚拟机的上下文中描述了消费者的工作载荷和关联的数据,并且由消费者提供的代码的一部分包括用于管理消费者的虚拟机的VMM的代码的一部分。VMM代码的这部分在上面被描述为消费者域管理器镜像或“VMMlet”。
在图1-34的讨论中,域管理器(VMMlet)是具有创建、退出和重新开始VM的执行的能力的特权代码。这些特权可以被称为“vmxroot”功能性,并且包括执行诸如虚拟机控制结构(VMCS)保存/恢复、通用寄存器(GPR)保存/恢复和/或VMexit/VMresume的命令的能力。更进一步,域管理器(VMMlet)控制关键资源,诸如中断描述符表(IDT)、高级可编程中断控制器(APIC)指令和诸如页表和扩展页表(EPT)等分页数据结构。因为在图1-34中描述的域管理器镜像具有根特权(VMMlet充当VMM),所以主机VMM可能访问所有存储器(用其密钥)。对主机VMM访问消费者的工作载荷和数据没有施加任何限制。
与相对于图1-34描述的公开形成对比,本公开没有向消费者的镜像提供根特权。相反,消费者的镜像作为客户VM运行,客户VM只能访问在扩展页表(EPT)中映射和授予准许的存储器。
此应用的以下部分描述了减少加密的消费者域镜像以排除域管理器(VMMlet)并移除对于云服务提供商信任消费者提供的代码的需要的技术。加密的消费者域镜像可以仅包括对消费者的虚拟机特定的加密的消费者域控制结构。正常将由主机VMM提供的控制结构现在也被包括在由消费者或消费者信任的中介提供给云服务提供商的加密消费者域镜像中。
通过提供设置消费者的VM处理器状态的控制结构,消费者保持对消费者工作载荷的控制,而不依赖主机虚拟机监视器来保护消费者的工作载荷和数据。更进一步,在主机VMM没有访问权并且主机VMM不拥有加密密钥的加密存储器内提供控制结构进一步保护消费者的工作载荷和数据免于受损主机VMM的影响。
在其中代理可以直接访问客户VM的控制和/或存储器映射结构的一个实施例中,实现了用于云环境的相互保护的软件策略。代理或代理保护的客户VM能在给定时间运行,但二者不能同时运行。在启动或重新开始代理在云环境中运行之前,主机VMM通过验证代理的控制结构(VMCS和EPT,使用VMRead和/或HashKD指令)来保护自己。软件策略实现了几个主机自保护规则,诸如不允许VMCS能编辑自己,不允许VMCS能编辑它自己的EPT,不允许EPT中的重叠,并且仅当另一个客户VM离线(不执行)时才允许代理修改另一个客户VM的VMCS。
代理通过验证主机对修改另一个客户的VMCS或EPT的请求来保护另一个客户VM。代理通过为客户保持单独的VMCS并为每个硬件线程保持VMCS状态来保护自己。代理还检查EPT,以确保客户EPT不允许访问代理,并且当数据页应该被加密(k比特开)时,客户EPT不通过规定非加密(k比特关)存储器而泄漏数据。此外,代理将验证客户物理地址(GPA)到物理地址存储器映射、准许比特(R/W/X)、存储器类型、分页层级和其他控制结构信息是正确的。
更进一步,主机VMM和代理能维护已验证的控制结构的单独拷贝。通过维护已验证的控制结构的单独拷贝,主机VMM和代理能比较控制结构的内容,以确保它们是相同的(例如,使用散列密钥域(HashKD)指令来比较散列值)。
图35示出了云服务提供商服务器环境3500,包括由虚拟机监视器(VMM)层3520的VMM 3522控制的硬件3510。VMM层3520使用诸如VM控制结构(VMCS)3524和扩展页表(EPT)3526的数据结构来控制虚拟机(VM)的执行。VMCS是存储器中的数据结构,其对于每个客户VM的每个逻辑处理器存在一次,而客户VM由主机VMM管理。在多处理器系统中,同时执行客户VM的每个处理器都可以具有独特的VMCS。随着不同VM之间的执行上下文的每次改变,针对当前VM恢复VMCS,定义VM的虚拟处理器的状态。扩展页表(EPT)用于将存储器地址从客户已知的客户物理地址(GPA)映射到用于寻址物理存储器的物理地址(PA)。
虚拟机3530T是虚拟机的典型实施的示例,其由VMM 3522使用VMCS 3524和EPT3526进行管理,这两者都在VMM 3522的单独控制下。虚拟机3530T在本文中被称为“信任的”虚拟机,因为虽然VM 3530T由VMM 3522管理并在其控制下,但对于VM 3530T不存在验证VMM3522未受损的机制。因此,虚拟机3530T必须信任VMM 3522的动作不会损害消费者的工作载荷或数据或泄露消费者秘密。此外,用于VMM 3522的代码被认为是消费者VM的可信代码库(TCB)的一部分。
与由VMM 3522使用的VMCS 3524形成对比,虚拟机VM1 35301、VM2 35303和VM335304以及代理虚拟机35302和35305中的每一个都包括受保护的存储器区域和本文称为“控制结构”的相应数据结构。VM1 35301、VM2 35303和VM3 35304中的每一个都包括受保护的存储器区域(密钥域),包括各自的控制结构VMCS/EPT 35401、VMCS/EPT 35403和VMCS/EPT35404。类似地,代理虚拟机35302和35305在它们的受保护的存储器区域内包括相应的控制结构VMCS/EPT 35402和VMCS/EPT 35405。虽然这些控制结构VMCS/EPT 35401-5被显示为VMCS与EPT的组合,但是控制结构可以包括用于VMCS的与EPT的独立数据结构。控制结构还可以包括其他扩展控制结构,诸如虚拟化异常信息页、用于VMFunction的扩展页表指针(EPTP)列表、模型特定的寄存器(MSR)比特图、输入/输出(I/O)比特图、MSR加载和存储页,或者对VMCS的任何将来控制结构扩展。
处理器将用于当前正在执行的客户VM的密钥域标识符/地址选择器附加到在VMCS中规定的这些地址的最上面部分。
当VMM 3522管理每一个不信任和代理虚拟机35301-5的实例化时,消费者或他们信任的中介提供控制结构35401-5,以用于控制消费者的虚拟机的执行,并且具体地说,以定义每个VM的虚拟处理器的状态。
虚拟机VM1 35301、VM2 35303和VM3 35304以及代理虚拟机35302和35305在称为密钥域(诸如KD1 35501和KD2 35502)的存储器3512的密码加密保护区域内执行。密钥域密钥用于加密和解密每个密钥域中的数据。
每个不信任的客户虚拟机,诸如不信任的VM1 35301,连同关联的控制结构VMCS/EPT 35401,都被托管在密钥域内部。这种托管方案密码加密地保护不信任的客户虚拟机和关联的控制结构免于受损的虚拟机监视器篡改。更进一步,将用于每个虚拟机的控制结构放置在与关联的虚拟机相同的密钥域中使每个虚拟机能够验证由虚拟机监视器关于控制结构采取的动作。
密钥域提供了受保护的环境,在此环境中,消费者虚拟机能在消费者确信消费者的工作载荷和数据受到保护的情况下操作。类似地,管理消费者虚拟机的虚拟机监视器能确保没有消费者虚拟机已经损坏了云服务提供商的服务器平台硬件,或者在平台硬件上运行的软件或固件。
消费者虚拟机,诸如不信任的VM1 35301,能验证由不可信的云服务提供商的虚拟机监视器3522相对于控制结构35401请求的动作。云服务提供商的虚拟机监视器3522保持对平台的控制,管理消费者的虚拟机(诸如不信任的VM1 35301、不信任的VM2 35303和不信任的VM3 35304)的执行,并且能验证消费者的虚拟机尚未破坏虚拟机控制结构。
密钥域KD1 35501和KD2 35502各还包括代理客户虚拟机,分别为具有其自己的控制结构35402的代理35302和具有其自己的控制结构35405的代理35305。因为虚拟机监视器3522不能读取在密钥域内加密的数据,所以虚拟机监视器3522使用代理客户虚拟机35302和35305来代表相应密钥域KD1 35501或KD2 35502内的VMM 3522起作用。具体地说,虚拟机监视器3522使用代理客户虚拟机来操纵受保护的虚拟机的控制结构。例如,虚拟机监视器3522可以使用代理35305来操纵密钥域KD2 35502内的不信任的VM3 35304的控制结构。虚拟机监视器3522可以在将执行切换到虚拟机、暂停执行之后重新开始执行虚拟机等过程中使用消费者的代理来操纵虚拟机的控制结构。
密钥域(诸如KD1或KD2)密码加密地将用于每个消费者的虚拟机彼此分开,以及与云服务提供商的虚拟机监视器分开。类似地,由不信任的消费虚拟机采取的动作能由云服务提供商的虚拟机监视器验证。这种相互验证使云服务提供商能够提供消费者能信任的公用云环境,作为消费者虚拟机工作载荷和数据的保护,同时使云服务提供商能够确认消费者虚拟机的活动没有破坏公用云环境。
在一个实施例中,主机VMM/代理关系是在系统初始化期间建立的。可信代理代码、数据、扩展页表和初始VMCS被加载到存储器中并进行测量。在一个实施例中,可信代理代码、扩展页表和VMCS的测量是在用于Intel®的可信执行技术(TXT)的启动序列期间执行的。TXT还可以测量其他状态,诸如系统传输监视器的状态,以防止基于系统管理模式(SMM)的访问;也可以采取BIOS和VMM测量。最后,代理与CPU建立秘密值,该秘密值被存储在隐藏寄存器中,并且用于标识有效的代理授权的VMCS。一旦测量的代理被加载到存储器的受保护区域(密钥域)中,VMM就能被加载到密钥域外部,并且不受保护的(信任的)客户VM就能正常运行。
备选地,当受保护的存储器区域是以别名命名的存储器加密区域时,诸如由Intel®的软件防护扩展(SGX)提供的安全飞地可以将已经加密的存储器镜像加载到存储器中。当安全飞地知道存储器加密密钥域密钥时,安全飞地能在运行时间加载和证明VM镜像。加密的存储器镜像可包括VMCS、EPT和代码。
类似地,知道存储器加密密钥并使用本文描述的创建密钥域(CreateKD)指令的消费者能加密消费者自己的镜像,该镜像能由云服务提供商的软件加载到对密钥域的别名的明文存储器中。消费者镜像包括用密钥域密钥加密的代码镜像、VMCS、和EPT,使得由云服务提供商无法访问它。云服务提供商的主机VMM然后可以(经由VMPTRLD指令)在密钥域中加载消费者的VMCS。存储器加密引擎将在存储器读取(VMRead)时从消费者的加密镜像中解密VMCS结构。主机VMM能验证消费者VMCS的内容,并且然后主机VMM能调用VMLaunch,这将启用密钥域密钥,并通过存储器加密引擎拉取消费者镜像的剩余部分,在它执行时将消费者的镜像解密到高速缓存中。VMLaunch或VMResume指令将启用规定的密钥域密钥(从而恰当地解密存储器内容)。
在其中使用范围寄存器保护客户VM的受保护的存储器区域的实施例中,在受保护的存储器区域内运行代理具有不同的行为。只有客户VM的VMLaunch(和/或VMResume)能放弃范围寄存器保护,以允许客户VM在有效的控制结构(VMCS)驻留在密钥域内时执行。当客户VM退出(经由VMExit)时,在将控制返回给主机VMM之前,范围寄存器保护将被重新启用。从主机VMM直接向受保护的VMCS的写入操作(VMWrite)或者受限制或者被拒绝。作为优化,一些实施例可以允许对VMCS的那些区域的不会损害客户VM的安全性的受限的写入操作(VMWrite),例如,将来自主机VMM的VMWrite排他地限制到VMCS的主机状态区域。
为受保护的客户VM编辑VMCS需要来自代理的合作。清零操作(VMClear)会将高速缓存的VMCS返回到客户VM的存储器的受保护区域(密钥域)中。然后,主机VMM能经由VMLaunch(使用代理的VMCS)调用客户VM。代理能在受保护的存储器区域(密钥域)内对VMCS执行编辑,并且还验证主机状态(例如,使用VMCS影子VMRead/VMWrite或编辑存储器中的VMCS结构)。
当代理已经完成对VMCS的编辑时,代理能返回(经由VMCall或VMExit)到主机VMM。在这一点,主机VMM能再次加载VMCS指针(VMPTRLD),并使用VMRead来验证VMCS的主机状态没有被代理恶意篡改(即,验证主机VMM的VMCS是正确的/处于预期状态)。同时,VMCS的客户状态区的读取操作(VMRead)可能被拒绝,因为VMCS在密钥域内,并且客户VM状态将对主机VMM隐藏。如果VMCS有效,则主机VMM然后可以VMLaunch代理编辑的VMCS并重新开始客户VM。
散列密钥域(HashKD)是由主机VMM用来“通读”保护受保护的存储器区域同时维护机密性的机制的指令。在由范围寄存器保护的实施例中,保护客户VM的存储器区域的处理器范围寄存器在源自HashKD指令时不会阻止存储器读取。在作为密钥域保护的实施例中,存储器被加密,但是处理器将允许HashKD指令访问存储器并解密它(为了生成存储器内容的SHA2/3散列的目的)。散列密钥域(HashKD)指令能用于向VMM确保客户形成的结构(诸如新EPT)匹配主机VMM的预期,并将不允许客户访问主机或其他客户。散列未揭示存储器内容/秘密(未知值),但是如果散列值与主机已经知道/预期的结构匹配,则主机VMM能被确保由客户代理正确配置了存储器,并用参考已证实的EPT或任何其他控制结构的对应VMCS启动客户VM。
使用这些技术,代理能为受保护的存储器区域(密钥域)内的多个客户VM创建附加的VMCS和附加的EPT结构,将消费者镜像加载到那些客户VM中,等等。主机VMM然后可以在使用散列密钥域(HashKD)指令证实它们的EPT和/或其他控制结构之后,使用这些VMCS启动客户VM。每一个客户VMCS可以包括在代理和CPU之间共享的秘密值(并存储在隐藏的寄存器中,该寄存器在创建密钥域(执行创建密钥域(CreateKD)指令)时配置有秘密值)。当执行VMPTRLD指令时,该秘密值被证实;只有在代理和CPU之间共享的秘密被发现时,VMCS才会被认为是有效的。用这种方式,受保护的客户VM不能与主机VMM勾结以创建其自己的VMCS。恶意VMM也不能将数据发送到受保护的VM(例如,经由I/O或通信信道),该VM碰巧被格式化为VMCS,并且由此暗中破坏了客户的安全性。能向VMCS添加附加字段,以允许代理控制主机VMM是否能重新开始客户VM。在能由主机VMM重新启动VMCS之前,重新开始操作(VMResume)能受到客户VM的限制,要求代理首先运行并重置VMCS字段。
退出(VMExit)流程能被修改为首先保存(例如,执行XSAVE指令)所有处理器寄存器状态,或者客户中断处理程序/“垫片”能由代理插入,以确保所有处理器寄存器状态都被保存到受保护的存储器,并在将控制返回给主机VMM之前被清理。对于不受限制的客户VM,在将控制返回给主机VMM(经由VMCall)之前,垫片能拦截所有中断,并保存和清理客户寄存器状态。在一个实施例中,Intel®的虚拟异常(#VE)还能用于拦截所有EPT违规,并将那些重定向回客户垫片,其中处理器状态可以被保存到加密的存储器区,并在经由VMCall将控制传输到VMM之前清零。这种技术防止客户VM的寄存器状态暴露给主机。
最后,还能建立多个寄存器范围和/或多个密钥域,允许多个不信任的客户VM彼此隔离。当经由VMPTRLD指令加载控制结构(VMCS)时,VMCS的位置确定在VMLaunch之后哪个范围或密钥域是可访问的。每个密钥域然后负责其自己的安全性,具有其自己的VMCS、EPT和代码/数据。通过在启动由VMCS控制的客户VM之前验证VMCS,并验证关联的EPT和其他控制结构(使用HashKD)被正确配置为限制客户VM访问主机VMM和其他客户VM,确保了主机VMM保护。
受范围寄存器保护的存储器只可以是回到主机存储器的别名(例如,别名使用高阶未使用的地址比特)。由存储器加密引擎使用该别名比特(或多个比特,上面称为“(一个或多个)k比特”)来确定存储器是在写入时用密钥加密,还是在读取时解密。用这种方式,主机VMM及其客户VM共享相同的物理存储器,但是受保护的客户VM内容被保护免于主机VMM访问,因为客户VM内容在存储器中由存储器加密引擎使用客户VM的密钥域密钥加密。通过主机别名访问存储器(例如,其中高阶物理地址比特未设置),禁用存储器加密引擎,留下加密的内容加密。相反,如果加密的存储器被设置有高阶地址比特的客户VM访问,则存储器内容首先被存储器加密引擎使用秘密密钥解密,在高速缓存中留下明文,其中地址的高阶比特对应于密钥域标识符/地址选择器。同时,受保护的客户VM能通过加密别名或明文别名访问存储器,允许客户VM通过访问主机存储器区域(由主机VMM经由HashKD验证的客户VM的EPT所控制)与主机VMM和其他客户VM通信。备选地,已知的共享密钥域(或主机VMM的密钥域)能用于主机VMM和客户VM之间的通信。
本文公开的技术能够使消费者的工作载荷和秘密被保护,而不暴露用于加密消费者的镜像、VMCS、EPT、代码和数据的消费者的密钥域密钥。密钥域标识符/地址选择器不暴露给主机VMM,密钥域标识符也不出现在控制结构(诸如扩展页表或虚拟机控制结构)的物理地址中。当VMM进入受保护的VM时,使用密钥域标识符/地址选择器,其中VMM在经由VM指针加载(VMPTRLD)指令加载VMCS时建立VM的密钥标识符。如果VMCS恰当地解密(未被破坏或无效和/或VMCS内部的秘密值正确),则硬件正使用正确的密钥域密钥(由密钥域标识符/地址选择器标识),并且密钥域标识符/地址选择器与当前密钥域相关联。
使用这些技术,可以在存储器中加密不受限数量的消费者密钥域。在存储器加密引擎中,为可用的密钥域标识符/地址选择器插槽重新编程密钥。例如,当VM能被挂起,使得它不在任何核上执行时,能转储清除用于该VM的高速缓存缓存内容。然后,能由VMM调用创建密钥域(CreateKD)指令,以为挂起的VM的密钥域标识符/地址选择器建立不同的密钥。这样,挂起的VM能被调度。
为了总结本文使用的技术,在受保护的存储器区域(密钥域)内的客户虚拟机(或代理)的初始启动或重新开始使硬件(例如,页未命中处理程序)将用于分配给客户虚拟机(或代理)的每个存储器位置的相应物理地址的未使用比特设置到密钥域标识符/地址选择器。密钥域标识符/地址选择器标识受保护的存储器区域(密钥域),其中用于客户虚拟机(或代理)的数据由密钥域密钥加密。物理地址的未使用比特被设置到密钥域标识符/地址选择器,除了其中客户虚拟机(或代理)的扩展页表(EPT)指定要关闭加密的情况外。
当客户虚拟机(或代理)最初要启动或重新开始时,密钥域标识符/地址选择器由在VM指针加载(VMPTRLD)指令中提供的地址的未使用比特规定,该指令加载用于要启动或重新开始的客户虚拟机(或代理)的控制结构(VMCS)。响应于VMPTRLD函数调用,CPU硬件通过在物理地址中设置密钥域标识符/地址选择器来读取密钥域内部的VMCS。如果VMCS无效或被破坏,则主机VMM将拒绝用于加载VMCS的请求的VMPTRLD函数调用。如果VMCS有效,则VMCS将被写入高速缓存,供要启动的代理或客户VM使用,客户地址空间标识符将被转储清除,并且客户状态将被清零,使得新VMCS能为新启动的VM或代理配置地址空间和客户状态。
退出客户VM(或代理)使硬件(例如页未命中处理程序)停止使用地址中的密钥域标识符/地址选择器,或者切换回主机VMM的密钥域。
代理被加载和测量(例如,由Intel®的可信执行技术(TXT)、软件防护扩展(SGX)或可管理性引擎),或者被消费者简单地包括为已经加密的存储器中镜像,用于管理消费者的VM。代理是使用正确的物理存储器地址作为微调对密钥域进行XTS加密,作为客户VM运行,并管理用于代理保护的客户VM的控制结构(VMCS和EPT)。消费者能信任代理提供测量并证明主机VMM的有效性,安全地交换私钥,将消费者的加密域镜像加载到密钥域中,并维护消费者的工作载荷和数据的隐私。
在一个实施例中,客户虚拟机(诸如代理)能使用垫片(诸如中断描述符表挂钩)来拦截中断。填充程序可以是客户操作系统中的驱动程序。客户VM能创建其自己的垫片(拦截中断/异常的驱动程序或代码),或者代理能代表客户VM创建垫片。代理也能有其自己的垫片(处理中断/异常等的驱动程序或代码)。垫片作为不受限制的客户运行,处理中断和虚拟化异常,使用VMCall指令使VM退出,使用虚拟化异常处理程序拦截扩展页表违规,使用VMFunc函数切换到其他扩展页表,并确保在经由VMCall指令进行传输回主机VMM之前,保存和清理可能保有机密数据的通用寄存器和XMM状态。根据上下文,垫片可以选择性地向主机暴露一些客户状态。例如,如果虚拟装置驱动程序用描述由虚拟装置要用于DMA的I/O存储器位置的寄存器值访问装置空间,则该寄存器数据能被暴露给主机VMM(而不是保存和清零)。
这些特征使“盲”的主机VMM/监管程序能够保持对平台的控制。例如,主机VMM能拒绝启动没有有效或可验证的控制结构(VMCS/EPT)的客户虚拟机。更进一步,主机VMM能将“VM抢占”计时器设置成抢占客户虚拟机的执行,并将控制返回给主机VMM。
图36示出了虚拟机监视器(主机VMM)访问用于在受保护的密钥域内运行的客户虚拟机的虚拟机控制结构的数据流。因为主机VMM 3622不能访问代理36302所在的受保护存储器(密钥域KD1 35501),所以主机VMM 3622请求代理VM 36302代表其与用于不信任的VM136301的控制结构36401交互。
在动作“VMRead”36.1中,允许主机VMM 3622读取控制结构VMCS/EPT 36401,即使VMM 3622不拥有解密的密钥域密钥,无需请求代理VM 36302代表其读取控制结构VMCS/EPT36401。处理器微代码可以允许将要执行的操作读取到高速缓存的VMCS中,使得主机VMM能在进入之前验证VMCS。读取操作不暴露有关客户VM的机密信息(因为GPR寄存器状态被保存在其他地方,主机VMM无法访问)。读取操作(VMRead)允许主机VMM验证代理按照主机VMM的请求正确地编辑VMCS。读取操作(VMRead)的备选是使用散列密钥域(HashKD)指令来验证(通过匹配散列值)存储器中的VMCS与主机VMM预期的匹配。无论主机VMM是否使用代理读取控制结构,主机VMM都被允许验证但不修改VMCS/EPT。
在动作“VMWrite”36.2中,不允许VMM 3622将数据直接写入VMCS/EPT 36401。相反,在动作“请求VMWrite”36.3中,VMM 3622向代理36302发送VMWrite请求,以写入控制结构VMCS/EPT 36401。在动作“请求EPT编辑”36.4中,VMM 3622请求代理36302编辑VMCS/EPT36401内的EPT。在“VMWrite”动作36.5中,代理36302执行在VMCS/EPT 36401内的EPT的请求的编辑。在一些实施例中,主机VMM可以允许受限的写入操作(VMWrite),例如,通过CPU将主机VMM写入操作限制到对客户VM的行为没有影响的VMCS的那些字段。例如,CPU可以排他地允许主机VMM写入VMCS的主机状态区域。影响客户安全性的任何写入操作都需要代理执行。
图37示出了代表虚拟机监视器行动的代理编辑用于在受保护的密钥域内运行的客户虚拟机的虚拟机控制结构的过程。对于每个框示出了两种类型的阴影;线填充图案用于示出在主机VMM控制下的动作,而点填充图案示出控制已被传到在受保护的密钥域内执行的客户VM。
在“VMLaunch VM”框3710,该过程从主机VMM启动客户虚拟机开始。在一个实施例中,为了启动客户虚拟机,VMM首先发出执行VM指针加载(VMPTRLD)指令的命令,该指令为客户VM提供指向消费者提供的控制结构(诸如VMCS)的指针,由此设置当前VMCS和密钥域标识符/地址选择器。作为执行VM指针加载指令的结果,CPU对VMCS进行高速缓存。如果VMCS无效或被破坏,则主机VMM将拒绝用于加载VMCS的请求的VMPTRLD函数调用。如果控制结构/VMCS在受保护的存储器区域(密钥域)内,则密钥域标识符/地址选择器由硬件附加到属于正在启动的客户VM的每个物理地址。一旦当前VMCS被建立,VMM就发出执行VMLaunch或VMResume指令(它们在此也被称为VMEntry或VMEntry指令)的命令。
在进入客户VM后,密钥域能被说成“开启”,类似于前面描述的切换密钥域(SwitchKD)指令。如在“VMLaunch”框3710中从线填充图案到点填充图案的转变所示的,当客户VM被启动时,控制从主机VMM转变到在密钥域内的客户VM。将VMCS写入高速缓存,并设置客户地址空间标识符,或否则使客户TLB清零。然后,客户VM执行,直到客户VM完成其工作载荷。
在“(时间流逝)VMExit”框3720,客户VM完成执行,并且控制返回到主机VMM。如在“(时间流逝)VMExit”框3720中由从点填充图案到线填充图案的转变所示,当客户VM完成执行时,控制从密钥域内的客户VM转变回主机VMM。VMExit通常是由客户VM执行的操作(诸如访问无效、受保护或页出的存储器区域)或由外部事件(诸如客户VM未处理的中断或抢占计时器到期)引起的异步事件。备选地,客户VM可以发出执行导致一种类型VMExit的VMCall指令的命令。当客户VM退出时,密钥域标识符/地址选择器被重置为主机VMM的密钥域,或者客户VM的受保护的存储器范围寄存器被重新启用,并且控制被返回给主机VMM。
在退出客户VM后,并且在将控制返回给“根”/主机VMM之前,微代码重新编程硬件(诸如页未命中处理程序),以在所有物理地址上设置主机VMM或共享密钥域(除非其中指示符(诸如上述的k比特)被设置成关闭加密)。当将控制返回给主机VMM时,不应再使用客户的密钥域密钥,也不应使用客户VM的密钥域标识符/地址选择器。使用主机VMM的密钥,或者关闭加密(k比特关)。实际上,CPU切换出客户VM的密钥域(类似于隐式的切换密钥域)到云服务提供商(主机VMM的)密钥域。因为主机VMM“根”在正在退出的客户VM下运行,控制返回到主机VMM,将密钥域切换回主机VMM的密钥域或共享未加密存储器(例如,共享比特指示器(k比特)关)。
主机VMM在“VMClear”框3730执行VMClear命令,以将客户VM的状态从高速缓存保存到存储器中。作为VMClear命令的一部分,主机VMM提供指向客户VM正在其中执行的密钥域的指针,并检查该密钥域内的有效控制结构(VMCS),或者已经对于相同地址对VMCS进行了高速缓存。
与VMClear指令一起提供的指针应该与最初用于将带有VMPTRLD指令的VMCS加载到高速缓存中的指针相同,其中密钥域ID已经被附加到该指针,该指针是物理存储器地址,包括密钥域ID。重要的是,VMClear不将VMCS从一个存储器位置发送到另一个,或者从一个密钥域发送到另一个,因为这些操作可能是攻击。从而,VMClear指令使用与和VMPTRLD指令一起给出并且由处理器高速缓存的相同的指针,或者处理器将首先需要验证,对于规定的密钥域标识符/地址选择器,有效的VMCS在正被VMCleared的存储器位置中。
如果VMCS是有效的,并且指针与高速缓存的VMCS的存储器地址和密钥域标识符/地址选择器匹配,则主机VMM使用物理地址中的密钥域标识符/地址选择器将VMCS转储清除到存储器,使得客户虚拟机的状态被保存在密钥域的存储器内。可能不会高速缓存VMCS,因为并非所有处理器都会显式地高速缓存VMCS;一些处理器将从存储器存取VMCS。如果VMCS未被高速缓存,则主机VMM可以通过使用物理地址中的密钥域标识符/地址选择器读取存储器来执行一致性检查,以检查无效/破坏的VMCS(例如,VMCS内部的秘密值与在创建密钥域时(在执行CreateKD指令时)在处理器的隐藏寄存器中建立的值之一不匹配)。
在将VMCS写入存储器之前处理器首先通过读取VMCS来检查VMCS是为了确保VMCS有效且未破坏。例如,如果主机VMM规定了错误的密钥域标识符/地址选择器,并且因此VMCS解密不正确,或者如果主机VMM为VMCS规定了错误的存储器位置,则VMCS将被破坏。如果发现无效或破坏的VMCS数据,则主机VMM将接收到错误,并且处理器将不使用VMCS。
控制从“VMClear”框3730进行到“VMPTRLD代理VMCS”框3740。VMPTRLD指令为要加载到存储器中的代理提供VM控制结构(VMCS)的物理地址。如果代理VM控制结构的地址在密钥域内部,则物理地址的未使用比特包括密钥域标识符/地址选择器。
如上所述,代理的代码和控制结构(VMCS)由消费者作为消费者的加密域镜像的一部分提供给主机VMM,并且VMCS的正确存储位置被提供给主机VMM。主机VMM然后进行到“VMEnter代理”框3750。
在确认VM指针加载(VMPTRLD)指令所指的控制结构(VMCS)有效之后,主机VMM将发出VMEnter命令(其可以是VMLaunch或VMResume命令),以在受保护的存储器区域(密钥域)内执行代理。处理器将使用地址中的密钥域ID(从而,允许代理访问恰当解密的存储器)。在受保护的存储器区域由范围寄存器提供的实施例中,只有当代理的VMCS在受保护的存储器区域内部并且包括仅对CPU和代理已知的秘密值时,VMEnter指令才会禁用范围寄存器保护以在受保护的存储器区域内运行代理。如在“VMEnter代理”框3750中从线填充图案到点填充图案的转变所示的,当代理被启动时,控制从主机VMM转变到在密钥域内的代理。一旦代理在密钥域内处于控制中,主机VMM就对发生在消费者的客户VM内的活动是“盲的”。
主机VMM可以在密钥域内启动代理,以请求代理代表主机VMM行动来控制在受保护的存储器区域(密钥域)内执行的另一个客户VM的执行。为了控制另一个客户VM的执行,主机VMM请求代理编辑另一个客户VM的控制结构。根据云服务提供商和消费者之间商定的软件约定,来自主机VMM的请求能以许多形式提出。例如,请求可以被放入存储器中的结构或命令队列中,或者请求能包括要从主机VMM的存储器拷贝到客户的受保护的密钥域存储器中的整个VMCS。备选地,主机VMM的请求可以在处理器寄存器(例如GPR)中编码。
在“代理从主机读取请求”框3760,代理从主机VMM读取请求以编辑另一个客户VM的控制结构。如上所述,根据云服务提供商和消费者之间商定的软件约定,请求可能已经以多种形式提出。
代理前进到“代理编辑KD内部的VMCS”框3770,其中代理编辑密钥域内的另一个客户VM的控制结构(VMCS)。这个对客户VM的控制结构的读和写的准许(使用VMRead和VMWrite指令)可以使用VMCS阴影实现。如果没有VMCS阴影,客户VM(诸如代理)正常不能执行VMRead和VMWrite指令,因为VMRead和VMWrite打算供运行在VMXRoot模式下的主机VMM使用。因为VMCS是存储器中的结构,所以在相同密钥域内执行的客户VM可能代表主机VMM直接编辑VMCS;然而,出于安全性原因,至少一个实施例将编辑VMCS的能力限制给代理。
在完成对另一个客户VM的控制结构的编辑之后,代理通过执行VMCall指令而退出,将控制返回给主机VMM,如在“VMExit”框3780中从点填充图案到线填充图案的转变所示的。VMExit回到主机VMM重新启用由加密密钥域提供的受保护的存储器区域,不仅阻止主机VMM访问代理的代码/数据、VMCS和扩展页表(EPT),还阻止其访问受代理保护的客户VM的代码/数据、VMCS和EPT。
在从代理接收回控制后,在“在KD内部VMPTRLD编辑的VMCS”框3790,主机VMM首先用被编辑的VMCS的地址/指针(包括密钥域标识符/地址选择器)来执行VMPTRLD指令。VMPTRLD指令将编辑的控制结构(VMCS)加载到密钥域内部。只有这样,主机VMM才能执行VMRead指令,以验证代理按主机VMM所请求的对另一客户VM控制结构进行编辑。即使密钥域中的数据被加密,并且主机VMM没有解密的密钥域密钥,也允许主机VMM使用VMRead指令读取存储器中的VMCS控制结构的部分。
在确认客户VM控制结构已经按照请求被编辑之后,控制然后返回到“VMLaunchVM”框3710,在那里主机VMM启动客户VM,以根据如由主机VMM所提供的编辑过的控制结构来执行。
在一些实施例中,写操作(VMWrite)可以从主机VMM限制到受保护的VMCS,需要主机始终要求代理代表主机对VMCS执行任何编辑。在这样的实施例中,如果主机VMM请求对密钥域内部的VMCS执行写操作,则写操作将被阻止。在其他实施例中,可以允许由主机VMM对特定VMCS字段(诸如在主机状态区中的不影响客户VM安全性的字段)进行受限的写入操作(VMWrite)。
允许主机VMM执行存储操作(VMPTRST),以将当前(高速缓存的)VMCS指针从VMPTRLD指令存储到存储器中规定的地址,其必须在客户VM的受保护或加密的存储器之外。密钥域未被规定为用于VMPTRST操作的物理地址的一部分。
图38示出了用于客户虚拟机选择性地保护客户VM的处理器寄存器状态(诸如通用寄存器(GPR))免于受损虚拟机监视器修改的中断处理程序/垫片。如果触发了VMExit,则在退出客户VM之前调用中断处理程序/垫片,给客户VM在退出主机VMM之前有条件地保存和保护其处理器寄存器状态的机会。在所示的示例中,密钥域35501内的不信任的客户虚拟机VM1 38301和VM2 38302以及代理38303中的每一个都具有其自己的相应中断处理程序/垫片38351、38352和38353。而不是VMExit指令使相应的主机VMM被实例化,VMExit指令被重定向到相应的中断处理程序/垫片,其使用软件来对主机VMM 3822隐藏访客VM的处理器状态。中断处理程序/垫片的一个示例是在美国专利申请公布2015/0121366中描述的虚拟化异常(#VE)驱动程序。
中断处理程序/垫片38351、38352和38353中的每个都可以执行通用寄存器保存或恢复操作。在一个实施例中,每个客户VM作为不受限制的客户运行,拦截所有中断,使用虚拟化异常处理程序拦截EPT违规,使用VMFunc切换扩展页表,并确保在经由VMCall指令将执行转移到主机VMM 3822之前,有条件地保存和/或清理通用寄存器和其他寄存器状态。
图39示出了图38的中断处理程序/垫片的实现。不信任的VM1 3930引起VMExit条件,导致虚拟化异常被重定向回客户的中断处理程序/垫片3935。这种重定向被认为是“客户诱导的退出”,而不是VMM诱导的退出。在一个实施例中,客户诱导的退出引起虚拟化异常,并且中断处理程序/垫片3935处理虚拟化异常。中断处理程序/垫片3935可以包括虚拟化异常处理程序(#VE)代码(未示出),绕过主机VMM。在虚拟化异常处理程序#VE处理虚拟化异常之后,控制返回到中断处理程序/垫片3935,其在进行VMCall以将控制返回到主机VMM之前,有条件地保存和清理处理器寄存器值(例如,GPR)。主机VMM然后能发出执行VMResume指令的命令,该指令将重新开始不信任的VM1 3930,包括中断处理程序/垫片3935。中断处理程序/垫片3935使寄存器值被恢复,并且例如通过使用IRET指令将控制返回给不信任的VM1 3930。
在一个实施例中,虚拟化异常处理程序#VE可以拦截EPT违规,以及CPUID和其他客户诱导的退出条件。虚拟化异常处理程序#VE可以通过发出执行VMCALL指令的命令在将控制转移回主机VMM之前,决定保存和/或清理哪个GPR/XMM寄存器状态。用这种方式,不信任的VM1 3930能决定要暴露给主机VMM的CPU状态的方面。
图40示出了在图38和39的中断处理程序/垫片驱动程序操作期间的数据流。关于保存加密状态,密钥域4050内的一些数据将是寄存器状态信息。主机VMM特定的退出(不需要仿真,诸如例如抢占计时器事件)能自动保存CPU状态。例如,CPU可以将所有寄存器状态信息保存到VE信息区4033(诸如4KB页),然后使寄存器状态清零,设置VMCS以在重新进入时恢复寄存器状态,并且然后退出客户VM 4030。主机VMM 4022将处理VMExit和VMResume指令。在接收到执行VMResume指令以重新开始给定VM的命令后,CPU将检查VMCS,从VE信息区4033恢复客户VM的处理器状态,并重新开始客户VM。
图41是示出根据本发明的一个实施例的用于加密消费者提供的代码镜像并建立密钥域的云服务环境的组件之间的消息的图解。针对图41描述的数据流类似于以上针对图13描述的数据流,尽管数据流是在云服务提供商的主机VMM和将作为提供代理的客户虚拟机运行的消费者提供的镜像的上下文中。要注意,无论消费者提供的镜像是针对作为客户虚拟机运行的代理,还是针对作为客户虚拟机运行的任何其他消费者工作载荷,都适用相同的数据流。
消费者4101向云服务提供商请求受保护的服务,并且作为响应,云服务提供商的软件,诸如例如主机VMM 4122,为客户代理镜像、虚拟机控制结构(VMCS)和扩展页表(EPT)提供存储器位置。给定这些存储器位置,消费者4101编辑将用于在云服务提供商的服务器上实例化客户代理镜像的VMCS和EPT。
在一个实施例中,包括控制结构VMCS和EPT的客户代理镜像然后由消费者4101使用存储器位置相关的“微调的”密码(例如,XTS)和消费者的密钥域密钥加密。在所示的实施例中,VMCS和EPT被嵌入在客户代理镜像内,尽管VMCS和EPT可以分开提供,只要它们使用消费者的密钥域密钥加密。
消费者4101还可以使用密钥域密钥计算用于加密客户代理镜像的完整性检查值(ICV,例如,密钥控散列消息认证码(HMAC)值)。ICV可以被计算为位置相关值,并用于验证加密客户代理镜像的关联存储器位置的内容以及定位。
消费者4101请求云服务提供商主机VMM 4122标识提供密钥域管理功能性的在云服务提供商网络中的服务器。云服务提供商主机VMM 4122(在此示例中,从具有CPU 4111的服务器)获得支持密钥域的服务器的服务器证书,并将服务器证书提供给消费者4101。按照至少一个实施例,消费者4101验证该服务器证书由认证所标识的服务器提供密钥域管理功能性的机构签名。
消费者4101用云服务提供商的与支持密钥域的服务器的证书对应的支持密钥域的服务器的公钥来加密消费者的密钥域密钥(以及任何其他消费者秘密数据,诸如存储在VMCS内的秘密值)。消费者4101向云服务提供商主机VMM 4122发送加密的密钥域密钥、加密的客户代理镜像(包括EPT和VMCS)和(可选的)完整性检查值(ICV),云服务提供商主机VMM4122向支持密钥域的服务器的CPU 4111发出创建密钥域(CreateKD)命令。在一个实施例中,云服务提供商主机VMM 4122标识对于新密钥域要使用的密钥域地址选择器,向支持密钥域的服务器的CPU 4111提供密钥地址域选择器。支持密钥域的服务器的CPU 4111创建并初始化密钥域。初始化密钥域可以包括转储清除(由先前密钥域地址选择器标识的)任何先前密钥域的高速缓存,以及转储清除高速缓存了用于先前密钥域的地址映射的翻译后备缓冲器。初始化密钥域还可以包括用解密的密钥域密钥对存储器加密引擎编程,以及配置对应于独特地标识消费者的(一个或多个)客户代理VMCS的秘密值的CPU中的隐藏寄存器。
作为对作为创建密钥域指令的一部分来执行初始化功能的备选,支持密钥域的服务器的CPU 4111可以执行初始化密钥域(InitKD)指令来转储清除高速缓存和翻译后备缓冲器。
在CPU 4111上执行的主机VMM 4122也可以直接向存储器4112提供消费者的加密客户代理镜像(包括EPT和VMCS)和完整性检查值。消费者的客户代理镜像已经加密,使得消费者的客户代理镜像能像它时明文一样被直接写入存储器,绕过存储器加密引擎TMEi4115。备选地,消费者的加密客户代理镜像可以在物理地址的加密比特(k比特)关闭的情况下通过存储器加密引擎TMEi 4115,使得存储器加密引擎TMEi 4115将消费者的加密客户代理镜像视为未加密的明文。当稍后使用正确的密钥域密钥从存储器4112读取消费者的客户代理镜像时,存储器加密引擎TMEi 4115然后将解密该内容(当加密的VMCS/控制结构正在被读取,并且消费者的客户代理镜像正在被CPU 4111执行时)。
图42示出了用于创建密钥域的备选实施例。在此示例中,安全飞地(诸如使用Intel®软件防护扩展(SGX)创建的飞地)在云服务提供商的服务器上本地创建客户镜像。消费者4210首先从在云服务提供商的服务器上运行的飞地4290获得证书。消费者4210然后验证飞地证书,并且经由诸如安全套接字层连接的安全机制将客户镜像发送到飞地4290。飞地4290从云服务提供商的主机VMM(未示出)获得客户镜像、VCMS和EPT的存储器位置,并对本地密钥域密钥编程。飞地4290然后向CPU 4211发出执行创建密钥域指令的命令。当创建新的密钥域时,本地CPU 4211转储清除先前密钥域地址选择器的高速缓存,并用地址选择器的密钥域密钥对存储器加密引擎TMEi 4215进行编程。
飞地4290然后为客户镜像创建VMCS和EPT,并使用飞地4290先前确定的密钥域密钥对镜像(包括VMCS和EPT)进行重新加密。在所示的实施例中,飞地4290还使用密钥域密钥计算客户镜像的完整性检查值。飞地4290然后向云服务提供商的主机VMM(未示出,但在CPU4211上执行)提供加密的客户镜像,包括VMCS和EPT。备选地,任何其他可信执行环境(TEE)(诸如可管理性引擎(ME)或聚合安全性引擎(CSE))都可能执行这里赋予飞地TEE的相同功能。同样,可信的第三方服务器或服务能代表消费者产生加密的存储器镜像,以便在云服务提供商的基础设施上进行实例化。
如上针对图41所述,在CPU 4211上执行的主机VMM(未示出)也可以直接向存储器4212提供消费者的加密客户镜像(包括EPT和VMCS)和完整性检查值。消费者的客户镜像已经加密,使得消费者的客户镜像能像它时明文一样被直接写入存储器,绕过存储器加密引擎TMEi 4215。备选地,消费者的加密客户镜像可以在物理地址的加密比特(k比特)关闭的情况下通过存储器加密引擎TMEi 4215,使得存储器加密引擎TMEi 4215将消费者的加密客户镜像视为未加密的明文。当稍后使用正确的密钥域密钥从存储器4212读取消费者的客户镜像时,存储器加密引擎TMEi 4215将解密该内容(当加密的VMCS/控制结构正在被读取,并且消费者的客户代理镜像正在被CPU 4211执行时)。
图43示出了用于主机VMM验证消费者提供的代理VMCS的过程的一个实施例。云服务提供商的主机VMM 4322向CPU 4311发出使用消费者提供的代理的控制结构(VMCS)地址和位于消费者的加密存储器镜像中的密钥域标识符/地址选择器来执行VM指针加载(VMPTRLD)指令的命令。存储器加密引擎TMEi 4315使用经由用于VMCS的VMPTRLD指令规定的物理地址的选定比特(诸如最上面的未使用比特)作为密钥域标识符/地址选择器。存储器加密引擎TMEi 4315从存储器4312读取加密的数据行,并使用根据密钥域标识符/地址选择器确定的密钥域密钥解密数据行(使用如上所述的存储器位置相关密码,诸如XTS)。如果VMCS解密正确,则CPU 4311对VMCS进行高速缓存,并且云服务提供商的主机VMM 4322执行VMCS的VMRead,以确保对于主机VMM 4322正确配置VMCS。如果VMCS配置正确,则主机VMM4322向CPU 4311发出执行VMLaunch指令的命令,以使用消费者提供的代理VMCS启动代理。然后,CPU 4311将代理作为客户VM运行。
上面关于图43描述的代理控制结构(VMCS/EPT)的验证备选地可以使用散列密钥域(HashKD)指令来执行。在使用HashKD的实现中,CPU将执行最初安装VMCS/EPT的存储器位置的HashKD指令,以确定预期的散列值,根据响应于读取指令产生的数据创建另一个散列值,并验证两个散列值匹配,由此验证控制结构(VMCS/EPT)。
一旦代理控制结构(VMCS和EPT)被主机VMM验证,主机VMM就信任该代理。然后,代理能由主机VMM启动,并用于通过添加代码或数据来修改消费者的镜像以修改消费者的客户VM的功能性。
虽然图43的描述涉及验证代理VMCS,但是相同的数据流适用于要用于启动客户虚拟机的任何消费者提供的客户VMCS。
图44提供了主机VMM请求代理修改用于另一个客户VM的控制结构(VMCS/EPT)的数据流的示例。所描述的过程使用EPT作为正被修改的控制结构的示例,但是相同的过程适用于EPT和VMCS修改两者,以及客户VM的任何其他控制结构或存储器内容的修改。
当客户VM 4402退出并将控制返回给云服务提供商的主机VMM 4422时,EPT条目可指示页不存在。作为示例,EPT条目可以被设置为指示存储器页不存在,因为该页先前被主机VMM页出。如果客户VM尝试访问该不存在页的地址,则关联的EPT条目将揭示该页不存在,导致VMExit出现。如图44中所示,主机VMM的目标是将原始页替换回存储器中,并且然后重置退出的EPT条目,以指示该页现在存在于规定的地址,使得主机VMM能在访问的页回到存储器中的情况下重新开始客户VM的执行。
在接收到控制后,CPU(未示出)将从与其关联的控制结构(例如,VMCS,未示出)恢复主机VMM 4422的主机状态。主机VMM 4422可以随后决定重新开始客户VM 4402,并且向代理4403发送消息,代理4403在要重新开始的客户VM 4402的密钥域内代表主机VMM 4422工作。主机VMM 4422跟踪哪些客户VM已经退出(在此示例中,客户VM 4402),因为主机VMM4422最初启动了客户VM,包括客户VM 4402。主机VMM 4422还跟踪每个客户VM所属的密钥域,因为主机VMM 4422将密钥域标识符/地址选择器规定为用于为客户VM加载VMCS的VM指针加载(VMPTRLD)指令中使用的地址的一部分。主机VMM 4422还跟踪用于给定密钥域的代理以及该给定密钥域中的关联的客户VM。
为了重新开始客户VM 4402,主机VMM 4422准备用于代理4403编辑客户VM 4402的EPT的消息,并执行清零操作(发出执行VMClear指令的命令),以从每个处理器VMCS高速缓存(未示出)使客户VM 4402的VMCS清零。作为清零操作的一部分,客户VM 4402的VMCS连同密钥域标识符/地址选择器也在其回到存储器4412的途中返回到高速缓存4413。密钥域标识符/地址选择器将被用作VMCS最终被写入以向存储器加密引擎指示要使用哪个密钥域密钥的物理地址的选定的一组比特(诸如最上面的未使用比特)的一部分。存储器加密引擎TMEi 4415将加密的VMCS连同具有完整性的实施例的完整性检查值一起写入存储器4412。
在发出执行VMClear指令的命令之后,主机VMM 4422执行两个操作。在由主机VM4422执行的第一个操作中,主机VMM 4422将未加密的(k比特关,也指定为!k)请求放入与代理4403(其可以在高速缓存4413或存储器4412中)共享的存储器位置,规定对于VM 4402的EPT请求的编辑。在所示的示例中,存储器加密引擎TMEi 4415将明文请求写入存储器4412中的存储器位置。稍后,代理4403将从存储器4412中检索对于VM 4402的EPT所请求的编辑。除了EPT编辑请求之外,主机VMM 4422可以向代理提供附加信息,包括将被分页回存储器中的加密页内容。
在由主机VM 4422执行的第二操作中,主机VMM 4422发出执行VMPTRLD指令的命令,提供指向代理4403的VMCS和密钥域标识符/地址选择器的指针,该标识符/地址选择器确定要用于解密代理4403的VMCS的密钥。存储器加密引擎TMEi 4415从存储器4412读取代理4403的VMCS,该引擎使用在VMPTRLD指令中规定的密钥域标识符/地址选择器解密代理4403的VMCS。主机VMM 4422获得由存储器加密引擎TMEi 4415产生的解密VMCS。响应于正确加载代理的VMCS,主机VMM 4422发出执行VMLaunch指令的命令,该指令使用恰当解密的代理VMCS作为控制结构来启动代理4403。运行代理4403代码的CPU从解密的代理VMCS恢复关联虚拟处理器的客户状态。
在所示的示例中,代理4403使请求数据从存储器4412中读取。在一个实施例中,代理4403检查存储器中的命令队列位置,并在那里找到来自主机VMM 4422的另一个请求,并且然后代理4403通过使请求数据从存储器中读取来响应命令。该请求也可能作为处理器寄存器状态(例如,经由GPR寄存器状态)被传递到主机VMM 4422,主机VMM 4422可能使用该处理器寄存器状态来触发代理4403从存储器读取该请求。其他实施例可以使用不同的机制来向代理4403传递存在未解决的主机VMM 4422请求。
代理4403从高速缓存中读取未加密的请求数据,并且代理4403处理编辑客户VM4402的EPT的主机VMM 4422的请求。代理4403经由存储器加密引擎TMEi 4415将对于VM4402的EPT编辑写入存储器4412,这使加密的EPT和关联的完整性检查值被写入存储器4412。备选地,代理4403(其可以访问存储器加密密钥和EPT条目的存储器位置)可以简单地使用存储器加密密钥来加密编辑的EPT结构,并且经由共享存储器通道将该密文(加密的编辑的EPT结构)传递回主机VMM 4422。
代理4403还可以解密由主机VMM 4422提供的将被分页回存储器中的任何加密的页内容。例如,代理4403可以使用代理4403用于分页的不同秘密密钥,使用客户物理地址(GPA)地址作为微调,来解密页。代理4403还可以验证页内容,或者使用ICV来验证页内容自从它们最后一次被页出并用相同的密钥和微调加密以来没有被修改。代理4403然后可以将(一个或多个)解密的页写入存储器,假设代理可以访问这些存储器位置,或者代理可以使用存储器加密密钥和物理地址微调来重新加密页,经由共享存储器通道将所得到的密文返回给主机VMM 4422。完成了由主机VMM 4422发出的编辑EPT的请求后,代理4403完成了其任务并退出,将控制交还给主机VMM 4422。
执行VMExit的CPU从代理4403的VMCS的主机状态区恢复主机VMM 4422状态。主机VMM 4422可选地可以发出执行用于使代理4403的VMCS清零的VMClear指令的命令。作为清零操作的一部分,代理4403的VCMS用密钥域标识符/地址选择器写入高速缓存4413。加密代理VMCS和关联的完整性检查值由存储器加密引擎4415写入存储器4412。
主机VMM 4422然后可以通过发出在VM 4402的EPT将被修改所在的存储器位置上或主机VMM安装由代理提供的EPT密文的位置上执行散列密钥域(HashKD)指令的命令来验证代理4403正确地编辑了VM 4402的EPT。存储器加密引擎TMEi 4415使用密钥域标识符/地址选择器作为地址选择器来读取关联的密钥域的加密数据。存储器加密引擎TMEi 4415读取加密的数据行,解密数据,并将解密的数据发送到用于地址和密钥域标识符/地址选择器的高速缓存4413。
执行HashKD指令的处理器读取由存储器加密引擎TMEi 4415获得的解密数据,并且主机VMM 4422验证读取的存储器位置内容的散列值与预期EPT内容的散列值匹配。在这点上,主机VMM 4422还可以将由代理4403重新加密并经由共享存储器返回的页的任何密文写入正确的存储器位置(针对代理不能访问存储器以安装页本身的情况)。如果散列值匹配,则主机VMM 4422发出对于VM 4402的VMCS执行VMPTRLD指令的命令。在这点上,主机VMM然后可以使用VMRead重新验证VMCS的内容。主机VMM 4422然后发出从VM 4402的VMCS启动客户VM 4402的命令。执行VM 4402的代码的处理器从VM 4402的VMCS恢复VM 4402的虚拟处理器的状态,并使用修改的EPT执行VM 4402,修改的EPT现在指示页存在并标识页位于其中的存储器地址。
参考图44描述的存储器事务可以驻留在高速缓存4413中,由此消除了对于存储器加密引擎(TMEi 4415)从高速缓存4413向存储器4412读和写数据(并且反之亦然)的需要。然而,上述存储器事务被描述为好像用于每个事务的数据都被从高速缓存4413驱逐到存储器4412中。
一些实施例还可以启用页修改日志记录(PML),使得主机VMM能跟踪由客户代理访问的存储器位置。散列密钥域(HashKD)指令的数量只能限制于在代理正执行时实际修改的那些存储器位置。这里,PML地址和日志页将保持在主机VMM的密钥域(或共享存储器/k比特关)中,使得VMM能跟踪客户VM的动作。
类似地,一些实施例可以使用子页策略表(SPPT)[如在美国专利9,335,943 B2中描述的]允许主机VMM此外限制代理能访问的存储器位置。在这样的实施例中,主机VMM将控制SPPT,并且代理可能经由其EPT被给予对存储器的访问,其中代理的VMCS指示附加SPPT被启用。VMCS中的子页保护表指针将使用主机VMM的密钥域(或共享存储器/k比特关)。代理的EPT条目包括为主机VMM能使用主机VMM的SPPT改写写访问的每个条目而设置的SPP比特。
图45是示出VM指针加载(VMPTRLD)、VMEnter(VMLaunch或VMResume)和VMExit指令的执行的流程图。在框4505,响应于提供VMCS地址的VMPTRLD指令,来自VMCS地址的密钥域标识符/地址选择器被用于访问VMCS。在判定点4510,通过验证VMCS的内容(其能包括在代理和处理器之间共享并存储在代理VMCS中的版本号和秘密值,如上文参考图37“VMEnter代理”框3750所描述的),来判定VMCS是否被正确解密。如果VMCS没有正确解密,则控制进行到框4515,在此向发出执行VMPTRLD指令的命令的主机VMM返回错误。如果VMCS解密正确,则控制进行到框4520,其可选地对VMCS进行高速缓存。在框4525,由主机VMM执行可选的VMRead指令来验证VMCS的内容。
从框4520,控制进行到框4530,在此执行VMEnter指令。使用来自VMPTRLD指令中的地址的密钥域标识符/地址选择器实例化(通常是启动或重新开始)虚拟机来访问VMCS以用于进入虚拟机(如果VMCS还没有在框E20高速缓存的话)。如果在框4520已经高速缓存了VMCS,则框4530能使用高速缓存的VMCS来实例化虚拟机。
在判定点4535,判定VMCS被破坏还是无效,因为当尝试恢复客户的处理器状态时,处理器将对VMCS执行其他一致性检查。如果VMCS被破坏或无效,则控制进行到框4540,其中向主机VMM返回错误。如果VMCS未被破坏或无效,则控制进行到框4545。在框4545,转储清除CPU流水线。给定密钥域标识符/地址选择器,为事务后备缓冲器(TLB)设置地址空间标识符标签,或者转储清除TLB。CPU寄存器被设置为VMCS客户状态。此外,如果在VMCS中存在由其物理地址指示的虚拟化异常(VE)信息页,并且VMCS指示附加客户状态当前被存储在那里,则处理器寄存器的剩余部分将从VE Info页恢复。恢复处理器寄存器包括将当前密钥域标识符/地址选择器添加到VE Info页地址。扩展页表指针(EPTE)是用于EPT表库的物理地址。因为EPT表在客户VM的密钥域内部,所以该地址同样应该包括密钥域标识符/地址选择器,使得EPT结构恰当解密。
控制从框4545进行到框4550,其中进行在客户状态指令指针(IP)处执行分支。执行继续,直到退出当前正在执行的虚拟机的退出条件,并且控制进行到框4555。与任何VMExit一样,客户处理器状态被存储到当前VMCS。如果存在VEInfo页,并且退出不是由于VECall引起,那么客户的处理器寄存器状态的剩余部分可以被保存到VEInfo页,并且然后这些寄存器被清零。从框4555,处理进行到框4560。在框4560,转储清除CPU流水线。为VMXRoot设置地址空间标识符标签,或者转储清除TLB。在其中主机VMM具有其自己的密钥域标识符/地址选择器的实施例中,当前密钥域被设置为主机VMM密钥域标识符/地址选择器。在其中主机VMM在未加密的存储器中的其他实施例中,k比特被设置为“关”,并且密钥域标识符/地址选择器地址比特被清零。CPU寄存器被设置为高速缓存的VMCS主机状态。控制从框4560进行到框4565,其中进行在主机状态指令指针(IP)处执行分支。
在图45中,EPT保持在主机VMM的控制下(如正常情况下)。为了防止存储器重映射攻击,一些实施例可以添加新表(称为反向映射表,未示出),该新表在页遍历时由处理器(页未命中处理程序(PMH))访问。在通过页遍历确定地址映射后,先对由所得到的物理地址索引的反向映射表(RMT)中的条目检查所得到的物理地址。该条目包括消费者(和/或消费者的代理)预期的物理地址及其关联的客户物理地址(以及准许比特和/或k比特)。如果PMH确定客户物理地址(GPA)或准许与由已完成的页遍历确定的那些不匹配,则CPU将退出(执行指示错误的VMExit指令)。由处理器/PMH使用属于正在执行的客户VM的密钥域ID来访问该RMT条目。从而,每个RMT表条目必须使用消费者的密钥进行XTS加密,使得只有消费者或消费者的代理能在它们应用于消费者的密钥域时产生这些RMT。
现在参考图46,示出了用于更新消费者的客户VM镜像的过程。该过程在消费者的初始代码镜像4631已经被建立之后为作为客户VM 46301在密钥域4650内运行开始,客户VM46301只能访问在作为加密客户控制结构的一部分由消费者提供的扩展页表(EPT)中被映射和授予准许的存储器。为了使消费者的客户VM 46301能够提供附加功能性,能向客户VM46301代码镜像4631添加附加代码。然而,因为客户VM 46301只能访问密钥域4650内的那部分存储器,所以云服务提供商的主机VMM 4622和客户代理46302参与更新客户VM的代码镜像4631。
如上所述,消费者的加密客户代码镜像可以包括用于启动第二客户(客户代理)的代码。一旦客户代理46302作为客户代理虚拟机在消费者的加密密钥域4650内运行,客户代理46302就能代表主机VMM 4622执行几个任务。客户代理46302根据请求代表主机VMM 4622执行任务,只要任务不损害消费者的客户VM 46301。主机VMM 4622能验证由代理46302执行的任务已经按照请求执行。因此,主机VMM 4622不需要为代理46302提供代码镜像或不需要信任代理46302。
作为能由代理46302代表主机VMM 4622执行的任务的示例,代理46302能在密钥域4650内部创建其他客户虚拟机,向主机VMM 4622请求更多存储器,并从消费者或消费者授权的第三方将存储器页移动到消费者客户VM 46301工作载荷。例如,代理46302能将客户VM代码镜像的消费者加密的剩余部分4604安全地传递给消费者的客户VM 46301。VM代码镜像的加密的剩余部分4604可以首先经由在消费者和客户代理46302之间建立的安全连接(例如传输层安全性/安全套接字层(TLS/SSL)会话)来传递。主机VMM 4622将包括VM代码镜像的剩余部分4604的加密分组和缓冲器拷贝到共享存储器4612U,供由客户代理46302检索。客户代理46302通过解密包括在加密分组和缓冲器中的数据来终止TLS/SSL会话。
在密钥域4650内运行,客户代理46302能访问由消费者使用的存储器加密密钥域密钥(因为在图41中消费者用该密钥域密钥创建初始客户VM镜像)。使用密钥域密钥,代理46302可以单独XTS加密附加数据/代码/结构(用适当的存储器地址微调)。客户代理46302然后能将所得到的密文提供给主机VMM 4622(例如,经由共享存储器通道4612U,如由从代理46302通过共享存储器4612U的“写入存储器”箭头所示)。主机VMM 4622然后能将该密文(主机VMM 4622不能解密它,因为主机VMM 4622没有密钥域密钥)安装到适当的存储器位置(在它们对于其被加密的地址),因为只有主机VMM 4622可以访问所有存储器,包括未加密的共享存储器4612U。
例如,为了改变客户代理46302可以访问的存储器位置,主机VMM 4622能请求客户代理46302为新的EPT数据和地址微调生成适当的密文(使用消费者的存储器加密密钥域密钥)(并且如果期望完整性,则计算完整性检查值(ICV))。主机VMM 4622然后将代表客户代理46302在正确位置将密文拷贝到存储器,因为只有主机VMM 4622具有寻址所有存储器的能力。一旦正确安装了更新的代理EPT,客户代理46302就将可以直接访问这些新的存储器位置。
遵循类似的过程来限制客户代理46302可以访问的存储器位置,因为主机VMM4622可以请求客户代理46302为选定的EPT结构创建密文,以将选定的EPT结构指定为不存在(没有准许或没有映射)。在所有情况下,一旦密文被安装到正确的存储器位置中,主机VMM 4622就能使用上述散列密钥域(HashKD)命令来验证密文的内容。
云服务提供商的主机VMM 4622控制系统、存储器和其他资源,但是客户代理46302控制产生客户代理46302批准的数据,因为只有客户代理46302具有存储器加密密钥域密钥,并且能将该批准的加密数据传递给主机VMM 4622。
对于启用了系统管理模式(SMM)或类似特权模式的系统,SMM不应可以访问消费者的密钥或密钥域标识符/地址选择器。类似地,当在消费者的客户VM执行期间发生系统管理中断(SMI)时,客户处理器寄存器状态应被保存到SMM无法访问的存储器位置并清零。
图47描述了消费者向消费者的客户VM工作载荷添加页的另一个过程。在所示的示例中,用于消费者的客户VM镜像的其余部分的分组由消费者直接发送到主机VMM 4722(经由消费者和客户代理之间的安全通信会话,如上面参考图46所述的)。作为响应,主机VMM4722经由存储器加密引擎TMEi 4715将用于消费者的客户VM镜像的其余部分的数据写入存储器4712。
主机VMM 4722发出在CPU 4711上启动客户代理的命令,并且CPU 4711开始执行由消费者提供的客户代理代码镜像,作为提供客户代理4703的加密的客户VM代码镜像的一部分。主机VMM 4722通过存储器4712的共享(加密比特(k比特)关)部分发送消费者的客户VM镜像的其余部分。正在运行的代理4703通过请求存储器加密引擎TMEi 4715从具有最高未使用比特设置为用于共享(k比特关)密钥域的密钥域标识符/地址选择器的地址中读取数据,而从主机VMM 4722的存储器4712的共享部分(未加密,其中k比特关)读取用于消费者的客户VM镜像的其余部分的数据。由于代理4703是用于与消费者的安全通信会话的端点,因此代理4703将网络分组解密(例如,使用OpenSSL软件库)到共享存储器区域中。正在运行的代理4703将所得到的解密数据拷贝到加密存储器(用消费者的密钥域密钥加密的,其中k比特开)在具有最上面的未使用比特被设置为用于消费者的密钥域的密钥域标识符/地址选择器的地址。在对新存储器地址的第一次写入期间,MOVNT指令可用于执行写入组合操作,该操作写入存储器4712中的新存储器地址,而无需首先读取要写入的新存储器地址的内容。存储器加密引擎TMEi 4715然后将用于消费者的客户VM镜像的其余部分的加密数据连同完整性检查值(ICV)写入存储器4712。
代理4703处理数据(例如,用软件解密数据,执行完整性检查,等等)。消费者形成安全通信会话(例如,使用从使用消费者的加密密钥(密钥域密钥)的消费者到代理镜像的TLS栈的TLS/安全套接字层会话),并且分组经由控制器通过共享存储器(未加密,其中k比特关)发送。
上述实施例描述了其中消费者能信任其秘密和数据在公用云中与在私有云环境中一样安全的环境。消费者(或消费者的可信中介)能提供加密的客户虚拟机(VM)镜像,该镜像能被安装在存储器的受保护区域(称为密钥域)中,其中存储器页用消费者提供的密钥域密钥加密。云服务提供商服务器的处理器能使用由消费者仅作为加密密钥域密钥提供给主机VMM的密钥域密钥来解密消费者的加密客户虚拟机镜像。消费者的客户VM能由云服务提供商的软件/主机虚拟机监视器(VMM)验证,而主机VMM不会被暴露于加密密钥域密钥或加密客户虚拟机镜像的内容以及其中包括的秘密。消费者的加密客户虚拟机镜像能使用由处理器从(一个或多个)消费者提供的控制结构(其还被提供给用消费者的密钥域密钥加密的主机VMM)内解密的处理器状态信息来执行。
用消费者的密钥域密钥加密的控制结构信息可包括存储器映射结构(扩展页表(EPT))。
执行消费者的加密的客户虚拟机镜像的处理器可能会遇到其中需要从客户VM退出到主机VMM的情形。当客户的VM退出时,主机处理器自动将当前密钥域切换回主机VMM的密钥域,或者切换回在主机VMM和由主机VM管理的每个客户虚拟机之间共享的共享密钥域。在客户VM退出时,消费者提供的客户控制结构规定受保护的存储器位置,其中主机处理器可以在退出到主VMM时自动存储并使处理器寄存器清零。
在一个实施例中,客户VM代码镜像包括中断处理程序代码,以拦截中断并将客户VM退出转换为异常,其中客户VM可以将处理器寄存器信息保存到受保护的存储器,并清零或有条件地暴露由主机VMM所需的处理器寄存器。当客户VM已经完成对于保存客户VM的处理器状态的准备时,客户VM能调用主机VMM。
在一个实施例中,能通过发送由主机VMM在主机的存储器中安装并验证的加密镜像更新或加密控制结构更新(增量),来动态更新或修改消费者提供的加密客户VM镜像和客户控制结构。加密的镜像更新可以充当对于客户VM的加密代码镜像的替换,或者加密的镜像更新可以是用于修改客户VM的加密代码镜像的“增量”镜像。
对加密的客户控制结构的动态更新可以由主机VMM或客户VM发起。例如,主机VMM可以确定客户代码镜像应该被移动到不同的存储器位置。将客户代码镜像移动到不同的存储器位置影响客户控制结构的扩展页表(EPT)。客户VM能验证对客户控制结构的改变,并向主机VMM提供更新的加密客户控制结构。主机VMM能将客户提供的更新的加密客户控制结构拷贝到适当的存储器位置。
作为对由客户VM发起的加密客户控制结构的动态更新的示例,客户VM可向主机VMM请求更多存储器。响应于该请求,主机VMM可以确定必须修改客户控制结构的扩展页表(EPT)。客户VM能验证附加存储器的分配以及所得到的对客户控制结构的改变,并向主机VMM提供更新的加密客户控制结构。主机VMM能将更新的加密客户控制结构拷贝到适当的存储器位置。
例如,使用存储器位置的物理地址比特来指示是否要共享该存储器位置,能在受保护的客户VM和主机VMM之间建立共享通信信道。在一个实施例中,该比特可以被关闭以指示存储器位置将被共享,并且该比特可以被开启以指示存储器位置将被保护(加密)。
对于改变消费者提供的客户控制结构或客户VM镜像的请求能通过主机VMM和受保护的客户VM之间的共享通信信道发送。受保护的客户VM能验证此类请求不会损害客户VM的安全性,并且客户VM能使用密钥域密钥为所请求的改变生成密文。客户VM然后能向主机VMM提供实现所请求的改变的密文。主机VMM能将客户VM提供的密文安装到存储器中,并验证客户VM正确完成了所请求的改变(例如,使用散列密钥域(HashKD)指令)。一旦密文被验证,主机VMM然后就能执行修改的客户VM镜像。
在一个实施例中,消费者提供的加密客户VM镜像可以包括实现可以访问消费者提供的客户VM的存储器(密钥域)的第二客户VM(代理)的代码。该代理由消费者提供,以使主机VMM能够请求代理代表主机VMM执行任务。主机VMM能通过共享通信信道向代理传递请求。主机VMM能代表主机VMM请求代理修改第二客户VM(或第三客户VM,等等)的存储器内容或控制结构。代理能验证改变客户VM的存储器的主机VMM请求不会损害消费者的安全性策略。主机VMM能验证由代理对存储器正确地做出改变(例如,经由HashKD指令),并且然后执行修改的客户VM。
此外,代理能在由主机VMM请求时执行存储器分页操作。例如,代理能“页出(page-out)”受保护的存储器的页(通常包括4KB的数据),使用用于离线存储的第二密钥加密受保护存储器的内容。在这种页出方案中,代理经由共享存储器通道向主机VMM提供加密页。代理还能对主机VMM的请求执行“页入(page-in)”操作,用第二密钥解密由主机VMM经由共享存储器通道提供的存储器内容,验证该内容,并将解密的内容安装到受保护的存储器中。
在上述每个实施例中,提供给密钥域的密码加密存储器保护可以可选地包括完整性验证,其中完整性检查值(ICV)能用于验证存储器位置的内容。
建立在和/或提供对本说明书中公开的其他实施例的备选方法,本发明的实施例可以包括扩展现有指令集架构和/或再用现有虚拟化技术,诸如EPT和多密钥存储器完整性技术(MKTME,MKTME),以降低保护VM免受其他VM、VMM、系统管理员或物理手段的攻击的复杂性(与涉及新指令、新CPU数据结构和/或对硬件、固件等的其他改变的其他方法相比较)。实施例可以包括两个新指令(在本说明书中称为VMPageIn和VMPageOut),以允许CPU控制具有存储器完整性的分页(提供安全分页),并解决具有存储器完整性的客户到主机物理地址翻译问题。实施例可以提供无状态方法,消除了CPU数据结构维护和复杂性,同时为租户VM提供安全性。实施例可能没有新模式,没有对于云服务提供商(CSP)或其客户端的镜像的测量,同时提供针对破坏、重放和重新映射攻击的保护。
本发明的实施例可以包括:在现有的VT控制结构和扩展页表中用MAC代替HPA,允许客户端(软件工具或服务)创建编码客户端的全安全性策略的可传输安全VM镜像,执行安全密钥交换,以及使用ISA对照实际页内容(和原始GPA)验证这些MAC,以恢复其中VM镜像登陆的存储器地址。就地变换VM镜像缓解了对于VMM分配用于将VM镜像从存储器中的一个位置拷贝到另一个位置的附加存储器的需求。
在实施例中,例如如图48中所示,VMM(例如VMM 4822)可能无法直接访问安全VM(例如VM 4830)的加密和完整性保护的存储器。VM的私有存储器加密密钥还保护掌管VM行为的VMCS和EPT结构(例如,VMCS/EPT 4840),并且同样由VMM不能直接访问。然而,上述实施例规定VMM使用CPU控制的机制来限制通过硬件对这些结构的访问。在实施例中,VMM可以使用VMRead和VMWrite指令来访问VMCS的部分。例如,VMM可使用VMRead和VMWrite指令访问VMCS的主机区域,但不访问VMCS的客户区域,并且它可以仅将它们用于读取而不用于写入对EPTP字段的访问,诸如此类。换句话说,VMM可以使用VMRead来询问客户端提供的VMCS(并且从而,VMM不需要测量客户端镜像),但受限于它可以VMWrite的VMCS字段。在本发明的这些和/或其他实施例中,可以使用两个新指令(如下所述的VMPageIn和VMPageOut)来扩展CPU控制的访问,以提供对来自VMM的EPT的受限访问。
根据上述实施例和/或根据下面描述或进一步描述的实施例,密钥域的初始化可以包括将至少一个VMCS结构和一个EPTP根加载到存储器中。为了提供密钥域的初始化,实施例可以包括诸如上面所描述述和/或下面进一步描述的CreateKD指令的指令。CreateKD指令可以采取如下输入:(1)用服务器的公钥(例如,服务器的RSA公钥,其中服务器的对应RSA私钥由CSP或VMM不可访问/不可知)加密的客户端/消费者(由CSP提供的安全VM的所有者);(2)要用于参考安全VM的客户端/消费者密钥的KeyID(由VMM规定);(3)指向由客户端/消费者创建并提供给CSP的VMM的初始VMCS的物理地址指针(主机物理地址或HPA);(4)指向根EPT结构的物理地址指针(主机物理地址或HPA);以及(5)用于在给定所提供的客户端/消费者密钥的情况下验证它们的用于VMCS和EPT页的完整性的消息认证码(MAC)。因此,CreateKD指令可以被称为具有如下格式:CreateKD ([in] RSAEncryptedKey, [in]KeyID, [in] VMCS_HPA, [in] EPTP, [in] MAC)。
为了执行或以其他方式响应于单个指令,诸如CreateKD指令,处理器(例如,图4的处理器411)或处理器核(例如,图4的核416或418),包括或连同加密硬件(例如,图4的MEE415),可以执行本发明的方法实施例,例如,如图49A中所图示的。本发明的其他这样的方法实施例可以以各种各样的顺序包括图49A中所示的任何部分或多个部分(不管图49A是否指示一部分可以是可选的)和/或图49A中未示出的部分或多个部分。方法实施例可以包括(例如,在4900中)接收、解码或以其他方式识别CreateKD指令。方法实施例可以包括(例如,在4902中)使用服务器的私钥(例如,RSA私钥)解密加密的客户端密钥。方法实施例可以包括(例如,在4902中)解密密钥域配置策略。方法实施例可以包括(例如,在4904中)确定解密的客户端密钥和/或配置策略是否有效。如果否(例如,在4906中),则该方法实施例可以返回错误。如果解密的客户端密钥和/或配置策略被确定为有效(例如,在4904中),则(例如,在4906中)可以开始初始化具有可以防止处理器使用的KeyID的密钥域,并且可以包括转储清除旧KeyID的高速缓存,转储清除旧KeyID映射/ASID的处理器TLB,使用KeyID转储清除VMCS高速缓存,以及将新的秘密密钥(例如,使用PCONFIG指令或者与其一起)加载到用于该KeyID的存储器加密和完整性引擎(例如,图4的存储器加密引擎415或另一个MKTME/MKTMEi引擎)。方法实施例可以包括(例如,在4910中)将参考的VMCS和EPT页加载到受保护的存储器中(使用KeyID),并将VMCS中的EPTP设置为EPT根页的HPA。方法实施例可以包括(例如,在4912中)使用秘密客户端密钥和MAC来检查VMCS页和EPT根页的完整性。注意,在各种方法实施例中,可以以不同的顺序包括图49A中所示的方法的部分,例如,将VMCS中的EPTP设置为EPT根页的HPA可以在EPT根页已经被验证之后执行。如果(例如,在4912中)确定VMCS页和EPT根页是正确的,则处理器可以进行到使用新KeyID将这两个页写入/存储(直接写入/非临时写入或写入存储器而不进行对于所有权的存储器读取)MKTME加密的且完整性保护的存储器区域,否则(例如,在4914中)中止指令并改写页。如果MAC是正确的,则VMCS页和EPT根页现在是加载到用于KeyID的VM的秘密加密保护的存储器中的仅有的两个页,并且(例如,在4916中)可以为新的KeyID指配ASID标签。
其他实施例可以具有单独添加(一个或多个)VMCS的指令(例如,VMAddKD指令),规定用于要添加的VMCS的KeyID、VMCS HPA和客户端的MAC。如果MAC与客户端所规定的VMCS内容匹配,则VMAddKD可以将VMCS添加到私有KeyID中。然后,CPU可以维护私有结构,该私有结构维护针对具体密钥安装的若干VMCS。注意,客户端的VMCS还可以包括用于正常情况下将包括HPA的某些VMCS字段的MAC,使得在将HPA可以被指配给该字段之前,页的内容必须与MAC值匹配。
图49B图示了根据本发明的实施例的在密钥域中进入和退出虚拟机的方法。本发明的其他这样的方法实施例可以以各种各样的顺序包括图49B中所示的任何部分或多个部分(不管图49B是否指示一部分可以是可选的)和/或图49B中未示出的部分或多个部分。方法实施例可以包括(例如,在4920中)使用/执行VMCS指针加载指令(例如,VMPTRLD)来提供用于访问VMCS,其中该指令规定包括KeyID的地址(例如,规定为物理地址5000的部分5020,如图50中所示)。注意,只有处理器可以选择由CreateKD创建的KeyID;这些KeyID对VMM/软件不可访问,并且不能经由页表或扩展页表进行映射。处理器可以基于用VM入口上的VMPTRLD(例如,VMLaunch)、VMRead或VMWrite和/或VMPageIn或VMPageOut指令所规定的当前VMCS的位置切换到KeyID。VMPTRLD可以在VMCS结构上维持锁定,以确保没有其他线程/核可以同时加载相同的VMCS。
一种方法实施例可以包括(例如,在4922中)确定VMCS是否被恰当解密(例如,使用正确的KeyID;如果否(例如,在4924中),则可以将错误返回到VMM;如果是,则可以高速缓存VMCS(例如,在4926中),和/或VMM可以使用VMRead指令来验证VMCS的内容(例如,在4928中)。方法实施例可以包括(例如,在4930中)使用/执行具有来自VMPTRLD地址的KeyID的VMEnter指令来访问VMCS。方法实施例可以包括(例如,在4932中)确定VMCS是否被破坏/无效;如果是(例如,在4934中),则向VMM返回错误;如果否(例如,在4936中),则转储清除处理器流水线,为KeyID设置TLB ASID标签(或转储清除TLB),将当前KeyID设置为来自VMPTRLD地址的KeyID,并将处理器寄存器设置为VMCS客户状态。方法实施例可以包括(例如,在4938中),分支以执行由客户状态的指令指针规定的下一指令。
方法实施例可以包括,基于检测到VM退出条件或事件,发起从虚拟机的退出(例如,在4940中)。方法实施例可以包括(例如,在4942中)保存客户状态并将其从处理器寄存器中清零。方法实施例可以包括(例如,在4944中)转储清除处理器流水线,为根设置TLBASID标签(或转储清除TLB),将当前KeyID设置为用于VMM的KeyID,并将处理器寄存器设置为VMCS主机状态。方法实施例可以包括(例如,在4946中),分支以执行由主机状态的指令指针规定的下一指令。
本发明的实施例可以包括使用/执行VMClear指令以将高速缓存的/加载的/当前的VMCS返回到解锁状态,并返回到该VMCS利用KeyID(该VMCS利用该KeyID被加载)从其被加载的存储器位置(如在提供给VMPTRLD的VMCS地址内所规定的)。VMClear可以被扩展成保持VMCS的状态,无论它是当前的/加载的和锁定的还是清零的和解锁的。VMClear还可以转储清除用于加载VMCS的KeyID的TLB,以及PXE高速缓存和可能已经对于加载的/当前的/高速缓存的VMCS维护的任何其他残余状态。用这种方式,被清零的VMCS可以经由新指令(诸如VMFreeKD)被释放(经由VMClear)。执行规定VMCS的HPA和KeyID的VMFreeKD指令可以将存储器中的VMCS的MAC以及以客户端的密钥加密的VMCS返回给VMM,使得VMCS本身可以被安全地页出存储器,使CPU跟踪结构中的VMCS计数(VMAddKD的逆)递减。当所有(一个或多个)VMCS都被释放用于KeyID时,所有封装上的所有CPU高速缓存都可能因与KeyID一起高速缓存的任何内容而无效,并且然后KeyID可被重新指配(再次CreateKD)。
根据本发明的实施例,VMCS可以包括包括秘密标识符的字段,该秘密标识符将数据结构标识为由CPU添加的VMCS(该秘密值只有CPU知道)。EPT根可以包括标记为不存在的若干页表条目(EPTE)(或使用指示条目包括MAC值而不是HPA的新比特),并且每页表条目包括与被参考页相关的一个MAC(而不是HPA)。这些MAC可以由客户端在安全MAC函数(例如,SHA3 KMAC)中使用客户端的密钥创建。例如:MAC = SHA3(Key, GPAStart, GPAEnd,PageContent),其中Key是秘密密钥,GPAStart是与由EPT条目覆盖的GPA范围相关的第一客户物理地址,而GPAEnd是对应于该范围的最后一个GPA。每个EPT条目可以覆盖地址范围,从根EPT结构开始,以覆盖整个客户物理地址空间。实际数据/VM镜像页可以具有4KB范围(页大小),或者可以规定大页(例如2MB或更大),其中GPA范围的全页内容用MAC计算。不存在的页在EPTE中可以用无效的MAC值被指示为这样。
图51图示了根据如下所述的本发明的实施例的用于客户端的安全虚拟机镜像可如何使用VMPageIn指令(例如,由VMM)构建,以及如何使用VMPageOut指令(例如,由VMM)页出。
在本发明的实施例中,CPU允许VMM从安全VM页入和页出EPT页。首先,VMM将经由在输入物理地址中规定VM的KeyID的VMPTRLD指令使CreateKD VMCS成为当前的。然后,VMM可以发出访问VMCS的VMRead。在本发明的实施例中,VMRead概念可以被扩展为读取由VMCS中的EPTP所参考的EPT。这能通过将EPT从GPA遍历到HPA来完成。因此,处理器将允许VMM通过规定GPA作为参数而从VM的EPT VMRead页。然后,处理器将对于GPA遍历VMCS的EPTP,以得到HPA。然后,它将使用VM的KeyID读取实际的页明文。
本发明的实施例为VMM提供了单个指令来执行,以将EPTE从MAC值改变为HPA值,以及从存储器页入内容页。例如,VMPageIn指令可具有如下格式:VMPageIn([in] GPAStart,[in] GPAEnd, [in] HPAofPage, [in] Permissions)。
为了执行或以其他方式响应于这个单个指令,处理器(例如,图4的处理器411)或处理器核(例如,图4的核416或418),包括或连同加密硬件(例如,图4的MEE 415),可以执行本发明的方法实施例,例如,如图52A中所图示的。本发明的其他这样的方法实施例可以以各种各样的顺序包括图52A中所示的任何部分或多个部分和/或图52A中未示出的部分或多个部分。方法实施例可以包括(例如,在5200中)接收、解码或以其他方式识别VMPageIn指令。
在实施例中,可以从当前(VMPTRLD)VMCS中的EPTP开始使用VMPageIn指令。即使VMM对受保护的VMCS没有写访问权,处理器也可以使用VM的私有KeyID (MKTMEi密钥)访问EPTP字段,并访问EPT根。给定GPA范围,处理器可以(例如,在5206中)导航扩展页表,直到它找到用于GPA范围的EPTE叶(或者(例如,在5210中)如果任何中间EPTE都不存在或被破坏,则报告错误)。它可以(例如,在5214中)使用该EPTE中的MAC来验证被页入的HPA页的内容。它可以(例如,在5212中)使用共享KeyID读取(加载)存储器内容,使用客户端的CreateKD密钥(例如,使用GPA作为微调加密的AES-XTS)解密它们,并且然后使用VM的私有KeyID(在用于VMPTRLD的地址中规定的KeyID)将内容写入(存储)回在相同地址的存储器。从而,将页适当地从客户机密钥变换到VM的私有MKTME密钥。如果已经使用VM的MKTMEi密钥将HPA页映射到VM的不同GPA,那么当使用共享KeyID读取(加载)时,存储器完整性检查将失败,从而,向处理器指示共享错误(存储器重映射攻击),并且无法加载页(例如,在5216中,通过使用共享密钥写入默认值来改写/清零页内容)。同样,如果EPTE中的MAC不匹配指示GPA或内容修改尝试(攻击)并且无法加载页(例如,在5216中,使用共享密钥用默认内容改写/清零页)的页入页的内容。如果MAC匹配页入页的内容,那么(例如,在5218中),将用加载页的HPA更新EPTE,并且准许(以及存储器类型等)将如在EPTE中的VMPageIn指令中的所规定的进行设置。如果HPA先前被映射到相同的KeyID,则所有并发的处理器都应该对于相同KeyID转储清除它们的TLB,并在它们使用相同KeyID执行VM的情况下,等待VMPageIn指令成功完成。在一些实施例中,处理器可以使用HPA跟踪器结构来确定HPA是否已经用于具体密钥,并且只允许对于当前尚未被相同客户端密钥使用的HPA的页入操作。只有释放的(页出的)HPA然后可被再用。
本发明的实施例为VMM提供单个指令来执行以从存储器中页出客户页。例如,VMPageOut指令可以具有如下格式:VMPageOut([in] GPAStart, [in]GPAEnd, [out]Permissions)。
为了执行或以其他方式响应于这个单个指令,处理器(例如,图4的处理器411)或处理器核(例如,图4的核416或418),包括或连同加密硬件(例如,图4的MEE 415),可以执行本发明的方法实施例,例如,如图52B中所图示的。本发明的其他这样的方法实施例可以以各种各样的顺序包括图52B中所示的任何部分或多个部分和/或图52B中未示出的部分或多个部分。方法实施例可以包括(例如,在5240中)接收、解码或以其他方式识别VMPageOut指令。
在实施例中,可以从当前(VMPTRLD)VMCS中的EPTP开始使用VMPageOut指令。即使VMM对MKTME加密的VMCS没有直接访问权,处理器也可以使用VM的私有KeyID (MKTMEi密钥)访问EPTP字段,并访问EPT根。给定GPA范围,处理器可以(例如,在5246中)导航扩展页表,直到它找到用于GPA范围的EPTE叶(或者(例如,在5250中)如果任何中间EPTE都不存在或被破坏,则报告错误)。它可以(例如,在5252中)使用VM的私有KeyID读取(加载)页,给定内容和GPA计算关联的MAC,并且使用客户端的CreateKD密钥重新加密内容,使用共享KeyID将它们写回到相同的存储器页(例如,使用具有用作微调的GPA范围的AES-XTS)。对于页出的页及其GPA计算的MAC可以被存储在关联的EPTE中,当指令成功完成时(例如,在5254中)在输出寄存器(或存储器位置)中提供原始准许时,EPTE可以被设置为不存在。在其中CPU维护HPA跟踪器的实施例中,HPA可以被记录为对于客户端密钥被释放,允许其再用于随后的VMPageIn操作。
为了稍后将这样的页恢复到新的HPA,VMM可以VMPageIn页,规定页的HPA和期望的HPA(EPT叶节点)以及对于正在为关联的MAC恢复的加密页的准许。处理器可以使用VM的秘密分页密钥(在CreateKD中规定的客户端的密钥)解密页,并检查MAC是否匹配GPA和页的内容。处理器可以更新EPTE的HPA和对于给定GPA的准许,并使用VM的私有KeyID(直接写入、非临时写入或对于所有权写入)将解密的页内容写入HPA位置。这将使更新的存储器完整性信息被恢复。在一些实施例中,EPTE具有参考已经页入的页的MAC。如果VMPageIn规定已经加载的HPA,并且MAC匹配页入的页内容,则EPTE可以用与参考MAC匹配的页入页内容的HPA来更新。用这种方式,EPT结构可以参考其他EPT结构的已经页入的页,或者形成维护客户端的规定安全性策略的其他有向图结构。HPA跟踪器可具有参考计数以跟踪对相同HPA将存在多少参考。类似地,当经由VMPageOut页出参考时,将对于页出的HPA,使HPA跟踪器中的参考计数递减。
为了恰当版本化,可以假设,一旦加载了,EPT表就被固定在存储器中。每当页被VMRead以页出时,EPTE叶都被标记为不存在,并且用于VMPageOut页的MAC(注意,MAC可以被截断以适应)值被存储在EPTE中,替换HPA,因为HPA不再有效。然后,当VMM利用VMPageIn将页页入回到存储器中时,处理器可以检查用于规定的GPA的EPTE,并验证存储的MAC与恢复的页内容和GPA匹配。从而,重放是不可能的。一旦EPT页的所有叶EPTE条目都被页出并且设置为不存在,EPT页本身就可以被页出,并且其MAC向上存储到父EPTE中,用计算的MAC值替换EPT页的HPA。以这种方式,所有的EPT结构都可以被汇总到根EPT中,并且最后,根EPT本身可以被表示为存储在VMCS EPTP中的MAC值,用它的MAC值替换用于EPT根的HPA。从而,表示VM在任何具体时间点的正确全状态的整个EPT层级都可以被页入和页出。
为了确保HPA页尚未映射,处理器可以使用共享KeyID从存储器中读取它。如果页已经被映射为非共享(例如,与VM的私钥一起存储),则具有完整性的共享密钥将报告错误。从而,在重新指配页之前,首先需要用共享KeyID或特殊密钥写入页。当在存储器中分页时,整个页应该用VM私钥针对MAC进行检查。读取共享的高速缓存行,如果没有错误,则将具有VM数据的高速缓存行写入VM私钥。当计算MAC时,对整个页重复。其他实施例可以简单地通过要求仅使用递增或递减的HPA来防止HPA再用,其中处理器跟踪指配给密钥的最高和最低HPA,并确保在当前最低和最高HPA之间没有HPA能被页入。其他实施例可以具有维持当前是否将HPA指配给密钥域的HPA跟踪器结构,并且可以包括对于多少结构从密钥域内参考HPA的参考计数。
上述方法也将为分页EPT树的任一级工作,允许EPT树被页入和页出。代替内容页的叶GPA,通过树获取的路径(GPA范围)能用MAC编码,或者将每个中间级视为GPA范围,并使用它来计算用于由父EPTE参考的EPT页的MAC。然后,可以将页入的EPT页内容与父EPTE的MAC进行比较,以验证子EPT页正确。然后,父EPTE的MAC可以用子EPT页的HPA替换,并且可以设置父EPTE的准许。
EPT根页也可以被页出(例如,通过规定整个GPA范围并将MAC保存到GPR中),但是应该用新的CreateKD重新建立。在一些实施例中,根EPT不能被页入,因为没有具有MAC的父EPT来对照着验证它。其他实施例可以允许RootEPT MAC被页出并存储在VMCS结构中,用根EPT的MAC替换EPTP,将整个GPA范围规定为MAC计算的一部分(因为整个GPA范围被EPT根覆盖)。
客户端可以用正确的MAC配置初始EPT镜像,因此VMM可以将它页入所有EPT页,一直到EPTP根和VMCS。在一些实施例中,如果EPTE被标记为不存在,则客户端可以允许扩展VM的存储器;特殊比特或MAC值(例如零MAC)可以指示客户端允许用零页填充该GPA。在这种情况下,处理器可以通过用零(或其他默认值)填充私有KeyID页并且然后为这个归零的页设置EPTE HPA来允许对私有GPA空间进行页入操作。在该页被VM使用之后,页出操作(VMPageOut)然后可以为该页计算正确的MAC,并将其存储在关联的EPTE中,从而安全地用不是原始加密的VM镜像一部分的页扩展客户VM的存储器。
使用共享KeyID的共享页也可以通过GPA到HPA映射来规定。例如,GPA地址的高存储器区域可以隐含地用于共享存储器。此GPA区域可能总是使物理地址被附加有共享KeyID(并且不是VM的私有KeyID)。从而,对于I/O、虚拟装置等等,VM可以使用GPA空间的这个区域与VMM进行通信。VMM也可以使用VMPageIn指令为这些共享的GPA设置HPA,只有MAC将不会针对更高的GPA地址空间进行检查,并且页也不会使用客户端的密钥进行解密,因为它们是明文。同样,VMM可以使用VMPageOut来将EPT映射设置为对于共享KeyID GPA区域不存在,但是否则不会产生MAC或用客户端的秘密密钥加密关联的页,因为共享页对VM和VMM两者都是明文。其他实施例可以允许VMM扩展EPT树的共享存储器部分,直接向共享存储器读取和写入EPT树的EPT子条目和叶条目。也就是说,EPT根之下的EPT树(GPA范围)的共享部分可以用共享KeyID来访问,允许处理器使用共享KeyID来遍历EPT子条目。
图53图示了根据本发明的实施例的安全VM的端到端供应。
如上面在图49B的描述中所说明的,在对VMM的VMExit时,处理器GPR状态将被保存在VM的私钥域内部,并且寄存器状态被清零。该状态可以被存储在如由VMCS所参考的VEInfo页上,或者以其他方式对VM可访问以在#VE(虚拟化异常)上访问。VM可以始终运行客户的#VE处理程序,以代表VMM访问安全状态,其中VM可以控制使什么处理器或存储器状态对VMM可用,以便保护VM的秘密。例如,客户的#VE处理程序可以经由共享存储器区域或通过从页表映射中选择共享KeyID来与VMM共享信息。CreateKD指令还可以包括用于参考VMCS的VEInfo页的HPA,并为VE Info页设置VMCS HPA字段(使得VMM能决定用于VE Info页的HPA)。在其他实施例中,VE Info页可以经由VMPageIn指令被页入到客户的GPA空间中,并且修改的VMWrite可以检查VMCS(例如,位于VE Info页地址字段)中的MAC,以验证VMCS参考了正确的VE Info页,并且然后如果它计算出正确的MAC值,则为VE Info页设置HPA字段。类似地,VEInfo页字段的VMRead可以将该字段设置为表示当前VE Info页的MAC值,并用该MAC值替换HPA,将HPA返回寄存器中,VMRead也将如此。可以添加多个VMCS,规定不同的VE Info页,允许在客户内的中断、故障、异常或SMI的再进入处理。
在实施例中,可扩展CreateKD来规定多个初始VMCS结构和VMCS阴影结构的列表。如果MAC对于由CreateKD加载的所有结构都匹配,则处理器可以将阴影VMCS链接到其对应的VMCS(链接指针)。提供阴影允许VM使用VMRead和VMWrite指令访问阴影VMCS,以及支持嵌套虚拟化。在其他实施例中,客户端可以规定用于阴影VMCS链接指针字段的页内容的MAC,而VMM可以在修改的VMWrite中规定阴影VMCS的HPA,其中处理器可以验证规定的HPA页的内容与用于阴影VMCS链接指针的VMCS字段中的MAC匹配。如果由客户端规定的字段中的MAC与页内容匹配,则处理器将会将阴影页的HPA写入VMCS阴影链接指针字段。类似地,用于VMCS阴影链接指针字段的VMRead可以计算用于阴影VMCS的MAC值,将该MAC存储在VMCS阴影链接指针字段中,并返回阴影VMCS的HPA。
如下段落涉及进一步的实施例,每个实施例可以被修改为包括与如上所述的VMPageIn指令和/或VMPageOut指令相关的要素。
在示例1中,一种在公用云环境中安全执行消费者工作载荷而不暴露消费者的数据或秘密的设备,包括处理器;以及耦合到处理器的存储器;其中处理器将执行不可信的主机虚拟机监视器,以管理由处理器对至少一个客户虚拟机的执行;不可信主机虚拟机监视器将接收加密的密钥域密钥、由密钥域密钥加密的加密客户代码镜像以及由密钥域密钥加密的加密客户控制结构,密钥域密钥对不可信的主机虚拟机监视器不可访问;不可信主机虚拟机监视器将向处理器发出创建命令以创建第一密钥域,该第一密钥域包括要由密钥域密钥加密的存储器的区域,不可信主机虚拟机监视器进一步验证加密的客户控制结构;响应于接收到创建命令,处理器将创建第一密钥域并解密加密的密钥域密钥以产生密钥域密钥;不可信主机虚拟机监视器将向处理器发出启动命令,以启动第一密钥域内的第一客户虚拟机;并且响应于接收到启动命令,处理器将切换到第一密钥域,解密加密的客户控制结构以产生包括客户处理器状态信息的客户控制结构,解密加密的客户代码镜像以产生客户代码镜像,并且使用客户处理器状态信息在第一密钥域内执行客户代码镜像。
示例2包括示例1的设备,其中不可信主机虚拟机监视器将通过向处理器发出执行散列密钥域指令和VMRead指令中的至少一个的命令来验证加密的客户控制结构。
示例3包括示例1的设备,其中响应于触发所述第一客户虚拟机的退出条件的事件,所述处理器将从所述第一密钥域切换到第二密钥域。
示例4包括示例3的设备,其中第二密钥域未加密;并且第二密钥域是由不可信主机虚拟机监视器和由不可信主机虚拟机监视器管理的每个客户虚拟机共享的存储器的共享区域。
示例5包括示例3的设备,其中第二密钥域由用于不可信主机虚拟机监视器的第二密钥域密钥加密;第二密钥域密钥对不可信主机虚拟机监视器和由不可信主机虚拟机监视器管理的每个客户虚拟机可访问;并且第二密钥域是由不可信主机虚拟机监视器和由不可信主机虚拟机监视器管理的每个客户虚拟机共享的存储器的共享区域。
示例6包括示例3的设备,其中客户控制结构规定存储器的受保护位置,其中处理器可存储客户处理器状态信息。
示例7包括示例6的设备,其中响应于触发第一客户虚拟机的退出条件的事件,处理器要将用于第一客户虚拟机的客户处理器状态信息保存在存储器的受保护位置中;不可信主机虚拟机监视器将向处理器发出重新开始命令,以重新开始第一客户虚拟机;并且响应于接收到重新开始命令,处理器将切换到第一密钥域,从存储器的受保护位置检索用于第一客户虚拟机的客户处理器状态信息,并且使用客户处理器状态信息在第一密钥域内执行客户代码镜像。
示例8包括示例3的设备,其中客户代码镜像包括中断处理程序代码以拦截中断;处理器要将第一客户虚拟机的退出条件转换为异常;客户代码镜像将响应于中断和异常中的至少一个将处理器寄存器信息保存到存储器的受保护位置;如果不可信主机虚拟机监视器不需要第一处理器寄存器,则客户代码镜像将使第一处理器寄存器清零;如果不可信主机虚拟机监视器需要第二处理器寄存器,则客户代码镜像将有条件地暴露第二处理器寄存器;客户代码镜像将调用不可信主机虚拟机监视器;并且第一个客户虚拟机将在不可信主机虚拟机监视器被调用时退出。
示例9包括示例3的设备,其中不可信主机虚拟机监视器将接收加密的更新的客户控制结构,将加密的更新的客户控制结构安装在存储器中,并且验证加密的更新的客户控制结构;处理器将解密加密的更新的客户控制结构,以产生更新的客户控制结构;响应于验证加密的更新的客户控制结构,不可信主机虚拟机监视器将向处理器发出使用更新的客户控制结构进入第一客户虚拟机的进入命令;并且响应于接收到进入命令,处理器将使用更新的客户控制结构进入第一客户虚拟机。
示例10包括示例9的设备,其中不可信主机虚拟机监视器将进一步接收加密的更新的客户代码镜像并将加密的更新的客户代码镜像安装在存储器中;处理器将解密加密的更新的客户代码镜像更新以产生更新的客户代码镜像;并且处理器将通过使用更新的客户控制结构执行更新的客户代码镜像来进入第一客户虚拟机。
示例11包括示例3的设备,其中不可信主机虚拟机监视器将确定是否需要对客户控制结构的改变;第一客户虚拟机验证对客户控制结构的改变不损害第一客户虚拟机的安全性;第一客户虚拟机将使用密钥域密钥产生合并了改变的加密的更新客户控制结构;并且第一客户虚拟机将经由由不可信主机虚拟机监视器和第一客户虚拟机共享的存储器的共享区域向不可信主机虚拟机监视器发送加密的更新的客户控制结构。
示例12包括示例11的设备,其中不可信主机虚拟机监视器要将加密的更新的客户控制结构安装在存储器中;不可信主机虚拟机监视器将验证加密的更新的客户控制结构;处理器将解密加密的更新的客户控制结构,以产生更新的客户控制结构;响应于验证加密的更新的客户控制结构,不可信主机虚拟机监视器将向处理器发出使用更新的客户控制结构进入第一客户虚拟机的进入命令;并且响应于接收到进入命令,处理器将使用更新的客户控制结构进入第一客户虚拟机。
示例13包括示例12的设备,其中不可信主机虚拟机监视器响应于从第一客户虚拟机接收的请求来确定对客户控制结构是否需要改变。
示例14包括示例13的设备,其中该请求进一步包括对客户代码镜像的第二改变;第一客户虚拟机将验证对客户代码镜像的第二改变不损害第一客户虚拟机的安全性;第一客户虚拟机将使用密钥域密钥产生合并第二改变的加密的更新的客户代码镜像;并且第一客户虚拟机将经由存储器的共享区域将加密的更新的客户控制镜像发送到不可信主机虚拟机监视器。
示例15包括示例14的设备,其中不可信主机虚拟机监视器将接收加密的更新的客户代码镜像;处理器将解密加密的更新的客户代码镜像以产生更新的客户代码镜像;并且处理器将通过执行更新的客户代码镜像来执行客户代码镜像。
示例16包括示例15的设备,其中加密的客户代码镜像包括代理代码镜像;加密的客户控制结构包括代理控制结构;不可信主机虚拟机监视器将验证代理控制结构;不可信主机虚拟机监视器将向处理器发出启动第一密钥域内的第二客户虚拟机的第二启动命令,第二客户虚拟机要提供代理以代表第一密钥域内的不可信主机虚拟机监视器行动;并且响应于接收到第二启动命令,处理器将切换到第一密钥域,解密加密的客户代码镜像以产生代理代码镜像,解密加密的客户控制结构以产生包括代理处理器状态信息的代理控制结构,并且使用代理处理器状态信息在第一密钥域内执行代理代码镜像。
示例17包括示例16的设备,其中:不可信主机虚拟机监视器将经由由代理和不可信主机虚拟机监视器共享的存储器的共享区域向代理传递修改第一客户虚拟机的客户控制结构的请求;响应于从存储器的共享区域读取该请求,代理将修改第一密钥域内的第一客户虚拟机的客户控制结构,以产生第一客户虚拟机的修改的客户控制结构;不可信主机虚拟机监视器将验证第一客户虚拟机的修改的客户控制结构;在验证修改的客户控制结构时,不可信主机虚拟机监视器将向处理器发出进入第一密钥域内的第一客户虚拟机的进入命令;并且响应于接收到进入命令,处理器将使用来自修改的客户控制结构的第二客户处理器状态信息在第一密钥域内执行客户代码镜像。
示例18包括示例16的设备,其中不可信主机虚拟机监视器将向代理传递从加密存储装置中检索页的请求,其中加密存储装置的每个页都由存储密钥加密;代理将使用存储密钥解密页以产生解密的页;代理将验证解密的页;并且如果解密的页被验证,则代理将把解密的页安装到存储器中。
示例19包括示例18的设备,其中如果代理能够访问其中要安装解密页的存储器中的位置,则代理将把解密的页拷贝到存储器的位置;并且如果代理不能访问其中要安装解密的页的存储器中的位置,则:代理进一步使用密钥域密钥和该位置的物理地址作为微调来重新加密该页以产生重新加密的页;并且不可信主机虚拟机监视器将把重新加密的页安装到存储器中。
示例20包括示例16的设备,其中不可信主机虚拟机监视器将向代理传递将页从加密存储器移动到存储装置的请求,其中加密存储器的每个页都由密钥域密钥加密;代理将使用密钥域密钥解密该页以产生解密的页;代理将验证解密的页;并且如果解密的页被验证,则代理将用存储装置的存储装置密钥重新加密解密的页,以产生存储装置加密的页,将存储装置加密的页移动到存储装置,并且将存储装置加密的页提供给不可信主机虚拟机监视器。
示例21包括示例1的设备,其中不可信虚拟机监视器将向处理器发出将加密的客户控制结构加载到存储器中的加载命令,该加载命令包括指向从中加载加密的客户控制结构和第一密钥域的密钥域标识符的存储器中的物理地址的指针;并且,响应于接收到加载命令,处理器将确定对应于密钥域标识符的密钥域密钥,其中处理器将使用密钥域密钥来解密加密的客户控制结构。
示例22包括示例1的设备,其中处理器进一步确认加密的客户控制结构的完整性。
示例23包括一种用于在公用云环境中安全地执行消费者工作载荷而不暴露消费者的数据或秘密的处理器,该处理器用于执行不可信主机虚拟机监视器,以管理由处理器对至少一个客户虚拟机的执行;响应于由不可信主机虚拟机监视器发出的创建命令来创建第一密钥域,该第一密钥域包括要由密钥域密钥加密的存储器的区域,该密钥域密钥对不可信主机虚拟机监视器不可访问;解密从不可信主机虚拟机监视器接收的加密的密钥域密钥,以产生密钥域密钥;响应于由不可信主机虚拟机监视器发出的启动命令,在第一密钥域内启动第一客户虚拟机,其中启动第一客户虚拟机包括:切换到第一密钥域,解密从不可信主机虚拟机监视器接收的加密客户控制结构,以产生包括处理器状态信息的客户控制结构,解密从不可信主机虚拟机监视器接收的加密的客户代码镜像以产生客户代码镜像,并使用处理器状态信息在第一密钥域内执行客户代码镜像。
示例24包括示例23的处理器,其中:处理器进一步响应于触发第一客户虚拟机的退出条件的事件而从第一密钥域切换到第二密钥域。
示例25包括示例24的处理器,其中:第二密钥域未加密;并且第二密钥域是由不可信主机虚拟机监视器和由不可信主机虚拟机监视器管理的每个客户虚拟机共享的存储器的共享区域。
示例26包括示例24的处理器,其中:第二密钥域由用于不可信主机虚拟机监视器的第二密钥域密钥加密;第二密钥域密钥对不可信主机虚拟机监视器和由不可信主机虚拟机监视器管理的每个客户虚拟机可访问;并且第二密钥域是由不可信主机虚拟机监视器和由不可信主机虚拟机监视器管理的每个客户虚拟机共享的存储器的共享区域。
示例27包括示例23的处理器,其中:客户控制结构规定存储器的受保护位置,其中处理器可存储客户处理器状态信息。
示例28包括示例27的处理器,其中:该处理器进一步用于:响应于触发第一客户虚拟机的退出条件的事件,而将用于第一客户虚拟机的客户处理器状态信息保存在存储器的受保护位置中;并且响应于从不可信主机虚拟机监视器接收到重新开始命令,处理器进一步用于:切换到第一密钥域,从存储器的受保护位置检索用于第一客户虚拟机的客户处理器状态信息,并且使用处理器状态信息在第一密钥域内执行客户代码镜像。
示例29包括示例23的处理器,其中所述处理器进一步:将第一虚拟机的退出条件转换为异常。
示例30包括示例23的处理器,其中所述处理器进一步用于:解密加密的更新的客户控制结构以产生更新的客户控制结构;并响应于接收到进入第一客户虚拟机的进入命令,使用更新的客户控制结构进入第一客户虚拟机。
示例31包括示例23的处理器,其中所述处理器进一步用于:解密加密的更新的客户代码镜像更新,以产生更新的客户代码镜像;并且通过使用更新的客户控制结构执行更新的客户代码镜像来进入第一客户虚拟机。
示例32包括示例23的处理器,其中所述处理器进一步用于:响应于接收到在第一密钥域内启动第二客户虚拟机的第二启动命令,第二客户虚拟机要提供代理来代表第一密钥域内的不可信主机虚拟机监视器行动,该处理器用于:切换到第一密钥域,解密加密的客户代码镜像以产生代理代码镜像,解密加密的客户控制结构以产生包括代理处理器状态信息的代理控制结构,并且使用代理处理器状态信息在第一密钥域内执行代理代码镜像。
示例33包括示例23的处理器,其中所述处理器进一步用于:响应于接收到使用修改的客户控制结构进入第一客户虚拟机的进入命令,使用来自修改的客户控制结构的第二客户处理器状态信息在第一密钥域内执行客户代码镜像。
示例34包括示例23的处理器,其中所述处理器进一步用于:为用于第一密钥域的密钥域标识符确定对应的密钥域密钥,其中处理器响应于接收到将加密的客户控制结构加载到存储器中的加载命令,而使用对应的密钥域密钥来解密加密的客户控制结构,该加载命令包括指向从中加载加密的客户控制结构和用于第一密钥域的密钥域标识符的存储器中的物理地址的指针。
实施例35包括示例23-34的处理器,进一步包括合并在用户设备触摸使能的装置中的片上系统(SoC)。
示例36是包括显示器、存储器和上述示例23-34中的一个或多个示例的处理器的系统。
示例37包括至少一个计算机可读介质,该介质包括指令,所述指令当由处理器执行时使计算机在公用云环境中安全地执行消费者工作载荷而不暴露消费者的数据或秘密,该计算机:接收加密的密钥域密钥、由密钥域密钥加密的加密客户代码镜像以及由密钥域密钥加密的加密客户控制结构;向处理器发出创建命令以创建第一密钥域,该第一密钥域包括将由密钥域密钥加密的存储器的区域;验证加密的客户控制结构;以及向处理器发出启动第一密钥域内的第一客户虚拟机的启动命令。
示例38包括示例37的计算机可读介质,其中所述指令进一步使计算机:通过向处理器发出执行散列密钥域指令和VMRead指令中的至少一个指令的命令来验证加密的客户控制结构。
示例39包括示例37的计算机可读介质,其中所述指令进一步使计算机:向处理器发出重新开始第一客户虚拟机的重新开始命令。
示例40包括示例37的计算机可读介质,其中所述指令进一步使计算机:拦截中断;响应于当第一客户虚拟机引起退出条件时引发的中断和异常中的至少一个,将处理器寄存器信息保存到存储器的受保护位置;如果管理第一客户虚拟机的执行的不可信主机虚拟机监视器不需要第一处理器寄存器,则使第一处理器寄存器清零;如果不可信主机虚拟机监视器需要第二处理器寄存器,则有条件地暴露第二处理器寄存器;调用不可信主机虚拟机监视器;并在调用不可信主机虚拟机监视器时退出第一个客户虚拟机。
示例41包括示例37的计算机可读介质,其中所述指令进一步使计算机:接收加密的更新的客户控制结构,将加密的更新的客户控制结构安装在存储器中,并验证加密的更新的客户控制结构;以及响应于验证加密的更新的客户控制结构,向处理器发出使用更新的客户控制结构进入第一客户虚拟机的进入命令,由处理器产生的更新的客户控制结构解密加密的更新的客户控制结构。
示例42包括权利要求41的计算机可读介质,其中所述指令进一步使计算机:接收加密的更新的客户代码镜像;并将加密的更新的客户代码镜像安装在存储器中。
示例43包括权利要求37的计算机可读介质,其中所述指令进一步使计算机:确定是否需要对客户控制结构的改变;由第一虚拟机验证对客户控制结构的改变没有损害第一客户虚拟机的安全性;由第一虚拟机使用密钥域密钥产生合并改变的加密的更新的客户控制结构;并且由第一虚拟机经由由不可信主机虚拟机监视器和第一客户虚拟机共享的存储器的共享区域将加密的更新的客户控制结构发送到不可信主机虚拟机监视器。
示例44包括权利要求43的计算机可读介质,其中所述指令进一步使计算机:将加密的更新的客户控制结构安装在存储器中;验证加密的更新的客户控制结构;以及响应于验证加密的更新的客户控制结构,向处理器发出使用更新的客户控制结构进入第一客户虚拟机的进入命令,由处理器产生的更新的客户控制结构解密加密的更新的客户控制结构。
示例45包括权利要求44的计算机可读介质,其中所述指令进一步使计算机:响应于从第一客户虚拟机接收的请求来确定对客户控制结构是否需要改变。
示例46包括权利要求45的计算机可读介质,其中所述指令进一步使计算机:由第一虚拟机验证对包括在请求中的客户代码镜像的第二改变不损害第一客户虚拟机的安全性;由第一客户虚拟机使用密钥域密钥产生合并第二改变的加密的更新的客户代码镜像;并且由第一客户虚拟机经由存储器的共享区域将加密的更新的客户控制镜像发送到不可信主机虚拟机监视器。
示例47包括权利要求46的计算机可读介质,其中所述指令进一步使计算机:接收加密的更新的客户代码镜像,其中执行客户代码镜像包括执行由处理器解密加密的更新的客户代码镜像产生的更新的客户代码镜像。
示例48包括权利要求37的计算机可读介质,其中所述指令进一步使计算机:验证包括在加密的客户控制结构内的代理控制结构;并向处理器发出使用代理控制结构启动第一密钥域内的第二客户虚拟机的第二启动命令,第二客户虚拟机提供代理来代表第一密钥域内的不可信主机虚拟机监视器行动。
示例49包括权利要求48的计算机可读介质,其中所述指令进一步使计算机:经由与代理共享的存储器的共享区域,向代理传递修改第一客户虚拟机的客户控制结构的请求;响应于从存储器的共享区域读取请求,由代理修改第一密钥域内的第一客户虚拟机的客户控制结构,以产生第一客户虚拟机的修改的客户控制结构;验证第一客户虚拟机的修改的客户控制结构;以及在验证修改的客户控制结构时,向处理器发出使用修改的客户控制结构进入第一密钥域内的第一客户虚拟机的进入命令。
示例50包括权利要求48的计算机可读介质,其中所述指令进一步使计算机:向代理传递从加密的存储装置中检索页的请求,其中加密的存储装置的每个页由存储装置密钥加密;由代理使用存储装置密钥解密页,以产生解密的页;由代理验证解密的页;并且如果解密的页被验证,则将解密的页安装到存储器中。
示例51包括权利要求50的计算机可读介质,其中所述指令进一步使计算机:如果代理能够访问其中要安装解密页的存储器中的位置,则代理将解密页拷贝到存储器的位置中;并且如果代理不能访问其中要安装解密页的存储器中的位置,则:由代理使用密钥域密钥和该位置的物理地址作为微调来重新加密页,以产生重新加密的页,并且由不可信主机虚拟机监视器将重新加密的页安装到存储器中。
示例52包括权利要求48的计算机可读介质,其中所述指令进一步使计算机:向代理传递从加密的存储装置中检索页的请求,其中加密的存储装置的每个页由存储装置密钥加密;由代理使用存储装置密钥解密页,以产生解密的页;由代理验证解密的页;并且如果解密的页被验证:由代理用存储装置的存储装置密钥重新加密解密的页,以产生存储装置加密的页;由代理将存储装置加密的页移动到存储装置;以及,由代理将存储装置加密的页提供到不可信的主机虚拟机监视器。
示例53是一种用于在公用云环境中安全地执行消费者工作载荷而不暴露消费者的数据或秘密的方法,该方法包括:接收加密的密钥域密钥、由密钥域密钥加密的加密客户代码镜像以及由密钥域密钥加密的加密客户控制结构;向处理器发出创建第一密钥域的创建命令,该第一密钥域包括要由密钥域密钥加密的存储器的区域;验证加密的客户控制结构;以及向处理器发出启动第一密钥域内的第一客户虚拟机的启动命令,其中启动命令包括指向加密客户控制结构的地址的指针。
示例54包括示例53的方法,其中验证加密的客户控制结构包括通过向处理器发出执行散列密钥域指令和VMRead指令中的至少一个指令的命令来验证加密的客户控制结构。
示例55包括示例53的方法,进一步包括:向处理器发出重新开始第一客户虚拟机的重新开始命令。
示例56包括示例53的方法,进一步包括:拦截中断;响应于当第一客户虚拟机引起退出条件时引发的中断和异常中的至少一个,将处理器寄存器信息保存到存储器的受保护位置;如果管理第一客户虚拟机的执行的不可信主机虚拟机监视器不需要第一处理器寄存器,则使第一处理器寄存器清零;如果不可信主机虚拟机监视器需要第二处理器寄存器,则有条件地暴露第二处理器寄存器;调用不可信主机虚拟机监视器;并在调用不可信主机虚拟机监视器时退出第一个客户虚拟机。
示例57包括示例53的方法,进一步包括:接收加密的更新的客户控制结构,将加密的更新的客户控制结构安装在存储器中,并验证加密的更新的客户控制结构;以及响应于验证加密的更新的客户控制结构,向处理器发出使用更新的客户控制结构进入第一客户虚拟机的进入命令,由处理器产生的更新的客户控制结构解密加密的更新的客户控制结构。
示例58包括示例57的方法,进一步包括:接收加密的更新的客户代码镜像;并将加密的更新的客户代码镜像安装在存储器中。
示例59包括示例53的方法,进一步包括:确定是否需要对客户控制结构的改变;由第一虚拟机验证对客户控制结构的改变没有损害第一客户虚拟机的安全性;由第一虚拟机使用密钥域密钥产生合并改变的加密的更新的客户控制结构;并且由第一虚拟机经由由不可信主机虚拟机监视器和第一客户虚拟机共享的存储器的共享区域将加密的更新的客户控制结构发送到不可信主机虚拟机监视器。
示例60包括示例59的方法,进一步包括:将加密的更新的客户控制结构安装在存储器中;验证加密的更新的客户控制结构;以及响应于验证加密的更新的客户控制结构,向处理器发出使用更新的客户控制结构进入第一客户虚拟机的进入命令,由处理器产生的更新的客户控制结构解密加密的更新的客户控制结构。
示例61包括示例60的方法,进一步包括:响应于从第一客户虚拟机接收的请求来确定对客户控制结构是否需要改变。
示例62包括示例61的方法,进一步包括:由第一虚拟机验证对包括在请求中的客户代码镜像的第二改变不损害第一客户虚拟机的安全性;由第一客户虚拟机使用密钥域密钥产生合并第二改变的加密的更新的客户代码镜像;并且由第一客户虚拟机经由存储器的共享区域将加密的更新的客户控制镜像发送到不可信主机虚拟机监视器。
示例63包括示例62的方法,进一步包括:接收加密的更新的客户代码镜像,其中执行客户代码镜像包括执行由处理器解密加密的更新的客户代码镜像产生的更新的客户代码镜像。
示例64包括示例53的方法,进一步包括:验证包括在加密的客户控制结构内的代理控制结构;并向处理器发出使用代理控制结构启动第一密钥域内的第二客户虚拟机的第二启动命令,第二客户虚拟机提供代理来代表第一密钥域内的不可信主机虚拟机监视器行动。
示例65包括示例64的方法,进一步包括:经由与代理共享的存储器的共享区域,向代理传递修改第一客户虚拟机的客户控制结构的请求;响应于从存储器的共享区域读取请求,由代理修改第一密钥域内的第一客户虚拟机的客户控制结构,以产生第一客户虚拟机的修改的客户控制结构;验证第一客户虚拟机的修改的客户控制结构;以及在验证修改的客户控制结构时,向处理器发出使用修改的客户控制结构进入第一密钥域内的第一客户虚拟机的进入命令。
示例66包括示例64的方法,进一步包括:向代理传递从加密的存储装置中检索页的请求,其中加密的存储装置的每个页由存储装置密钥加密;由代理使用存储装置密钥解密页,以产生解密的页;由代理验证解密的页;并且如果解密的页被验证,则将解密的页安装到存储器中。
示例67包括示例66的方法,进一步包括:如果代理能够访问其中要安装解密页的存储器中的位置,则代理将解密页拷贝到存储器的位置中;并且如果代理不能访问其中要安装解密页的存储器中的位置,则:由代理使用密钥域密钥和该位置的物理地址作为微调来重新加密页,以产生重新加密的页,并且由不可信主机虚拟机监视器将重新加密的页安装到存储器中。
示例68包括示例64的方法,进一步包括:向代理传递从加密的存储装置中检索页的请求,其中加密的存储装置的每个页由存储装置密钥加密;由代理使用存储装置密钥解密页,以产生解密的页;由代理验证解密的页;并且如果解密的页被验证:由代理用存储装置的存储装置密钥重新加密解密的页,以产生存储装置加密的页;由代理将存储装置加密的页移动到存储装置;以及,由代理将存储装置加密的页提供到不可信的主机虚拟机监视器。
在示例69中,包括指令的计算机可读介质将执行上面任一示例的方法。
在示例70中,包括数据的计算机可读介质将由至少一个机器用于制作至少一个集成电路以执行上面示例中任一示例的方法。
在示例72中,设备包括用于执行上面示例中任一示例的方法的部件。
在示例73中,一种用于在公用云环境中安全地执行消费者工作载荷而不暴露消费者的数据或秘密的设备包括:用于接收加密的密钥域密钥、由密钥域密钥加密的加密客户代码镜像以及由密钥域密钥加密的加密客户控制结构的部件;用于向处理器发出创建第一密钥域的创建命令的部件,该第一密钥域包括要由密钥域密钥加密的存储器的区域;验证加密的客户控制结构;以及用于向处理器发出启动第一密钥域内的第一客户虚拟机的启动命令的部件,其中启动命令包括指向加密客户控制结构的地址的指针。
示例74包括示例73的设备,其中用于验证加密的客户控制结构的部件包括用于向处理器发出执行散列密钥域指令和VMRead指令中的至少一个指令的命令的部件。
示例75包括示例73的设备,进一步包括:用于向处理器发出重新开始第一客户虚拟机的重新开始命令的部件。
示例76包括示例73的设备,进一步包括:用于拦截中断的部件;用于响应于当第一客户虚拟机引起退出条件时引发的中断和异常中的至少一个而将处理器寄存器信息保存到存储器的受保护位置的部件;用于如果不可信主机虚拟机监视器不需要第一处理器寄存器则使第一处理器寄存器清零的部件;用于如果不可信主机虚拟机监视器需要第二处理器寄存器则有条件地暴露第二处理器寄存器的部件;用于调用不可信主机虚拟机监视器的部件;以及用于在调用不可信主机虚拟机监视器时退出第一个客户虚拟机的部件。
示例77包括示例73的设备,进一步包括:用于接收加密的更新的客户控制结构、将加密的更新的客户控制结构安装在存储器中并验证加密的更新的客户控制结构的部件;以及用于响应于验证加密的更新的客户控制结构而向处理器发出使用更新的客户控制结构进入第一客户虚拟机的进入命令的部件,由处理器产生的更新的客户控制结构解密加密的更新的客户控制结构。
示例78包括示例77的设备,进一步包括:用于接收加密的更新的客户代码镜像的部件;以及用于将加密的更新的客户代码镜像安装在存储器中的部件。
示例79包括示例73的设备,进一步包括:用于确定是否需要对客户控制结构的改变的部件;用于由第一虚拟机验证对客户控制结构的改变没有损害第一客户虚拟机的安全性的部件;用于由第一虚拟机使用密钥域密钥产生合并改变的加密的更新的客户控制结构的部件;以及用于由第一虚拟机经由由不可信主机虚拟机监视器和第一客户虚拟机共享的存储器的共享区域将加密的更新的客户控制结构发送到不可信主机虚拟机监视器的部件。
示例80包括示例79的设备,进一步包括:用于将加密的更新的客户控制结构安装在存储器中的部件;用于验证加密的更新的客户控制结构的部件;以及用于响应于验证加密的更新的客户控制结构而向处理器发出使用更新的客户控制结构进入第一客户虚拟机的进入命令的部件,由处理器产生的更新的客户控制结构解密加密的更新的客户控制结构。
示例81包括示例80的设备,进一步包括:用于响应于从第一客户虚拟机接收的请求来确定对客户控制结构是否需要改变的部件。
示例82包括示例81的设备,进一步包括:用于由第一虚拟机验证对包括在请求中的客户代码镜像的第二改变不损害第一客户虚拟机的安全性的部件;用于由第一客户虚拟机使用密钥域密钥产生合并第二改变的加密的更新的客户代码镜像的部件;以及用于由第一客户虚拟机经由存储器的共享区域将加密的更新的客户控制镜像发送到不可信主机虚拟机监视器的部件。
示例83包括示例82的设备,进一步包括:用于接收加密的更新的客户代码镜像的部件,其中执行客户代码镜像包括执行由处理器解密加密的更新的客户代码镜像产生的更新的客户代码镜像。
示例84包括示例73的设备,进一步包括:用于验证包括在加密的客户控制结构内的代理控制结构的部件;以及用于向处理器发出使用代理控制结构启动第一密钥域内的第二客户虚拟机的第二启动命令的部件,第二客户虚拟机提供代理来代表第一密钥域内的不可信主机虚拟机监视器行动。
示例85包括示例84的设备,进一步包括:用于经由与代理共享的存储器的共享区域向代理传递修改第一客户虚拟机的客户控制结构的请求的部件;用于响应于从存储器的共享区域读取请求而由代理修改第一密钥域内的第一客户虚拟机的客户控制结构以产生第一客户虚拟机的修改的客户控制结构的部件;用于验证第一客户虚拟机的修改的客户控制结构的部件;以及用于在验证修改的客户控制结构时向处理器发出进入第一密钥域内的第一客户虚拟机的进入命令的部件。
示例86包括示例84的设备,进一步包括:用于向代理传递从加密的存储装置中检索页的请求的部件,其中加密的存储装置的每个页由存储装置密钥加密;用于由代理使用存储装置密钥解密页以产生解密的页的部件;用于由代理验证解密的页的部件;以及用于如果解密的页被验证则将解密的页安装到存储器中的部件。
示例87包括示例86的设备,进一步包括:用于如果代理能够访问其中要安装解密页的存储器中的位置则代理将解密页拷贝到存储器的位置中的部件;以及用于如果代理不能访问其中要安装解密页的存储器中的位置则由代理使用密钥域密钥和该位置的物理地址作为微调来重新加密页以产生重新加密的页的部件;以及用于如果代理不能访问其中要安装解密页的存储器中的位置则由不可信主机虚拟机监视器将重新加密的页安装到存储器中的部件。
示例88包括示例84的设备,进一步包括:用于向代理传递从加密的存储装置中检索页的请求的部件,其中加密的存储装置的每个页由存储装置密钥加密;用于由代理使用存储装置密钥解密页以产生解密的页的部件;用于由代理验证解密的页的部件;用于如果解密的页被验证则由代理用存储装置的存储装置密钥重新加密解密的页以产生存储装置加密的页的部件;用于由代理将存储装置加密的页移动到存储装置的部件;以及用于由代理将存储装置加密的页提供给不可信主机虚拟机监视器的部件。
本发明还提供如下技术方案:
技术方案1. 一种处理器,包括:
核,所述核用于执行用于将第一虚拟机(VM)客户页分页到密钥域中的第一指令,所述第一指令的执行包括使用存储在用于所述第一VM客户页的扩展页表条目(EPTE)中的消息认证码(MAC)来验证所述第一VM客户页并用所述VM客户页的主机物理地址替换所述EPTE中的所述MAC;以及
加密引擎,所述加密引擎用于响应所述第一指令而解密所述第一VM客户页。
技术方案2. 如技术方案1所述的处理器,其中:
所述核还用于执行将所述第一VM客户页分页出所述密钥域的第二条指令;以及
所述加密引擎还用于响应所述第二指令而加密所述第一VM客户页。
技术方案3. 如技术方案1所述的处理器,其中所述核还用于执行创建所述密钥域的第三指令,所述密钥域包括多个受保护的存储器位置以存储多个VM客户页,包括所述第一VM客户页。
技术方案4. 如技术方案3所述的处理器,其中所述第三指令的执行包括解密加密的密钥域密钥以提供给加密引擎以便解密所述多个VM客户页。
技术方案5. 如技术方案1所述的处理器,其中所述第一指令用于规定第一客户物理地址,以指示所述第一VM的客户物理地址范围的开始。
技术方案6. 如技术方案5所述的处理器,其中所述第一指令用于规定第二客户物理地址,以指示所述第一VM的所述客户物理地址范围的结束。
技术方案7. 如技术方案3所述的处理器,其中所述第一指令用于规定第一受保护的存储器位置的主机物理地址,以存储所述第一VM客户页。
技术方案8. 如技术方案7所述的处理器,其中所述第一指令用于规定对于访问所述第一受保护的存储器位置的准许。
技术方案9. 如技术方案1所述的处理器,其中所述第二指令用于规定第一客户物理地址以指示所述第一VM的客户物理地址范围的开始,以及规定第二客户物理地址以指示所述第一VM的所述客户物理地址范围的结束。
技术方案10. 如技术方案9所述的处理器,其中所述第二指令用于规定对于访问所述第一VM客户页的准许。
技术方案11. 一种系统,包括:
处理器;以及
存储器,所述存储器耦合到所述处理器;其中
所述处理器将执行不可信主机虚拟机监视器,以管理由至少一个客户虚拟机的处理器的执行;
所述不可信主机虚拟机监视器要接收加密的密钥域密钥、由密钥域密钥加密的加密的客户代码镜像以及由所述密钥域密钥加密的加密的客户控制结构,所述密钥域密钥对所述不可信主机虚拟机监视器不可访问;
所述不可信主机虚拟机监视器要向所述处理器发出创建第一密钥域的创建指令,所述第一密钥域包括要由所述密钥域密钥加密的所述存储器的区域,所述不可信主机虚拟机监视器要另外验证所述加密的客户控制结构;
响应于接收到所述创建指令,所述处理器要创建所述第一密钥域并解密所述加密的密钥域密钥以产生所述密钥域密钥;以及
所述不可信主机虚拟机监视器要向所述处理器发出在所述第一密钥域内构建第一客户虚拟机的页入指令。
技术方案12. 如技术方案11所述的系统,其中:
所述不可信主机虚拟机监视器要向所述处理器发出在所述第一密钥域内启动所述第一客户虚拟机的启动指令;以及
响应于接收到所述启动指令,所述处理器要切换到所述第一密钥域,解密所述加密的客户控制结构以产生包括客户处理器状态信息的客户控制结构,解密所述加密的客户代码镜像以产生客户代码镜像,以及使用所述客户处理器状态信息在所述第一密钥域内执行所述客户代码镜像。
技术方案13. 如技术方案12所述的系统,其中
响应于触发所述第一客户虚拟机的退出条件的事件,所述处理器要从所述第一密钥域切换到第二密钥域。
技术方案14. 如技术方案13所述的系统,其中所述客户控制结构规定所述存储器的受保护位置,所述处理器要在所述存储器的所述受保护的位置存储所述客户处理器状态信息。
技术方案15. 如技术方案14所述的系统,其中
响应于触发所述第一客户虚拟机的所述退出条件的所述事件,所述处理器还要将所述第一客户虚拟机的所述客户处理器状态信息保存在所述存储器的所述受保护位置中;
所述不可信主机虚拟机监视器要向所述处理器发出重启所述第一客户虚拟机的重启指令;以及
响应于接收到所述重启指令,所述处理器要切换到所述第一密钥域,从所述存储器的所述受保护位置检索所述第一客户虚拟机的所述客户处理器状态信息,以及使用所述客户处理器状态信息在所述第一密钥域内执行所述客户代码镜像。
技术方案16. 一种方法,包括:
由不可信主机虚拟机监视器接收加密的密钥域密钥、由密钥域密钥加密的加密的客户代码镜像以及由所述密钥域密钥加密的加密的客户控制结构,所述密钥域密钥对所述不可信主机虚拟机监视器不可访问;
由所述不可信主机虚拟机监视器向处理器发出创建第一密钥域的创建指令,所述第一密钥域包括要由所述密钥域密钥加密的存储器的区域,所述不可信主机虚拟机监视器要另外验证所述加密的客户控制结构;
由所述处理器响应于接收到所述创建指令而创建所述第一密钥域,并解密所述加密的密钥域密钥以产生所述密钥域密钥;以及
由所述不可信主机虚拟机监视器向所述处理器发出在所述第一密钥域内构建第一客户虚拟机的页入指令。
技术方案17. 如技术方案16所述的方法,进一步包括:
由所述不可信主机虚拟机监视器向所述处理器发出在所述第一密钥域内启动所述第一客户虚拟机的启动指令;以及
由所述处理器响应于接收到所述启动指令而切换到所述第一密钥域,解密所述加密的客户控制结构以产生包括客户处理器状态信息的客户控制结构,解密所述加密的客户代码镜像以产生客户代码镜像,以及使用所述客户处理器状态信息在所述第一密钥域内执行所述客户代码镜像。
技术方案18. 如技术方案17所述的方法,进一步包括:
由所述处理器响应于触发所述第一客户虚拟机的退出条件的事件而从所述第一密钥域切换到第二密钥域。
技术方案19. 如技术方案18所述的方法,其中所述客户控制结构规定所述存储器的受保护位置,所述处理器要在所述存储器的所述受保护位置存储所述客户处理器状态信息。
技术方案20. 如技术方案19所述的方法,进一步包括:
由所述处理器响应于触发所述第一客户虚拟机的所述退出条件的所述事件,而将所述第一客户虚拟机的所述客户处理器状态信息保存在所述存储器的所述受保护位置中;
由所述不可信主机虚拟机监视器向所述处理器发出重启所述第一客户虚拟机的重启指令;以及
由所述处理器响应于接收到所述重启指令而切换到所述第一密钥域,从所述存储器的所述受保护位置检索所述第一客户虚拟机的所述客户处理器状态信息,并使用所述客户处理器状态信息在所述第一密钥域内执行所述客户代码镜像。
要理解到,以上示例的各种组合是可能的。
注意,术语“电路(circuit和circuitry)在本文中可互换使用。如本文所使用的,这些术语和术语“逻辑”用于单独或以任何组合指代模拟电路、数字电路、硬连线电路、可编程电路、处理器电路、微控制器电路、硬件逻辑电路、状态机电路和/或任何其他类型的物理硬件组件。实施例可以被用在许多不同类型的系统中。例如,在一个实施例中,通信装置能被布置成执行本文描述的各种方法和技术。当然,本发明的范围不限于通信装置,并且相反,其它实施例能针对用于处理指令的其它类型设备,或者包括指令的一个或多个机器可读介质,所述指令响应于在计算装置上被执行而使装置执行本文描述的方法和技术中的一种或多种。
实施例可以用代码实现,并且可以被存储在其上存储有指令的非暂态存储介质上,其能用于对系统编程以执行指令。实施例还可以用数据实现,并且可以被存储在非暂态存储介质上,其如果由至少一个机器使用则使至少一个机器制作至少一个集成电路以执行一个或多个操作。更进一步的实施例可以在包括信息的计算机可读存储介质中实现,所述信息当被制造进SoC或其他处理器中时将SoC或其他处理器配置成执行一个或多个操作。存储介质可包括但不限于任何类型的盘,包括软盘、光盘、固态驱动器(SSD)、光盘只读存储器(CD-ROM)、光盘可重写(CD-RW)和磁光盘、半导体器件诸如只读存储器(ROM)、随机存取存储器(RAM)(诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM))、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM)、磁卡或光卡或者适合于存储电子指令的任何其它类型介质。
虽然本发明已经关于有限数量的实施例进行了描述,但本领域技术人员将认识到对其的众多修改和更改。意图是,在落入本发明的真实精神和范围内时,所附权利要求书涵盖所有此类修改和更改。
Claims (20)
1.一种用于安全公共云计算的处理器,包括:
核,所述核用于执行用于将第一虚拟机(VM)客户页分页到密钥域中的第一指令,所述第一指令的执行包括使用存储在用于所述第一VM客户页的扩展页表条目(EPTE)中的消息认证码(MAC)来验证所述第一VM客户页并用所述VM客户页的主机物理地址替换所述EPTE中的所述MAC;以及
加密引擎,所述加密引擎用于响应所述第一指令而解密所述第一VM客户页。
2.如权利要求1所述的处理器,其中:
所述核还用于执行将所述第一VM客户页分页出所述密钥域的第二条指令;以及
所述加密引擎还用于响应所述第二指令而加密所述第一VM客户页。
3.如权利要求1所述的处理器,其中所述核还用于执行创建所述密钥域的第三指令,所述密钥域包括多个受保护的存储器位置以存储多个VM客户页,包括所述第一VM客户页。
4.如权利要求3所述的处理器,其中所述第三指令的执行包括解密加密的密钥域密钥以提供给加密引擎以便解密所述多个VM客户页。
5.如权利要求1所述的处理器,其中所述第一指令用于规定第一客户物理地址,以指示所述第一VM的客户物理地址范围的开始。
6.如权利要求5所述的处理器,其中所述第一指令用于规定第二客户物理地址,以指示所述第一VM的所述客户物理地址范围的结束。
7.如权利要求3所述的处理器,其中所述第一指令用于规定第一受保护的存储器位置的主机物理地址,以存储所述第一VM客户页。
8.如权利要求7所述的处理器,其中所述第一指令用于规定对于访问所述第一受保护的存储器位置的准许。
9.如权利要求1所述的处理器,其中所述第二指令用于规定第一客户物理地址以指示所述第一VM的客户物理地址范围的开始,以及规定第二客户物理地址以指示所述第一VM的所述客户物理地址范围的结束。
10.如权利要求9所述的处理器,其中所述第二指令用于规定对于访问所述第一VM客户页的准许。
11.一种用于安全公共云计算的系统,包括:
处理器;以及
存储器,所述存储器耦合到所述处理器;其中
所述处理器要执行不可信主机虚拟机监视器,以管理由至少一个客户虚拟机的处理器的执行;
所述不可信主机虚拟机监视器要接收加密的密钥域密钥、由密钥域密钥加密的加密的客户代码镜像以及由所述密钥域密钥加密的加密的客户控制结构,所述密钥域密钥对所述不可信主机虚拟机监视器不可访问;
所述不可信主机虚拟机监视器要向所述处理器发出创建第一密钥域的创建指令,所述第一密钥域包括要由所述密钥域密钥加密的所述存储器的区域,所述不可信主机虚拟机监视器要另外验证所述加密的客户控制结构;
响应于接收到所述创建指令,所述处理器要创建所述第一密钥域并解密所述加密的密钥域密钥以产生所述密钥域密钥;以及
所述不可信主机虚拟机监视器要向所述处理器发出在所述第一密钥域内构建第一客户虚拟机的页入指令。
12.如权利要求11所述的系统,其中:
所述不可信主机虚拟机监视器要向所述处理器发出在所述第一密钥域内启动所述第一客户虚拟机的启动指令;以及
响应于接收到所述启动指令,所述处理器要切换到所述第一密钥域,解密所述加密的客户控制结构以产生包括客户处理器状态信息的客户控制结构,解密所述加密的客户代码镜像以产生客户代码镜像,以及使用所述客户处理器状态信息在所述第一密钥域内执行所述客户代码镜像。
13.如权利要求12所述的系统,其中
响应于触发所述第一客户虚拟机的退出条件的事件,所述处理器要从所述第一密钥域切换到第二密钥域。
14.如权利要求13所述的系统,其中所述客户控制结构规定所述存储器的受保护位置,所述处理器要在所述存储器的所述受保护的位置存储所述客户处理器状态信息。
15.如权利要求14所述的系统,其中
响应于触发所述第一客户虚拟机的所述退出条件的所述事件,所述处理器还要将所述第一客户虚拟机的所述客户处理器状态信息保存在所述存储器的所述受保护位置中;
所述不可信主机虚拟机监视器要向所述处理器发出重启所述第一客户虚拟机的重启指令;以及
响应于接收到所述重启指令,所述处理器要切换到所述第一密钥域,从所述存储器的所述受保护位置检索所述第一客户虚拟机的所述客户处理器状态信息,以及使用所述客户处理器状态信息在所述第一密钥域内执行所述客户代码镜像。
16.一种用于安全公共云计算的方法,包括:
由不可信主机虚拟机监视器接收加密的密钥域密钥、由密钥域密钥加密的加密的客户代码镜像以及由所述密钥域密钥加密的加密的客户控制结构,所述密钥域密钥对所述不可信主机虚拟机监视器不可访问;
由所述不可信主机虚拟机监视器向处理器发出创建第一密钥域的创建指令,所述第一密钥域包括要由所述密钥域密钥加密的存储器的区域,所述不可信主机虚拟机监视器要另外验证所述加密的客户控制结构;
由所述处理器响应于接收到所述创建指令而创建所述第一密钥域,并解密所述加密的密钥域密钥以产生所述密钥域密钥;以及
由所述不可信主机虚拟机监视器向所述处理器发出在所述第一密钥域内构建第一客户虚拟机的页入指令。
17.如权利要求16所述的方法,进一步包括:
由所述不可信主机虚拟机监视器向所述处理器发出在所述第一密钥域内启动所述第一客户虚拟机的启动指令;以及
由所述处理器响应于接收到所述启动指令而切换到所述第一密钥域,解密所述加密的客户控制结构以产生包括客户处理器状态信息的客户控制结构,解密所述加密的客户代码镜像以产生客户代码镜像,以及使用所述客户处理器状态信息在所述第一密钥域内执行所述客户代码镜像。
18.如权利要求17所述的方法,进一步包括:
由所述处理器响应于触发所述第一客户虚拟机的退出条件的事件而从所述第一密钥域切换到第二密钥域。
19.如权利要求18所述的方法,其中所述客户控制结构规定所述存储器的受保护位置,所述处理器要在所述存储器的所述受保护位置存储所述客户处理器状态信息。
20.如权利要求19所述的方法,进一步包括:
由所述处理器响应于触发所述第一客户虚拟机的所述退出条件的所述事件,而将所述第一客户虚拟机的所述客户处理器状态信息保存在所述存储器的所述受保护位置中;
由所述不可信主机虚拟机监视器向所述处理器发出重启所述第一客户虚拟机的重启指令;以及
由所述处理器响应于接收到所述重启指令而切换到所述第一密钥域,从所述存储器的所述受保护位置检索所述第一客户虚拟机的所述客户处理器状态信息,并使用所述客户处理器状态信息在所述第一密钥域内执行所述客户代码镜像。
Applications Claiming Priority (4)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201862719979P | 2018-08-20 | 2018-08-20 | |
US62/719979 | 2018-08-20 | ||
US16/370,924 US11520611B2 (en) | 2018-08-20 | 2019-03-30 | Secure public cloud using extended paging and memory integrity |
US16/370924 | 2019-03-30 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN110851231A true CN110851231A (zh) | 2020-02-28 |
Family
ID=67137771
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910656038.7A Pending CN110851231A (zh) | 2018-08-20 | 2019-07-19 | 使用扩展分页和存储器完整性的安全公用云 |
Country Status (3)
Country | Link |
---|---|
US (1) | US11520611B2 (zh) |
EP (1) | EP3614284A1 (zh) |
CN (1) | CN110851231A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111949376A (zh) * | 2020-08-24 | 2020-11-17 | 海光信息技术有限公司 | 虚拟机系统和用于虚拟机系统的方法 |
CN112540831A (zh) * | 2020-12-23 | 2021-03-23 | 海光信息技术股份有限公司 | 虚拟可信环境加载、运行方法、数据处理及安全处理装置 |
CN112738219A (zh) * | 2020-12-28 | 2021-04-30 | 中国第一汽车股份有限公司 | 程序运行方法、装置、车辆及存储介质 |
CN113364581A (zh) * | 2020-03-05 | 2021-09-07 | 美光科技公司 | 虚拟化鉴认装置 |
CN113485790A (zh) * | 2021-06-30 | 2021-10-08 | 海光信息技术股份有限公司 | 一种虚拟机的重启方法、迁移方法和相关设备 |
CN113704007A (zh) * | 2021-09-14 | 2021-11-26 | 上海交通大学 | 利用硬件特性的无服务器计算平台加速系统 |
US11848924B2 (en) | 2020-10-12 | 2023-12-19 | Red Hat, Inc. | Multi-factor system-to-system authentication using secure execution environments |
US11947659B2 (en) | 2020-05-28 | 2024-04-02 | Red Hat, Inc. | Data distribution across multiple devices using a trusted execution environment in a mobile device |
US11971980B2 (en) | 2020-05-28 | 2024-04-30 | Red Hat, Inc. | Using trusted execution environments to perform a communal operation for mutually-untrusted devices |
US12093371B2 (en) | 2020-05-28 | 2024-09-17 | Red Hat, Inc. | Data distribution using a trusted execution environment in an untrusted device |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8819090B2 (en) * | 2012-04-23 | 2014-08-26 | Citrix Systems, Inc. | Trusted file indirection |
US10884952B2 (en) * | 2016-09-30 | 2021-01-05 | Intel Corporation | Enforcing memory operand types using protection keys |
US11303632B1 (en) * | 2018-06-08 | 2022-04-12 | Wells Fargo Bank, N.A. | Two-way authentication system and method |
WO2020055401A1 (en) * | 2018-09-12 | 2020-03-19 | Visa International Service Association | Checkout with mac |
US11010479B2 (en) * | 2018-10-01 | 2021-05-18 | International Business Machines Corporation | Cyber security for space-switching program calls |
US10915640B2 (en) | 2018-10-01 | 2021-02-09 | International Business Machines Corporation | Cyber security testing for authorized services |
US10833949B2 (en) * | 2018-11-20 | 2020-11-10 | Amazon Technologies, Inc | Extension resource groups of provider network services |
US12106132B2 (en) | 2018-11-20 | 2024-10-01 | Amazon Technologies, Inc. | Provider network service extensions |
US11354418B2 (en) * | 2019-03-08 | 2022-06-07 | International Business Machines Corporation | Incremental decryption and integrity verification of a secure operating system image |
US11029991B2 (en) * | 2019-03-08 | 2021-06-08 | International Business Machines Corporation | Dispatch of a secure virtual machine |
US11055256B2 (en) * | 2019-04-02 | 2021-07-06 | Intel Corporation | Edge component computing system having integrated FaaS call handling capability |
CN110083465B (zh) * | 2019-04-26 | 2021-08-17 | 上海连尚网络科技有限公司 | 一种寄宿应用间的数据传递方法 |
US11064017B2 (en) | 2019-09-24 | 2021-07-13 | Amazon Technologies, Inc. | Peripheral device enabling virtualized computing service extensions |
US11677754B2 (en) * | 2019-12-09 | 2023-06-13 | Daniel Chien | Access control systems and methods |
US11436342B2 (en) | 2019-12-26 | 2022-09-06 | Intel Corporation | TDX islands with self-contained scope enabling TDX KeyID scaling |
US11475131B2 (en) * | 2020-01-27 | 2022-10-18 | Red Hat, Inc. | Hypervisor level signature checks for encrypted trusted execution environments |
US11336679B2 (en) | 2020-01-28 | 2022-05-17 | International Business Machines Corporation | Combinatorial test design for optimizing parameter list testing |
US11381972B2 (en) | 2020-02-24 | 2022-07-05 | Bank Of America Corporation | Optimizing authentication and management of wireless devices in zero trust computing environments |
US11569997B1 (en) | 2020-03-09 | 2023-01-31 | Amazon Technologies, Inc. | Security mechanisms for data plane extensions of provider network services |
GB2593486B (en) * | 2020-03-24 | 2022-06-15 | Advanced Risc Mach Ltd | Apparatus and method using plurality of physical address spaces |
CN111949369B (zh) * | 2020-08-03 | 2024-05-31 | 上海交通大学 | 面向图形处理器的可信执行环境构建方法及系统 |
US11954047B2 (en) | 2020-09-26 | 2024-04-09 | Intel Corporation | Circuitry and methods for spatially unique and location independent persistent memory encryption |
US20220100871A1 (en) * | 2020-09-26 | 2022-03-31 | Intel Corporation | Scalable multi-key memory encryption |
WO2022076352A1 (en) | 2020-10-05 | 2022-04-14 | Redcom Laboratories, Inc. | zkMFA: ZERO-KNOWLEDGE BASED MULTI-FACTOR AUTHENTICATION SYSTEM |
US12117908B2 (en) * | 2020-12-04 | 2024-10-15 | Intel Corporation | Restoring persistent application data from non-volatile memory after a system crash or system reboot |
US20220206951A1 (en) * | 2020-12-24 | 2022-06-30 | Intel Corporation | Method and apparatus for run-time memory isolation across different execution realms |
US11792001B2 (en) * | 2021-01-28 | 2023-10-17 | Capital One Services, Llc | Systems and methods for secure reprovisioning |
US11539503B2 (en) * | 2021-03-03 | 2022-12-27 | Red Hat, Inc. | Container management for cryptanalysis attack protection |
US12118376B2 (en) | 2021-04-20 | 2024-10-15 | Stmicroelectronics International N.V. | Virtual mode execution manager |
US11934548B2 (en) * | 2021-05-27 | 2024-03-19 | Microsoft Technology Licensing, Llc | Centralized access control for cloud relational database management system resources |
US12001874B2 (en) | 2021-07-13 | 2024-06-04 | Rockwell Automation Technologies | Digital engineering secure remote access |
US12020056B2 (en) * | 2021-07-13 | 2024-06-25 | Rockwell Automation Technologies, Inc. | Industrial automation control project conversion |
US12079652B2 (en) | 2021-07-13 | 2024-09-03 | Rockwell Automation Technologies, Inc. | Digital engineering virtual machine infrastructure |
US20230039162A1 (en) * | 2021-08-09 | 2023-02-09 | Salesforce.Com, Inc. | Automated external ip address discovery of services in a public cloud environment |
US20220014356A1 (en) * | 2021-09-24 | 2022-01-13 | David M. Durham | Seamless access to trusted domain protected memory by virtual machine manager using transformer key identifier |
US20230094125A1 (en) * | 2021-09-24 | 2023-03-30 | Nvidia Corporation | Implementing trusted executing environments across multiple processor devices |
US20220012086A1 (en) * | 2021-09-24 | 2022-01-13 | Intel Corporation | Multiple secure virtual processors for a trust domain |
US11880318B2 (en) * | 2021-10-29 | 2024-01-23 | Microsoft Technology Licensing, Llc | Local page writes via pre-staging buffers for resilient buffer pool extensions |
CN114064518A (zh) * | 2021-11-19 | 2022-02-18 | 上海兆芯集成电路有限公司 | 指定密钥辨识码进行转译后备缓冲区清除的处理器和方法 |
CN114064520A (zh) | 2021-11-19 | 2022-02-18 | 上海兆芯集成电路有限公司 | 进行阶层式高速缓存不写回即无效的计算机系统以及方法 |
CN114064517A (zh) | 2021-11-19 | 2022-02-18 | 上海兆芯集成电路有限公司 | 指定密钥进行高速缓存写回且无效的计算机系统及方法 |
US12063206B2 (en) * | 2021-11-30 | 2024-08-13 | Oracle International Corporation | Secure transfer of workloads across security regions |
US20230319021A1 (en) * | 2022-03-30 | 2023-10-05 | Infosys Limited | Agent-based establishment of secure connection between endpoints and cloud servers |
CN115659290B (zh) * | 2022-11-07 | 2023-07-21 | 海光信息技术股份有限公司 | 代码保护系统、方法、虚拟系统、芯片及电子设备 |
CN116383449B (zh) * | 2023-04-13 | 2024-05-24 | 江西数字网联信息安全技术有限公司 | 基于链表的crud数据顺序的实现方法、系统及设备 |
Family Cites Families (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP5484117B2 (ja) * | 2010-02-17 | 2014-05-07 | 株式会社日立製作所 | ハイパーバイザ及びサーバ装置 |
US20120179909A1 (en) * | 2011-01-06 | 2012-07-12 | Pitney Bowes Inc. | Systems and methods for providing individual electronic document secure storage, retrieval and use |
US8819455B2 (en) | 2012-10-05 | 2014-08-26 | Intel Corporation | Parallelized counter tree walk for low overhead memory replay protection |
US9563455B2 (en) | 2013-10-28 | 2017-02-07 | Intel Corporation | Virtualization exceptions |
US9213653B2 (en) | 2013-12-05 | 2015-12-15 | Intel Corporation | Memory integrity |
US9335943B2 (en) | 2014-06-30 | 2016-05-10 | Intel Corporation | Method and apparatus for fine grain memory protection |
US9870322B2 (en) * | 2015-11-12 | 2018-01-16 | International Business Machines Corporation | Memory mapping for object-based storage devices |
US10846117B1 (en) * | 2015-12-10 | 2020-11-24 | Fireeye, Inc. | Technique for establishing secure communication between host and guest processes of a virtualization architecture |
US20170220466A1 (en) * | 2016-01-30 | 2017-08-03 | Intel Corporation | Sharing a guest physical address space among virtualized contexts |
US10303899B2 (en) | 2016-08-11 | 2019-05-28 | Intel Corporation | Secure public cloud with protected guest-verified host control |
US10810321B2 (en) | 2016-08-11 | 2020-10-20 | Intel Corporation | Secure public cloud |
US10083129B2 (en) * | 2016-08-29 | 2018-09-25 | Red Hat Israel, Ltd. | Code loading hardening by hypervisor page table switching |
-
2019
- 2019-03-30 US US16/370,924 patent/US11520611B2/en active Active
- 2019-06-28 EP EP19183502.4A patent/EP3614284A1/en active Pending
- 2019-07-19 CN CN201910656038.7A patent/CN110851231A/zh active Pending
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11997217B2 (en) | 2020-03-05 | 2024-05-28 | Micron Technology, Inc. | Virtualized authentication device |
CN113364581A (zh) * | 2020-03-05 | 2021-09-07 | 美光科技公司 | 虚拟化鉴认装置 |
US12093371B2 (en) | 2020-05-28 | 2024-09-17 | Red Hat, Inc. | Data distribution using a trusted execution environment in an untrusted device |
US11971980B2 (en) | 2020-05-28 | 2024-04-30 | Red Hat, Inc. | Using trusted execution environments to perform a communal operation for mutually-untrusted devices |
US11947659B2 (en) | 2020-05-28 | 2024-04-02 | Red Hat, Inc. | Data distribution across multiple devices using a trusted execution environment in a mobile device |
CN111949376A (zh) * | 2020-08-24 | 2020-11-17 | 海光信息技术有限公司 | 虚拟机系统和用于虚拟机系统的方法 |
US11848924B2 (en) | 2020-10-12 | 2023-12-19 | Red Hat, Inc. | Multi-factor system-to-system authentication using secure execution environments |
CN112540831B (zh) * | 2020-12-23 | 2022-11-11 | 海光信息技术股份有限公司 | 虚拟可信环境加载、运行方法、数据处理及安全处理装置 |
CN112540831A (zh) * | 2020-12-23 | 2021-03-23 | 海光信息技术股份有限公司 | 虚拟可信环境加载、运行方法、数据处理及安全处理装置 |
CN112738219A (zh) * | 2020-12-28 | 2021-04-30 | 中国第一汽车股份有限公司 | 程序运行方法、装置、车辆及存储介质 |
CN113485790B (zh) * | 2021-06-30 | 2024-01-23 | 海光信息技术股份有限公司 | 一种虚拟机的重启方法、迁移方法和相关设备 |
CN113485790A (zh) * | 2021-06-30 | 2021-10-08 | 海光信息技术股份有限公司 | 一种虚拟机的重启方法、迁移方法和相关设备 |
CN113704007B (zh) * | 2021-09-14 | 2023-11-07 | 上海交通大学 | 利用硬件特性的无服务器计算平台加速系统 |
CN113704007A (zh) * | 2021-09-14 | 2021-11-26 | 上海交通大学 | 利用硬件特性的无服务器计算平台加速系统 |
Also Published As
Publication number | Publication date |
---|---|
US20200057664A1 (en) | 2020-02-20 |
US11520611B2 (en) | 2022-12-06 |
EP3614284A1 (en) | 2020-02-26 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11520611B2 (en) | Secure public cloud using extended paging and memory integrity | |
US11163911B2 (en) | Secure public cloud with protected guest-verified host control | |
US11989332B2 (en) | Secure public cloud with protected guest-verified host control | |
US11783081B2 (en) | Secure public cloud | |
US10325118B2 (en) | Cryptographic cache lines for a trusted execution environment | |
CN109783188B (zh) | 用于安全公共云的密码存储器所有权表 | |
US10686605B2 (en) | Technologies for implementing mutually distrusting domains | |
US11841806B1 (en) | System, apparatus and method for integrity protecting tenant workloads in a multi-tenant computing environment | |
Jin et al. | Architectural support for secure virtualization under a vulnerable hypervisor | |
KR20190031136A (ko) | 신뢰 도메인들을 사용한 가상화된 시스템들에서의 격리 제공 | |
CN114902225A (zh) | 多租户环境中的密码计算 |
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 |