买专利,只认龙图腾
首页 专利交易 科技果 科技人才 科技服务 商标交易 会员权益 IP管家助手 需求市场 关于龙图腾
 /  免费注册
到顶部 到底部
清空 搜索

【发明授权】交叉平台包围区身份_微软技术许可有限责任公司_201880008145.2 

申请/专利权人:微软技术许可有限责任公司

申请日:2018-01-19

公开(公告)日:2023-05-30

公开(公告)号:CN110199284B

主分类号:G06F21/57

分类号:G06F21/57

优先权:["20170124 US 15/414,421"]

专利状态码:有效-授权

法律状态:2023.05.30#授权;2019.09.27#实质审查的生效;2019.09.03#公开

摘要:提出了一种抽象包围区身份。抽象身份可以是对于多个相关但不相同的包围区实例化可以是相同的安全身份。可以从关于实例化的包围区的抽象包围区身份类型确定包围区身份值。抽象身份值可以用于确定不相同的两个包围区实例化的等价性,不相同的两个包围区实例化诸如托管在不同计算机上的两个类似包围区、托管在不同本机包围区平台上的两个包围区、以及从相同包围区二进制映像的不同版本而实例化的两个包围区。

主权项:1.一种用于确定包围区等价性的方法,包括:从在第一本机包围区平台上被实例化的第一包围区接收第一证明报告;从所述第一证明报告中提取与包围区身份类型相关联的第一包围区身份值;从在第二本机包围区平台上被实例化的第二包围区接收第二证明报告,其中所述第一本机包围区平台和所述第二本机包围区平台不同;从所述第二证明报告中提取与所述包围区身份类型相关联的第二包围区身份值;确定所述第一包围区身份值与所述第二包围区身份值相同;以及基于所述确定,通过在所述第一包围区中部分地完成计算操作并且在所述第二包围区中部分地完成所述计算操作来执行所述计算操作。

全文数据:交叉平台包围区身份技术领域本公开涉及安全计算系统。背景技术安全隔离区域或可信执行环境提供安全容器本文中称为包围区enclave以用于在计算机上执行可信代码,该计算机也可以在隔离区域之外的区域中具有较少可信代码。包围区的隔离区域包括在驻留在包围区之外的代码的执行期间受到保护的存储器的一部分。隔离存储器可以包含用于包围区的代码和数据两者,并且除了对从包围区存储器读取或向包围区存储器写入的限制之外,对该存储器的保护可以包括执行包含在包围区存储器中的代码的限制。诸如存储器隔离和执行限制等包围区安全性的各方面可以例如由计算机处理器中的硬件强制执行。软件证明可以提供对特定包围区的隔离安全性以及在该特定包围区的隔离存储器区域内加载的包围区代码的信任。证明可以另外提供所证明的包围区在其上运行的硬件和软件平台的完整性的证据。诸如微软的虚拟安全模式VSM和英特尔的软件保护扩展SGX等包围区系统部分地通过将包围区与以用户模式或内核模式运行的其他代码隔离来提供安全性。完整性和机密性保证可以提供对在包围区中运行的代码的真实性以及包围区代码的安全执行具有更高信任级别的包围区。可以通过特定包围区的软件证明来提供完整性保证。软件证明可以包括在包围区内的内容指令和数据的加密签名的散列,并且可以与关于包围区环境的数据组合。当包围区与硬件安全模块HSM诸如符合可信计算组TCG可信平台模块TPM标准的硬件结合使用时,包围区可以提供附加级别的安全性和机密性保证。除了通过将可信本地包围区与包围区的隔离之外的不可信本地代码隔离而提供的安全性之外,包围区的软件证明可以支持远程的可信计算。远程包围区的证明可以提供对包围区中的指令执行的完整性以及由包围区处理的数据的机密性的信任。当由来自可信制造方的硬件提供远程包围区的证明时,即使当包围区驻留在由不可信方拥有和维护的未知计算机上时,也可以信任包围区。例如,当在基于因特网云的计算资源上租用计算资源时,通常就是这种情况。发明内容提出了用于抽象包围区平台的方法和系统。该方法可以包括由包围区抽象平台从包围区客户端接收用于使用包围区的第一请求。第一请求可以符合客户端抽象协议。可以将第一请求转换为符合与包围区本机平台相关联的包围区本机协议的第二请求。然后可以将第二请求发送给包围区本机平台。例如,第一请求可以是用于实例化包围区的请求、用于验证包围区的证明报告的请求、用于调入包围区的请求、或者用于分配与包围区和包围区客户两者共享的存储器的请求。本机平台可以符合英特尔软件保护扩展SGX包围区架构,并且本机平台可以符合微软虚拟安全模式VSM包围区架构。附图说明图1描绘了包围区系统的示例高级框图。图2描绘了针对具有机密性保证的消息传递的示例过程。图3描绘了针对具有完整性保证的消息传递的示例过程。图4描绘了针对具有新鲜度保证的消息传递的示例过程。图5描绘了针对包围区的软件证明的示例过程。图6描绘了示例Diffe-Hellman棣弗-赫尔曼密钥交换DKE协议。图7描绘了用于软件证明的示例信任链。图8是用于示例本地包围区系统的软件组件接口的框图。图9是用于具有抽象层的示例本地包围区系统的软件组件接口的框图。图10是用于具有抽象层的示例远程包围区系统的软件组件接口的框图。图11描绘了示例通用计算环境。图12描绘了抽象本机包围区平台的方法的示例流程图。图13描绘了抽象本机包围区平台的方法的示例流程图。图14描绘了用抽象包围区身份执行包围区操作的方法的示例流程图。图15描绘了用抽象包围区身份执行包围区操作的方法1500的示例流程图。图16描绘了具有抽象包围区身份等价性的示例系统。图17描绘了具有两个等价包围区的并行处理的示例流程图。图18描绘了具有两个等价包围区的串行处理的示例流程图。图19是示例分布式数据密封系统的框图。图20是分布式数据密封和解封的示例流程图。图21是示例性密钥保管库包围区的框图。图22是一些密钥保管库包围区操作的示例流程图。图23是利用保管库锁定密钥的密钥保管库包围区操作的示例流程图。具体实施方式公开了一种用于包围区的抽象模型,其简化了包围区客户端的开发和在包围区内运行的软件的开发。抽象模型可以是本机包围区平台架构诸如英特尔的SGX和微软的VSM的简化和统一。抽象层软件组件可以在包围区客户端与一个或多个本机平台之间,在包围区内的软件与一个或多个本机包围区平台之间,以及在包围区内的软件与包围区客户端之间转换通信。这样的抽象平台可以提供使得单个版本的包围区软件和包围区客户端软件能够在诸如SGX和VSM的多个本机包围区平台之上运行的益处。除了简化为包围区和包围区客户端编写软件的任务之外,它还允许包围区的最终用户在支持任何所支持的本机包围区架构的计算机上运行包围区和包围区客户端软件,而无需找到针对特定计算机的本机包围区平台而定制的包围区和包围区客户端软件两者的版本。例如,包围区抽象模型可以包括用于以下操作的基元:管理包围区的生命周期,包围区的本地和远程证明,将数据密封到包围区,进出包围区的程序传输控制,以及其他安全特征,诸如单调计数器和可信时间。还呈现了包围区的抽象或分层身份,其将包围区的身份抽象到包围区内容的单个二进制或单个散列之外。呈现软件组件接口,诸如应用编程接口API或应用二进制接口ABI,以用于使用抽象模型基元开发包围区和包围区客户端程序。抽象身份可以包括可以用于安全地标识包围区实例组的嵌套身份或身份层级。本文中的包围区实例可以是指加载到同一机器上的包围区中并且具有相同身份的相同包围区二进制代码。另一方面,新版本的二进制代码或加载到不同机器上的相同二进制代码可能被视为不同的实例。这些不同的实例在身份层级中的更高级别也可以具有相同的身份。抽象的包围区身份使得相关的包围区二进制的组能够被标识为相关的。例如,同一包围区的不同版本诸如在修复错误之前和之后的包围区二进制的版本可以被赋予相同的名称,而与版本无关。在更高的抽象层,一族包围区中的所有包围区都可以被赋予单个族名称或身份。在这种情况下,可以一起标识执行相关但不同功能的所有包围区。其他身份层或身份分组如下所述。抽象身份的任何层可以用于各种密码操作,诸如密封数据、包围区的证明、或保证数据新鲜度经由单调计数器。例如,通过将由一个包围区实例产生的数据密封到更高级别的身份,该数据随后可以由具有相同更高级别包围区身份的不同包围区实例安全地消费。通过将数据密封到例如包围区族,作为该族的成员的任何包围区实例并且仅该族的成员将能够解封数据。从包围区实例对族身份的证明可以提供包围区实例是该族的成员的确保。与身份抽象相关联的单调计数器可以提供与作为抽象身份的成员的所有包围区实例相关的新鲜度保证。所公开的抽象模型包括可以简化包围区和包围区主机的软件开发的软件组件接口,诸如应用编程接口API或应用二进制接口ABI。API是用于创建软件的一组编程子例程定义、协议和工具。API可以定义软件组件的输入和输出、由软件组件使用的数据类型、以及独立于软件组件的任何特定实现的软件组件的功能或操作。API可以用诸如C、C++、C#等高级计算机语言定义。API的形式化定义可以促进软件组件之间的交互,例如在不同时间或由不同作者编写的两个软件组件。API可以部分地用诸如微软接口定义语言MIDL或对象管理组OMGIDL等接口描述语言IDL来形式化。ABI也是软件组件之间的接口,但是目标代码接口。例如,ABI可以是通过编译API的源代码实现而产生的目标代码的入口点或指令地址连同用于使用这些入口点的协议,诸如指定在入口点被调用时保持变元的机器寄存器的协议。除了如上所述支持与不同级别的包围区身份的交互之外,包围区API可以抽象掉包围区平台架构之间的差异,例如在由英特尔的软件保护扩展SGX提供的用于安全隔离执行的架构、微软的虚拟安全模式VSM和ARMTrustZone、AMD的安全加密虚拟化SEV和基于现场可编程门阵列FPGA的架构之间的差异。API包括用于包围区平台的接口,包围区平台抽象出所抽象的包围区架构的一些细节。这些包围区平台接口包括包围区主机API、包围区平台API和远程证明API。不可信主机进程可以使用包围区主机API来管理包围区的生命周期以及提供到包围区和来自包围区的通信。包围区平台API可以由可信包围区平台提供给包围区,并且可以包括用于证明、密封和与托管包围区计算机的计算机上运行的不可信代码进行通信的安全基元、以及诸如存储器管理和线程调度等核心运行时支持。远程证明API可以用于执行远程证明,其中包围区及其客户端不托管在同一计算机上。例如,远程证明API可以由本地客户端用于验证源自具有特定身份的包围区或从其发送的数据在由远程计算机上的包围区平台提供的隔离下运行。更一般地,远程证明API可以用于在本地客户端与远程包围区之间建立安全通信信道。包围区通常提供对计算机技术领域特有的和由其产生的问题的解决方案。更具体地,包围区提供了一种用于将可信代码与不可信代码分开的机制,其中可信代码段和不可信代码段都位于单个计算机处理器的地址空间内。例如,包围区为与必须访问敏感或私有数据的代码在同一通用计算机上运行的潜在不可信的代码诸如潜在包含错误或病毒的代码的问题提供安全解决方案。本公开的实施例提供了对由计算机技术领域引起的这种安全问题的进一步改进的解决方案,包括:通过使得单个包围区或包围区客户端能够针对多个本机包围区平台而制作来简化软件开发;通过减少必须根据特定计算机的特定硬件功能而定制的软件组件的数目来简化企业计算机管理;以及通过分布式数据密封来支持新的安全计算场景,诸如在托管在多个计算机上的包围区之间分发安全的包围区处理。图1描绘了包围区系统连同一些信任关系的高级框图。包围区系统100包括包围区176备选地称为包围区容器或安全执行环境,包围区176包括包含代码180和数据182的安全隔离存储器区域。代码180可以是公共的或私有的,并且数据182可以是公共的或私有的。例如,私有数据或代码可以属于数据所有方142或是数据所有方142私有的,而公共数据或代码可能已经由诸如软件提供方148等另一方提供。在一个实施例中,在包围区容器176内运行的代码可以是完全公共的而不是私有的,而公共包围区代码使用作为输入或产生作为输出的数据可以是私有的。在另一实施例中,反过来的情况是可能的,其中代码是私有的而数据是公共的。在又一实施例中,代码和输入数据两者均可以是公共的,而用输入数据运行代码的输出可以是私有的。代码、输入数据和输出数据的其他公共和私有组合也是可能的。包围区176容器托管在可信硬件172上,可信硬件172可以同时托管不可信软件174。包围区系统100的主要目的可以包括选自由以下各项组成的列表的至少一个方面:保持代码180的完整性,保持代码180的机密性,保持数据182的完整性,以及保持数据182的机密性。保护包围区176的内容免受不可信软件174例如,向不可信软件公开,由不可信软件修改,等等可能是一个目标。可信硬件由制造方162构建,并且由基础设施所有方152拥有和管理。包围区客户端104可以是在包围区容器之外的进程或程序,包围区176利用代码180和数据182针对该过程或程序执行其计算。在本地包围区实施例中,包围区客户端104也可以在可信硬件172上运行。在远程包围区实施例中,包围区客户端可以在一个计算机上运行,而可信硬件172是经由网络连接到包围区客户端的计算机的不同的远程计算机。在本地包围区的情况下,包围区客户端进程也可以是包围区容器176的包围区主机进程,因为包围区客户端进程可以管理本地包围区176的创建。在远程包围区情况下,包围区176可以例如在互联网云计算机上运行,其中基础设施所有方152是云计算服务提供方,并且云计算机包括由制造方162制造的可信硬件172。包围区客户端104可以包括用于通过包围区176设置所请求的计算的设置106方法。设置106方法可以包括引起包围区176的安全容器的创建,引起包围区的实例化例如,通过向不可信软件174发送要求实例化包围区的请求,其可以包括将二进制代码复制到安全容器中,以及引起或请求包围区中的计算,例如通过调用复制到安全容器中的代码中的方法。所请求的计算可以包括执行代码180,并且数据182可以被输入到所请求的计算,或者可以是所请求的计算的结果。当在包围区之外时可以加密输入到所请求的计算中的数据,并且可以在包围区内使用之前解密加密的输入数据。一旦包围区176完成了所请求的任务,则表示任务的结果的数据被加密并且发送回包围区客户端104。当包围区客户端104接收到加密结果时,验证108方法可以确认所接收的结果完整性和新鲜度。单个软件提供方148可以既提供要在包围区176内运行的代码180,又提供作为包围区客户端104的一部分运行的验证108方法的至少一部分。数据所有方对数据182的私有部分和代码180的私有部分的隐私的置信度、以及对由包围区176产生的结果的正确性的置信度可以基于信任关系。例如,数据所有方142可以信任可能不在包围区容器本身内运行的包围区客户端104。数据所有方还可以信任包围区本身的软件提供方148。并且,数据所有方可以信任可信硬件172的制造方。取决于所使用的包围区架构,可信硬件172可以采取很多形式,并且可以包括硬件安全模块HSM,其中HSM符合例如可信平台模块TPM标准。可信硬件172可以包括例如TPM,否则可以仅包括硬件。例如,使用微软的VSM包围区架构的可信硬件172的实现可以包括具有用于操作系统虚拟化指令和TPM的指令的商品处理器。微软的VSM包围区架构可以包括用于管理客分区虚拟处理器的管理程序,并且管理程序可以将超级调用接口显露给客分区以允许客分区与管理程序进行交互。微软的VSM架构中的包围区容器可以实现为特殊类型的客分区。具有英特尔的SGX包围区架构的可信硬件172的示例可以包括具有特殊的包围区特定指令和安全功能的处理器。诸如包围区176等包围区可以提供隔离的执行环境,该环境可以通过向存储器区域提供对从该受保护区域的读取、写入或执行的限制来保护代码或数据,诸如代码180和数据182。该受保护的存储器区域是用于机密代码和数据的安全容器。对从包围区的受保护存储器区域执行的限制可以包括对包围区之外的代码与包围区之内的代码之间的执行传输诸如调用或跳转指令的限制,反之亦然。在从包围区之外调用进入包围区以及从包围区之内调出包围区之间可以实现不同的限制。在包围区之内和之外之间实现这些执行传输可以由硬件提供,例如利用商品虚拟化硬件技术或者利用诸如英特尔的SGX平台等专用硬件。图2描绘了用于具有机密性保证的消息传递的示例过程200。机密性保证提供某种级别的确保,即当消息通过诸如网络218等公共或不受保护的通信介质传递时,双方诸如该示例中的Anne210和Ben230之间的通信保持对第三方隐藏。在该示例中,Anne212想要向Ben230发送机密消息。包含机密数据的消息块212通过加密214操作使用公钥216被加密。加密214操作可以是例如高级加密标准伽罗瓦计数器模式AES-CGM,但也可以是数字密码领域的技术人员已知的任何加密操作。加密块220可以通过网络218传递给Ben,其中加密块234用私钥236解密以产生用于Ben的未加密消息块232。通过仔细选择密钥和加密算法,如计算机数据加密领域中已知的,即使在通过公共网络时,该消息也可以保持机密。图3描绘了用于具有完整性保证的消息传递的示例过程300。完整性保证提供某种级别的确保,即当消息通过诸如网络340等公共或不受保护的通信介质传递时,双方诸如该示例中的Anne310和Ben350之间的通信不被篡改或以其他方式被改变。在图3的示例中,Anne310向Ben350发送消息314,使得当Ben350接收到消息314时,确信消息314未被篡改或以其他方式被破坏。为了提供这种完整性保证,安全散列316过程对消息314进行操作以产生散列值318。然后,使用Anne的私钥通过签名320过程来对散列值318签名,以产生签名342。签名342可以连同作为消息344的消息314的副本一起跨公共网络340或其他不受保护的通信过程被发送。然后Ben接收Ben想要验证其完整性的消息354,使得Ben可以确信消息354在通过不可信网络340之后与Anne发送的消息314相同。为了验证完整性,所接收的消息354由与安全散列316相同的安全散列356处理,以产生散列值358。所接收的签名342通过签名验证360过程使用Anne的公钥来验证。然后将从签名342提取的散列值318与散列值358进行比较以验证380签名是相同的。如果它们相同,则接受消息384具有完整性。替代地,如果消息314在作为消息354被接收之前以任何方式被改变,则签名将不正确并且消息将被拒绝388。在一些实施例中,安全散列316和安全散列356可以是密码散列函数。密码散列函数是单向函数,其将任意大小的数据映射到通常小得多固定大小的位串。散列函数的输出可以称为散列值或简称为散列。良好的散列函数将是单向的,因为在仅给出散列输出的情况下将难以确定任意大小的输入。利用良好的散列函数,即使输入的微小变化也将产生输出变化。通信系统可以组合机密性和完整性保证。例如,图2的消息块加密可以与图3的消息散列的签名组合。组合系统可能需要两组公钥私钥对,一组用于发送方,并且一组用于接收方。组合系统可以使用接收器处的一个私钥来解密消息如图2中的Ben的私钥,同时使用另一私钥来签名消息散列如图3中的Anne的私钥。图4描绘了用于具有新鲜度保证的消息传递的示例过程400。新鲜度保证提供了某种级别的确保,即当多个消息从一方发送给另一方时,诸如在该示例中从Anne410发送给Ben450时,在接收方处接收的消息是最新消息。新鲜度保证可以建立在完整性保证之上,并且可以防止重放攻击。利用完整性保证,具有邪恶意图的第三方难以创建自己的消息并且将其发送给Ben以使得Ben将消息理解为由Anne创建。然而,第三方可以获得由Anne实际创建的消息,可能在通过公共网络发送时一次观察到,并且第三方可以在稍后的另一时间将其重新发送给Ben即,重放该消息。Ben将确定该消息实际上是由Anne创建的因为它是,但Ben将不知道Anne不是当时发送它的人。这可以被称为由第三方对Ben或Anne的重放攻击。图4是通过使用临时数nonce和时间戳提供新鲜度保证来防止重放攻击的示例解决方案。临时数是一次性随机数,与系统相耦合,以用于确保相同的数字永远不会被多次用作临时数。在一些系统中,临时数可能只是单调递增的数字,使得所使用的每个数字都高于在其之前的所有数字。在图4中,Anne的消息414可以作为消息436通过公共网络430连同临时数434和时间戳432一起发送。临时数434由密码安全伪随机数发生器CSPRNG426生成,并且时间戳432由同步时钟424产生。存在很多数字密码领域的技术人员已知的CSPRNG系统。网络430的Anne侧的同步时钟424与网络的Ben侧的同步时钟480同步。在Ben侧,当接收到消息454时,伴随的临时数434被存储在最近临时数470的高速缓存中。可以通过两次测试来验证该接收的消息450的新鲜度。首先,在框460中,通过将临时数434与最近临时数470的高速缓存进行比较以确定之前是否已经看到当前接收的临时数434来测试临时数434。如果之前已经看到所接收的临时数434,则在框468中拒绝消息454作为重放消息。如果之前没有看到所接收的临时数434,则在框464中确定该消息对于该第一测试是OK的。其次,将接收的时间戳432与本地同步时钟490进行比较。如果时间戳是最近的,则在框494中确定消息454是可接受的,否则在框498中因为期满而拒绝消息454。在框490中确定最近的时间戳是否是最近的时所容忍的延迟量可以取决于同步时钟424与同步时钟480之间的预期时钟偏差以及通过网络430的消息处理和传输中的时间延迟。通信系统可以将新鲜度保证与如图2中的机密性保证和如图3中的完整性保证中的任一项或两项组合。在组合所有三项的系统中,通过网络430发送的消息436将是Anne的原始消息414的加密版本,并且包括消息414的签名散列的签名将连同时间戳432、临时数434和消息436一起被包括。图5描绘了用于包围区的软件证明的示例过程500。当与诸如图6的密钥协商协议等密钥协商协议组合时,软件证明可以向验证方确保它已经与在由可信硬件创建的隔离容器内托管的特定软件建立了共享秘密。在图5的实施例中,包围区客户端510证明验证方可能希望在可信平台530上使用包围区的安全计算服务。可信平台530被托管在计算机未示出上,使得可信平台530可以包括托管计算机的子集。可信平台530可以包括托管计算机的硬件元件和软件元件。包围区包括安全包围区容器536及其之内的代码和数据,诸如公共代码和数据538以及秘密代码和数据542。在示例过程500中组合了三个过程:产生共享密钥SK的密钥交换过程;用于向包围区客户510证明可信平台530上的包围区的证明过程;以及进行安全计算。来自第一过程的共享密钥SK用于传送安全计算的输入和输出。在密钥交换中,包围区客户端从包围区客户端的私钥A和发生器函数g计算存储在框512中的gA,例如,如下面针对图6的Diffe-Hellman密钥交换DKE协议所描述的。然后,在消息520中将计算的gA发送给可信平台530。可以在没有加密的情况下并且在证明完成之前安全地发送消息520。安全包围区容器536内的软件可以使用包围区私钥B来使用相同的发生器函数g来计算gB。B和gB都可以在框540中存储在包围区容器中。为了证明包围区的身份以提供关于在安全包围区容器536之内运行的代码的确保,将证明消息522发送给包围区客户端510。证明消息可以是如图3中为完整性而签名的特殊消息。特殊消息可能包含有关包围区的身份信息。当如图5的实施例中与DKE结合时,特殊消息还可以包括密钥交换参数。在图5的实施例中,公共代码和公共数据的安全包围区容器536的初始状态538用作包围区身份,但是其他身份也是可能的。代替在证明消息中发送整个初始状态538,而是发送初始状态的散列,M=HashInitialState。证明消息522包括消息内容M和gB、以及消息内容的签名SignAKHashgB,M。例如,可以通过以下来创建消息内容的签名:安全包围区容器536内的软件要求托管该包围区的可信平台530证明所计算的gB的散列和该包围区的身份。可信平台530可以通过使用平台证明密钥AK532提供签名以产生SignAKHashgB,M来完成这一操作。在该示例中,包围区身份是初始状态538的散列M,但是其他标识语句也是可能的。该证明签名SignAKHashgB,M将值gB绑定到包围区身份M并且还将gB和M绑定到可信平台530。然后,包围区客户端510可以通过验证证明签名和包围区身份来验证证明消息。可以如图3中那样使用与证明密钥AK相对应的公钥来验证签名。验证签名可以在证明消息中提供包围区身份的完整性保证。可以通过将证明消息中的身份信息与独立已知的身份值进行比较来验证包围区身份。例如,如果证明消息中的身份信息是包围区的初始状态的散列,则包围区客户端510可以知道初始状态的散列,或者可以能够从已知的初始状态计算这样的散列,并且然后,该值可以与证明消息中提供的身份值进行比较。为了产生共享密钥SK,包围区客户端510和安全容器536内的代码两者都可以生成gAB发生器函数g应用于A乘B的乘积,gAB可以用作共享密钥SK。共享密钥SK可以用于加密用于包围区客户端510与包围区之间的机密性的消息,例如用于向包围区容器536内的代码发送输入数据和从包围区容器536内的代码发送输出数据。注意,共享密钥是在框540和514中在通信信道的每一侧独立产生的,而没有包围区客户端或包围区知道另一方的私钥。例如,在图5的实施例中,秘密代码和数据可以由包围区客户端510通过以下方式来安全地提供:用先前建立的共享密钥SK加密秘密代码和数据,在将其在消息524中发送给可信平台530之前产生EncSK秘密代码数据。在其他的一些实施例中,在安全包围区容器536中执行或由安全包围区容器536使用的秘密代码和数据542可以源自其他位置。可以使用秘密代码和或数据542在安全包围区容器536内执行安全计算,以产生计算结果544。然后,可以通过在将它们在消息526中发送给包围区客户端之前用共享密钥SKEncSK结果来加密结果,将计算结果516安全地传送回包围区客户端510。上面描述的图5的过程向包围区客户端提供它与特定身份的“真实”包围区进行通信、并且包围区受到包围区平台的保护的保证。它没有向包围区容器内的代码提供关于通信信道另一侧的实体的任何保证。在一个替代实施例未示出中,可以通过将包围区客户端作为包围区本身运行来提供关于包围区客户端的这种保证。在该替代实施例中,包围区客户端可以向可信包围区平台询问gA的散列上的签名,该签名然后可以由另一包围区验证。证明可以在本地或远程完成。在图5中,包围区客户端510可以或可以不与可信平台530驻留在同一计算机上,使得包围区客户端510与可信平台530之间的通信可以在单个计算机内发生例如,通过在同一计算机上的不同进程之间传递数据缓冲,或者可以在将包围区客户端510连接到可信平台530的计算机网络上发生。当在包围区客户端510和可信平台530托管在同一本地计算机上时,可以执行本地证明。本地证明的制品或结果称为证明报告,并且在图5的示例中是SignAKHashgA,M。当包围区客户端510和可信平台530托管在不同的计算机上时,可能发生远程证明。远程证明的制品或结果称为证明引用,证明引用在某些情况下可能与本地证明报告非常相似或相同。在其他的一些情况下,证明引用可以包括与提供引用的计算机或本机平台相关的附加信任制品。这种附加的信任制品可以包括主机健康证书,诸如与TPM相关联的TCG日志。可以在包围区身份的任何层上执行包围区的证明。包围区可以具有嵌套或分层的身份,并且对更高级别的身份的证明可以证明实例化的包围区是随着身份级别增加而逐渐变大的潜在包围区实例化组的成员。较高级别可以对应于较低级别潜在包围区实例化的超集。身份的示例层级从最低最具体的级别到较高的较不具体的级别可以包括:ExactHash精确散列、InstanceHash实例散列、ImageID映像ID、FamilyID族ID和AuthorID作者ID。可以从加载到包围区的安全容器中的二进制文件包围区二进制得出包围区的身份。可以由其作者使用作者的私钥来签名包围区二进制。对于ExactHash级别证明,用于计算证明报告的初始状态538用于产生证明报告的散列函数的输入可以包括加载到安全容器536中的每个二进制文件的全部内容,除与可信平台530相关联的二进制之外。处于InstanceHash身份级别的证明可以包括初始状态538的子集。可以在加载到安全容器536中的包围区二进制文件二进制文件最初由那些包围区二进制文件的作者签名时指定子集。例如,第一或主要包围区二进制文件可以包括第一包围区二进制文件所依赖的其他包围区二进制文件的身份的列表。对于列出的每个身份,可以在第一二进制文件中包括标志以指示所列出的每个二进制文件是否由散列函数测量以产生InstanceHash证明报告。对更高级别的包围区ID的证明可能不包括通过散列函数运行任何包围区二进制的全部内容。代替地,可以仅通过散列函数运行ID的数据结构。例如,包围区二进制文件可以包括更高级别的包围区标识符的列表,诸如通用唯一标识符UUID,指示:对于该特定包围区二进制文件唯一的映像IDImageID;对于包含该特定包围区二进制文件并且由同一作者制作的一组包围区二进制文件唯一的族IDFamilyID;以及对于由同一作者制作的一组包围区二进制文件族唯一的作者IDAuthorID。ImageID、FamilyID和AuthorID可以在最初签名二进制时由包围区二进制的作者分配。在包围区客户端可以访问包围区二进制并且使用作者的公钥或与作者相关联的公钥验证作者在那些二进制上的签名的情况下,则可以防止包围区身份的欺骗。这验证包围区二进制的完整性,包括作者分配的任何更高级别的身份,这些身份由该包围区作者创建。图6描绘了示例Diffe-Hellman密钥交换DKE协议600。DKE是用于跨仅具有完整性保证的通信信道建立共享密钥K的一个示例过程;可以使用数字密码领域中已知的用于创建共享密钥的其他过程。在图6的DKE示例中,在Anne610和Ben650之间共享秘密密钥K,而没有在Anne610与Ben650之间的公共不安全通信介质上明确地传送K。在该过程开始之前,1大质数p和2Zp中的发生器g可以由Anne和Ben两者建立并且已知。然后,该过程开始于Anne和Ben选择在1与p之间的随机数。Anne的随机数是在框612中选择的A,Ben的随机数是在框652中选择的B。Anne使用她的随机数来在框614中计算gAmodp,并且在框616中传输该量,该量由Ben在框656中接收。Ben使用他的随机数来在框654中计算机gBmodp,其在框656中传输给Anne并且在框618中接收。Anne可以在框620中产生共享密钥K作为gBmodpA=gABmodp,并且Ben可以在框660中产生共享密钥K作为gAmodpB=gABmodp。为了防止中间人攻击,Anne与Ben之间通过未受保护网络从框616和658进行的通信可以包括消息完整性保证,例如使用诸如图3的过程创建的消息完整性保证。图7描绘了用于软件证明的示例信任链700。软件证明中的信任链可以植根于可信平台诸如图5的可信平台530的制造方所拥有的签名密钥。可信平台可以包括诸如安全处理器或硬件安全模块HSM等硬件组件,因此制造方可以是计算机硬件的提供方并且还可以为可信平台提供软件。验证方702可以信任制造方,并且验证方可以知道制造方根密钥736的公钥PubRK732。图5的包围区客户端510是可能希望具有关于安全容器708的确保的验证方702的一个示例。制造方可以用作证书授权机构并且为其产生的可信平台的每个实例例如,每个安全处理器提供唯一的证明密钥722,证明密钥722用于产生证明签名。制造方还为每个证明密钥722颁发认可证书728。制造方根密钥736包括用于对认可证书728签名的私钥PrivRK734。认可证书的签名提供完整性保证,例如如图3所示。认可证书728包括证明密钥722的公钥PubAK724。认可证书728可以指示证明密钥722将用于软件证明,并且可以被传送到验证方702。验证方可以是希望验证安全容器708的证明的任何实体,例如验证方702可以是希望在安全容器708内进行安全计算的图5的包围区客户端510。验证方702可以使用PubRK732来检查认可证书,以验证认可证书的完整性和来源。验证方还可以从认可证书提取PubAK724。认可证书可以与认证策略相关联,认证策略可以要求证明密钥722仅用于产生证明签名并且证明密钥的722私钥PrivAK726专门保持在与可信平台的通常可访问的计算机存储器分开的存储装置中,诸如在防篡改硬件730的存储装置中。例如,防篡改硬件可以是符合可信平台模块TPM标准的硬件。可以在可信平台736上实例化安全容器708。安全容器708的实例化可以包括为安全容器定义隔离存储器空间,该隔离存储器空间被限制免受由不安全处理访问。不安全处理可以包括例如从可信平台之外但是在托管可信平台的计算机上的访问,或者从可信平台内的其他安全容器内的访问。安全容器708的实例化还可以包括将公共代码和数据加载到安全容器中,例如图5的初始状态535。实例化的安全容器708可以与验证方702交换密钥以建立用于机密通信的共享密钥。密钥交换过程可以是图5的密钥交换过程或图6的DKE过程。验证方将密钥交换消息1704发送给可信平台736,例如,如图6的框616中,并且可信平台736将密钥交换消息2706发送回验证方702,例如,如图6的框658中。可以在实例化安全容器708并且完成密钥交换之后,创建证明签名710。可以通过在全部或部分的安全容器上运行加密散列函数来测量实例化的安全容器708。这可以包括在隔离存储器的内容、以及加载到隔离存储器中、与在安全容器的实例化期间使用或受影响的可信平台相关联的任何其他存储器中的二进制文件、或这些的任何子集或一部分上运行散列函数。运行该散列函数的输出是测量712,测量712是证明签名710的一部分。密钥交换消息704和706的加密散列也可以与证明签名710一起被包括,描绘为数据714。测量712和数据714可以使用证明私钥PrivAK726进行签名。然后可以将证明签名连同测量712和数据714一起发送给验证方702。验证方可以使用来自认可证书的PubAK724来验证证明签名的完整性,在图7的示例中,这还允许验证测量712和数据714的完整性。验证方702可以通过将测量712与预期结果例如,通过本地执行测量712的相同散列而确定的预期结果进行比较来验证安全容器708的完整性,并通过检查数据714来验证为该特定验证方702通信路径实例创建了证明签名例如,因为数据714的散列附于密钥交换消息2706。在上述这些验证操作和证明证书的验证之后,验证方现在可以确保它可以使用所建立的共享密钥与安全容器708建立具有机密性和完整性的通信,可信任平台硬件可以根据其制造方被信任,以及用于创建安全容器的可信平台的软件状态是已知的。验证方702现在准备好使用私有代码和或私有数据来请求安全容器708内的安全处理。包围区抽象平台和基元图8是用于示例本机包围区系统的软件组件接口的框图。包围区系统800包括计算机810,计算机810具有托管包围区814和包围区的客户816的本机包围区平台812。本机平台812可以是基于例如英特尔的SGX或微软的VSM的硬件和或软件组件。包围区810可以是图1的包围区176。用于包围区的本机协议844可以用于包围区814、客户端816和本机平台812之间的通信。如图8所示,本机协议844包括包围区814中的接口820、本机平台中的接口822和824、以及客户端中的接口826。这些接口可以是软件组件中的API或ABI。这些软件接口820、822、824和826的使用可以包括软件组件之间的执行控制转移。控制转移可以包括对控制正在被转移到的软件组件中的入口点指令的地址执行调用或跳转指令。例如,如果本机平台812是软件组件,则当执行本机平台812中的调用或跳转指令以指定客户端816内用以调用或跳到的地址时,从本机平台812到客户端816的控制转移可以经由软件接口826发生。客户端816内的指定地址可以是接口816中的功能或方法的入口点。控制转移在图8中用箭头表示,例如:从本机平台812经由接口820到包围区814;从包围区814经由接口822到本机平台812;从客户端816经由接口824到本机平台812,以及从本机平台812经由接口826到客户端816。本机协议844可以包括经由接口820、822、824和826的通信模式。在一些实施例中,本机平台812可以至少部分实现为硬件组件,例如具有用于管理包围区的特殊处理器指令。这种特殊硬件指令可以作为本机平台812软件组件的一部分被执行。在替代实施例中,可能没有用于本机平台812的一些或所有功能的软件组件。在这些替代实施例中,本机平台接口822和824可以是硬件指令而不是软件入口点,因此本机平台812的功能可以由包围区814或客户端816使用,或者可以通过分别代之在包围区814或客户端816中执行特殊硬件指令而不是执行调用或跳转指令来使用。在一些实施例中,包围区814的客户端816本身可以是包围区。例如,包围区客户端816可以使用接口824来请求创建包围区814。在这些实施例中,通过本机平台812在包围区814与客户端816之间的通信实际上是两个包围区之间的通信。当客户端816也是包围区时,包围区客户端816还可以使用接口822并且显露类似于820的接口未示出。图9是用于具有抽象层的示例本机包围区系统的软件组件接口的框图。包围区系统900包括用于在本机协议944与抽象协议940、942之间进行转译的抽象平台912。本机平台918可以类似于图8的抽象平台812,并且接口928和930可以组合图8的接口820、822、824和825的功能。包围区抽象协议940包括用于包围区914的接口920、922,而客户端抽象协议942包括用于客户端916的接口924、926。如图8所示,在计算机910上运行的客户端916可以经由接口924请求包围区914的创建。抽象层912可以使用本机协议944和与本机平台918的接口928、930来引起包围区914的创建。当本机平台918和本机协议944基于不同的包围区架构诸如英特尔SGX或微软VSM时,客户端916和包围区914可以使用抽象协议940和942。如图8所示,包围区914的客户端916本身可以是包围区,并且本机平台918可以包括硬件和或软件组件。包围区914和客户端916可以不直接通信,而是可以仅经由抽象平台912通信。例如,由于包围区914存储器的隔离,直接通信可能是不可能或不期望的。包围区存储器隔离可能防止对包围区的隔离存储器的读取、写入或执行跳入或跳出。包围区914可以包括位于计算机910的包围区安全容器内的指令。客户端916可以包括位于计算机910的存储器地址空间中但位于包围区914的安全容器之外的指令。抽象平台912可以以各种方式实现,包括作为包围区914的安全容器之内或之外的指令,并且还可以包括从超级调用内执行的指令。在抽象平台912至少部分被包括在包围区914的安全容器内的情况下,安全容器内的抽象平台代码可以与包围区914的代码的其余部分被分开地制作,并且可以仅经由公共APIABI与其他包围区代码交互。这种抽象平台代码可以静态链接或动态链接到包围区安全容器内的代码的其余部分。静态链接的抽象平台代码可以是与抽象平台相关联的目标代码,并且连同更特定于包围区914的代码一起被包括静态链接到可以从其来实例化包围区914的二进制映像中。在动态链接的抽象平台的情况下,更特定于包围区914的包围区代码和更一般地与抽象平台相关联的代码可以源自单独的二进制映像。对于动态链接的示例,参见图14。图10是用于具有抽象层的示例远程包围区系统的软件组件接口的框图。远程包围区系统1000包括计算机1010上的包围区1014、以及单独的计算机1050上的、包围区1014的客户端1056。客户端存根1016和抽象远程处理平台1052的组合可以促进包围区1014与客户端1056之间的交互。计算机1010中的很多元件可以与图9的计算机910的相同名称的元件相同或相似。特别地,抽象平台1012、协议1040、1042、1044和本机平台1018可以分别与对应的元件912、940、942、944和918相似或相同。客户端存根1016可以经由网络通信1080与抽象远程处理平台1052通信。远程客户端协议1082和接口1064、1066可以类似于客户端抽象协议1042和接口1024、1026。然而,远程客户端协议可以包括用于远程处理的附加功能。例如,诸如用以请求创建包围区的CreateEnclave的接口1064中的方法可以另外包括指定包围区主计算机诸如计算机1010的能力,其中包围区被请求创建。代替证明报告或除了证明报告之外,可以提供经由远程客户端协议而提供给客户端1056的包围区1014的证明引用。具有客户端1056的计算机1050可以包括或不包括本机包围区平台1058。如果存在本机平台1058,则它可以符合或不符合样本包围区架构本机平台1018,因此本机协议1044和远程本机协议1084可以不是相同的。在一个替代实施例未示出中,客户端存根1016可以不存在,并且抽象平台1012可以通过网络直接与抽象远程处理平台1052通信。诸如图9和10的940、942、1040、1042、1082的包围区抽象协议可以包括各种接口方法或入口点以管理和使用构建在多个本机平台诸如英特尔SGX和微软VSM上的包围区。这些方法可以提供可以在多个本机平台上实现的包围区基元,从而提供本机平台的“抽象”。本文中公开的包围区基元包括包围区生命周期管理、证明、数据密封、控制转移、单调计数器和可信时间。用于包围区生命周期管理的基元可以包括用于引起诸如包围区914等包围区的实例化或终止的方法。生命周期管理基元可以是客户端抽象协议942的一部分,并且更具体地,可以由抽象平台912实现为接口924的一部分以供客户端916使用。用于实例化或创建包围区的方法可以包括指定要被加载到安全包围区容器的隔离存储器中的代码和或数据的可执行映像。该代码在被加载到包围区容器之前或之后可以成为用于证明实例化的包围区的初始状态的一部分如上面关于图5所解释的。例如,包围区的可执行映像包围区二进制文件可以由包围区客户端通过提供到包含可执行映像的存储器中的缓冲区的指针来指定。备选地,可以通过指示包含包围区二进制文件的文件系统中的文件来指定包围区映像。在一些实施例中,可以加密所指定的包围区映像;在其他的一些实施例中,可以不加密包围区;在其他的一些实施例中,包围区可以被部分加密。用于证明的包围区二进制文件的测量可以在加密的可执行映像上或在解密之后发生。可以通过指定包含包围区主映像的文件来指示最初要被加载到包围区中的代码和或数据。除了该代码和或数据之外,包围区主映像可以包括附加的元数据,诸如包围区的期望大小包围区容器内所需要的存储器的量、文件中的代码内的入口点的位置、和从属dependent映像文件的列表。从属映像文件是其他非主映像文件,其也可以连同主映像文件中的代码和数据一起加载到包围区中。从属映像文件本身可以包含进一步的从属映像文件的列表。在图9的本地包围区系统的情况下,主映像和从属映像可以归档在任何可访问的存储设备中,诸如经由本地可访问的文件系统。在图10的远程包围区系统的情况下,主映像文件可以在计算机1010或计算机1050可访问的任何存储设备中。如果客户端1056使用位于计算机1050上的主映像请求在计算机1010上创建包围区,则抽象远程处理平台和客户端存根1016可以协调以将所指定的主映像文件复制到计算机1010。CreateEnclave是用于实例化包围区的示例方法。CreateEnclave方法可以使用伪代码描述:用于描述本文中的方法的伪代码可以使用若干伪代码协定来定义API接口。例如,函数参数诸如上面的enclavePath可以用“_In_”或“_Out_”来装饰,以分别指示参数是输入或输出参数。“_Out_opt_”可以指示可选的输出参数。全大写字词可以表示数据类型。HANDLE可以是数字,诸如32位数,用于间接引用某些内容。例如,上面的CreateEnclave方法将HANDLE返回给CreateEnclave的调用方,而该HANDLE可以是被创建的包围区的句柄;PCWSTR可以是指向某种类型的文本串的指针;DWORD可以是无符号32位数;PCVOID可以是指向未指定类型的数据的指针;BOOL可以是二进制值。CreateEnclave可以允许客户端诸如客户端916创建包围区并且加载包围区内的主映像。该映像中的任何包围区配置信息可以与实例化的包围区相关联。CreateEnclave可以包含以下参数:lpEnclaveName:可以指定到包围区主映像的路径,其在实现中可以是用于标识包围区主映像的代码和或数据的某种其他类型的标识符,诸如到打开的文件的句柄、统一资源标识符URI、或外部查找中使用的标识符。例如,全局唯一标识符GUID可以用作到主映像的数据库中的密钥。在其他实现中,该参数可以标识包含包围区主映像的存储器区域。flEnclaveType:可以指定要创建的包围区的类型在包围区映像支持多种类型的情况下。在二进制文件仅支持一个包围区或开发人员明确指定了默认值的情况下,可以设置为DEFAULT。dwFlags:可以指定在创建包围区和加载包围区主映像时要采取的一个或多个预定动作。enclaveInformation:可以是用于包围区的运行时配置的可选输入参数。lpEnclaveError:可以指定用以返回架构特定的错误代码的可选参数。在成功完成之后,CreateEnclave可以向包围区返回句柄。在出错时,可以返回NULL。在不脱离本公开的范围的情况下,还可以返回其他标识符GUID、URI等。为简单起见,本说明书将使用句柄描述API。包围区创建可能失败,例如,由于缺少包围区存储器,缺乏对抽象平台或本机平台中的指定的包围区类型的支持,或者创建可能失败,由于显式配置策略防止指定类型的包围区在系统上运行。下面描述的CreateEnclave和其他API方法的实现可以排除所描述的方法参数中的一个或多个方法参数。例如,关于CreateEnclave,可以使用针对该特定API的特定预定值来排除lpEnclaveName、flEnclaveType、dwFlags和enclaveInformation。也可以从API中排除lpEnclaveError参数,并且可以可选地实现用于检查API调用中的错误的替代方法。CreateEnclave可以负责加载包围区主映像中指定的所有从属模块。包围区主映像可以是便携式执行PE文件,其指定主映像所依赖的其他二进制映像文件。CreateEnclave还可以执行本机平台特定的初始化,诸如最终确定用于证明的测量,从而分配针对传输层安全性TLS和或其他密钥协定和通信协议等的结构。一旦包围区初始化完成,包围区抽象协议接口920、922包括例如用于数据密封和证明的方法就可以是可操作的。TerminateEnclave是用于终止包围区的示例方法:TerminateEnclave可以用于破坏包围区。在实现中,破坏包围区可以包括强制所有包围区线程返回到主机或终止,和或释放与包围区相关联的存储器。在正在运行的包围区上调用TerminateEnclave可以终止它并且释放与该包围区相关的所有资源。包围区抽象平台912可以包括执行控制转移基元,执行控制转移基元可以用于例如在包围区与其客户端之间转移控制。执行控制转移基元可以通过在另一组件中的入口点处开始执行代码来启用包围区914与客户端916之间的通信。执行控制转移基元通过允许参数与控制转移请求相关联来允许数据传入传出包围区;参数可以指定个体数据项参数本身被传送,或者参数可以是指向存储器区域的指针由参数指向的缓冲区被传送。尽管由于对包围区容器的安全限制而在包围区914与客户端916之间直接调用或跳转的限制,但这些基元可以启用控制转移。为了调入包围区,接口924可以包括允许客户端916经由接口920调入包围区914的机制。例如,接口924可以包括GetProcAddress和CallEnclave方法:诸如客户端916的包围区客户端可以使用由GetProcAddress返回的函数指针来调入诸如包围区914的包围区。lpProcName参数可以与包围区主映像中导出的函数相匹配。例如:在GetProcAddress的其他一些实施例中,lpProcName可以是特定导出函数的另一标识符,诸如数字,诸如来自从包围区映像导出的入口点的枚举中的选择、或者与函数相对应的其他非文本标识符。CallEnclaveIn的其他一些实施例可以另外采用指定要被调用的包围区的输入参数,例如,句柄返回的CreateEnclave。当调入包围区时,可以暂停客户端进程中的线程,并且可以使用包围区线程具有单独的线程ID来服务请求中的调用。然后,在包围区线程上运行的包围区代码可以访问先前在调入包围区之前可用于包围区客户端的存储器。例如,客户端可以在调用CallEnclaveIn抽象方法之前将数据放入由pParameter指向的缓冲区中,然后在服务请求中的调用的同时,包围区可以访问由pParameter指向的缓冲区。在调出时,原始客户端呼叫线程可以用于服务调出。可以支持可重入例如,主机中的调出可以再次调入包围区。为了调出包围区,接口922可以包括与上面的CallEnclaveIn方法相关的方法,其允许包围区914调出到包围区客户端916。例如,包围区914可以调出到特定类型的主机进程中的任何函数,例如ENCPROC函数类型。可以使用参数中的调用将该函数的函数指针传递给包围区。接口920可以包括上面登记为“CallinExample”函数的入口点,并且接口926可以包括上面登记为“Callout”函数的入口点。例如,在包围区主映像处于便携式可执行PE映像格式的情况下,映像中的函数入口点可以被列为“导出”入口点,并且每个这样的导出入口点可以包括用以标识和区分该包围区PE映像中的入口点的文本名称,诸如“CallinExample”;在其他的一些实现中,函数入口点可以用附加元数据标记,诸如指示函数可以是用于包围区的入口点的一位。在上面用于调出包围区的示例中,调出callout函数的地址以0xF00给出,并且仅作为一个示例。调出函数的实际地址可以以各种方式确定。例如,客户端内的调出函数地址可以作为用于调入函数的参数而传递到包围区中。在另一示例中,可以由客户端使用诸如RegisterCallOut的函数来注册调出函数的地址:包围区内的代码可以通过调用诸如GetCallOut的补充函数来获取调出函数的地址:BOOLGetCallOut_Out_ENCPROC*pCallout,_In_LPCTSTRlpProcName在其他的一些实施例中,CallEnclaveIn和CallEnclaveOut方法实际上可以是相同的方法。例如,可以使用单个CallEnclave方法来调入和调出包围区。在包围区客户端916也是包围区的情况下,调出包围区914到客户端916也将是调入包围区。抽象平台912可以提供用于将数据密封到包围区的基元。例如,接口922可以向包围区914提供服务,诸如将数据密封和解封到包围区身份。如上所述,包围区可以具有多个嵌套身份,并且数据可以被密封到任何这样的身份。当数据被密封到与一组可能的包围区实例化相对应的身份时,密封的数据可以由对应的一组包围区实例化中的任何一个解封。例如:对于enclaveIdType的每个值,包围区将密封到映射ID。可能的包围区身份类型以及enclaveIdType的值包括:ENCLAVE_EXACTHASHENCLAVE_INSTANCEHASH:使用用于SGX的MRENCLAVE、用于VSM的IMAGEHASH进行密封ENCLAVE_IMAGEIDS:在SGX中不支持,将使用用于VSM的IMAGEIDSENCLAVE_FAMILYID:将使用用于SGX的PRODUCTID、用于VSM的FAMILYIDENCLAVE_AUTHORID:将使用用于SGX的MRSIGNER、用于VSM的AUTHORID平台还可以将附加调试配置制作和运行时应用于密封策略。对于不同的调试策略,可以使用不同的密封密钥。例如,调试和释放配置可以使用不同的密封密钥。抽象平台912可以提供用于证明的基元,诸如用于产生证明报告和引用以及用于验证报告和引用的基元。例如:可以由包围区使用VerifyReport来确认报告的完整性,并且报告是由相同机器上的包围区生成的。在CreateQuote中,quoteType可以映射到引用提供方,其可以是生成特定引用的信任源。在CreateQuote中,authData可以是指向由CreateQuote的调用方并且以由CreateQuote的调用方定义的格式创建的数据的指针。注意,抽象平台912不需要理解authData。可以将authData打包到所产生的引用中。引用提供方可以被期望支持这一点。除了上述的包围区基元之外,包围区抽象平台可以提供:存储器管理例如,用以分配和释放存储器,诸如限制为包围区的存储器或在包围区与其客户端之间共享的存储器;异常处理例如,用以处理在执行包围区代码的同时发生的错误或异常;线程同步;以及加密函数例如,加密、散列函数和签名。上述技术可以在一个或多个计算设备或环境上实现,如下文所描述的。图11描绘了示例通用计算环境,例如,该环境可以实施可信硬件172、可信平台736或计算机810、910、1010和1050中的一个或多个,其中可以实施本文中描述的一些技术。计算系统环境1102仅是合适的计算环境的一个示例,并且不旨在对本公开的技术方案的使用范围或功能提出任何限制。计算环境1102也不应当被解释为具有与示例操作环境1102中示出的组件中的任一组件或其组合相关的任何依赖性或要求。在一些实施例中,各种所描绘的计算元件可以包括被配置为实例化本公开的特定方面的电路。例如,本公开中使用的术语电路可以包括被配置为通过固件或开关来执行多个功能的专用硬件组件。在其他的一些示例实施例中,术语电路可以包括通过实施可操作以执行多个功能的逻辑的软件指令来配置的通用处理单元、存储器等。在电路包括硬件和软件的组合的示例实施例中,实现方可以编写实施逻辑的源代码,并且源代码可以编译成可以由通用处理单元处理的机器可读代码。由于本领域技术人员可以理解,现有技术已经发展到硬件、软件或硬件软件的组合之间几乎没有差异的程度,因此选择硬件与软件来实现特定功能是一种留给实现方的设计选择。更具体地,本领域技术人员可以理解,软件过程可以转变为等价的硬件结构,并且硬件结构本身可以转变为等价的软件过程。因此,硬件实现与软件实现的选择是设计选择之一,并且留给实现方。计算机1102其可以包括移动设备或智能电话、平板计算机、膝上型计算机、台式计算机或联网设备的集合、云计算资源等中的任何一种通常包括各种计算机可读介质。计算机可读介质可以是可以由计算机1102访问的任何可用介质,并且包括易失性和非易失性介质、可移除和不可移除介质。系统存储器1122包括以易失性和或非易失性存储器形式的计算机存储介质,诸如只读存储器ROM1123和随机存取存储器RAM1160。包含帮助在计算机1102内的元件之间传送信息的基本例程例如在启动期间的基本输入输出系统1124BIOS通常存储在ROM1123中。RAM1160通常包含立即可访问和或当前正在由处理单元1159操作的数据和或程序模块。作为示例而非限制,图11示出了管理程序1130、操作系统OS1125、应用程序1126、包括包围区客户端1165的其他程序模块1127、以及包围区1128。计算机1102还可以包括其他可移除不可移除的易失性非易失性计算机存储介质。仅作为示例,图11示出了从不可移除的非易失性磁介质读取或向其写入的硬盘驱动器1138、从可移除的非易失性磁盘1154读取或向其写入的磁盘驱动器1139、以及从诸如CDROM或其他光学介质等可移除的非易失性光盘1153读取或向其写入的光盘驱动器1104。可以在示例操作环境中使用的其他可移除不可移除的易失性非易失性计算机存储介质包括但不限于磁带盒、闪存卡、数字通用盘、数字录像带、固态RAM、固态ROM等。硬盘驱动器1138通常通过诸如接口1134等不可移除存储器接口而连接到系统总线1121,并且磁盘驱动器1139和光盘驱动器1104通常由诸如接口1135或1136等可移除存储器接口而连接到系统总线1121。上面讨论并且在图11中示出的驱动器及其相关联的计算机存储介质为计算机1102提供计算机可读指令、数据结构、程序模块和其他数据的存储。例如,在图11中,硬盘驱动器1138被示出为存储操作系统1158、应用程序1157、其他程序模块1156诸如包围区客户端应用和包围区二进制文件和程序数据1155。注意,这些组件可以与操作系统1125、应用程序1126、其他程序模块1127和程序数据1128相同或不同。操作系统1158、应用程序1157、其他程序模块1156和程序数据1155在这里被给予不同的数字以说明它们至少是不同的副本。用户可以通过诸如键盘1151和通常称为鼠标、轨迹球或触摸板的指向设备1152等输入设备向计算机1102中输入命令和信息。其他输入设备未示出可以包括麦克风、操纵杆、游戏手柄、圆盘式卫星天线、扫描仪、视网膜扫描器等。这些和其他输入设备通常通过耦合到系统总线1121的用户输入接口1136而连接到处理单元1159,但是可以由诸如并行端口、游戏端口或通用串行总线USB等其他接口和总线结构连接。监视器1142或其他类型的显示设备也经由诸如视频接口1132等接口而连接到系统总线1121。除了监视器之外,计算机还可以包括可以通过输出外围接口1133而连接的其他外围输出设备,诸如扬声器1144和打印机1143。计算机1102可以使用到诸如远程计算机1146等一个或多个远程计算机的逻辑连接而在联网环境中操作。远程计算机1146可以是个人计算机、服务器、路由器、网络PC、对等设备或其他公共网络节点,并且通常包括上面关于计算机1102描述的很多或所有元件,尽管图11中仅示出了存储器存储设备1147。图11中描绘的逻辑连接包括局域网LAN1145和广域网WAN1149,但是也可以包括其他网络。这种联网环境在办公室、企业范围的计算机网络、内联网、因特网和云计算资源中很常见。当在LAN联网环境中使用时,计算机1102通过网络接口或适配器1137而连接到LAN1145。当在WAN联网环境中使用时,计算机1102通常包括调制解调器1105或用于通过诸如因特网等WAN1149建立通信的其他装置。可以是内部的或外部的调制解调器1105可以经由用户输入接口1136或其他适当的机制而连接到系统总线1121。在联网环境中,相对于计算机1102或其部分而描述的程序模块可以存储在远程存储器存储设备中。作为示例而非限制,图11将远程应用程序1148示出为驻留在存储器设备1147上。可以理解,所示出的网络连接是示例的,并且可以使用在计算机之间建立通信链路的其他装置。图12描绘了抽象本机包围区平台的方法1200的示例流程图。抽象平台诸如图9的912可以在框1202中接收针对包围区平台的请求。该请求可以来自包围区客户端,诸如客户端914,或来自包围区,诸如包围区916。来自包围区的请求可以是执行抽象平台基元的请求,并且可以包括例如以下请求:创建包围区的证明报告或引用;将数据密封到包围区;调用包围区的客户端中的函数调出到客户端;读取单调计数器提供单调计数器的当前值;提供可信时间测量;以及分配可以在包围区及其客户端之间共享的存储器例如,以允许指向共享存储器的指针在调入或调出包围区时作为参数被传递。在一些实施例中,包围区客户端的整个虚拟存储器空间可以与包围区共享并且可以从包围区访问,使得分配共享存储器的请求可以实现为分配用于包围区的客户端的存储器的请求。在一些实施例中,分配共享存储器的方法可用于包围区及其客户端两者。来自包围区客户端的请求可以是执行抽象平台基元的请求,并且可以包括例如以下请求:实例化包围区;验证包围区的证明报告;调用包围区内的函数调入包围区;以及分配可以在包围区与其客户端之间共享的存储器。在操作1204-1208中,抽象平台请求可以被转译成本机平台请求。如果例如确定原始请求中的参数的数据格式与本机平台中的该参数的数据格式不相同,则可以在可选的步骤1204中转换所接收的请求中所包括或暗示的参数。例如,如果来自包围区或客户端的请求包括从抽象格式证明报告得出的参数,诸如包围区抽象身份,则将被转换为在本机格式证明报告中使用的参数,诸如本机包围区身份。如果确定本机平台的调用协定convention和所接收的请求不同,则可以在可选步骤1206中转换调用协定。例如,可以通过以下方式来转换调用协定:在调用栈上重新排序参数,在处理器寄存器与调用栈之间移动参数,以及在错误条件通信方法之间进行转换,诸如返回错误值和调用异常处理程序。在一些实施例中,对于一些请求,本机平台可以与抽象平台相同,在这种情况下,可以跳过框1204和1206的转换操作。在框1208中,将经转换的请求发送给本机平台以使得请求由本机平台执行。例如,在本机平台符合英特尔软件保护扩展SGX包围区架构的情况下,本机平台可以包括用于包围区的处理器指令。在这种情况下,在框1208中发送请求可以包括执行用于包围区的一个或多个处理器指令。在另一示例中,本机平台可以符合微软虚拟安全模式VSM包围区架构,其可以包括具有用于包围区的超级调用的管理程序。超级调用是用以管理程序代码的软件陷阱,并且超级调用可以引起处理器上下文变为可以允许特权操作的上下文。在该VSM示例中,在框1208中发送请求可以包括对管理程序和或其他机制进行超级调用以将执行上下文切换到可以允许特权操作的上下文。本文中向本机平台发送请求通常表示使用本机平台的特征来执行请求。向本机平台1208发送请求的操作可以涉及利用本机平台的多个操作,并且可以根据所请求的操作或基元而变化,诸如创建包围区,证明,数据密封,控制转移或使用单调计数器和可信时间。CreateEnclave基元可以用于实例化包围区。实例化包围区的CreateEnclave请求可以引起抽象平台创建安全容器例如,通过分配一些存储器并且为该存储器建立安全或隔离边界,将包围区代码复制到该安全容器中例如,从包围区映像中,并且配置或启用到包围区代码中的入口点例如,根据包围区映像中的入口点元数据。用启用了包围区的管理程序提供包围区管理功能的管理程序,诸如VSM向本机平台发送CreateEnclave请求可以包括分配存储器并且进行超级调用以便以防止包围区容器之外的代码访问该存储器的方式来设置针对存储器的处理器页表。来自抽象平台的包围区创建超级调用还可以引起管理程序设置配置信息,以用于在指派的入口点处到包围区中的控制转移。之后,安全容器之外的代码可以使控制转移超级调用在安全容器内的指派入口点处转移执行。用启用了包围区的处理器具有包围区管理处理器指令的处理器,诸如SGX向本机平台发送CreateEnclave请求可以包括抽象平台执行诸如ECREATE等指令以向CPU通知应当将某个存储器区域创建为安全的包围区容器,并且执行诸如EADD等指令以将数据页添加到该包围区容器。特殊处理器指令也可以用于在存储器中创建特殊页面,以用于指定包围区中的入口点以用于到包围区中的控制转移。稍后,安全容器之外的代码可以执行诸如EENTER等指令,以指定所指派的入口点之一将执行控制转移到该包围区入口点。CreateReport基元可以用于创建证明报告。创建包围区的证明报告的CreateReport请求可以由抽象层执行,如上面关于图5和图7解释的。利用启用了包围区的管理程序,抽象层可以通过进行将执行状态变为例如安全监视器上下文的超级调用来将请求发送给本机平台,安全监视器上下文可以访问诸如图7的PrivAK726等可以用于签名报告的秘钥。如果计算机是在健康配置中启动的,则该密钥可能仅对安全监视器上下文可用,如用基于TPM的TCG日志验证的那样。安全监视器可以用被证明的包围区的身份来标记报告数据。通过启用了包围区的处理器,可以通过执行诸如EREPORT等指令将CreateReport请求发送给本机平台,该指令生成报告并且将其发送给将能够访问用于签名报告的私钥的特殊包围区。EnclaveSeal基元可以用于将数据密封到包围区。将数据密封到包围区以与包围区相关联的方式或用与包围区相关联的密钥加密数据。EnclaveSeal请求可以是使用密封策略将位于包围区之内的数据诸如包围区的状态的全部或一部分密封到包围区的请求。密封策略诸如上述SEALING_POLICY可以指定包围区身份类型,该类型指示哪些包围区应当能够解封数据。密封过程本身可以使用与密封策略中指定的包围区身份相关联的加密密钥。之后,如果以指定身份类型的新的包围区的身份值与以指定身份类型的密封包围区的身份值相同,则新的包围区实例化可以能够解封数据。数据密封允许秘密或敏感的包围区数据被安全地复制到不安全的存储装置,诸如到包围区的安全容器之外的存储器或者到诸如硬盘等永久存储装置。当密封的数据是包围区状态数据时,密封允许包围区被重置为先前状态,并且允许安全包围区操作中断并且随后在另一包围区中继续。为了重置包围区状态,首先通过将其状态密封到包围区来保存包围区的状态。可以通过用与包围区相关联的密钥加密状态数据来完成密封。稍后,也许在包围区的状态发生变化之后,可以通过解密所密封的数据并且然后用解密的数据代替包围区的当前状态例如,通过将解密的数据复制到包围区的安全容器中,将所密封的状态数据解封到同一包围区。为了中断安全操作并且在另一包围区中继续,通过在第一包围区中执行包括多个处理器指令的操作来开始安全操作。当第一包围区被中断时,该包围区的状态可以被密封到密封策略中所指定的包围区身份,然后密封的数据可以被保存在不安全的存储装置中,诸如本地或基于云的永久存储装置。第一包围区然后可以可选地被终止或开始其他包围区操作。可以通过将密封的状态数据解封到第二包围区中来实例化或重新利用第二包围区以继续中断的操作。中断的操作可以在第二包围区中在第一包围区停止的地方继续。利用启用了包围区的管理程序,抽象层可以通过进行超级调用来向本机平台发送EnclaveSeal请求。超级调用可以将执行状态变为将能够访问与可以用于密封或解封数据的包围区相关联的秘密密封密钥的上下文,例如安全监视器上下文。密封密钥可以从包围区身份和仅可用于安全监视器的秘密平台密钥的组合得出。在健康配置中引导机器时,该平台密钥可以仅用于安全监视器,并且引导配置用基于TPM的TCG日志来验证。在这个启用了包围区的管理程序实施例中,包围区代码永远不能访问密封密钥。利用启用了包围区的处理器,可以通过执行诸如EGETKEY等用以获取加密密钥的指令将EnclaveSeal请求发送给本机平台。该算法可以生成对包围区唯一的密封密钥。密封密钥可以从包围区的身份和嵌入在处理器中的秘密得出。然后,包围区内的代码可以用密封密钥来加密数据。可以通过用密封密钥加密来密封数据,例如由包围区内的代码、由抽象平台或由本机平台。EnclaveUnseal可以类似地使用EGETKEY来生成解封密钥。控制转移请求可以是将处理器执行控制从包围区内的指令转移到包围区之外的入口点的请求例如,CallEnclaveOut,或者从包围区之外的指令反转到包围区内的入口点的请求例如,CallEnclaveIn。例如,这可以针对安全的数据库操作而进行。在实例化数据库包围区之后,包围区客户端可以通过使用CallEnclaveIn基元将控制转移到将执行查询的数据库包围区内的入口点来请求包围区执行特定操作,诸如数据库查询。在包围区完成查询之后,可以用CallEnclaveOut基元将查询的结果可能在加密结果之后返回给客户端,以在可以接收查询结果的客户端中的入口点处将控制转移回客户端。CallEnclaveIn和CallEnclaveOut基元可以采用指向可以在包围区和其客户端之间共享的存储器缓冲区的指针该缓冲区可以是由包围区或其客户端可读、可写和或可执行的。利用启用了包围区的管理程序,抽象层可以通过进行超级调用来向本机平台发送CallEnclaveIn请求。超级调用可以将执行状态变为如下的上下文,例如安全监视器上下文,该上下文将保存CPU寄存器,恢复先前保存的一组包围区CPU寄存器值可能来自包围区存储器,改变页表配置以允许访问包围区的受保护的存储器,以及调用包围区内的函数入口点。类似地,当抽象平台接收到CallEnclaveOut请求时,请求可以通过超级调用被发送给本机平台,该超级调用将保存包围区CPU寄存器可能保存到包围区存储器并且恢复先前保存的用于包围区客户端的CPU寄存器,改变页表配置以防止访问包围区存储器,以及将处理器控制转移到包围区之外的包围区客户端中的入口点。利用启用了包围区的处理器,可以通过执行诸如EENTER等指令将CallEnclaveIn请求发送给本机平台,该指令可以引起CPU恢复一组包围区CPU寄存器可能来自包围区存储器并且调用包围区内的函数将控制转移到入口点。CallEnclaveOut基元可以执行诸如EEXIT等指令,该指令可以将控制转移到包围区之外的指令和或引起在包围区之外转移控制的错误。单调计数器具有多种用途。例如,包围区可能想要限制其状态可以恢复的程度。例如,单调计数器可以用作保证消息新鲜度的临时数,如上面关于图4讨论的。单调计数器通常具有被读取和递增的能力,但不能递减。为了限制回滚或恢复包围区的状态,包围区内的代码可以递增相关联的单调计数器,然后将计数器的值连同包围区的内部状态一起保存。例如,可以用EnclaveSeal基元保存状态和计数器值。稍后,当恢复包围区状态时,例如使用EnclaveUnseal基元,包围区内的代码可以读取单调计数器的当前值并且将其与具有解封状态的计数器值进行比较。如果具有解封状态的计数器的值小于计数器的当前值,则包围区可以防止使用解封状态。利用启用了包围区的管理程序,抽象层可以通过进行显露给包围区的超级调用来向本机平台发送请求,以读取或递增单调计数器。当调用读取或递增计数器的超级调用时,处理器将执行状态变为诸如安全监视器等上下文,该上下文将验证进行超级调用的包围区的身份,然后分别读取或递增存储在例如诸如TPM芯片等非易失性存储装置中的相应的单调计数器。备选地,安全监视器可以通过与服务器建立安全通信信道并且要求其读取或递增指定的单调计数器来读取或递增存储在远程可信服务器或一组远程可信服务器上的计数器。远程可信服务器或多个远程可信服务器可以将计数器保持在包围区内,以将其与主计算机中的其余代码隔离。利用启用了包围区的处理器,可以通过执行指令将请求发送给本机平台。利用这种处理器,可以通过读取或递增计算机主板中的芯片中的非易失性存储器存储装置中的计数器来实现单调计数器基元。备选地,也可以使用可信移除服务器来实现这些基元,如启用了包围区的管理程序那样。图13描绘了抽象本机包围区平台的方法1300的示例流程图。在框1302中,包围区抽象平台可以从包围区或包围区客户端接收请求。在框1304中,抽象平台可以确定本机平台是否包括包围区处理器指令,例如,通过确定本机平台是否符合SGX。如果是,则在框1306中执行包围区处理器指令。在框1308中,抽象平台可以确定本机平台是否包括包围区超级调用,例如通过确定本机平台是否符合VSM。如果是,则本机平台进行包围区超级调用。在框1312中清除执行包围区指令或调用包围区超级调用而产生的结果。清除可以包括例如将包围区处理器指令或包围区超级调用的输出参数或异常处理转换为抽象层接口的格式或协议。然后在框1314中将经转换的输出参数返回到原始请求方包围区或客户端。抽象包围区身份图14描绘了用于实例化包围区的示例包围区二进制映像。可以通过创建安全容器诸如包围区容器1490并且将一个或多个包围区映像的部分复制到容器中来实例化包围区。可以通过对主包围区映像1410的引用来创建包围区容器1490。主映像可以包括对其他从属包围区映像的引用。在该示例中,主映像1410包括分别作为对从属包围区映像1420和1450的引用的依赖性Dependency1和依赖性2。映像1420包括对映像1430和1440的进一步依赖性,而映像1450依赖于映像1460。一旦所有这些映像或其部分被复制到容器1490中,所得到的包围区可以包括非平台映像1402、抽象平台1404映像和本机平台映像1406,非平台映像1402可以包括对于实例化的包围区唯一或特定的代码和数据。每个包围区映像诸如主映像1410可以包括ID、依赖性、代码、数据和映像作者的签名。在映像1410的示例中,包括两个ID1410.1和1410.2。这些ID可以是UUID,UUID指定例如与ImageID、FamilyID或AuthorID值相对应的抽象身份值,ImageID、FamilyID或AuthorID值可以单独地或共同地用于标识用该包围区映像实例化的任何包围区。如图所示,映像1410具有两个ID,但是更少或更多的ID是可行的。映像1410中的代码可以是由托管包围区容器1490的计算机的处理器可执行的二进制指令。映像1410中的数据可以由加载到容器1410中的任何代码使用。映像1410还可以包括签名Sig1410以确保映像的任何或所有其他内容的完整性,诸如ID、依赖性引用、代码和数据。其他映像1420-1460可以类似地包含ID、依赖性引用、代码、数据和签名。可以以各种方式指定依赖性指示符,诸如依赖性1和依赖性2或映像1410、映像1420的依赖性1和依赖性2、以及映像1450的依赖性1。如果映像1410-1460存储在计算机系统的存储器中,则依赖性指示符可以仅仅是存储器中的地址。如果包围区映像是文件系统中的文件,则引用可以是文件名。在一些实施例中,引用可以是逻辑标识符。逻辑标识符可以是唯一编号,诸如UUID,或者可以是以其他方式标识从属映像的其他数据,诸如文本串。例如,文本串可以指示从属二进制映像的作者、源、产品名称、产品族和或版本号。逻辑标识符包括web或因特网位置,诸如可以取回从属二进制文件的副本的位置。在一些实施例中,可以通过在包围区映像的注册表中查找依赖性指示符诸如逻辑标识符以找到指向所引用的包围区映像的当前版本或本地副本的指针来定位包围区映像文件。在一些情况下,可以使用可信服务将依赖性指示符解析为特定包围区映像或映像位置的标识。在一些实施例中,依赖性指示符可以是密码安全标识符,诸如预期的从属包围区二进制映像的密码散列。这样的散列可以包括所有从属二进制文件或仅包括其一部分。包括在依赖性指示符中的从属二进制文件的部分可以包括抽象身份值,诸如如ID1410.1或ID1420.2,并且可以是抽象身份值。用于密码安全标识符的解析服务可能不需要像逻辑标识符那样可信,因为确定包围区依赖性的实体可以能够通过计算从属二进制文件本身的散列来验证找到了正确的从属映像。图15描绘了用抽象包围区身份执行包围区操作的方法1500的示例流程图。包围区的抽象身份值可以为确定具有一些共同但不完全相同的特征的两个包围区之间的等价性提供基础。身份值可以被包括在证明报告中,并且可以与抽象身份类型诸如ExactHash、InstanceHash、ImageID、FamilyID或AuthorID相关联。不完全相同的两个包围区可以针对抽象身份类型具有相同的抽象身份值。另外,在两个不同的本机包围区平台上实例化到安全容器中的相同的包围区代码也可以具有相同的抽象身份值。例如,方法1500可以通过本机包围区平台与包围区或包围区客户端之间的抽象平台层来执行。在框1502中,从包围区映像诸如图14的主包围区映像1410实例化包围区。包围区映像可以是包括包围区代码、数据、身份列表、任何从属包围区映像的列表和签名的主映像。为了确保包围区映像的完整性,可以用可以与包围区映像的作者相对应的私钥来对映像进行签名。包围区映像中的包围区身份ID列表可以对应于抽象身份类型,诸如ImageID、FamilyID和AuthorID,每个抽象身份类型旨在连同其他相关的包围区映像一起共同标识包围区映像。从属包围区映像的列表可以是指包含主包围区映像中的代码所依赖的包围区代码的其他包围区映像。从属包围区映像可以由同一作者制作,也可以不由同一作者制作,并且一些从属包围区映像通常可以与包围区平台抽象平台或本机平台相关联,而不是特别地与主包围区映像或主包围区映像的作者相关联。可以通过使用任何本机包围区平台创建安全包围区容器并且将主映像和任何从属包围区映像的全部或一部分复制到安全容器中来实例化包围区。在框1503中,例如由包围区或包围区客户端连同包围区身份类型一起请求包围区操作。身份类型可以指定抽象身份的类型,诸如ImageID或AuthorID,并且与特定的实例化的包围区相关,但是不指定针对该包围区的AuthorID值。在框1503之后的方法1500的其余部分描述了使用针对实例化的包围区的该身份类型得出的身份值,用实例化的包围区执行操作诸如证明、数据密封或单调计数器的使用等的操作。可以使用多个包围区映像的子集的散列来确定身份。将多个包围区映像的哪个子集用作到散列的输入可以部分基于期望在包围区操作中使用的身份类型。在框1504中,基于身份类型确定包围区映像的一部分,本文中称为身份部分。身份部分可以包括用于在框1502中实例化包围区的各种包围区二进制映像的全部、部分或没有一个。身份部分可以包括包围区映像中包含的包围区代码的全部、部分或没有一个。身份部分还可以包括在所包括的包围区映像的非代码部分中列出的零个、一个或多个身份ID。身份部分可以包括或也可以不包括包围区映像中包含的包围区数据。身份部分可以包括包围区映像的这些不同部分的任何组合。例如,身份部分可以包括所有代码、没有数据、以及两个或四个可用身份ID。在可选的框1506中,确定哪些从属包围区映像将要包括在身份部分中,并且确定每个包括的映像的身份部分。从属映像的身份部分可以与主包围区映像的身份部分相同或不同。例如,所有代码和ImageID都包括在主映像的身份部分中,而从属映像的身份部分中可以不包括代码并且可以仅包括从属映像的FamilyID。当包围区代码被包括在身份部分中时,身份部分中的包围区代码的部分可以通过身份类型和哪些依赖性将被包括在身份部分中的指示的组合来确定。身份类型InstanceHash可以包括例如主映像中的包围区代码,但是没有从属映像,而身份类型ExactHash可以包括在不被认为是包围区平台的一部分的所有从属映像中的包围区代码。例如,未用包围区平台作者的私钥签名的所有从属包围区映像可以被认为不是包围区平台的一部分。备选地或另外地,主映像可以包括在针对InstanceHash或ExactHash身份类型的身份部分中将要被包括或排除的从属包围区映像的列表。可以作为元数据被包括在包围区映像中的包围区身份ID可以被包括在包围区映像的身份部分中,而不是包围区代码中,或者除了包围区代码之外。例如,用于身份类型ImageID、FamilyID和AuthorID的身份部分可以包括来自包围区映像的对应的ID元数据。当身份类型被嵌套或分层时,较低级别类型的身份部分可以包括用于较高级别类型的ID数据。例如,用于ImageID的身份部分可以包括针对ImageID、FamilyID和AuthorID的ID数据,而用于AuthorID的身份部分可以仅包括针对AuthorID的ID数据。包括包围区代码的身份类型诸如InstanceHash和ExactHash例如经由证明向包围区客户端提供更高级别的保证,即某些包围区代码在包围区内运行。然而,当包围区代码的任何身份部分发生变化时,包围区的身份必然将发生变化。例如,如果在新版本的包围区映像中修复了安全修复程序或其他错误,则基于新代码的所得到的身份值也将改变。通过提供一种用于将某些部分的包围区代码从身份散列计算中排除的机制,可以将包围区的身份与包围区代码的被排除部分的变化解耦。例如,当一个作者的包围区代码依赖于由包围区平台提供的包围区代码时,包围区身份可以与依赖平台的修订版解耦。在框1508中,确定可以表示在框1502中实例化的包围区的身份的身份值。可以通过在包围区映像或多个包围区映像的先前确定的身份部分上计算散列来确定身份值身份值是散列函数的输出,其中身份部分是到散列函数的输入。在一些实施例中,到散列函数的输入将是多个原始包围区映像的部分,而在其他的一些实施例中,到散列函数的输入将是在将映像的身份部分复制到容器之后包围区容器的部分并且在原始包围区映像被加密的情况下可能是解密的身份部分。在框1510中,可选地,可以通过验证多个原始包围区映像的完整性来验证所得到的身份值的完整性。可以用与用于对包围区映像进行签名的私钥相对应的公钥来验证包围区映像的完整性。例如,这种公钥私钥对可以与多个包围区映像的作者相关联,使得对所得到的身份值的信任可以植根于包围区作者的信任。最后,在框1512中,可以使用身份值来执行与实例化的包围区相关的操作。例如:可以针对身份类型生成或验证实例化的包围区的证明报告;数据可以以身份密封到实例化的包围区或从实例化的包围区解封;以及可以使用与实例化的包围区和身份类型相关联的单调计数器或可信时间。使用更高级别身份类型的包围区操作支持可能的包围区实例化组之间的交互。对高级别身份类型的证明可以为具有相同高级别身份的所有包围区提供证明报告等价性。例如,对AuthorID身份类型的证明报告可以等价于来自从包含相同AuthorID元数据的主映像而被实例化的所有包围区的证明报告。密封到高级别身份类型的数据可以由具有相同高级别身份值的任何包围区解封。例如,密封到具有AuthorID身份类型的实例化的包围区的数据可以由其包围区主映像中具有相同AuthorID元数据的任何其他实例化的包围区解封。包围区身份等价性图16描绘了具有抽象包围区身份等价性的示例系统。包围区客户端1602可以与经由抽象平台1614在第一本机平台1616的安全包围区容器中被实例化的第一包围区1612通信,并且客户端1602还可以与经由抽象平台1624在第二本机平台1626的安全包围区容器中被实例化的第二包围区1622通信。第一本机平台1616可以或可以不与第二本机平台驻留在同一计算机上。包围区客户端1602可以与任一本机平台驻留在同一计算机上,或者可以驻留在单独的第三计算机上。第一本机平台1616可以与第二本机平台1626不相同。例如,第一本机平台1616可以是来自同一本机平台制造方的第二本机平台的较旧版本。备选地,第一本机平台1616和第二本机平台1626可以符合完全不同的包围区架构,诸如VSM和SGX。通过比较从证明报告得出的身份值,包围区客户端可以安全地确定包围区是等价的。包围区客户端1602可以通过从第一包围区1612和第二包围区1622接收单独的证明报告来安全地标识每个包围区。身份值可以被包括在这些证明报告中的每一个中或从其中得出。如果身份值相同,则包围区客户端1602可以确信第一包围区1612和第二包围区1622在某种意义上是等价的。来自证明报告的身份值可以是与特定抽象身份类型诸如ExactHash、InstanceHash、ImageID、FamilyID或AuthorID相对应的抽象身份值,或者是这种抽象身份值的散列。在这种情况下,可以在包围区不完全相同的情况下确定等价性。两个包围区可能不精确相同但仍然被确定为是等价的,例如,在加载到包围区容器中的包围区映像是相同功能的不同版本、或者是具有不同从属映像的相同主映像、或者是加载到不同包围区架构的包围区容器中的相同包围区映像的情况下。对于各种情况,第一包围区1612可以被认为与第二包围区1622是等价的但是不同于第二包围区1622。在第一示例中,仅最初加载到包围区容器中的代码的子集是相同的例如,对于抽象身份类型ExactHash或InstanceHash是等价的。在第二示例中,即使两个二进制映像中的代码不同,包围区代码的作者可能在两个不同的包围区二进制映像中包括相同的ID例如,对于身份类型ImageID、FamilyID或AuthorID是等价的。在第三示例中,每个包围区中的代码完全相同,但是被加载实例化到不同的本机平台上。在该第三示例中,第一本机平台1616和第二本机平台1626可以由不同的制造方制造,因此不同证明报告的信任根植于不同制造方的不同证书机构参见图7,元素738。两个本机平台不同的示例是在服务器群或云计算中,其中为第一包围区和第二包围区的处理工作负载分配的服务器是不支持相同本机包围区平台的服务器。在一个替代实施例中,第一包围区可以是第二包围区的客户端,使得框1602和1612被组合。在该实施例中确定包围区等价可以包括在第一包围区内确定来自第二包围区的证明报告的身份值与第一包围区的自身身份值相同在特定抽象身份等级。图17描绘了具有两个等价包围区的并行处理的示例流程图。过程1700可以由例如两个或更多个不同包围区的客户端执行。在框1702中,在不同的本机平台实例上实例化两个包围区,例如如图16所示。可以由指定包围区二进制映像诸如图14的主映像1410的包围区客户端经由抽象平台1614和1624的CreateEnclave方法来实例化包围区。被指定用于实例化两个包围区的包围区二进制映像可以相同或不同。在框1704中创建针对每个实例化的包围区的证明报告。例如,可以在包围区客户端的请求下或在包围区自身的请求下创建证明报告。希望证明两个包围区等价性的实体诸如包围区客户获取两个证明报告的副本。可选地,可以在框1706中验证证明报告。例如,可以通过用产生证明报告的本机平台的认可证书诸如图7,元素728验证证明签名来验证报告的完整性。此外,可以用本机平台制造方的公钥来验证认可证书诸如图7,元素732。可以在框1708中从每个证明报告中提取身份值或其散列,并且可以通过验证所提取的身份值对于每个包围区是相同的来确定两个包围区的等价性。这些身份值可以是与身份类型相关联的抽象身份值或其散列。一旦包围区客户端已经从框1708和1710中的操作证明了两个包围区实例化的等价性,则根据所示等价类型,两个包围区可以互换使用。框1712-1720描绘了使用等价包围区以并行处理方式使用两个实例化的等价包围区的示例方法。在框1712和1716中,将输入数据集的一部分诸如数据库的一部分或数字映像文件的一部分复制到第一包围区和第二包围区中。根据手头的处理任务,复制的数据集部分可以相同或不同。通过同时在框1714中部分地执行第一包围区中的操作并且在框1718中部分地执行第二包围区中的操作,可以安全地并行执行处理操作。该操作可以是例如搜索数据库或执行映像处理操作。第一包围区可以搜索数据库的前半部分或者对映像的前半部分执行映像处理操作,而第二包围区可以搜索数据库的后半部分或者执行映像的后半部分的映像处理操作。最后,在框1720中,可以组合第一包围区和第二包围区中的并行处理的结果,例如通过组合数据库的两个有序的半部分,或者将两个映像半部分放回到一起。图18描绘了具有两个等价包围区的串行处理的示例流程图。如图18所示,包围区操作诸如数据库操作或映像处理操作在两个单独的包围区中以两个连续的部分安全地完成。例如,过程1800可以由图16的包围区客户端1602来执行。在框1802中,在第一本机包围区平台上创建第一包围区,并且在框1804中,创建第一包围区的证明报告。在框1806中,可以验证第一包围区的第一证明报告,例如,如上面关于图17的框1706所述。在框1808中,安全操作在第一包围区中开始,但未被完成。在框1810中,可选地,可以密封第一包围区的状态以安全地移出第一包围区。例如,第一包围区状态可以被密封到第一包围区的身份类型。一旦保存了包围区状态,就可以终止第一包围区没有图示。从框1812开始使用第二包围区。在框1812中,在第二本机平台上实例化第二包围区。如图16和17所示,第二本机平台可以或可以不与第一本机平台托管在同一计算机上,并且第一本机平台和第二本机平台可以相同或不同。在框1814中,创建第二本机平台的证明报告,并且可选地,在框1816中,可以验证该第二证明报告。在框1818中,可以比较来自第一和第二证明报告的身份值以验证第一和第二包围区的等价性。在替代实施例中,可以在框1808中开始第一包围区中的安全操作之前,实例化第二包围区并且进行等价验证框1812-1818。为了继续在第一包围区中开始的安全操作,在框1820中,来自第一包围区的密封状态可以被复制到第二包围区中并且被解封。在框1822中,在第二包围区中完成安全操作使用从第一包围区安全地复制的包围区状态,如果状态被复制。分布式数据密封图19是示例分布式数据密封系统的框图。数据密封可以分布在多个包围区上,其中这些包围区托管在单独的本机包围区平台上和或在单独的计算机上。如上所述,EnclaveSeal和EnclaveUnseal抽象基元可以使用绑定到本机包围区平台或其上运行包围区的物理计算机的密钥来封锁和解封用于包围区的数据。这可能将解封限制为仅托管在同一计算机或同一本机包围区平台实例上的包围区。图19描绘了分布式数据密封系统,其中密封或解封数据可以在与托管包围区的本机平台和计算机不同的本机平台或计算机上发生。系统1900包括计算机1910、1930、1950,其中网络1902连接计算机1910和1930,并且网络1904连接计算机1930和1950。计算机1910托管源包围区1912,可以从源包围区1912获取要被密封的数据;计算机1930托管用于服务于分布式密封和解封请求的分布式密封包围区DSE1932;并且计算机1950托管其中先前密封的数据被解封的目的地包围区1952。如上面关于图9解释的,包围区1912、1932、1952可以经由包围区抽象协议分别与抽象平台1914、1934、1954通信,并且抽象平台1914、1934、1954可以分别经由本机协议与本机平台1916、1936和1956通信。在替代实施例中,可以在没有中间抽象平台的情况下直接在本机平台1961、1936、1956上托管一个或多个包围区1912、1932、1950。密封数据1938可以是使用与DSE1932或其托管本机平台1936相关联的密钥而密封到DSE1932的数据。密封数据1938可以存储在较少受保护的位置,诸如在DSE的安全包围区容器之外的计算机1930上,例如,在计算机1930的存储器空间中或硬盘的文件系统中的其他地方。分布式数据密封可以包括DSE1930对源包围区的认证,例如通过网络1902的DSE1932的证明。一旦源包围区1912信任DSE1932,则源包围区1912可以通过安全通信信道将敏感数据连同供DSE1932进行密封的密封策略发送给DSE1932。然后,DSE1932可以将来自包围区1912的数据密封在自身中,并且将密封数据存储在不安全的存储器中。之后,目的地包围区1952可以请求先前密封的数据。为了解封数据,DSE1932可以例如通过网络1904上的证明来验证目的地包围区1952,并且验证根据由源包围区1912提供的密封策略针对目的地包围区1952的解封是许可的。DSE1932可以解封来自源包围区1912的先前密封的数据,并且然后通过安全通信信道将解封的数据发送给目的地包围区1952。通过在网络1902和1904上加密包围区数据,可以安全地向DSE1932和从DSE1932传送包围区数据。例如,通过网络1902发送的包围区数据可以用在DSE1932向源包围区1912的证明期间生成的密钥来加密,并且可以用在目的地包围区1952向DSE1932的证明期间生成的密钥来加密通过网络1904发送的数据。其他安全通信信道是可能的,诸如用目的地的公钥加密,例如与DSE相关联的公钥或与目的地包围区相关联的公钥。在分布式密封和解封中使用的包围区身份可以是或可以不是抽象包围区身份。例如,在具有抽象平台层的一些实施例中,密封策略诸如由源包围区指定并且由DSE强制执行的密封策略可以标识所许可的解封包围区身份,其中所许可的解封包围区身份是例如抽象包围区身份的列表、或与源包围区的抽象身份值组合的抽象身份类型的列表。在其他情况下,可以使用非抽象身份。例如,在一些实施例中,DSE可以用公共可用的代码实现,使得对DSE的信任是信任其代码的知识,而不是信任其代码的作者。在该示例中,DSE的证明可以是所有的DSE公共代码的签名散列,并且到散列函数的输入可以不包括作者分配的抽象身份值。在一些实施例中,本机平台1916、1936、1956是单独的本机平台,因为它们托管在不同的计算机1910、1930、1950上,即使本机平台1916、1936、1956符合同一本机包围区平台架构的同一版本。在其他的一些实施例中,本机平台1916、1936、1956可以符合不同的平台架构或同一本机包围区平台架构的不同版本。在密封策略中使用抽象身份可以促进在不同的本机平台架构上托管源和目的地包围区。在图19中未描绘的分布式数据密封的其他实施例中,可能没有三个单独的计算机诸如单独的计算机1910、1930、1950。例如,源和目标包围区可以位于一个计算机上并且可能位于单个本机平台上,而DSE位于单独的计算机上。备选地,DSE可以托管在与托管源包围区的计算机或托管目的地包围区的计算机相同的计算机上。在这些分布式数据密封实施例中,数据密封和解封并不完全是单个计算机本地的,如上面关于EnclaveSeal和EnclaveUnseal抽象基元描述的。分布式数据密封可以在抽象层API中实现,诸如通过抽象平台1914、1934、1954。例如,DistributedEnclaveSeal和DistributedEnclaveUnseal基元类似于上面讨论的本地数据密封基元EnclaveSeal和EnclaveUnseal。DistributedEnclaveSeal通过采用附加的SetOfTargetEnclaves参数来扩展EnclaveSeal,该参数允许调用的包围区诸如包围区1910指定被授权解封经由pPlaintext参数提供的数据的一组包围区身份。如果没有经由SetOfTargetEnclaves提供身份,则可以假定默认授权的包围区身份是密封包围区的身份,例如密封包围区的ExactHash或InstanceHash。例如作为源包围区的计算机上的抽象平台1914的方法的DistributedEnclaveSeal的实现可以包括与DSE建立安全通信信道,诸如通过在网络1902上加密消息。例如,如上所述,用于该加密的多个密钥可以在证明过程期间被生成,或者可以是与DSE1932相关联的任何公钥。可以通过采用附加参数KeyForData未在上面的DistributedEnclaveSeal函数原型中示出来进一步推广DistributedEnclaveSeal。在一些实施例中,对于单个包围区或单个包围区身份,可以同时保持多组数据被密封。在这种情况下,KeyForData允许指定正在密封哪组数据。KeyForData可以是任何类型的数据标识符,诸如字符串、数字或一组性质。在一些实施例中,KeyForData可以是到DistributedEnclaveSeal的输入参数并且由密封包围区生成,从而有效地使得密封包围区能够命名数据集。在其他的一些实施例中,KeyForData可以是输出参数,其中DSE在数据被密封时生成KeyForData标识符。DistributedEnclaveUnseal可以在抽象平台1954中实现,并且响应于来自目的地包围区1952的请求而操作。例如,DistributedEnclaveUnseal可以建立到DSE1932的安全通信信道,例如,用在目的地包围区1952向DSE1932的证明期间生成的密钥来加密消息,或者通过用目的地包围区的公钥来加密发送给目的地包围区的消息。DSE可以例如通过证明来验证请求目的地包围区的身份,解封所请求的密封数据,并且将解封的数据安全地发送给请求包围区。在请求包围区具有多个身份的实施例中,可以在Identity参数中指定特定身份。在针对单个包围区身份存储多个包围区数据集的实施例中,KeyForData参数可以通过使用在密封数据集时在DistributedEnclaveSeal中使用的相同KeyForData值来指定哪个密封数据集对于指定的身份被请求。在一些实施例中,可以通过目标授权的目标包围区的公钥指定诸如在SetOfTargetEnclaves参数中被授权解封数据的包围区的身份。在该实施例中,目的地包围区向DSE的证明可能是不必要的,但是解封的数据然后可以使用指定的公钥之一而仅被提供为加密的。假定仅目标包围区可以访问对应私钥以进行解密,仅目标包围区将可以访问解封的数据。在图19中未示出的实施例中,分布式密封包围区DSE1932的功能本身可以跨多个DSE分布。例如,DSE功能可以跨多个计算机上的多个DSE分布以用于冗余和容错。在该示例中,任何复制的DSE都可以能够服务于密封或解封请求。注意,密封数据1938一旦被密封加密就可以安全地存储在任何地方,包括跨云存储服务器而被复制。分布式数据密封可以允许在计算机之间移动包围区工作负载。例如,由DSE密封的源包围区数据可以是第一云服务器上的源包围区的状态数据,其可以在解封之后加载到第二云服务器上的目的地包围区中。这可以与上面关于图18描述的类似地完成。安全操作可以在源包围区中开始执行。稍后,也许在源包围区中的执行被中断之后,源包围区的状态可以被密封到DSE,然后当目的地包围区准备好继续在源包围区中开始的安全操作时,被解封到目的地包围区。图20是可以由密封包围区或DSE执行的分布式数据密封和解封的示例性流程图。框2002-2006对应于分布式数据密封,而框2008-2010对应于分布式数据解封。响应于密封源自源包围区的包围区数据集的请求,密封包围区或DSE可以在框2002中通过向源包围区发送证明报告或引用来向源包围区证明自己。通过检查密封包围区的证明报告中的身份价值和签名,源包围区可以验证密封包围区的身份是真实且可信的密封包围区。在框2004中,密封包围区接收许可列表和要密封的包围区数据。这些可以经由如上面关于图19所述的安全信道接收。在可选的框2006中,密封包围区可以将源包围区的数据密封到其自身,例如,如果数据存储在密封包围区的安全容器之外,诸如在计算机文件系统中。为了解封用于目的地包围区的数据,目的地包围区可以在框2008中向密封包围区证明自己,诸如通过提供证明报告或引用。在框2010中,可以验证目的地包围区的身份,诸如通过检查目的地包围区的证明报告。在框2012中,密封包围区通过验证目的地包围区的认证身份是否被包括在与数据一起接收的允许列表中来确定目的地包围区是否被许可解封来自源包围区的数据。一旦确认许可,如果包围区数据被密封,则包围区数据可以被解封,然后在框2014中经由安全信道被发送给目的地包围区。密钥保管库包围区密钥保管库可以用包围区实现。密钥保管库为密钥保管库的客户端安全地保持密钥,诸如用于加密和解密数据的加密系统的密钥。密钥保管库还可以利用密钥执行操作,诸如加密和解密数据,签名数据以及从现有密钥得出新密钥。当作为包围区被实现时,密钥保管库可以提供秘密加密密钥的非常安全存储和利用秘密加密密钥的非常安全的处理。此外,密钥保管库包围区的软件证明可以为其正在与真实且可信的密钥保管库进行通信的保管库客户端提供高级别的保证。高度安全的系统可以构建在具有保管库锁定密钥的密钥保管库包围区,从而存储在密钥保管库内的密钥从不释放到密钥保管库之外的任何客户端,并且在某些情况下,保管库锁定密钥可能只存在存储在密钥保管库包围区内或可能密封到密钥保管库包围区。图21是示例性密钥保管库包围区的框图。包围区2122是第二本机包围区平台2126的安全包围区容器内的密钥保管库。在图21的示例中,密钥保管库包围区2122的客户端2112也是包围区,并且托管在第一本机包围区平台2116的安全包围区容器内。包围区2112、2122可以经由相应的包围区抽象平台2114与它们各自的本机平台2116、2126交互。在其他的一些实施例中,抽象平台2114、2124中的一者或两者可能不存在,其中包围区2112和或2122直接与本机平台2116、2126交互。密钥保管库包围区2122可以经由通信信道2150与保管库客户端2112通信。在一些实施例中,通信信道2112可以是提供对通过通信信道2150发送的消息的机密性、完整性和或新鲜度的保证的安全通信信道。例如,可以利用如图2和图3所示的加密和签名,使用作为证明过程的一部分生成的共享密钥如图5和图6所示来建立这种安全通信信道的机密性和完整性。软件证明部分地通过在通信信道的另一大小上提供对实体的身份的保证来提供安全性。通过向保管库客户端证明密钥保管库包围区2122,客户端可以确保密钥保管库包围区2122是在将密钥诸如密钥或其他明文数据发送给密钥保管库之前它所说的包围区。对于也是包围区的客户端反之亦然,如图21所示。通过向密钥保管库包围区2122证明库包围区2112,密钥保管库可以确保客户端是在向客户端公开秘密诸如密钥或其他明文数据之前它所说的客户端。具有保管库锁定密钥和导出密钥的密钥保管库系统特别是在从保管库锁定密钥得出加密密钥的情况下可以用于构建灵活且变化安全的安全系统。密钥导出函数可以是公共的,也可以不是公共的可以用于从第一密钥生成多个密钥。第一密钥根密钥可以是保管库锁定的,以用于最高级别的安全性,并且从第一密钥得出的密钥可以用于加密目的。如果得出的密钥被泄露,则可以在现有系统中生成新的得出密钥,而无需访问或更改保持第一密钥的密钥保管库。示例密钥保管库包围区KVE是基于云的密钥保管库系统,其使用包围区提供密钥存储、生成、导出、分发、加密、解密和签名。KVE可以通过其精确散列其安全容器的内容的散列来标识,或者通过由其创建方分配或与其创建方相关联的任意标识符来标识。在后一种情况下,可以利用其创建方的私钥对包围区进行签名,以避免由于标识符的冲突而发生的冲突和安全漏洞。密钥保险保管库客户端可以使用以下示例基元与密钥保管库系统交互。示例StoreKey函数原型如下:StoreKey[in]Keyname,[in]KeyType,[in]KeyValue,[in]PolicyStoreKey将给定密钥存储在密钥保管库中,并且将其与给定名称相关联。密钥类型也与密钥相关联,并且限制利用密钥可以执行的操作。例如,某些密钥应当仅用于加密,其他密钥用于签名等。并且特定密钥可以仅与特定的密码算法一起使用。该策略可以指定进一步限制密钥使用的策略。例如,它可以指定被允许取回密钥和或使用密钥的一组包围区身份。它还可以指定时间性质,例如,应当在某个日期销毁密钥,或者应当限制使用密钥的操作速率。示例GenerateKey函数原型是:GenerateKey[in]keyName,[in]keyType,[in]PolicyGenerateKey生成某种类型的新密钥并且将其保持存储在密钥保管库内,即密钥从不离开密钥保管库。示例GetKey函数原型是:GetKey[in]KeyName,[out]KeyValueGetKey获取存储在密钥保管库内的密钥。这些基元通常在安全通信信道上实现,并且调用基元的代码通常在可信环境中运行。在这种上下文中,从密钥保管库中取回密钥通常是可以接受的。示例DeleteKey函数原型是:DeleteKey[in]keyNameDeleteKey从密钥保管库中删除密钥。示例DeriveKey函数原型是:DeriveKey[in]newKeyName,[in]KeyName,[in]kdfIdentifier,[in]AdditionalDataDeriveKey使用由kdfIdentifier标识的密码密钥导出函数KDF,以基于由keyName标识的密钥和在AdditionalData中传递的数据来得出新密钥。示例Encrypt函数原型是:Encrypt[in]KeyName,[in]algorithm,[in]data,[out]encryptedDataEncrypt使用所请求的算法用由KeyName标识的密钥来加密数据。示例Decrypt函数原型是:Decrypt[in]KeyName,[in]algorithm,[in]encrytedData,[out]dataDecrypt使用所请求的算法用由KeyName标识的密钥解密数据。示例Sign函数原型是:Sign[in]KeyName,[in]algorithm,[in]data,[out]signatureSign使用所请求的算法用由KeyName标识的密钥对数据签名。示例VerifySignature函数原型是:VerifySignature[in]KeyName,[in]algorithm,[in]signature,[out}boolsignatureIsCorrectVerifySignature使用所请求的算法用由KeyName标识的密钥来验证签名。可以通过利用KVE建立安全信道来实现所有上述密钥保管库基元。可以使用证明并且执行如上面参考图5和图6所述的Diffie-Hellman密钥交换来建立信道。在建立通信信道之后,通过信道安全地发送请求,并且从信道读取响应。信道可以保证所交换的数据的机密性和完整性。在另一实施例中,在KVE第一次运行时,它生成公钥私钥对,并且它生成针对公钥的引用。然后它写出引用和公钥,同时将私钥保留在包围区内。然后可以将公钥和引用分发给希望使用密钥保管库的所有系统代码。在这种情况下,上面的基元的实现验证引用以确保它与真正的KVE通信,然后使用KVE的公钥加密请求。作为请求的一部分,基元的实现可以包括用于对从KVE发送的结果进行加密和完整性保护的密钥。该实施例可以提供安全双向通信信道,而无需证明。图22是一些密钥保管库包围区操作的示例流程图。过程2200在框2202中通过在密钥保管库包围区内安全地存储在加密系统中使用的密钥而开始。密钥可以用于例如加密或解密数据,生成加密签名,或者可以仅用作从中得出其他密钥的根密钥。通过例如将密钥存储在包围区的安全容器的存储器空间内,可以将密钥安全地存储在密钥保管库包围区中。在其他的一些实施例中,通过将密钥数据密封到密钥保管库包围区,可以保持密钥在安全库容器之外是安全的,或者通过用如关于图19和图20所述的分布式密封包围区来远程密封,可以保持钥匙安全。在框2204中,密钥保管库包围区执行证明过程以向保管库客户端证明密钥保管库包围区的身份。这可以使客户端确保密钥保管库不是冒名顶替者,并且可以利用诸如密钥或要加密的数据而被信任。密钥保管库包围区的证明可以包括向保管库客户端发送密钥保管库包围区的证明报告或证明引用。然后,密钥保险保管库客户端可以通过用与密钥保管库包围区的本机包围区平台相关联的公钥来验证证明报告中的签名来验证证明报告的完整性。例如,密钥保管库2122的证明报告可以由第二本机平台2126生成,并且保管库客户端2112可以使用与第二本机平台2126相关联的公钥来验证报告中的签名。该证明过程还可以生成用于保管库客户端与密钥保管库包围区之间的安全通信信道的密钥,例如,如图5和图6所示。证明报告可以包括可以以如上例如关于图14和图15所述的各种方式确定的密钥保管库包围区的身份。例如,身份可以基于密钥保管库包围区的安全容器的整个内容的散列、仅由密钥保管库包围区的作者创建方分配的唯一标识符的散列、或者容器内容的一部分和唯一标识符的组合的散列。一些密钥保管库包围区操作还可能需要保管库客户端的身份的保证。例如,解密数据或泄露密钥诸如用Decrypt或GetKey基元可能需要这样的保证。在这些情况下,如果保管库客户端也是包围区,则可选的框2208包括用于由密钥保管库包围区来验证保管库客户端的身份的证明过程。框2208的证明过程可以包括在密钥保管库包围区处接收保管库客户端的证明报告或引用。在可选的框2210中,可以在密钥保管库与密钥保管库包围区之间建立安全通信信道。可能需要安全通信来在保管库客户端与密钥保管库包围区之间传递秘密,诸如密钥或要加密的数据。框2004或2008的证明过程可以生成可以用于在保管库客户端与密钥保管库包围区之间创建安全通信信道的密钥,例如如图5和图6所示。备选地,可以使用消息目的地的任何已知公钥来安全地发送消息。在框2212中,可以在密钥保管库包围区内执行诸如上述密钥保管库基元之一的密钥操作。在该操作期间,密钥数据可以仅存储在密钥保管库包围区的安全容器的地址空间中。示例基元包括DeriveKey、Decrypt、Sign等。过程2200假定密钥保管库包围区已经知道密钥。注意,对于一些密钥保管库包围区操作或基元,诸如StoreKey或GenerateKey,操作顺序可能与过程2200中描绘的不同。例如,对于GenerateKey,在框2202的安全存储操作之前,将发生密钥生成操作如框2212中。这种操作顺序在图23的框2302-2308中示出。图23是用于创建和使用具有保管库锁定密钥的密钥保管库包围区的示例流程图。在过程2300的框2302-2308中,在密钥保管库包围区内得出新密钥。在框2310-2316中,使用新得出的密钥来执行解密操作。这是使用保管库锁定密钥的一个示例,其中所有密钥操作都是用密钥保管库执行的,并且密钥从不提供给保管库客户端。此外,该示例中的新密钥可以从不存在于密钥保管库包围区之外,因为它是从密钥保管库包围区本身内创建得出的,并且从未从保管库客户端或其他地方提供给密钥保管库包围区。对于一些实施例和密钥使用策略,保管库锁定密钥可以是短暂的,因为即使在将密钥密封到密钥保管库包围区之后它也从不离开密钥保管库包围区的安全容器。这样的短暂密钥诸如可能与用于临时保卫通信信道的导出密钥一起发生可能在密钥保管库包围区的容器被破坏或终止时停止存在。虽然图23的过程示出了可以如何使用保管库锁定密钥,但是例如,如果密钥使用策略允许密钥返回到请求其创建的客户端,则图23的过程还可以与非保管库锁定的密钥一起使用。在框2302中,密钥保管库包围区向保管库客户端证明其自身。这可能是客户端所要求的,因为客户端将在框2312中提供要加密的秘密。在框2304中,密钥保管库包围区可以例如从保管库客户端接收密钥使用策略的指示。该指示例如可以是指定策略的数据结构,或者可以是要与密钥使用策略的注册表一起使用的标识符。密钥使用策略本身可以指示远该密钥应当从不提供给任何包围区客户端。在框2306中,从先前已知的根密钥得出新密钥,例如利用上述DeriveKey基元。可以由密钥保管库包围区从例如保管库客户端接收得出新密钥的请求未示出。在框2308中,可以根据接收到的密钥使用策略来安全地存储新得出的密钥。在框2310中,保管库客户端可以向密钥保管库包围区证明自己。证明过程可以包括在密钥保管库包围区处接收保管库客户端的证明报告或引用。所接收的密钥使用策略可以将新密钥的一些或全部使用限制为来自经由软件证明而被认证的请求方的请求。在框2312-2316中,使用在框2306中得出的密钥执行诸如上述Decrypt基元等解密操作。在其他的一些实施例中,可以利用保管库锁定密钥来执行其他操作,诸如加密,签名,验证签名以及从框2306中得出的密钥得出另一新密钥从根密钥得出第二代密钥。在框2312中,从保管库客户端接收经加密的数据缓冲。在框1314中用得出的密钥来解密所接收的加密数据,并且在框2316中经由安全通信信道将所得到的解密数据在经解密的数据缓冲区中发送给保管库客户端。在一个实施例中,一种用于确定包围区等价性的方法包括:从在第一本机包围区平台上被实例化的第一包围区接收第一证明报告;从第一证明报告中提取与包围区身份类型相关联的第一包围区身份值;从在第二本机包围区平台上被实例化的第二包围区接收第二证明报告,其中第一本机包围区平台和第二本机包围区平台不同;从第二证明报告中提取与包围区身份类型相关联的第二包围区身份值;确定第一包围区身份值与第二包围区身份值相同;以及基于确定,通过在第一包围区中部分地完成计算操作并且在第二包围区中部分地完成计算操作来执行计算操作。在一个实施例中,计算操作与第一包围区和第二包围区串联地被执行,并且还包括:在第一包围区中部分地完成计算操作之后,密封第一包围区的包围区状态数据以产生密封数据,其中状态数据被密封到包围区身份类型;将密封数据从第一包围区复制到第二包围区中;以及将密封数据解封到第二包围区中。在一个实施例中,计算操作与第一包围区和第二包围区并行地被执行,并且还包括:将数据集的第一部分复制到第一包围区中;将数据集的第二部分复制到第二包围区中;并且其中计算操作使用第一部分而在第一包围区中部分地完成,并且使用第二部分而在第二包围区中部分地完成。在一个实施例中,在第一包围区中部分地完成计算操作包括由第一包围区读取与身份值相关联的单调计数器;并且在第二包围区中部分地完成计算操作包括由第二包围区读取与身份值相关联的单调计数器。在一个实施例中,在第一包围区中部分地完成计算操作包括由第一包围区读取与身份值相关联的可信时间;并且在第二包围区中部分地完成计算操作包括由第二包围区读取与身份值相关联的可信时间。在一个实施例中,方法还包括:通过执行至少一个第一本机平台操作来创建针对第一证明报告的签名;以及通过执行至少一个第二本机平台操作来创建针对第二证明报告的签名。在一个实施例中,第一本机包围区平台符合英特尔软件保护扩展SGX包围区架构,并且第二本机包围区平台符合微软虚拟安全模式VSM包围区架构。在一个实施例中,方法还包括:通过执行至少一个本机SGX操作来生成第一证明报告;以及通过执行至少一个本机VMS操作来生成第二证明报告。在一个实施例中,第一本机包围区平台和第二本机包围区平台是相同包围区架构的不同版本。在一个实施例中,方法还包括:用与第一本机包围区平台相关联的公钥,验证第一证明报告的第一签名;以及用与第二本机包围区平台相关联的公钥,验证第二证明报告的第二签名,其中第一公钥和第二公钥不同。在一个实施例中,方法还包括:用与第一本机包围区平台的制造方相关联的第一公钥,验证第一本机平台的第一认可证书;以及用与第二本机包围区平台的制造方相关联的第二公钥,验证第二本机包围区平台的第二认可证书,其中第一公钥和第二公钥不相同。在一个实施例中,方法还包括:通过在第一包围区的安全容器中的第一存储器部分上计算散列来生成第一证明报告,其中第一存储器部分的内容独立于第一本机平台;以及通过在第二包围区的安全容器中的第二存储器部分上计算散列来生成第二证明报告,其中第二存储器部分的内容独立于第二本机平台。在一个实施例中,一种系统至少包括处理器和其上存储指令的存储器,指令在由系统执行时至少引起:从在第一本机包围区平台上被实例化的第一包围区接收第一证明报告;从第一证明报告中提取与包围区身份类型相关联的第一包围区身份值;从在第二本机包围区平台上被实例化的第二包围区接收第二证明报告,其中第一本机包围区平台和第二本机包围区平台不同;从第二证明报告中提取与包围区身份类型相关联的第二包围区身份值;将第一包围区身份值与第二包围区身份值进行比较;以及通过在第一包围区中部分地完成计算操作并且在第二包围区中部分地完成计算操作来执行计算操作。在一个实施例中,计算操作与第一包围区和第二包围区串联地被执行,并且其中指令还至少引起:在第一包围区中部分地完成计算操作之后,密封第一包围区的包围区状态数据以产生密封数据,其中状态数据被密封到包围区身份类型;将密封数据从第一包围区复制到第二包围区中;以及将密封数据解封到第二包围区中。在一个实施例中,计算操作与第一包围区和第二包围区并行地被执行,并且其中指令还至少引起:将数据集的第一部分复制到第一包围区中;将数据集的第二部分复制到第二包围区中;并且其中计算操作使用第一部分而在第一包围区中部分地完成,并且使用第二部分而在第二包围区中部分地完成。在一个实施例中,在第一包围区中部分地完成计算操作包括由第一包围区读取与身份值相关联的单调计数器;以及在第二包围区中部分地完成计算操作包括由第二包围区读取与身份值相关联的单调计数器。在一个实施例中,在第一包围区中部分地完成计算操作包括由第一包围区读取与身份值相关联的可信时间;以及在第二包围区中部分地完成计算操作包括由第二包围区读取与身份值相关联的可信时间。在一个实施例中,指令还至少引起:通过执行至少一个第一本机平台操作来创建针对第一证明报告的签名;以及通过执行至少一个第二本机平台操作来创建针对第二证明报告的签名。在一个实施例中,第一本机包围区平台符合英特尔软件保护扩展SGX包围区架构,并且第二本机包围区平台符合微软虚拟安全模式VSM包围区架构,并且其中指令还至少引起:通过执行至少一个本机SGX操作来生成第一证明报告;以及通过执行至少一个本机VMS操作来生成第二证明报告。在一个实施例中,第一本机包围区平台和第二本机包围区平台是相同包围区架构的不同版本。在一个实施例中,指令还至少引起:用与第一本机包围区平台相关联的公钥,验证第一证明报告的第一签名;以及用与第二本机包围区平台相关联的公钥,验证第二证明报告的第二签名,其中第一公钥和第二公钥不同。在一个实施例中,指令还至少引起:用与第一本机包围区平台的制造方相关联的第一公钥,验证第一本机平台的第一认可证书;以及用与第二本机包围区平台的制造方相关联的第二公钥,验证第二本机包围区平台的第二认可证书,其中第一公钥和第二公钥不相同。在一个实施例中,指令还至少引起:通过在第一包围区的安全容器中的第一存储器部分上计算散列来生成第一证明报告,其中第一存储器部分的内容独立于第一本机平台;以及通过在第二包围区的安全容器中的第二存储器部分上计算散列来生成第二证明报告,其中第二存储器部分的内容独立于第二本机平台。在一个实施例中,一种系统包括:用于从在第一本机包围区平台上被实例化的第一包围区接收第一证明报告的装置;用于从第一证明报告中提取与包围区身份类型相关联的第一包围区身份值的装置;用于从在第二本机包围区平台上被实例化的第二包围区接收第二证明报告的装置,其中第一本机包围区平台和第二本机包围区平台不同;用于从第二证明报告中提取与包围区身份类型相关联的第二包围区身份值的装置;用于将第一包围区身份值与第二包围区身份值进行比较的装置;以及用于通过在第一包围区中部分地完成计算操作并且在第二包围区中部分地完成计算操作来执行计算操作的装置。前面部分中描述的每个过程、方法和算法可以在由一个或多个计算机或计算机处理器执行的代码模块中实施,并且完全或部分地通过这样的代码模块来自动化。代码模块可以存储在任何类型的非暂态计算机可读介质或计算机存储设备上,诸如硬盘驱动器、固态存储器、光盘等。过程和算法可以部分或全部地在专用电路中实现。所公开的过程和过程步骤的结果可以持久地或以其他方式存储在任何类型的非暂态计算机存储装置中,诸如易失性或非易失性存储装置。上述各种特征和过程可以彼此独立地使用,或者可以以各种方式组合。所有可能的组合和子组合都旨在落入本公开的范围内。另外,在一些实现中可以省略某些方法或过程框。本文中描述的方法和过程也不限于任何特定顺序,并且与其相关的块或状态可以以其他适当的顺序被执行。例如,所描述的块或状态可以以与具体公开的顺序不同的顺序执行,或者多个块或状态可以在单个块或状态中组合。示例块或状态可以以串行、并行或以某种其他方式执行。可以向所公开的示例实施例添加块或状态或从其中移除块或状态。本文中描述的示例系统和组件可以与所描述的不同地配置。例如,与所公开的示例实施例相比,可以添加、移除或重新布置元素。还应当理解,各种项被示出为在使用的同时存储在存储器中或存储在存储装置上,并且这些项或其部分可以在存储器与其他存储设备之间传送以用于存储器管理和数据完整性的目的。备选地,在其他的一些实施例中,一些或所有软件模块和或系统可以在另一设备上的存储器中执行,并且经由计算机间通信与所示的计算系统通信。此外,在一些实施例中,系统和或模块中的一些或全部可以以其他方式实现或提供,诸如至少部分以固件和或硬件,包括但不限于一个或多个专用集成电路ASIC、标准集成电路、控制器例如,通过执行适当的指令,并且包括微控制器和或嵌入式控制器、现场可编程门阵列FPGA、复杂可编程逻辑器件CPLD等。一些或所有模块、系统和数据结构也可以存储在要由适当的驱动器或经由适当的连接来读取的计算机可读介质上例如,作为软件指令或结构化数据,诸如硬盘、存储器、网络或便携式介质制品。出于本说明书和权利要求的目的,短语“计算机可读存储介质”及其变体不包括波、信号和或其他暂态和或无形通信介质。系统、模块和数据结构还可以作为所生成的数据信号例如,作为载波或其他模拟或数字传播信号的一部分在各种计算机可读传输介质上传输,包括基于无线和基于有线电缆的介质,并且可以采用各种形式例如,作为单个或多路复用模拟信号的一部分,或者作为多个离散数字分组或帧。在其他的一些实施例中,这种计算机程序产品也可以采用其他形式。因此,本公开可以用其他计算机系统配置来实践。除非另有明确说明或者在所使用的上下文中以其他方式理解,否则本文中使用的诸如“能”、“可”、“可能”、“可以”、“例如”等条件语言通常旨在表达某些实施例包括而其他实施例不包括某些特征、元素和或步骤。因此,这种条件语言通常不旨在暗示一个或多个实施例以任何方式需要特征、元素和或步骤,也不旨在暗示一个或多个实施例必须包括用于决定无论是否有作者输入或提示这些特征、元素和或步骤是否被包括在任何特定实施例中或将在任何特定实施例中执行的逻辑。术语“包括”、“包含”、“具有”等是同义的并且以开放式方式包含性地使用,并且不排除其他元素、特征、动作、操作等。此外,术语“或”以其包含性意义而不是以其排他性的意义使用,因此当使用时,例如,为了连接元素列表,术语“或”表示列表中的一个、一些或所有元素。虽然已经描述了某些示例实施例,但是这些实施例仅作为示例呈现,并且不旨在限制本文中描述的本发明的范围。因此,前面的描述中的任何内容都不旨在暗示任何特定的特征、特性、步骤、模块或块是必需的或必不可少的。实际上,本文中描述的新颖方法和系统可以以各种其他形式来实施;此外,在不脱离本文中描述的本发明的精神的情况下,可以对本文中描述的方法和系统的形式进行各种省略、替换和改变。所附权利要求及其等价物旨在涵盖落入文中描述的某些发明的范围和精神内的这样的形式或修改。

权利要求:1.一种用于确定包围区等价性的方法,包括:从在第一本机包围区平台上被实例化的第一包围区接收第一证明报告;从所述第一证明报告中提取与包围区身份类型相关联的第一包围区身份值;从在第二本机包围区平台上被实例化的第二包围区接收第二证明报告,其中所述第一本机包围区平台和所述第二本机包围区平台不同;从所述第二证明报告中提取与所述包围区身份类型相关联的第二包围区身份值;确定所述第一包围区身份值与所述第二包围区身份值相同;以及基于所述确定,通过在所述第一包围区中部分地完成计算操作并且在所述第二包围区中部分地完成所述计算操作来执行所述计算操作。2.根据权利要求1所述的方法,其中所述计算操作与所述第一包围区和所述第二包围区串联地被执行,并且还包括:在所述第一包围区中部分地完成所述计算操作之后,密封所述第一包围区的包围区状态数据以产生密封数据,其中所述状态数据被密封到所述包围区身份类型;将所述密封数据从所述第一包围区复制到所述第二包围区;以及将所述密封数据解封到所述第二包围区中。3.根据权利要求1所述的方法,其中所述计算操作与所述第一包围区和所述第二包围区并行地被执行,并且还包括:将数据集的第一部分复制到所述第一包围区中;将数据集的第二部分复制到所述第二包围区中;并且其中所述计算操作使用所述第一部分而在所述第一包围区中被部分地完成,并且使用第二部分而在所述第二包围区中被部分地完成。4.根据权利要求1所述的方法,其中:在所述第一包围区中部分地完成所述计算操作包括:由所述第一包围区读取与所述身份值相关联的单调计数器或可信时间;并且在所述第二包围区中部分地完成所述计算操作包括:由所述第二包围区读取与所述身份值相关联的所述单调计数器或所述可信时间。5.根据权利要求1所述的方法,还包括:通过执行至少一个第一本机平台操作来创建针对所述第一证明报告的签名;以及通过执行至少一个第二本机平台操作来创建针对所述第二证明报告的签名。6.根据权利要求1所述的方法,其中所述第一本机包围区平台符合英特尔软件保护扩展SGX包围区架构,并且所述第二本机包围区平台符合微软虚拟安全模式VSM包围区架构,并且还包括:通过执行至少一个本机SGX操作来生成所述第一证明报告;以及通过执行至少一个本机VMS操作来生成所述第二证明报告。7.根据权利要求1所述的方法,还包括:用与所述第一本机包围区平台相关联的公钥,验证所述第一证明报告的第一签名;以及用与所述第二本机包围区平台相关联的公钥,验证所述第二证明报告的第二签名,其中所述第一公钥和所述第二公钥不同。8.根据权利要求1所述的方法,还包括:用与所述第一本机包围区平台的制造方相关联的第一公钥,验证所述第一本机平台的第一认可证书;以及用与所述第二本机包围区平台的制造方相关联的第二公钥,验证所述第二本机包围区平台的第二认可证书,其中所述第一公钥和所述第二公钥不相同。9.根据权利要求1所述的方法,还包括:通过在所述第一包围区的安全容器中的第一存储器部分上计算散列来生成所述第一证明报告,其中所述第一存储器部分的内容独立于所述第一本机平台;以及通过在所述第二包围区的安全容器中的第二存储器部分上计算散列来生成所述第二证明报告,其中所述第二存储器部分的内容独立于所述第二本机平台。10.一种系统,至少包括处理器和其上存储指令的存储器,所述指令在由所述系统执行时至少引起:从在第一本机包围区平台上被实例化的第一包围区接收第一证明报告;从所述第一证明报告中提取与包围区身份类型相关联的第一包围区身份值;从在第二本机包围区平台上被实例化的第二包围区接收第二证明报告,其中所述第一本机包围区平台和所述第二本机包围区平台不同;从所述第二证明报告中提取与所述包围区身份类型相关联的第二包围区身份值;将所述第一包围区身份值与所述第二包围区身份值进行比较;以及通过在所述第一包围区中部分地完成计算操作并且在所述第二包围区中部分地完成所述计算操作来执行所述计算操作。11.根据权利要求10所述的系统,其中所述计算操作与所述第一包围区和所述第二包围区串联地被执行,并且其中所述指令还至少引起:在所述第一包围区中部分地完成所述计算操作之后,密封所述第一包围区的包围区状态数据以产生密封数据,其中所述状态数据被密封到所述包围区身份类型;将所述密封数据从所述第一包围区复制到所述第二包围区;以及将所述密封数据解封到所述第二包围区中。12.根据权利要求10所述的系统,其中所述计算操作与所述第一包围区和所述第二包围区并行地被执行,并且其中所述指令还至少引起:将数据集的第一部分复制到所述第一包围区中;将数据集的第二部分复制到所述第二包围区中;并且其中所述计算操作使用所述第一部分而在所述第一包围区中被部分地完成,并且使用第二部分而在所述第二包围区中被部分地完成。13.根据权利要求10所述的系统,其中所述指令还至少引起:用与所述第一本机包围区平台的制造方相关联的第一公钥,验证所述第一本机平台的第一认可证书;以及用与所述第二本机包围区平台的制造方相关联的第二公钥,验证所述第二本机包围区平台的第二认可证书,其中所述第一公钥和所述第二公钥不相同。14.根据权利要求10所述的系统,其中所述指令还至少引起:通过在所述第一包围区的安全容器中的第一存储器部分上计算散列来生成所述第一证明报告,其中所述第一存储器部分的内容独立于所述第一本机平台;以及通过在所述第二包围区的安全容器中的第二存储器部分上计算散列来生成所述第二证明报告,其中所述第二存储器部分的内容独立于所述第二本机平台。15.一种系统,包括:用于从在第一本机包围区平台上被实例化的第一包围区接收第一证明报告的装置;用于从所述第一证明报告中提取与包围区身份类型相关联的第一包围区身份值的装置;用于从在第二本机包围区平台上被实例化的第二包围区接收第二证明报告的装置,其中所述第一本机包围区平台和所述第二本机包围区平台不同;用于从所述第二证明报告中提取与所述包围区身份类型相关联的第二包围区身份值的装置;用于将所述第一包围区身份值与所述第二包围区身份值进行比较的装置;以及用于通过在所述第一包围区中部分地完成计算操作并且在所述第二包围区中部分地完成所述计算操作来执行所述计算操作的装置。

百度查询: 微软技术许可有限责任公司 交叉平台包围区身份

免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。