多核架构中的虚拟机内存划分的制作方法

文档序号:6361292阅读:235来源:国知局
专利名称:多核架构中的虚拟机内存划分的制作方法
技术领域
本公开中呈现的实施例通常涉及用于提供用于虚拟化服务器的计算基础设施的技木,并且更具体来说,涉及用于基础设施即服务(IaaS)云环境中的可信虚拟机执行的方法和装置。
背景技术
服务器虚拟化技术允许多个虚拟机同时在单个物理计算系统中运行。当前,数据中心环境用来创建这些物理计算系统(通常称为服务器)的大型群集,其中每个服务器运行多个虚拟机(VM)。这种方法已经导致可以提供大量计算能力的数据中心。若干供应商当前允许用户提供虚拟机实例以便在数据中心的运营商所提供的虚拟化服务器上运行。以各种形式,这种通用计算模型已经被称为“云计算”或“基础设施即服务”(laaS),因为用户在抽象硬件平台上简单地运行其虚拟机实例,而无需拥有或管理所述硬件平台。如果不是数百或数千虚拟机实例来响应对于计算资源需求的改变,这种方法允许给定用户迅速地扩增几十倍。同吋,云计算和IaaS供应商所面对的显著障碍在于需要用户信任云供应商和管理在服务器上运行的多个VM的管理程序(或虚拟机管理器(VMM))的实施。当前,这是通过对云供应商在有关安全的适当地方进行的操作过程的检查和理解来完成。这产生了信任感,但是仍不存在强有力的机制来保证在同一个中央处理单元(CPU)套接字服务器中执行的VM之间的有效分离。属于不同企业的VM被布置在同一个服务器中的事实可能导致侧面攻击和安全问题。例如,当属于不同企业的VM在同一 CPU的不同核中执行时,他们通过L3缓存(或者通过绕过管理程序设定的内存保护)共享对内存的访问。本领域技术人员知道,这可能导致信息从ー个VM泄露到另ー个VM。也就是说,来自一个企业的恶意VM可能试图获得对为了另ー个企业运行的VM的内存的访问。另ー个问题在于管理程序本身。即使管理程序被设计成执行不同VM之间的分离,但是数据仍可能由于管理程序错误或由于针对管理程序本身的明确攻击而从ー个VM泄露到另ー个VM。另外,恶意管理员(其是云供应商人员的一部分)可能会发出另ー组攻击。


因此,以可以详细理解本公开的上述特征的方式,可以參照实施例对以上概述的本公开进行更为具体的描述,其中一些实施例在附图中示出。然而,应注意的是,附图仅示出本公开的典型实施例,并且因此不应被认为限制本发明的范围,因为本公开可以允许其他同等有效的实施例。图1A至图1B是示出了根据本公开的某些实施例的用于基础设施即服务(IaaS)云环境中的可信执行的不同安全模型的方框图。图2是示出了根据本公开的某些实施例的被配置成提供用于IaaS环境中的多个VM的可信执行的虚拟化服务器的部件的方框图。图3是示出了根据本公开的某些实施例的被配置成提供用于IaaS环境中的可信虚拟机执行的处理器架构的示例的方框图。图4进ー步示出了根据本公开的某些实施例的图3中第一次示出的CPU架构的各方面。图5示出了根据本公开的某些实施例的一种用于安全地启动VM实例的方法。图6示出了根据本公开的某些实施例的ー种用于加密L3缓存线的方法。图7示出了根据本公开的某些实施例的ー种用于解密L3缓存线的方法。
具体实施例方式概述本文描述的ー个实施例包括ー种方法。所述方法可以通常包括识别内存地址,获得随机数(nonce),并且使用至少第一密钥、所述随机数和识别出的内存地址来产生密钥流。所述方法还可以包括使用所产生的密钥流来对在从第一缓存写入到第二缓存中时与内存地址相对应的数据进行加密。第一缓存在中央处理单元(CPU)上的多个处理核中ー个核的本地。并且第二缓存由所述多个处理核共享。所述方法还可以包括将随机数写入到第二缓存中。本文描述的另一个实施例提供ー种计算系统,所述计算系统包括内存和具有多个处理核的CPU。每个核自身可以具有第一缓存,并且CPU还可以包括第二缓存,其中所述第ニ缓存可以由所述多个处理核中的每ー个访问。每个处理核可以包括将各自的处理核耦合到第二缓存上的加密/解密块。所述加密/解密块通常可以被配置成执行包括以下步骤的操作识别内存地址,获得随机数,使用至少第一密钥、所述随机数和识别出的内存地址来产生密钥流,以及使用所产生的密钥流来对在从第一缓存写入到第二缓存中时与内存地址相对应的数据进行加密。CPU可以进一歩包括配置成将随机数写入到第二缓存中的内存控制器。本文描述的又一个实施例包括ー种方法。这种方法通常可以包括试图执行读取操作以读取与进入多个第一缓存之一的内存地址相关联的数据。所述第一缓存各自在中央处理单元(CPU)上的多个处理核中一个核的本地。另外,所述读取操作试图从由所述多个处理核共享的第二缓存读取与第一内存地址相关联的数据。在确定了与所述内存地址相关联的数据在第二缓存中之后,可以通过获得随机数、使用至少第一密钥、所述随机数和所述内存地址来产生密钥流来执行读取操作。所述读取操作还可以包括使用所产生的密钥流来对在从第二缓存读取到所述第一缓存中时与内存地址相关联的数据进行解密。示例实施例的描述本文描述的实施例提供用于内存划分的技术,内存划分允许在多核处理架构上的虚拟机(VM)的可信执行。内存划分可以通过在给定VM的控制下在执行所述VM的处理核的信任边界内使用密钥加密层3 (L3)缓存线来实现。另外,本文描述的实施例提供ー种用于存储和处理与对L3缓存线执行的毎次加密/解密操作相关联的加密相关元数据的有效方法。
如以下更详细描述,物理多核CPU可以包括硬件信任锚部件。所述信任锚可以被配置成管理用以在多核CPU的ー个核上执行VM或管理程序时加密/解密指令和数据的密钥。在一个实施例中,所述信任锚可以使用安全通信过程来接收与加密的VM启动映像相关联的密钥。一旦由所述信任锚接收到并存储,则所述密钥可以用以解密VM启动映像并将其载入到虚拟化服务器上的内存中。所述信任锚还可以产生(或获得)会话密钥,所述会话密钥用以当在多核CPU的处理核之一上执行VM时加密/解密写入到L3缓存中和从L3缓存中读取的数据。在一个实施例中,所述信任锚可以使用高级加密标准(AES)计数器模式(AES-CTR)来加密/解密写入到L3缓存中和从L3缓存中读取的数据。使用AES-CTR可以提供足以加密/解密在ー个核上的L2缓存与多核架构内的多个处理核之间共享的L3缓存之间移动的数据的加密速度。当然,可以使用具有足够性能特点的其他流密码。更大体而言,可以在计数器模式中使用任何带密钥的伪随机函数;AES是通常使用的伪随机函数,我们具体使用AES来描述实施例。使用AES-CTR,实际加密可以通过在将明文在写入到L3缓存中时以通过使用与给定VM的执行上下文相关联的密钥加密计数器的递增值所产生的密钥流(即,以会话密钥)对明文进行异或来执行。在一个实施例中,用以产生用于加密/解密L3缓存线的密钥流的计数器通过将与具体读取/写入操作相关联的内存地址与随机数值相连结而构成。在写入操作的情况下,所述随机数值可以是每次执行写入操作时递增的计数器值,或仅仅是从随机噪音源得出的值。用于给定写入操作的随机数值也与加密数据一起存储在L3缓存中。另外,如果发生缓存刷新(cache flush),则随机数值与加密数据一起被写入到内存中。对于读取操作来说,所述随机数值被用来(与内存地址一起)重建密钥流。实际的解密可以通过在将加密数据从L3缓存读取并且写入到处理器核上的L2缓存中时以密钥流对加密数据进行异或来执行。在一个实施例中,CPU上的内存控制器被配置成管理写入到L3缓存和内存中并且从L3缓存和内存读取的随机数的写入。当出现异常时(例如,计时器中断、硬件访问等),所述信任锚换出与运行VM实例相关联的会话密钥并且为新的执行上下文选择适当密钥。在一个实施例中,CPU可以被配置成用信号向所述信任锚通知关于被排程来执行的下ー个VM实例(或管理程序)的执行上下文。例如,由丨ntei VT-x技术和AMD-V技术提供的虚拟化扩展。另外,用于切换密钥并且初始化所述信任锚中所包括的加密引擎的过程可能要求比上下文切換本身要求更少的时钟周期。呈现以下描述来使得本领域的一般技术人员能够制造和使用所提议的技木。具体实施例和应用的描述仅被作为示例提供,并且各种修改对于本领域技术人员将是显而易见的。本文描述的一般原理在不脱离本公开的范围的情况下可以适用于其他实施例和应用。因此,本公开不限于所示的实施例,而是应符合与本文描述的原理和特征一致的最广范围。为了清晰的目的,不对与所提出的概念的相关技术领域中已知的技术材料相关的特征进行详细描述。图1A至图1B是示出了根据本公开的某些实施例的用于基础设施即服务(IaaS)云环境中的可信VM执行的不同模型的方框图。如图1A中所示,堆栈模型105可以用来提供用于执行一个或多个虚拟机125的可信环境。具体来说,硬件锚芯片(例如,可信平台模块(TPM)IlO)或等效物可以用来执行以下任务安全密钥存储、签名征收/验证以及密钥的安全输出等。TPMllO形成堆栈模型105中的信任的第一环节。一旦TPMllO对其进行确认,安全BIOSl 15可以依次确认管理程序120是未被修改。这样做使信任链从TPMllO延伸到安全BI0S115,并且随后,延伸到管理程序120。一旦被启动,管理程序120就遵循相同的程序来初启虚拟机125。也就是说,一旦被安全BI0S115确认,管理程序120则用作可信操作程序来确认和启动虚拟机实例125。此后,每个虚拟机125上的操作系统130对启动应用程序135进行相同的操作。更简单地说,TPMllO确认BIOSl 15,BIOSl 15确认管理程序120,管理程序120又确认在管理程序120上启动的每个VM125。因此,堆栈模型105依靠信任其前趋的链中的每个元素。在堆栈模型105中,上层依靠下层以获得信任。如果在所述链上存在任何中断,则系统是不安全的。另外,所述链上的下层可以仍对上层可以执行的内容具有可见性。另外,即使管理程序确认并启动了给定虚拟机125,其也不会限制可信0S130和可信应用程序135执行的动作。因此,堆栈模型105不会阻止以其他方式被确认的应用程序135 (或VM125)访问属于由管理程序120执行的另ー个VM的数据,例如,存储在L3缓存中的数据。 图1B示出了根据本公开中呈现的ー个实施例的可替代信任模型。如图所示,信任模型150提供一种星形模型,其中信任锚165位于中间而不是位于底部。这样做允许信任锚165直接确认虚拟化服务器上的BI0S175和管理程序170。然而进ー步说,这样也允许信任锚165确认传递到管理程序170以供执行的每个VM映像(例如,VM1155和VM2160)以及确认用于应用程序108载入VM155U60并在其上执行的代码。也就是说,与堆栈模型105不同,星形模型150提供被配置成提供信任锚165的信任锚165。为了防止执行上下文之间的未经授权的访问,星形模型150从完整性保护(在堆栈模型中)转变成关于虚拟化服务器中的每个相关操作程序的机密性。这样做可以用来为VM155U60提供安全计算环境。例如,与堆栈模型105不同,星形模型150防止具有较高特权的操作程序(例如,管理程序170)访问其他操作程序(例如,VM155U60)的数据,以及防止ー个VM访问属于另ー个VM的数据,SP使这些VM同时在多核处理器上的不同核中执行并且共享L3缓存和内存。以下论述的图2至图4提供在具有多核CPU的虚拟化服务器上实施图1B中所示的星形模型150的示例架构。图2是示出了根据本公开的某些实施例的被配置成提供用于IaaS环境中的多个VM的可信执行的虚拟化服务器200的部件的方框图。虚拟化服务器200通常可以包括由一个或多个互连250连接的硬件计算部件的集合。说明性地,虚拟化服务器200包括网络接ロ卡(NIC)251、内存252、CPU253以及存储设备254 (例如,本地附接的磁盘驱动器、固态设备(SSD)或与诸如SAN的远程存储设备的连接)。虚拟化服务器200允许多个虚拟机(VM) 230^3同时在服务器200上执行,从而共享虚拟化服务器200上存在的计算硬件。然而,虚拟机23(V3通常不直接知道虚拟化服务器200上的计算硬件。相反,管理程序240可以被配置成为每个虚拟机230”提供虚拟化硬件元件。请注意,虽然虚拟硬件分配对于在每个虚拟机230卜3上运行的OS和应用程序136呈现出不同,但是他们在虚拟化层下被共享。也就是说,虚拟资源提供关于下层物理资源的抽象概念,并且下层物理资源在虚拟机230卜3之间共享。说明性地,内存252包括管理三个虚拟机实例(VM) 230^3的管理程序240。每个VM23(V3提供具有虚拟CPU、内存、存储设备和网络接ロ的虚拟化计算平台。操作系统在每个VM230”上被启动,并且用以载入和执行应用程序232^。在一个实施例中,管理程序240可以被实施为在虚拟化服务器200的计算硬件上直接运行的软件层。在这种情况下,管理程序240可以被配置成拦截由在VM230上运行的OS作出的ー些(或所有)操作系统调用。更大体而言,管理程序240在系统硬件上运行并且允许虚拟化服务器200作为VM23(V3的主机。在一个实施例中,信任锚258可以用来确认管理程序240。也就是说,管理程序240 (S卩,管理程序240在存储盘上的映像)可以由加密密钥来签名,并且信任锚258可以被配置成获得在载入管理程序240之前验证管理程序240未被修改所需要的密钥。例如,给定IaaS供应商(或管理程序厂商)可以使用私人/公共密钥对的私人密钥来对管理程序代码进行签名。在一些情况下,公共密钥也可以通过认证授权来签名(并且被提供作为PKI认证的一部分)。接下来,信任锚258可以从PKI认证获得公共密钥,并且确认与管理程序240相关联的数字签名。一旦被确认,管理程序240可以启动并执行VM23(V3。另外,每个VM230也可以是 被签名和/或加密的对象。例如,企业可以将使用VM映像加密密钥加密的VM映像传送到虚拟化服务器200。在一个实施例中,信任锚258向企业进行自身鉴别,以在虚拟化服务器230上执行给定VM230之前,获得与该VM230相关联的VM映像加密密钥。所述VM映像加密密钥可以用来解密提交给虚拟化服务器200的加密VM映像。另外,信任锚258可以产生(或获得)关于每个给定VM230的内存会话密钥,并且在VM在一个执行核256上执行的同时,将所述内存会话密钥用以加密/解密从缓存255读取和写入到缓存255的信息。在一个实施例中,信任锚258可以作为载入给定VM实例的一部分而产生内存会话密钥。信任锚258可以被配置成在CPU253上的执行核256之一的执行上下文改变的任何时候交换内存会话密钥,例如,不同VM23(V3之间的上下文切換或VM23(V3与管理程序240自身之间的上下文切換。缓存255提供由CPU253上的执行核256访问的高速内存。虽然内存252可以跨虚拟机230被分段,但是缓存255通常由不同的VM23(V3共享。例如,如图所示,CPU253可以包括一个或多个执行核256。当在不同的执行核256上执行不同的VM23(V3吋,VM23(V3可以共享对缓存255的访问。在一个实施例中,信任锚258可以为每个VM230使用不同的内存会话密钥,以加密/解密到缓存255的每次读取/写入。这样做防止在一个执行核256上执行的VM230访问属于在不同的执行核256上执行的另ー个VM230的缓存255中的数据。另外,这样做还防止了管理程序240访问属于给定VM23(V3的缓存255中的数据,不管管理程序240是否具有通常较高的特权等级。图3是示出了根据本公开的某些实施例的被配置成提供用于IaaS环境中的可信虚拟机执行的处理器架构的示例的方框图。如图所示,CPU300包括两个不同的处理核305,310。并且,每个CPU核305包括层I (LI)指令和数据缓存和L2缓存。CPU300还包括信任锚315,并且处理核305、310各自具有相关联的密钥产生部件320"和加密/解密块325"。说明性地,将处理核305、310连接到共享的L3缓存330的缓存线各自包括加密/解密块325"中的ー个。L3缓存330连接到内存控制器335,内存控制器335又连接到内存 340。尽管CPU300说明具有两个处理核305、310的ー个示例实施例,但是本领域的一般技术人员将认识到,本文描述的实施例可以容易地适用于具有多个处理核的CPU。在这种情况下,每个额外的CPU核将包括到信任锚315的连接以及密钥产生部件320和与加密/解密块连接的共享L3缓存330。在一个实施例中,信任锚315可以被配置成管理处理核305、310上的多租户执行上下文(即,多个虚拟机映像的执行)以及管理与外部世界的通信。例如,信任锚315可以被配置成提供安全启动程序,所述安全启动程序用于载入和启动VM实例,以提供VM实例之间的安全上下文切換,以便基于执行上下文来交换内存会话密钥,并且在VM执行期间提供安全密钥存储。另外,在制造时,可以对嵌入有CPU300的信任锚315提供公共/私人密钥对和由认证授权(CA)颁发的认证,所述CA将信任锚身份绑定到公共密钥。可以包括CPU模型和制造商名称作为该认证的属性。在一个实施例中,信任锚315可以使用公共/私人密钥对来证明虚拟化服务器具有配置有信任锚的多核CPU,并且因此,可以在以其他方式不可信的云环境中启动并执行VM映像。此外,信任锚315可以在发生上下文切換的任何时候从处理核305、310接收指示。这种指示可以提供对于输入执行上下文的标识符。如上所述,某些多核处理器提供扩展的指令集,这允许从CPU上的处理核输出执行上下文。例如,由丨nt.el VT-X技术和VMX指
令集提供的虚拟化扩展提供用以用信号通知处理核上的执行上下文的改变的指令(例如,VMEXIT 和 VMRESUME 指令)。响应于来自核305、310之一的指示执行上下文的改变的信号,信任锚315可以配置与用于新执行上下文的处理核305、310相关联的加密/解密块325"和密钥产生部件310卜2。当发生上下文切换时,信任锚换出与处理核305、310上的当前执行上下文相关联的密钥,并且将其替代为与输入执行上下文相关联的密钥。如所已知,多核处理器上在VM实例之间(或在VM实例与管理程序之间)的上下文切换需要在CPU核上的寄存器(例如,状态寄存器、IR寄存器、通用寄存器、计数寄存器)重新存储(或初始化)以用于输入执行上下文。在一个实施例中,信任锚315可以被配置成交换适当的加密密钥并且使用比执行上下文切换本身(当前,过程通常需要约20至30个时钟周期)所需要更少的时钟周期来初始化加密/解密块325"。这样做允许信任锚提供用于输入VM实例(或管理程序)的安全执行上下文,而不会带来任何附加等待时间。一旦被初始化,加密/解密块325在数据在处理核305、310与L3缓存255之间的缓存线上移动时对数据进行加密/解密。在一个实施例中,加密/解密块325"提供基于硬件的流密码实施。如所已知,流密码是对称密钥密码,其中将明文与密钥流相组合以加密小单元的数据(例如,每次单个位元或字节)。在具体的实施例中,加密/解密块可以被配置成使用AES-CTR (高级加密标准-计数器模式)作为流密码。使用流密码允许数据在处理核305、310与L3缓存330之间移动时对其进行加密/解密,而不需要额外的时钟周期。相反,一旦被初始化,加密/解密块3251-2可以使用密钥流将移动到特定核305、310/从特定核305、310移动的每个位元进行异或。因此,信任锚所提供的功能性定位在与每个处理核305、310相邻,并且确保由VM共享的任何元件在不同的核(在这种情况下,L3缓存330和内存340)上运行。在一个实施例中,密钥产生部件320卜2可以被配置成使用VM密钥、内存地址和随机数来产生由加密/解密块325"使用的密钥流。内存控制器335可以被配置成在内存340与L3缓存之间移动数据。例如,内存控制器335可以选择将数据从L3缓存330刷新到内存340。在一个实施例中,当这样做吋,内存控制器335还将用以在数据被写入到L3缓存330中时对数据进行加密的随机数值写入至IJ内存340中。类似地,内存控制器335可以在从内存340读取加密数据时检索适当的随机数值。图4进ー步示出了根据本公开的某些实施例的图3中第一次示出的处理器架构的各方面。图4尤其示出图3的处理器架构,所述处理器架构用以执行到L3缓存433的安全写入操作401并且用以执行从L3缓存433的安全读取操作402。如图所示,写入操作401在明文数据405i从处理核本地的L2缓存移动到由多个处理核共享的L3缓存433时对所述明文数据405i进行加密。说明性地,加密/解密块410:包括密钥415” AES引擎4201、内存地址425i和随机数43(^。密钥415i通过信任锚来提供给加密/解密块410卩如上所述,密钥415i与在多核CPU(例如,图3中所示的处理器架构)的处理核之一上执行的VM (或管理程序)相对应。内存地址425:与从L2缓存写入到共享 的L3缓存433的明文405i的内存地址相对应。随机数43(^提供用于给定写入操作的一次值。通常,随机数430:可以是对共享的L3缓存433的毎次写入(和读取)递增的计数器值。然而,可替代地,随机数430:可以从随机或伪随机噪音源产生。在一个实施例中,AES引擎420提供AES-CTR流密码的硬件实施,并且被配置成从密钥材料(即,从密钥4151、内存地址425i和随机数430P产生密钥流。所得的密钥流在明文405i从处理核上的L2缓存被推送到共享的L3缓存433中时与明文405i进行异或,产生密文435”除了将所得的加密数据写入到L3缓存433中之外,加密/解密块41(^中的随机数值也被写入到L3缓存433中(图4中所示为随机数440J。更大体而言,加密/解密块可以将任何带密钥的伪随机函数应用到计数器,以便产生与明文405i异或的密钥流。在一个实施例中,加密/解密块410i可以包括与L3缓存433分离的缓存线,从而允许随机数430i与明文405i平行地存储在L3缓存433中(作为随机数44(^),明文405:是使用密钥流来加密并且作为密文435i存储在L3缓存433中。可替代地,随机数34(^可以使用用以写入密文435i的相同缓存线来写入到缓存433中。读取操作402类似于写入操作401,但是方向相反。为了从L3缓存433读取加密数据4352,内存地址4252和随机数4402被读取到加密/解密块4102中。另外,密钥4152是与在多核处理器的处理核上执行的VM (或管理程序)相关联的会话密钥,并且在所述处理核上的上下文切换之间保持不变。内存地址4252与被拉入到L2缓存中的数据的内存地址相对应,并且随机数4302是用以在数据被写入到L3缓存433中时对所述数据进行加密的随机数值。也就是说,由写入操作401用来产生用以加密明文405i的密钥流的相同密钥材料被用来重新产生相同的密钥流以解密来自L3缓存433的加密数据4352。因此,在ー个实施例中,使用AES-CTR来从用于读取操作402的密钥材料产生密钥流。当然,可以使用其他带密钥的伪随机函数。所得密钥流随后被与来自L3缓存433的加密数据4352进行异或,并且被作为明文4052写入在L2缓存中。图5不出了根据本公开的某些实施例的一种用于安全地启动VM实例的方法500。如图所示,方法500在步骤505开始,在步骤505中,管理程序接收虚拟机的启动映像以便启动虚拟化服务器并在其上执行。例如,在一个实施例中,用户可以将VM启动映像连同对在其上执行VM实例的虚拟化硬件系统的ー组要求(例如,处理器速度、内存要求等)一起传送到云供应商。VM启动映像可以使用由用户产生的VM映像加密密钥来加密。在一个实施例中,每4kb数据块被独立地加密,以使得数据块可以在虚拟化服务器上的内存的内外被解密并标记页码,而无需解密整个映像。在步骤510,管理程序视图启动VM启动映像。在步骤515,管理程序确定VM启动映像是否被加密。如果是,那么管理程序触发信任锚与提交VM启动映像以进行执行的用户(或相关联的密钥服务)之间的协商,以获得用以加密VM启动映像的VM映像加密密钥。一旦获得,则信任锚用所述密钥来配置磁盘控制块(步骤520)。VM映像加密密钥用来在从存储设备取得加密VM启动映像并将其存储在内存中时解密其内存页面(或者加密从内存刷新到存储设备的页面)。信任锚将与所述VM映像相关联的VM映像加密密钥存储在安全密钥存储设备中。在步骤525,信任锚也产生内存会话密钥,所述内存会话密钥用以在每个处理核上的L3缓存与内存之间和L3缓存与L2缓存之间的缓存线中配置加密/解密块。一旦CPU上的加密/解密块被配置,则从存储设备取得VM映像并将其启动。管理程序随后启动VM映像并对其进行排程以用于执行(步骤530)。在步骤535,管理程序在处理核之一上执行VM映像。由于加密VM映像的一部分是从存储设备取得的,磁盘控制块使用VM映像加密密钥来对其进行解密(步骤540)。内存会话密钥随后用来在这些元素被写入到L3缓存中时对其进行重新加密。当需要用于给定内存地址的数据时,处理核的L2缓存与共享的L3缓存之间的缓存线中的内存会话密钥被用来解密从L3缓存读取(和写入到L3缓存)的数据。因此,L3缓存中(在多个处理核之间共享)的数据保持加密,直到被取到L2缓存(在处理核本地)中。如果VM启动映像未被加密(步骤515),则信任锚可以仍产生内存会话密钥,以便在处理核上执行的同吋,加密/解密由VM对L3缓存做出的所有写入/读取(步骤525)。在任一种情况下,管理程序可以开始排程VM以在多处理器CPU的处理核之一上执行(步骤530)。此外,当管理程序开始上下文切换时,信任锚用适当的VM映像加密密钥和用于输入VM的内存会话密钥来配置CPU上的加密/解密块。图6描绘了根据本公开的某些实施例的ー种用于加密L3缓存线的方法600。方法600进ー步说明了图4的写入操作401。如图所示,方法在步骤605开始,在步骤605中,识别L2缓存中写入到L3缓存中的数据的内存地址(例如,内存地址425J。在步骤610,L2缓存与L3缓存之间的缓存线上的加密/解密块获得用于写入操作的随机数值(例如,随机数430J。在一个实施例中,所述随机数值是由信任锚提供的64位整数值。例如,信任锚可以仅对每次写入操作存储和递增64位值。64位随机数值可能足够大以确保随机数值在核的寿命内决不可再。在步骤615,加密/解密块产生密钥流。所述密钥流可以使用识别出的内存地址、随机数值和与将数据从其L2内存写入到共享的L3内存的处理核的当前执行上下文相关联的会话密钥来产生。通常,所述密钥流是通过用会话密钥(例如,密钥415:)连续加密计数器的递增值(即,内存地址和随机数)来产生。例如,如上所述,给定L2/L3缓存线上的加密/解密块可以提供AES-CTR模式流密码的硬件实施。全AES实施可以维持由内存读取和写入产生的400-500Gbps的吞吐量。然而,在产生用以加密/解密64字节缓存线的密钥流的前128位吋,使用AES-CTR带来少量的等待时间。这意味着在开始写入到L3缓存中之前需要大约10个时钟周期来执行AES-128所要求的10个AES循环。因此,产生L2缓存刷新或移出的每个内存写入操作将带来产生密钥流的前128位所需要的约10个时钟周期的额外等待时间。在步骤620,一旦密钥流的前128位可用,则加密/解密块在数据被写入到L3缓存中时使用密钥流对其进行加密。例如,当64字节的L2缓存项被写入到L3缓存中吋,明文L2缓存线(即,明文405J与由在用会话密钥加密计数器过程中AES块所产生的密钥流进行异或。所得密文(即,密文435:)被存储在L3缓存中。在步骤625,随机数值被写入到L3缓存中(S卩,随机数440J。也就是说,用于加密给定写入操作的随机数值连同加密64字节内存值一起被存储在L3缓存中。请注意,将64位随机数存储在L3缓存中将存储每64字节数据所需要的空间增加了 12. 5%。在步骤630,如果L3缓存中的加密64字节数据被刷新到内存中,则相关联的随机数值也被写入到内存中。请注意,这可能导致内存写入等待时间的少量増加。例如,假定内存控制器在每个写入周期将64位写入到DRAM中(对于当前内存控制器较常见),则需要八个写入周期来将64字节加密数据(并且通常是8位检查和)存储在DRAM中的相应内存地址上。存储64位随机数 值需要额外的写入周期。此外,就内存、大小来说,存储用于每个L3缓存线的随机数对于每个64字节的内存来说增加了 64位的开销,也就意味着有12. 5%的增加。图7描绘了根据本公开的某些实施例的ー种用于解密L3缓存线的方法700。方法700进ー步说明了图4的读取操作402。如图所示,方法700在步骤705开始,在步骤705中,识别读取到L2缓存中的数据的内存地址(即,内存地址4252)。例如,在L2缓存中可能发生缓存缺失,从而导致试图从L3缓存读取所请求的地址。在步骤710,如果所请求的地址尚不在L3缓存中,则在步骤715,发生L3缓存故障。在这种情况下,内存控制器从所识别出的内存地址取得加密数据,以及取得用以加密存储在所述内存地址上的数据的随机数。一旦加密数据在L3缓存中,则加密/解密块产生与来自L3缓存的数据进行异或的密钥流(步骤720)。具体来说,加密/解密块读取随机数值(即,随机数4302)和在步骤705识别出的内存地址705(即,内存地址4252)。所述随机数与在步骤705识别出的物理内存地址相连结,并且与会话密钥一起被送入到缓存线上的加密/解密块上。所述加密/解密块上的AES引擎随后可以通过用信任锚所提供的VM (或管理程序)的会话密钥(例如,密钥4152)来连续加密计数器的递增值(即,内存地址和随机数)来重新产生密钥流。在步骤725,所得密钥流再次与加密L3缓存线进行异或,以产生存储在L2缓存中的64字节明文数据(例如,明文40 52)。在发生L2缓存缺失和L3缓存命中的情况下,L3缓存线立即可用,因此重新产生密钥流的前128位对于从L3缓存的内存读取増加了十个时钟周期的等待时间。然而,在发生L2和L3缓存都缺失的情况下,可以优化内存读取,以使得首先从内存取得随机数。随后L3缓存可以从内存读取64字节加密数据,同时计算出密钥流的前128位。在这种情况下,不会带来额外的等待时间。总而言之,本文描述的实施例提供用于在多核处理架构上的虚拟机(VM)的可信执行的内存划分的技木。内存划分可以通过在给定VM的控制下在执行所述VM的处理核的信任边界内使用密钥加密层3 (L3)缓存线来实现。另外,本文描述的实施例提供ー种用于存储和处理与对L3缓存线执行的毎次加密/解密操作相关联的加密有关元数据的有效方法。有利地,将多核CPU配置有信任锚并且将处理核与共享的L3缓存之间的每个缓存线配置有加密/解密块允许使用在虚拟化服务器上运行的每个VM (和管理程序)特有的会话密钥来加密每个内存读取/写入操作。这样做使得能够进行VM实例的可信执行,即使是在非可信云环境中和非可信管理程序上。虽然上述内容是针对本公开的实施例,但是在不脱离本公开的基本范围的情况下,可以设计出本公开的其他和进ー步的实施例,并且本公开的范围由以下权利要求确定。
权利要求
1.一种方法,包括识别内存地址;获得随机数使用至少第一密钥、所述随机数和所识别出的内存地址来产生密钥流;使用所产生的密钥流来对在从第一缓存写入到第二缓存中时与内存地址相对应的数据进行加密,其中所述第一缓存在中央处理单元(CPU )上的多个处理核中的一个核的本地, 并且其中所述第二缓存由所述多个处理核共享;以及将所述随机数写入到所述第二缓存中。
2.如权利要求1所述的方法,进一步包括将与所述内存地址相对应的所述数据刷新到内存中;以及将所述随机数写入到所述内存中。
3.如权利要求1所述的方法,其中使用至少第一密钥、所述随机数和所识别出的内存地址来产生密钥流包括将所述内存地址与所述随机数相连结以产生计数器;以及连续递增所述计数器并且将带密钥的伪随机函数应用到所述计数器,从而产生伪随机输出。
4.如权利要求3所述的方法,其中使用所产生的密钥流来对在从第一缓存写入到第二缓存中时与内存地址相对应的数据进行加密包括将与所述内存地址相对应的所述数据的每一位与所述密钥流的连续位进行异或。
5.如权利要求1所述的方法,其中所述随机数是由信任锚存储的64位值,并且其中所述信任锚对于将与所述内存地址相对应的数据写入到所述第二缓存中的每次操作递增所述随机数。
6.如权利要求1所述的方法,其中所述随机数是由信任锚对于将与所述内存地址相对应的数据写入到所述第二缓存中的每次操作产生的固定位大小的随机或伪随机数。
7.如权利要求1所述的方法,其中信任锚管理所述第一密钥和至少第二密钥,其中所述第一密钥和所述第二密钥各自提供与在所述CPU的所述多个处理核上执行的相应虚拟机相关联的会话密钥。
8.如权利要求1所述的方法,进一步包括从所述第二缓存读取与所述内存地址相对应的所述随机数;使用所述第一密钥、所述随机数以及所识别出的内存地址来重新产生所述密钥流;以及使用所产生的密钥流来在与所述内存地址相对应的数据正被从所述第二缓存读取并且写入到所述第一缓存中时对其进行解密。
9.一种计算系统,包括,内存;以及CPU,具有多个处理核,每个核至少具有第一缓存;第二缓存,其中所述第二缓存可由所述多个处理核中的每一个访问;对于所述多个处理核中的每一个,将各自的处理核耦合到所述第二缓存的加密/解密块,其中每个加密/解密块被配置成执行包括以下步骤的操作识别内存地址,获得随机数,使用至少第一密钥、所述随机数和所识别出的内存地址来产生密钥流,以及使用所产生的密钥流来对在从所述第一缓存写入到所述第二缓存中时与所述内存地址相对应的数据进行加密;以及内存控制器,其中内存控制器被配置成将所述随机数写入到所述第二缓存中。
10.如权利要求9所述的计算系统,其中所述内存控制器进一步被配置成将与所述内存地址相对应的数据刷新到内存中;以及将所述随机数写入到所述内存中。
11.如权利要求9所述的计算系统,其中使用至少第一密钥、所述随机数和所识别出的内存地址来产生密钥流包括将所述内存地址与所述随机数相连结以产生计数器;以及连续递增所述计数器并且将带密钥的伪随机函数应用到所述计数器,从而产生伪随机输出。
12.如权利要求11所述的计算系统,其中使用所产生的密钥流来对在从所述第一缓存写入到所述第二缓存中时与所述内存地址相对应的数据进行加密包括将与所述内存地址相对应的数据的每一位与所述密钥流的连续位进行异或。
13.如权利要求9所述的计算系统,进一步包括信任锚,其中所述随机数是由所述信任锚存储的64位值,并且其中所述信任锚对于将与所述内存地址相对应的数 据写入到所述第二缓存中的每次操作递增所述随机数。
14.如权利要求9所述的计算系统,进一步包括信任锚,其中所述随机数是由所述信任锚对于将与所述内存地址相对应的数据写入到所述第二缓存中的每次操作产生的固定位大小的随机或伪随机数。
15.如权利要求9所述的计算系统,进一步包括信任锚,其中所述信任锚管理所述第一密钥和至少第二密钥,其中所述第一密钥和所述第二密钥各自提供与在所述CPU的所述多个处理核上执行的相应虚拟机相关联的会话密钥。
16.如权利要求9所述的计算系统,所述操作进一步包括从所述第二缓存读取与所述内存地址相对应的随机数;使用所述第一密钥、所述随机数以及所识别出的内存地址来重新产生所述密钥流;以及使用所产生的密钥流来在与所述内存地址相对应的数据正被从所述第二缓存读取并且写入到所述第一缓存中时对其进行解密。
全文摘要
描述用于内存划分的技术,所述内存划分用于在多核处理架构上的虚拟机(VM)的可信执行。内存划分可以通过在给定VM的控制下在执行所述VM的处理核的信任边界内使用密钥加密层3(L3)缓存线来实现。另外,本文描述的实施例提供一种用于存储和处理与对L3缓存线执行的每次加密/解密操作相关联的加密相关元数据的有效方法。
文档编号G06F12/08GK103026347SQ201180037006
公开日2013年4月3日 申请日期2011年5月24日 优先权日2010年5月27日
发明者法彼奥·R·麦诺, 皮瑞·曼克鲁斯, 大卫·A·麦格鲁 申请人:思科技术公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1