CN102473224B - 提供安全应用执行的方法和装置 - Google Patents
提供安全应用执行的方法和装置 Download PDFInfo
- Publication number
- CN102473224B CN102473224B CN200980160114.XA CN200980160114A CN102473224B CN 102473224 B CN102473224 B CN 102473224B CN 200980160114 A CN200980160114 A CN 200980160114A CN 102473224 B CN102473224 B CN 102473224B
- Authority
- CN
- China
- Prior art keywords
- enclave
- key
- instruction
- page
- epc
- 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.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/14—Protection against unauthorised use of memory or access to memory
- G06F12/1458—Protection against unauthorised use of memory or access to memory by checking the subject access rights
- G06F12/1491—Protection against unauthorised use of memory or access to memory by checking the subject access rights in a hierarchical protection system, e.g. privilege levels, memory rings
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/72—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information in cryptographic circuits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/70—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer
- G06F21/71—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information
- G06F21/74—Protecting specific internal or peripheral components, in which the protection of a component leads to protection of the entire computer to assure secure computing or processing of information operating in dual or compartmented mode, i.e. at least one secure mode
-
- 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/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
-
- 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
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/21—Indexing scheme relating to G06F21/00 and subgroups addressing additional information or applications relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/2105—Dual mode as a secondary aspect
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Storage Device Security (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Retry When Errors Occur (AREA)
Abstract
一种允许计算机系统中的安全应用和数据完整性的技术。在一个实施例中,建立其中可存储和执行应用的一个或多个安全飞地。
Description
发明领域
本发明的实施例总地涉及信息处理领域,更具体地涉及计算系统和微处理器中的安全领域。
背景技术
应用及其数据在计算机系统中的安全执行和完整性正变得越来越重要。一些现有技术的安全技术无法以灵活但可靠的方式充分地保全应用和数据。
附图简述
在附图中以示例方式但并非限定地示出本发明的实施例,并且其中相同附图标记指示相似的要素,在附图中:
图1示出微处理器的方框图,其中采用本发明的至少一个实施例。
图2示出共享总线计算机系统的方框图,其中采用本发明的至少一个实施例。
图3示出点对点互连计算机系统的方框图,其中采用本发明的至少一个实施例。
图4示出多核微处理器的方框图,其中可采用根据本发明的至少一个实施例。
图5示出在本发明一个实施例中的安全飞地(enclave)(SE)的可能实现。
图6示出微处理器的方框图,其中采用本发明的至少一个实施例。
图7示出可实现在本发明一个实施例中的用来访问飞地页高速缓冲存储器的一部分的控制结构的示例。
图8示出本发明一个实施例中的线程控制结构的一个示例,其表示如何将多个数据结构拼合到一起。
图9示出可在本发明一个实施例中发现的已知为引用的软件证明书的进程的一个步骤。
图10示出本发明一个实施例中用来从一组测量寄存器产生引用的步骤。
图11示出在本发明一个实施例中用来更新测量寄存器MR_EADD的EADD进程。
图12示出在本发明一个实施例中创建报告的EREPORT指令。
图13示出在本发明的一个实施例中发现的重放-保护机制。
图14示出在本发明的一个实施例中发现的重放-保护机制的MAC树形结构部分的一个示例。
图15示出本发明一个实施例中如何才能实现页故障出错码映射。
图16示出在本发明一个实施例中创建发起飞地的许可的进程的一个示例。
图17为本发明的一个实施例示出针对单个组件安全飞地的平台密钥层级的可能实现。
图18示出在本发明一个实施例中基于微代码的安全飞地密钥层级的示例。
图19是可在本发明一个实施例中发现的飞地CTL_MSR寄存器的图解。
图20示出用于本发明一个实施例中的密码块链接算法。
图21是示出本发明一个实施例中的单个AES块加密的流程图。
图22是使用如本发明一个实施例中实现的密码块链接算法加密多个AES分组的示例的流程图。
图23示出在一个实施例中在具有栈切换的中断之后的应用堆栈和中断堆栈。
图24示出在本发明一个实施例中实现多状态存储区槽的堆栈的一种可行方法。
图25示出本发明一个实施例中具有中断、故障和陷阱的状态变换的状态机的一部分。
图26示出对于本发明一个实施例的用于数字随机数发生器的处理器组件。
图27示出针对本发明一个实施例的调试寄存器DR72700。
详细说明
本发明的实施例涉及以灵活但可靠的方式提供安全应用和数据的技术。尽管存在本发明多个方面的多个实施例,然而题为“Secure Enclaves Architecture(安全飞地架构)”的所附文件作为至少一个实施例的例子被援引包含于此。然而,所引入的参照文件无论如何不旨在限制本发明实施例的范围并可采用其它实施例并同时保持在本发明的精神和范围内。
图1示出其中可使用本发明至少一个实施例的微处理器。具体地说,图1示出具有一个或多个处理器核105、110的微处理器100,每个处理器核分别具有与之关联的本地高速缓冲存储器107、113。另外图1示出共享的高速缓冲存储器115,该高速缓冲存储器115可对存储在每个本地高速缓冲存储器107、113中的信息的至少一些版本进行存储。在一些实施例中,微处理器100也可包括图1未示出的其它逻辑,例如集成的存储器控制器、集成的图形控制器以及执行计算机系统中其它功能(例如I/O控制)的其他逻辑。在一个实施例中,多处理器系统中的每个微处理器或多核处理器中的每个处理器核可包括或以其它方式关联于逻辑119以启用根据至少一个实施例的安全飞地技术。该逻辑可包括电路、软件(表现为有形介质)或两者兼有以允许多个核或处理器之间比一些现有技术实现更为有效的资源分配。
图2例如示出其中可使用本发明一个实施例的前端总线(FSB)计算机系统。任何处理器201、205、210或215可访问来自在处理器核223、227、233、237、243、247、253、257中的一个之内或与之关联的任何本地一级(L1)高速缓冲存储器220、225、230、235、240、245、250、255的信息。此外,任何处理器201、205、210或215可访问来自共享二极(L2)高速缓冲存储器203、207、213、217中的任何一个的信息或经由芯片集265访问来自系统存储器260的信息。根据至少一个实施例,图2中的一个或多个处理器可包括或以其它方式关联于逻辑219以启用安全飞地技术。
除了图2所示的FSB计算机系统,也可与本发明多个实施例结合地采用其它系统配置,包括点对点(P2P)互连系统和环形互连系统。图3的P2P系统例如可包括若干处理器,图中仅示例性地示出其中两个处理器370、380。处理器370、380可各自包括本地存储器控制器中枢(MCH)372、382以与存储器32、34连接。处理器370、380可使用点对点接口电路378、388经由点对点(PtP)接口350交换数据。处理器370、380可各自使用点对点接口电路376、394、386、398经由各PtP接口352、354与芯片集390交换数据。芯片集390也可经由高性能图形接口339与高性能图形电路338交换数据。本发明的实施例可位于具有任何数目处理核的任何处理器内,或位于图3的每个PtP总线代理内。在一个实施例中,任何处理器核可包括或以其它方式关联于本地高速缓冲存储器(未示出)。此外,共享高速缓冲存储器(未示出)可包含在两处理器外侧的任一处理器中,但仍然经由P2P互连连接于处理器,由此如果处理器处于低电力模式则任一或两个处理器的本地高速缓冲存储器信息可存储在共享高速缓冲存储器内。根据至少一个实施例,图3中的一个或多个处理器或核可包括或以其它方式关联于逻辑319以启用安全飞地技术。
至少一个实施例的一个或多个方面可通过存储在机器可读介质上的表征性数据来实现,该表征性数据表征处理器内的多种逻辑,当由机器读取时,该表征性数据使机器产生逻辑以执行本文描述的技术。已知为“IP核”的这些表征可存储在有形的机器可读介质(“磁带”)中并提供给各种消费者或制造设施以加载入实际制作逻辑或处理器的制造机器内。
因此,已描述了引导微架构存储区访问的方法和装置。要理解前面的描述旨在是解说性而非限定性的。许多其它实施例对于本领域内技术人员来说只要阅读和理解前面的描述就能明白。因此,本发明的范围可参照所附权利要求书连同该权利要求书所被赋予的最大范围等效物而确定。
安全飞地是一组指令,该指令为应用提供安全场所以执行代码并将数据存储入OS进程的上下文中。在该环境中执行的一个应用被称为飞地。飞地从飞地页高速缓冲存储器(EPC)执行。飞地页可通过OS装载入EPC。每当从EPC中移除一个飞地页,则使用密码保护以保护飞地的机密并当将该飞地加载回到EPC时检测篡改。在EPC内,使用由处理器提供的访问控制机制来保护飞地数据。下面的表格错误!文档中没有指定样式的文本-1提供非特权的飞地指令的完整列表。
表格错误!文档中没有指定样式的文本-1非特权的
指令列表
这些将仅在环3上执行。在所有其它时间它们将产生#UD故障。表格错误!文档中没有指定样式的文本-2提供特权指令的列表。
表格错误!文档中没有指定样式的文本-2特权的指令列表
飞地页高速缓冲存储器(EPC)是执行飞地码和访问受保护的飞地数据的所在。该EPC位于平台的物理地址空间内但仅可使用SE指令访问。EPC可包含来自许多不同飞地的页并提供访问控制机制以保护页的完整性和机密。页高速缓冲存储器保持一致性协议,类似于对平台中的一致性物理存储器使用的那个协议。
EPC可以若干方式实例化。它可由处理器组件上的专用SRAM构成。优选的实现机制已知是密文存储器空隙(Aperture)。该机制使EPC变大。CMA的更多细节将在下面的章节中描述。
飞地页高速缓冲存储器映射(EPCM)包含与EPC中的每个页关联的状态信息。该状态提供例如该页所属于的飞地、加载页的状态等信息。当从EPC中移去一页时,状态信息也被导出并使用密码手段受到保护。当飞地页被重加载入EPC中时,就验证该状态信息。
图4示出其中可使用本发明至少一个实施例的多核微处理器499的方框图。微处理器499可包含多个核400、420。一个核400包含CR3 402、SMBR404、页未命中管理器408、PMHE410以及转换后备缓存412。一个核420包含CR3 422、SMBR 424、页未命中管理器428、PMHE430以及转换后备缓存432。微处理器499在本发明的一些实施例中包含核400和核420之间共享的一级高速缓冲存储器440。一级高速缓冲存储器440可将数据转移至或转移出末级高速缓冲存储器445。本地代理450可连接于末级高速缓冲存储器445并附连于密文引擎452。本地代理450可通过存储器控制器454访问密文存储器空隙480的物理地址空间488。密文存储器空隙480包含飞地页高速缓冲存储器482、飞地页高速缓冲存储器映射484、备用存储486并作为物理地址空间488的一部分。
CMA是提供支持以实例化EPC、EPCM和其它SE关联结构的机制。空隙是物理地址空间内保留作此用途的一个区域。
EPC和EPCM(以及其它实现数据结构)被映射到空隙内的一个位置。备用存储是这些资源的实际数据。当对EPC产生存储器请求时,CMA重映射至包含加密EPC数据的备用存储位置并检取该数据。
总地来说,多数SE实现为微代码。在若干场合下需要硬件支持,包括CMA、控制组件外以及核中的数据移动的逻辑。
图5示出在本发明一个实施例中的安全飞地的可能实现。操作系统和VMM 542可使用ELPG指令540以将飞地532中的飞地页加载入飞地页高速缓冲存储器544。当微处理器不在飞地532中执行时,飞地页高速缓冲存储器544通过SERR寄存器548受到保护而不受到来自软件的访问。当在飞地中执行时,微代码页表格提供保护546。每个VM具有关联的VMCS。VM510连接于VMCS 515。VM 520连接于VMCS 525。VM 530连接于VMCS 535。SMM500可处于独立的容器中并且多个处理器状态可处于独立的容器中。
图5是安全飞地实现的一个实施例的高层概览图。在该实现中,EPC被保持作为通过微代码管理的独立容器。当执行不是在飞地内时,该容器是不可访问的。当进入飞地时,控制被转移至EPC内的飞地码,该飞地码包含在独立容器内。
在飞地内部执行的同时发生的任何页故障或异常通过微代码反映到应负责的OS或VMM。当机器不在飞地内执行时,对EPC的访问控制是通过SE范围寄存器(SERR)提供的。当机器在内部运行时,微代码提供页表格层面保护,这保护对不属于正在执行的飞地的其它EPC条目的访问。
实现安全飞地的一种选择是使用一些处理器中的微代码能力实现指令和保护。该能力可满足安全飞地满足其目的所需的安全要件。
如错误!基准源未找到中所示的SERR寄存器实现在页未命中管理器PMH中。可针对每个逻辑处理器独立地启用和禁用该寄存器。
在增进性能的实现中的一种选择是提供一个位或几个位以指示转换后备缓存(TLB)中的条目是用于一飞地或一特定飞地的。如果不提供这些位,则当退出飞地时需要TLB刷新以防止其它代码访问该飞地。
将该飞地位与飞地模式位作比较。额外的位可提供飞地空间id功能。特殊飞地可被赋予一id。该id将与执行中的飞地的id比较,作为地址检查的一部分。TLB支持是可选的性能增强。当一条目由于移除EPC数据而可能在TLB中无效时,则需要专门微代码化的击落机制。在一个实施例中,微代码可联系飞地可信边界内的所有其它核并验证该条目不再存在于任何TLB中。其它实施例可提供微代码保证其它处理器已使所述TLB条目无效的手段。
为了防止DMA监听并使EPC无效,提供一种特殊的SAD和/或TAD条目。这些专用寄存器提供EPC的保护。这被设定为与SERR相同的值。
为了确保每个飞地的安全密钥,安全飞地微代码在一个实施例中可对随机数使用安全访问。
飞地可受保护而不受篡改。用于篡改保护的机制详情根据应用而改变。当飞地被篡改时,将防止在检测到篡改的线程上的进一步执行。为了使用户理解飞地的状态,投入到位一种证明书机制以提供飞地建立的证明。这包括用来在表现飞地内容上的信息的EREPORT指令。
为了简化飞地设计中所需的微代码编码,形成构架飞地的理念。这些飞地基于飞地码的原始形式被给予特殊的访问特权。
横跨电力周期的飞地状态取决于软件策略。CMA中的数据在掉电时丢失。软件可确保飞地数据在电力周期内不丢失,如果想要保留这些飞地的话。如果软件想要跨S3电力状态地保持飞地有效,驻留在EPC中的数据可刷新至存储器。软件可选取以当移除电力时要求这些应用破坏所有飞地。
飞地取决于其位置而受到不同保护。在CPU组件外的数据使用加密和完整性检查而受到保护。对于飞地页高速缓冲存储器中的代码和数据,使用访问控制机制对页予以保护。
图6示出其中可使用本发明至少一个实施例的微处理器的方框图。图6示出具有多个处理器核600、605、610、615和高速缓冲存储器620的微处理器600。可对飞地数据635加密。密文存储器空隙数据630用来保护飞地数据635。
留驻在系统存储器中的飞地页使用加密和完整性受到保护。在将页载入EPC的过程中,页被复制入EPC、被解密并检查页面的完整性。图6示出数据的这个部分。
当留驻在EPC中的飞地页被存储至系统存储器时,通过飞地密钥对其加密。在页存储的同时也存储认证信息。EPC中的飞地数据是未经加密的并通过访问控制机制受到保护。处理器保护该数据以使唯有拥有该数据的飞地才能访问它。
当留驻在EPC中的飞地页从高速缓存器被逐出到CPU组件外的主存储器时,它通过CMA加密受到保护。CMA将加密该数据以提供数据机密。EPC的完整性是通过范围寄存器提供的,该范围寄存器防止对EPC读和写。
图7示出可实现在本发明一个实施例中的用于访问飞地页高速缓冲存储器的一部分的控制结构的一个示例。飞地页高速缓冲存储器720的每个页可在飞地页高速缓冲存储器映射710中具有相应的元数据。该元数据示出于图7,包含一组线性地址700的安全飞地可访问飞地页高速缓冲存储器720中存储的数据,只要该线性地址与存储在飞地页高速缓冲存储器映射710中的线性地址匹配。
图7示出EPC和EPCM的布局和使用。EPC被分割成4k个页。每个飞地可具有留驻在EPC中的某一数量的页。对于EPC每个页面在EPCM中可存在一个条目,该条目提供确保安全性所需的元信息。EPCM的细节是特定于实现的。
当应用需要加载飞地时,它将在OS中调用一个系统例程。该OS将尝试分配EPC中的一些页。如果不存在开放地点(open spot),则OS将选择一牺牲飞地以移除。OS对每个页使用EWBINVPG指令逐出牺牲飞地的多个页。当OS已完成逐出时,它使用ECREATE命令将安全飞地控制结构(SECS)添加至飞地。在SECS创建后,OS根据应用请求使用EADDPRE指令将页面添加至飞地。
为了将数据页添加至飞地,OS可首先使用EADDSMAP指令将SMAP页添加至飞地。根据飞地的大小和布局,OS将添加若干SMAP页。当所有飞地页被添加至飞地时,OS将执行EINIT指令以允许执行该飞地。对EINIT指令的一个参数是一种许可,它表示飞地被授权以运行在该机器上。当加载一应用时,需要创建一许可。在EINIT成功地结束后,应用可执行EENTER指令以进入飞地。
当飞地被建立并被标记可供执行时,应用可能需要增加或减除飞地中的物理存储器。为了支持这个功能,存在允许将附加存储器加至飞地的指令。为了将存储器加至飞地,将存储器分配给飞地中的正确线性地址。OS将该存储器页复制入指示该线性地址的EPC。运行EADDPOST指令以将该存储器加至飞地。如果SMAP节点不留驻在EPC中,则可首先加载它。
在复制存储器后,飞地软件可在能从内部访问前接受该页。该飞地通过执行EACCEPT指令而接受数据。该指令可仅由飞地中的软件来执行。
在一些情形下,软件可能想要修改飞地存储器的特性。为了作此改变,可能需要更新SMAP。例如,软件可能想要在飞地中创建另一线程入口TCS。在这种情形下,飞地请求OS使用EMODIFY指令改变页的SMAP特性。在特性改变后,飞地软件执行EACCEPT指令以允许使用该页。
存储器页可从飞地中被移除。当飞地准备移除一个页时,它对OS送出一请求。OS将执行EREMOVE指令,该指令将该页从SMAP中移除。EREMOVE指令也使EPC条目无效。
为了确保飞地环境的完整性,可完成一定数量的访问检查。在各种安全特性中被增强的是数据被正确地安置在EPC中以防止数据横跨飞地泄漏,并且基准地址不被败坏以保证该代码不被移动至飞地中的不同线性地址。
访问保护需求可使用范围寄存器和受微代码管理的阴影页表格来实现。在另一实施例中,为了避免阴影页表格的额外开销,可修正页未命中管理器硬件以实现相同的访问控制需求。
只有当逻辑处理器(LP)要么在微代码模式下执行或LP在飞地内执行并且被访问中的线性地址属于由飞地覆盖的线性地址范围时,LP才能访问EPC。换句话说,只有微代码访问或飞地访问允许前往EPC范围。对EPC范围的任意其它访问被视为非法的。
飞地访问可被解析至属于该EPC的物理地址。如果该访问落在EPC之外但线性地址指示该地址处于飞地之内,则可停止访问。OS或指令的故障被报告。
对飞地中一个地址的访问可位于EPC内以使访问成功。对条目出现在EPC内的检查一般是通过检查EPCM以验证有效位来完成的。每个EPC页专用于特定的飞地。对该EPC条目的引用只能由拥有该EPC页的飞地作出。这是通过验证所引用的页与执行中的飞地的SECS匹配来检查的。
每个EPC页表征飞地的一个特定线性地址页。所请求的线性地址可匹配EPC中的页的线性地址。例如,EPCM条目存储飞地页被引入EPC的线性地址。当飞地地址解析至一EPC页时,该页被引入的线性地址可与当前请求的线性地址匹配。
飞地的线性地址映射不能被败坏。如果线性地址的页表败坏,则结果的访问是非法的。这防止了攻击者在飞地中和周围移动代码和数据。
当OS/VMM在已初始化后将页添加至飞地时,EADDPOST指令针对该页设定EPCM中的“待决(pending)”位。该待决位在之后(使用SEC_INFO)的几次EPC回写和逐出时保持存在。飞地可发布EACCEPT以清除该待决位。如果飞地访问解析至对其已置位待决位的EPC页,则LP发布EF_PENDING故障全OS/VMM。
当OS/VMM将重放保护飞地页加载至EPC时,它置位该页的EPCM条目中的FCR(所需的新鲜性检查)位。OS/VMM可通过在该EPC页上执行EUPSMAP指令以清除该位来清除该位。只有在该页上的FCR位未被置位的情形下才允许飞地访问继续。否则,LP将EF_FRESH_CHK故障传递给OS/VMM。
每个EPCM条目包含“脏(dirty)”位,它指示是否允许飞地写至该页。只有当EPCM中对该页的脏位被置位时,才允许将该飞地写至飞地页。如果不是这样,则LP将EF EWRITE发布给OS/VMM。该OS/VMM可通过在该页上执行EUPSMAP指令来对该脏位置位。
在逻辑处理器在飞地中执行的任何时候,飞地的SECS页可出现在EPC中。然而,SE安全性模块要求不允许该飞地对其本身的SECS作出任何直接的存储器访问(否则飞地将能读取其本身的飞地密钥,使安全性彻底打折扣)。如果飞地访问解析至保有该飞地的SECS的EPC页,则经由EF_ATTRIB_SECS故障通知OS/VMM。不允许飞地修改具有TCS属性集的任何页。如果飞地尝试修改被加载入EPC的TCS,则经由EF_ATTRIB_TCS故障来通知OS/VMM。
在下表的Size(大小)字段中,使用下列值和指示符:
4 32位和64位两种模式下的4字节字段
8 32位和64位两种模式下的8字节字段
8(4)两种模式下的8字节字段。在32位模式下忽略前4个字节。
注意:一些字段具有以小写字母“o”开头的名(例如oLSP)。这些字段是指针,但在飞地中表示为相对于飞地基的偏移。这种表示确保了飞地页的测量独立于创建飞地所在的位置。
注意:字段(尚)不以任何特定顺序描述。一些字段可移动至其相应数据结构中的不同存储器页以例如允许不同的保护手段。
表4-1安全飞地控制结构内容
与每个线程关联的是线程控制结构(TCS)。该TCS包含:
表错误!文档中没有指定样式的文本-1.TCS布局
线程控制结构
线程状态可具有5个值中的一个:
状态保存区偏移(oSSA)
状态保存区偏移(oSSA)指向用来在飞地中执行的同时发生中断或异常时保存处理器状态的状态保存帧的堆栈。下一状态保存区(NSSA)由中断微代码使用以确定在飞地中执行的同时发生中断或异常时在哪里保存处理器状态。这是由oSSA寻址的帧阵列中的索引。保存区(CSSA)的计数规定可供该TCS使用的SSA帧的数目。当中断或异常发生并且没有更多SSA帧可用(NSSA≥CSSA)时,中断或异常将仍然发生并且处理器状态将被清除,但TCS将仍然被标记为无效(INVALID)。
在飞地中运行的同时中断发生时,该机器状态将被保存在TCS::SSA(状态保存区)。该区包括:
图错误!文档中没有指定样式的文本-2.中断存储区
状态保存区
TCS::SSA在中断发生的时候可以不被移出页面。EENTER检查该SSA处于EPC内并对物理地址作高速缓存。在页被逐出的情况下,执行EWBINVPG的处理器将强迫飞地在当前正使用SSA执行线程的处理器上退出并对其报告页故障。
错误!引用源未找到.示出如何将所有数据结构拼合到一起。为了避免混乱,不针对所有线程示出所有每线程结构。不可信堆栈及其关联的指针也被省略。图8示出本发明一个实施例中的线程控制结构的一个示例,其示出如何将保存的状态区拼合在一起。状态保存区指针800指向存储区820。当前状态保存区805指向保存区1824。下一状态存储区810指向下一保存区828。保存状态区的数目提供可用的保存状态区的数目的引用。
页信息(PAGE_INFO)是用作EPC管理指令的参数的架构式数据结构。
表错误!文档中没有指定样式的本文.-3PAGE_INFO结构
SEC_INFO标志和EPC标志包含指示页类型的位。
PAGE_TYPE标志
SEC_INFO标志是描述飞地页的状态的一组位。
表错误!文档中没有指定样式的文本.-4SEC_INFO标志
安全信息(SEC_INFO)数据结构保有伪造保护所需的密码元数据。
表错误!文档中没有指定样式的文本.-5SEC_INFO结构
证书(CERT)是提供有架构性飞地并被传递给EMKPERMIT的证书结构。该结构是4096字节并可以是页对齐的。
表错误!文档中没有指定样式的文本-6:证书结构
许可(PERMIT)从EMKPERMIT和许可飞地输出并许可由EINIT消费。它是4096字节并可被页对齐。
ERPORT结构是EREPORT指令的输出。
表错误!文档中没有指定样式的文本.-7:报告结构
测量(MEASUREMENTS)是ERDMR指令的输出参数。其包含飞地的测量寄存器值,该值是从规定的SECS中取的。
表错误!-文档中没有指定样式的文本.-8:测量结构
密钥请求(KEY_REQUEST)是EGETKEY指令的输入参数。其用来选择适当的密钥和该密钥推导中所需的任何附加参数。
表错误!文档中没有指定样式的文本.-9:密钥请求结构
表错误!文档中没有指定样式的文本.-10请求密钥请求结构
表错误!文档中没有指定样式的文本.-11:密钥请求策略结构
该结构通过密钥推导使用以基于飞地的安全版本和飞地的SE TCB产生密钥。参见平台TCB恢复标准以获得TCB安全版本结构的进一步细节。
表错误!文档中没有指定样式的文本.-32安全版本
表错误!文档中没有指定样式的文本.-43组件生产寄存器
表错误!文档中没有指定样式的文本.-54组件寄存器
表错误!文档中没有指定样式的文本.-6逻辑处理器
EPCM标志是描述飞地页状态的一组位。
表错误!文档中没有指定样式的文本.-7EPCM标志
飞地页高速缓冲存储器映射(EPCM)是由处理器使用以跟踪页高速缓冲存储器的内容的安全结构。EPCM对当前加载入EPC的每个页恰好保持一个条目。
表错误!文档中没有指定样式的文本.-8EPCM映射
证明是尤其对远程实体展示一段软件已建立在平台上的过程。在安全飞地的情形下,它是一种机制,籍此机制,远程平台在信任具有秘密和保护数据的软件之前建立该软件运行在飞地内受保护的认证平台上。证明过程具有三个阶段,测量、存储和报告。
在飞地预飞地建立和后飞地建立内存在两个周期的测量。飞地指令的责任是提供如其建立那样的飞地的测量。一旦飞地已建立,则飞地中的软件变得对测量负责。
图9示出可在本发明一个实施例中发现的已知为引用的软件证明的过程的一个步骤。在一个实施例中,签名操作910将一签名密钥915施加于来自测量寄存器901、902、903、904的链接数据。签名操作910的结果是引用920。
加密报告的动作绑定在对平台创建飞地时作出的测量。该机制经常被称为引用,因为这种类型的功能在平台上已可用以在某些时候作为TPM命令。测量寄存器(MR)的值被链接并随后使用非对称密钥被签名。任何挑战者则只能必须在引用结构上验证签名以使引用生效。
图10示出本发明一个实施例的步骤,用于从一组测量寄存器1000中产生引用。可通过用对称认证密钥评价测量寄存器1000来产生本地报告1005。引用飞地1025可包含将本地报告1005转换成匿名引用1010或正常引用1020的软件。
由于计算的性质涉及非对称密钥并且我们希望减少飞地叶中的指令数目,因此我们将不纳入执行非对称签名的指令。我们的方法,如下图所示,是提供一种基于硬件的机制以基于对称密钥认证密钥产生“报告”,并允许使用其本身使用飞地受到保护的软件将这些基于对称密钥的“报告”转换成非对称签名的“引用”。由于引用飞地需要被授权以访问平台证明书密钥,因此引用飞地本身是一种专用飞地,也被称为经认证的飞地。
每个飞地提供两个256位宽的测量寄存器(MR_EADD&MR_POLICY)和两个预留的寄存器。这些测量寄存器被包含在飞地的SECS中。
图11示出在本发明一个实施例中更新测量寄存器MR_EADD 1100的EADD过程。扩展操作1115可将MR_EADD 1100、页数据1105和页元数据1110的当前值作为输入。扩展操作的输出是MR_EADD’1120,它是拟存储入MR_EADD 1100的下一个值。
MR_EADD包含飞地的总计测量,因为它是在调用EINIT指令前使用EADD指令建立的。它仅通过微代码被写入并因此它需要被放置在只能由飞地码读取的SECS的页内。在EADD的每次调用时,它计算页数据上的SHA 256以及与该页关联的安全元数据,即页的相对地址(写至飞地的基地址)以及页的SEC_INFO.标志,并且该值被扩展入MR_EADD 1100。其中我们将“扩展”定义为:
新的MR值=散列(旧的MR值||输入值)
MR_POLICY包含用来认证允许发起飞地的策略的值。该值被取自飞地许可,该飞地许可在发起时被放置在SECS中并在EINIT指令成功完成时被复制。MR_POLICY仅通过微代码被写入并因此需要被放置在只能通过飞地码读取的SECS页中。
图12示出在本发明一个实施例中创建报告的EREPORT指令。KEYID1200、拥有者epoch 1205、组件融合密钥1210以及固定字串MAC密钥1215是推导指令1220的可能输入。推导1220的输出可与TCB版本1232、ISV版本1234、能力1236、标志1238、用户数据1240和测量寄存器1242的当前值一起输入CMAC 1225。CMAC 1225的输出可被存储在MAC 1244中。EREPORT指令的输出可包括密钥标识1230、TCB版本1232、ISV版本1234、能力1236、标志1238、用户数据1240、测量寄存器1242和MAC 1244。
EREPORT指令创建中间密钥以在测量寄存器、用户数据和例如飞地能力和标志的附加上下文信息上执行基于对称密钥的GMAC。
除了测量寄存器,用户也可提供256位宽的数据块以纳入到报告中。存在许多应用特定的值,例如挑战者NONCE和/或应用创建的密钥,这是用户可能要证明的。这些值可被精简至单个散列并被提交给报告以纳入。
为了防止密钥损耗,通过重复调用EREPORT,在处理器的每个功率周期上产生一随机的128位值(已知为报告密钥ID)并将其存储在内部位置。该值在使用该值的2^32 AES操作后增1。在一个实施例中,对EREPORT指令的每次调用将该值增1。
表错误!文档中没有指定样式的文本.-9EREPORT输出结构
表错误!文档中没有指定样式的文本.-10EREPORT结构
报告结构中的标志字段可用来确定关于飞地的某些状态信息或何时调用EREPORT指令,这对挑战者评估他们是否能信任飞地是有用的。
表错误!文档中没有指定样式的文本.-11EREPORT标志结构
表错误!文档中没有指定样式的文本.-12标志
在一个实施例中,该架构允许具有适当能力集的架构性飞地以通过EGETKEY命令检索CMAC操作中使用的密钥,并因此验证该报告创建在其当前运行在的硬件上。该能力局限于引用架构性飞地。
为了当在飞地外部执行时检索飞地的测量,提供ERDMR(读测量)指令。该指令取指向有效SECS页的指针以及指向哪些测量将被传递的地址的指针。测量以MEASUREMENT结构的形式传递。MEASUREMENT结构不受密码保护。
表错误!文档中没有指定样式的文本.-13:MEASUREMENT结构
当不在飞地页高速缓冲存储器中时,飞地页受密码保护。存在三种级别的密码保护:机密保护、伪造保护和重放保护。在一个实施例中,允许应用针对每个飞地页相对于同一飞地的其它页选择的保护级别独立地选择保护级别。飞地的实现可允许应用在下列组合之间作出选择:伪造保护、伪造保护和重放保护、机密和伪造保护以及机密、伪造保护和重放保护。飞地页上的机密和伪造保护可使用若干经认证的加密模式中的一种来达成,所述经认证的加密模式例如为伽罗瓦计数模式(GCM)加上例如AES.重放保护的合适密码,然而这需要更复杂的解决方案。
图13示出本发明一个实施例中发现的伪造保护和重放保护的机制。伪造保护防止攻击者用不是通过程序产生的加密数据的不同值顶替。重放保护防止攻击者用不是通过程序产生的当前最新值的加密数据值顶替。节点版本号1300可进入IV 1310并随后至GMAC1325算法。子1305的版本号可将数据1315发送至GMAC 1325算法。GMAC 1325算法将密钥1320、IV1310和数据1315组合以产生MAC 1330。
重放保护确保飞地在任何给定时间由逻辑处理器所见的全部内容属于非败坏飞地的单个快照。因此,重放保护机制需要定义飞地版本的概念并提供判断受伪造保护的飞地页是否属于该飞地版本的机制。为此,重放保护机制使用例如GMAC的消息认证算法将每个受伪造保护的飞地页的内容捆绑至一个页版本号。在GMAC的情形下,该版本可用作如错误!引用源未找到中所示的初始化矢量(IV)的一部分。
图14示出本发明一个实施例中发现的重放保护机制的的MAC树形结构部分的一个示例。叶节点1425可包含个别MAC内容页1430的版本信息。例如1420之类的每个叶节点包含个别的MAC内容页(未示出)。每个内部节点1410、1415可包含其链接至的子组的版本信息。根1400是该树形数据结构中的最高层节点。
为了将版本扩展至整个飞地,重放保护机制维持一版本树。叶节点包含飞地范例的个别重放保护页的版本。每个内部节点提供每组子的版本,并因此逻辑地保持他们表征的多个页的版本信息。错误!引用源未找到图示地示出这个概念。
在一个实施例中,选择了树形结构以减少从O(n)页至O(logn)页处理所需的数据数量。选择使用版本树而不是散列树以允许页从EPC逐出而无需树更新。
由于重放保护可能需要每个页具有与其内容密码绑定的其本身版本,因此重放保护需要伪造保护。由此,SE架构中的伪造保护是强制性的。另外,SE的最初实现可进一步限制所支持的保护组合的列表。
OS/VMM通过执行ECREATE指令而创建一飞地。在飞地创建中,规定受飞地保护的线性地址的范围。该线性地址范围被称为飞地线性空间(ELS)范围。
一旦创建了飞地,使用EADDRPE指令将属于ELS范围的各页添加至飞地。EADDPRE指令通过将这些添加页移入飞地页高速缓冲存储器而使每个添加页进入飞地保护域。如果这些页使用EWBINVPG出页面EPC,则逻辑处理器将对这些页施加密码保护。
密码保护是通过将密码元数据关联于每个飞地页而达成的。该元数据由针对各种处理器指令的u代码流使用以解密飞地页的内容并验证每个飞地页的真实性/新鲜性。SE架构提供若干这类指令以更新、管理和有效化该密码元数据。
每个飞地页具有与之关联的安全信息SEC_INFO数据结构。SEC_INFO数据结构的目的是保留解密和验证页所需的密码元数据。SEC_INFO结构的各个字段如下所示。
表错误!文档中没有指定样式的文本.-14:SEC_INFO数据结构
安全信息标志(SEC_INFO.Flag)描述针对一受保护页的页类型、密码和访问保护。
表错误!文档中没有指定样式的文本.-15SEC_INFO标志
安全映射(SMAP)是用来存储验证飞地页的新鲜性所需的密码元数据的数据结构(即重放保护)。安全映射代表针对飞地特定快照的完整版本树。安全映射的每个节点保留256个子节点(或在叶节点的情形下是飞地页)的版本。关于安全节点的附加元组件含在针对特定SMAP节点的SEC_INFO内。
在一个实施例中,安全映射树是双层深度1,并使用飞地中的飞地页的飞地偏移进行访问。SMAP的根包含在SECS中并仅保留128子节点的版本。来自飞地偏移的位用来选择适当的子,并用来索引SMAP。在类别1中,飞地偏移为35位长。飞地偏移由下面的公式提取(飞地线性地址&飞地掩模)。飞地掩模是通过(飞地大小-1)确定的,并可在ECREATE期间计算出。
表错误!文档中没有指定样式的文本.-16SMAP布局
树深度 | 索引位 |
在深度0 | 使用飞地偏移的位34-28 |
在深度1 | 使用飞地偏移的位27-20 |
在深度2 | 使用飞地偏移的位19-12 |
总地来说,在深度l>1,位N-(l)×8至位N-(l+1)×8+1被用来选择下一层的合适子。
注意:安全映射是逻辑数据结构并且不是架构性的。逻辑处理器甚至不知道SMAP位于线性地址空间中的哪个位置。系统软件负责维护和遍历安全映射。安全映射中的每个个别代码具有架构定义的结构——然而,该架构不规定在存储器中如何维护安全映射。然而要注意,安全映射中的每个节点在安全映射中具有很好定义的逻辑位置,并且如果节点在映射中四周移动,则与安全映射关联的多个处理器指令会将其解释为攻击情况。
根安全节点包含在SECS中并包含128子的版本信息。非根安全节点是受保护的页及其关联的SEC INFO。受保护的页包含256子的版本信息。
表错误!文档中没有指定样式的文本.-17SMAP节点布局
字段类型 | 字段名 | 描述 |
单元128 | 版本-0 | 子0的版本 |
单元128 | 版本-1 | 子1的版本 |
单元128 | 版本-N | 子N的版本 |
单元128 | 版本-255 | 子255的版本 |
SEC_INFO包含SMAP中的SMAP的位置。具有该SMAP的位置是通过线性/飞地偏移和页类型SMAP_LEVEL_1和SMAP_LEVEL_2确定的。
添加受重放保护的飞地页要求该SMAP双亲已被创建并且驻留在FCR位已被清除的EPC中。为了验证飞地页的完整性,逻辑处理器使用SEC_INFO结构中的IV_P和key_id以产生密钥。该密钥用来计算SEC_INFO结构中的标志上的MAC以及页的内容。计算出的MAC与位于SEC_INFO结构中的MAC作比较。如果这两个MAC匹配,则该页被认为通过了完整性检查。
当使用ELPG指令将页装载入EPC时,逻辑处理器验证该页的完整性。作为该指令的一部分,逻辑处理器从SEC_INFO结构记下用来验证页的IV_P。
为了验证一飞地页的新鲜性,逻辑处理器验证该飞地页及其smap父已被装载入EPC并且该smap父是新鲜的。然后继续相对于smap父中存储的版本来检查页的版本。如果两个版本匹配,则处理器为该页产生新的版本并更新smap父中的版本和飞地页的版本。最后,它将该飞地页标记为新鲜的。
注意,新版本的产生允许页面被修改。这既简化了结构又简化了实现。
为了移除飞地页,逻辑处理器验证该飞地页及其smap父是否已被装载入EPC并且都是新鲜的。然后继续将smap父中的页版本置为0并标记该飞地页的EPC槽,如果允许的话。
飞地页高速缓冲存储器(EPC)是当飞地页不通过SE密码保护受密码保护时由CPU使用以暂存所述飞地页的安全存储器。
下列需求标识在EPC上。对装载入EPC的属于非调试飞地的飞地存储器页的任何访问可受保护而不受到飞地之外的软件实体的任何修改。攻击者可能无法读取属于非调试飞地的明文数据,该明文数据经由直接硬件攻击被装载入EPC。攻击者可能无法经由直接硬件攻击来修改EPC中属于非调试飞地的数据。可从系统中的任何CPU相关地但仍然安全地访问装载入EPC的任何数据。
存在实现EPC的若干机制。EPC可实现为芯片上SRAM或eDRAM。EPC也可通过CPU最末级高速缓冲存储器的动态隔绝方式构造。在这种实现中,可保护EPC不受到来自组件外侧的未经授权的访问。然而,系统中的其它组件能够相关地且仍然安全地访问EPC。
实现EPC的另一机制是密文存储器空隙(CMA)。密文存储器空隙(CMA)提供使用平台DRAM创建密码保护的易失性存储的节约成本机制。CMA在CPU非核中使用一个或多个策略性设置的密码单元以提供不同级别的保护,如客户技术所需要的那样。各种非核代理被修改以识别去往CMA的存储器访问,并将那些25个访问路由至位于非核中的密文控制器。根据要求的保护等级,密文控制器产生对平台DRAM的一次或多次存储器访问以获取密码文本。它随后处理密码文本以产生明文文本,并满足原始CMA存储器请求。CMA完全整合入Intel快速通道互连(QPI)协议中,并通过QPI协议的安全扩展定标至多组件平台。在多组件平台30配置中,CMA在面向外部的QPI链路层中使用链路级别安全(Link-Sec)引擎保护Intel CPU之间的存储器转移。
如果SECS当前被装载入EPC,则SECS据称是活动的。如本文中后面解释的那样,OS/VMM负责管理将什么装载入EPC。然而,当将飞地页装载入EPC的同时,OS/VMM需要告诉CPU针对该页的SECS所在何处,所考虑页其本身就是SECS的情形除外。当加载中的页不是SECS时,CPU要求对应于该页的SECS被装载入EPC。在为飞地装载任何页时,OS/VMM可将该飞地的SECS加载入EPC。
要理解,CPU对SECS可被加载至EPC多少次没有强加任何限制——然而,OS/VMM将SEC的多个副本加载至飞地页高速缓冲存储器将是很不寻常的。不过,即使同一SECS的多个副本被加载至EPC,则每个这些副本被认为是单独活动的SECS实例,并且加载入EPC的属于活动SECS的不同实例的飞地页被硬件认为属于不同的飞地。
OS/VMM将EPC视作系统地址空间中物理存储器的毗邻块。然而,为了减少内部存储并允许快速检索,CPU将槽标识符(SID)关联于每个EPC页。EPC页的物理地址和相应槽标识符如下地彼此关联。
sid=(page_pa-epc_base_pa)>>12
page_pa=pc_base_p|(sid<<12)
硬件使用0xFF的专门槽标识符来指示无效槽。EPC槽标志符由u代码和PMH两者使用以跟踪关于飞地页的信息。
加载至EPC的每个飞地页具有很好定义的系统物理地址。由于在属于EPC和EPC槽标识符的物理地址之间存在一一映射,因此我们说加载至EPC的每个页具有其本身的EPC槽标识符或EPC_SID。
另外,除SECS页以外,被加载入EPC的每个飞地页关联于活动的SECS实例。回想活动SECS实例不是别的,正是被加载至EPC的SECS页。结果,活动的SECS页也具有其本身的EPC_SID。非SECS飞地页所属的SECS页的EPC_SID被称为非SECS 25页的SECS_SID。对于加载入EPC的每个页,硬件保持跟踪SECS_SID。加载入EPC的SECS页的SECS_SID被定义为0xFF或无效的SID。
EPCM是由处理器使用以跟踪页高速缓冲存储器的内容的安全结构。30EPCM对当前加载入EPC的每个页保持正好一个条目。对于由其表征的页,每个EPCM条目跟踪一些信息,例如该页所属的飞地、该页被置入飞地页高速缓冲存储器的线性地址、该页的版本等。EPCM结构在地址转换流中由CPU使用以对加载入EPC的飞地页强加访问控制。EPCM条目由作为多个指令流一部分的(x)u代码管理。
在本发明的一个实施例中,飞地页高速缓冲存储器(EPC)可被动态地分配或解除分配。在一个实施例中,例如操作系统之类的软件可在存储器中动态地分配页作为EPC,或从EPC解除分配存储器。在一个实施例中,操作系统可分配飞地中的任何页以使其位于EPC中。EPC在一些实施例中可占据存储器中每个可用的位置。根据一个实施例,动态EPC与固定EPC的一个区别在于,动态EPC允许添加和移除存储器的页。在一个实施例中,例如软件驱动器的逻辑可分配存储器区为EPC和从EPC解除分配存储器。在一个实施例中,预引导进程检查可用存储器以存储存储器的每个页的元数据并且软件可宣告页为EPC或非EPC,同时硬件逻辑可跟踪和强制每个页的属性。
在一个实施例中,硬件逻辑可经由转换后备缓存(TLB)和页未命中管理器(PMH)控制对用作EPC的存储器的访问。在一个实施例中,当搜索地址在TLB中具有匹配时,也就是TLB命中,则TLB可在安全飞地退出EPC时被刷新。在一个实施例中,当搜索地址在TLB中没有匹配时,也就是TLB未命中,则一额外查找可在多个存储器基准上从飞地页高速缓冲存储器映射(EPCM)检取数据。在一个实施例中,PMH可执行EPCM的查找。在另一实施例中,检查PMH中的范围寄存器以控制对毗邻物理地址、EPC的访问。操作系统可不允许直接存储器访问(DMA)以访问EPC页。如果存储器的返回页被标记为飞地页,则该页的安全飞地控制结构标识(SECSID)可相对于当前执行的飞地的SECSID作检查以确保该访问是安全的。如果在返回页的SECSID和当前执行的飞地的SECSID之间存在不匹配,则PMH可发布一中止消息。如果存储器的返回页不被标记为飞地页或如果存储器的返回页被标记为飞地页并且该页的SECSID与执行中的飞地的SECSID匹配,则PMH可将页转换加载入TLB。在一个实施例中,一高速缓冲存储器标签可用来识别来自回写周期上的其它行的飞地行。然而,在至少一个实施例中,如果确定存储器请求类型的逻辑在回写周期中访问EPCM,则不使用高速缓冲存储器标签。
在本发明的一个实施例中,软件、BIOS可在操作系统引导以创建飞地页前分配存储器。在一个实施例中,软件可通过BIOS中的一系列步骤创建EPC。BIOS可保留一些存储器以存储元数据并针对每个处理器设定一范围寄存器。BIOS可将基地址和存储器大小作为输入。该系统配置由已知为MCHECK的进程检查以确保所有组件上的所有寄存器和所有核被正确地设置以提供对飞地之外的访问的保护。MCHECK将锁住寄存器,直到系统重置为止。在另一实施例中,软件可通过已知为EPCADD的指令将页添加至EPC,这宣布存储器的一些部分是EPC的一部分。EPCADD序列将取存储器地址作为输入并输出消息以指示成功或失败。在EPCADD输出指示成功的消息的情形下,EPCADD可置位EPCM.E位,并且与该物理地址对应的页从系统的所有TLB中被刷新离开。在本发明的一个实施例中,EPCADD可返回01的RAX中出错码以表示具有该输入地址的页已经是EPC页,以及02的出错码以表示输入地址落在范围之外。由EPCADD宣布作为EPC一部分的存储器页可能需要EPC语义以访问该数据。在本发明的这个实施例中,软件可在已知为EWBINVPG的指令中将页从EPC移除并允许经加密的数据继续可用并同时受密码和完整性保护。这种格式下的数据可被存储在硬盘驱动器的常规存储器中。在又一实施例中,软件可在已知为EPCREMOVE的指令中移除EPC中的页并使经加密的数据不可用。执行EPCREMOVE的硬件清除该页和EPCM的一些部分。可不首先执行EWBINVPG地执行EPCREMOVE。在一个实施例中,EPCREMOVE序列可基于存储器地址从EPC中移除一个页。在本发明的一个实施例中,EPCREMOVE指令可包含01的RAX中的出错码以表示正被移除的该页是安全飞地控制结构(SECS)的一部分并且无法被移除,以及02的出错码以表示正被移除的该页不是EPC页。存储器页的全局TLB击落在本发明一个实施例中可起因于EPCREMOVE,并且之前由页占据的存储器变得可供通用软件访问使用。
PMH防止对存储器空间的经保护区的访问。取决于架构,这可以就像对EPC访问的物理地址检查那样简单。可使用进一步的PMH支持以允许SE的性能改善或替代实现。SE架构依赖于页未命中管理器(PMH)以防止对加载入飞地页高速缓冲存储器的飞地页未经授权的访问。PMH检测各种事件,并将这些事件报告回给微代码。该微代码可对OS/VMM报告一事件。OS/VMM随后可执行适当的指令以修补该故障。
当使用ECREATE指令创建飞地时,针对该飞地规定一线性地址范围。该范围被称为该飞地的线性地址范围。属于飞地的线性地址范围的任何存储器页被视为处于飞地保护下,并具有与之关联的SEC_INFO条目。
属于该飞地的线性地址范围的存储器页也被称为飞地页。在飞地内部执行的程序只有在那些飞地页被加载入飞地页高速缓冲存储器并且它是拥有该页的飞地的情形下才允许访问这些飞地页。如果不是这样的话,处理器将产生异常-类别事件。OS/VMM有责任确保飞地页根据需要被加载至EPC。
如果逻辑处理器正在执行飞地并对其飞地页产生存储器访问,则该存储器访问被称为飞地访问。可检查该地址以确保它正由正确的实体访问。
在一个实施例中,当程序不在飞地中执行时,PMH提供访问控制功能保护EPC。当处理器不是正在执行飞地码时,针对各逻辑处理器启用的范围寄存器将限制对EPC的访问。当处理器开始执行飞地码时,该范围寄存器被禁用。处理器将特殊页表安置在其应有的位置。这些页表受处理器控制并仅允许对由该飞地所有的EPC页的访问。处理器和微代码使用这两种机制来限制对EPC的访问。
在一些实施例中,可在包括性能、实现复杂性和硅成本的许多方面作出折衷。在本章中描述了三种可能的实现,以使研发者能够理解一些可能的折衷。下面的表错误!文档中没有指定样式的文本.-18示出这些可能的保护和所需的PMH支持。
表错误!文档中没有指定样式的文本.-18PMH支持选项
如表错误!文档中没有指定样式的文本.-18的第一行所示,一个附加范围寄存器是提供所需的访问控制保护所要求的全部。在这种特定实现中,通过微代码提供其它保护。范围寄存器可在逻辑处理器基础上启用。使用这种机制的基本实现示出于图2-2中。
PMH被修正以从LP中剪除对CMA范围的访问(由CPU中的CMRR覆盖),这些访问既不运行在微代码模式也不运行在飞地模式下。另外,运行在飞地模式下的LPP仅被允许访问CMA的EPC子范围。
图15示出在本发明一个实施例中如何能实现页故障出错码映射。当位5 1540被置位时,位9、位8、位7和位6可一起被解码以确定页故障出错码。res位1512、ID位1514、预留位1516、U/S位1518、W/R位1520、P位1522。
当EPC中不存在页时,将故障提供给OS/VMM以指示这一事实。页故障出错码映射如表8-2所示那样更替。这指示用来报告故障条件的新位。如果不存在EPC故障,则将位5置为零并且位6-9也为零。如果故障是由于EPC条件,则对位5置位并且该软件可解码位6-9以理解EPC故障条件。在接下来的章节中描述更多关于故障类型的信息。
当页故障出错码的位5被置位时,位6-9被解释为表错误!文档中没有指定样式文本.-19中给出的那样。这表示致使页故障发生的条件。一些状态指示在正常操作中可能永远不会发生的非法条件。它们指示OS/VMM管理错误。
表错误!文档中没有指定样式文本.-19页故障出错码
为了保护EPC不受攻击,可提供使平台上所有TLB的EPC地址无效的机制。该特征可向拟使特定页无效的所有核发信号。然后可等待直到所有处理器返回击落完成的指示。
每当一飞地退出EEXIT发生,TLB可不允许对当前存在于TLB中的飞地页作访问。这可通过对TLB清除或使用额外位以标记飞地实体来完成。
一种替代方案是使用在所有飞地实体被清除的飞地退出上的TLB中的飞地位。另一替代方案是使用若干位以标识一具体飞地。在这种情形下,不需要逐出飞地实体。飞地实体可留在TLB中。当将一地址送至TLB以供查找时,这些位被追加至查找表。将这些位与来自指示飞地身份的核的飞地id作比较。如果这些位匹配,则请求来自同一飞地。如果不匹配,则请求不来自该特定的飞地并且查找将不命中在该位置上。
飞地认证提供确定授权飞地码在飞地中运行的当局的手段,所述当局是代码的作者/批准者。飞地认证也为外界供给飞地微代码流、灵活密封&报告以及数个新事务模型的强制点提供基础。
安全飞地架构的某些方面要求复杂、耗时的流,这些流不适于实现在微代码指令中。解决方案是将安全飞地架构的那些部分外包给宏代码。在许多情形下,外包的代码需要对敏感的处理器或平台数据的特殊访问。例如,EPID签名对于单个指令过长。相反,引用飞地通过准予其对EPID私钥的特殊访问而产生经EPID签名的引用。飞地认证允许Intel规定对特定飞地准予的附加能力,例如仅通过引用飞地对EPID密钥的访问。由Intel提供的飞地——其具有附加能力和实现核飞地功能——被称为架构性飞地。
经飞地密封的存储为飞地软件提供将数据加密至飞地的某些属性的能力,例如其加载时间测量。飞地证明书构架允许飞地将飞地的测量证据提供给外部方。在许多情形下,更希望密封数据或证明飞地的来源而不是飞地的精确软件散列。
在一个实施例中,一旦验证了经认证飞地上的签名,用来对飞地签名的密钥的公共部分对密封&证明书机制而言变得可得,这使卖主具有在基于飞地测量的刚性保护或基于飞地代码来源的更灵活保护之间作出选择的能力。
飞地认证被分割成两个部分。每个飞地伴随以具有溯源至Intel的签名链的飞地许可。该飞地许可指示该飞地的源/有责任实体是谁、飞地需要的任何特殊能力以及识别启用该飞地的具体事务模型/协议所需的任何附加信息。许可可针对特定飞地,指示飞地的测量,或可针对一密钥,然后允许根据需要对飞地签名。
例如,A可购买授权他们生产飞地供A的视频播放器使用的许可。为此,Intel可针对卖主A的视频播放器根密钥创建一许可,连同Intel允许卖主A在视频播放器飞地中使用的各个能力。卖主A随后将使用视频播放器根密钥以对他们发行的每个视频播放器的修订版的各许可文件签名。这创建用于飞地的许可链,该许可链可包含多个中间许可。
经签名的许可链在飞地发起进程中是不利于评价的,因此相反它们被结合入被称为Permit的单个指令可摘要结构。Permit是使用CMAC算法对称认证的,并且在飞地初始化(EINIT)过程中被解释。
表错误!文档中没有指定样式文本.-20飞地许可结构
表错误!文档中没有指定样式文本.-21许可结构
许可的多数要素被复制至准许,产生相似的结构。许可ID是64位数以标识事务合同。许可类型标识该许可应用于什么平台。批量许可允许该飞地发起到支持安全飞地的任何平台上。每平台许可要求平台首先联系所指示的许可当局,并请求准许发起该飞地。一旦已建立许可,就不需要进一步与许可当局联系,但这允许许可当局为计费目的跟踪该飞地部署在的平台数量。许可该飞地的ISV可倾向于为该飞地版本建立一安全版本号。通过这样做,由该版本密封的数据对将来版本可用,但不是之前版本。标志字段指示为了使该准许生效而可对飞地设置的标志。能力掩模是该飞地所准予的特殊能力的位掩模。父密钥散列是对该飞地的许可签名的公钥的散列,与对该密钥签名的公钥作散列运算。实体散列是该许可应用于的实体的预期散列。在飞地的情形下,这是正确构造的飞地的MR.EADD的值。对于许可密钥,这是公钥的散列。
在一许可中,用来对许可签名的公钥被包含在许可本身中。该准许是使用CPU密钥被MAC化的。正确的cpuMAC指示EMKPERMIT指令在返回Intel使许可链有效之后创建该准许。如果许可类型不是整批的,则许可MAC指示该架构性许可飞地已联系了正确的许可当局并已接收该平台可发起飞地的确认。
不是所有飞地都需要准许。为了便于飞地部署,准许在软件寿命周期的研发和调试阶段将是任选的。接下来的策略将由EINIT强加。非调试飞地已知要求准许才能发起。调试飞地将无需准许地发起。然而,如果没有准许被提交给EINIT,则MR.Policy、ISV安全版本、准许安全版本和能力将全部被置为0。
如果使用准许来发起调试飞地,则可置位permit(准许)->Flags[DEBUG],并且只有调试飞地所允许的能力可在准许中被置位。
图16示出在本发明一个实施例中创建发起飞地的准许的过程的一个示例。该过程可具有三个阶段:准许发行1600,附加许可批准1640以及初始化飞地1680。在准许发行1600阶段,可通过在ISV密钥许可1610上执行EMKPERMIT指令1612来产生ISV密钥准许1615。具有仅针对CPU的MAC的飞地准许可通过在飞地许可1620和ISV密钥准许1615上执行EMKPERMIT指令1612而产生。在附加的许可批准1640阶段,具有仅针对CPU的MAC的飞地许可1625以及与拟许可的信息对应的第三方飞地1642进入许可飞地1644,而许可飞地1644产生具有针对CPU的MAC的飞地准许和许可1645。在初始化飞地1680阶段,飞地SECS 1682和具有针对CPU的MAC的飞地准许和许可1645可作为EINIT 1684指令的输入。EINIT 1684指令的输出是ISV飞地1685。
为了发起一飞地,可从用软件运输的许可中创建一准许,并随后将准许提供给CPU以启动该飞地。该过程被分为三步:准许发布、附加许可批准以及飞地初始化。错误!基准源未找到.描述了该过程的流程。
新指令EMKPERMIT用来从许可中创建一准许。EMKPERMIT从单个许可中创建单个准许,但可连续调用以使用准许密钥将许可链转换成具有MAC的单个准许。下面的章节将更详细地对其进行描述。
每个许可包括许可类型,该许可类型确定将采取哪些附加步骤以使准许变得可用。每平台许可要求云中的许可当局维持飞地部署在的平台的计费。对于这种类型的许可,需要附加步骤。被称为许可飞地的架构性飞地将与云中的许可当局协商,而一旦批准,则使用许可密钥在该准许上提供附加MAC。架构性飞地例如一直是整批许可,这意味着它们的运作不需要许可密钥MAC。它们工作在支持安全飞地的任何平台上。
在飞地初始化时强制准许。在初始化过程中对准许进行处理,且如果该飞地测量与该准许中的飞地测量匹配,则MAC是正确的,飞地发起。EINIT将查看该许可类型并仅检查需要附加批准的许可的许可MAC。
EMKPERMIT是有特权的指令,因为验证许可上的RSA签名需要时间。该指令采用非常简单签名的凭证,对其验证,并从其内容中产生一准许。该许可包含用于对其签名的签名和密钥的公共部分。这允许u代码仅存储Intel的许可签名密钥的散列,并能使Intel签署的许可有效。EMKPERMIT也可通过提供其密钥的经认证许可来使通过ISV密钥签署的许可有效。这是通过创建包含ISV公钥散列的准许来完成的。其结果是EMKPERMIT可使用内部散列或具有在第二准许中提供的散列的ISV密钥来验证Intel许可。
EMKPERMIT取三个参数:许可的指针、指向密钥准许的选择性指针以及指向输出准许的指针。对于Intel签署的许可,密钥准许为空,并使用内部硬编码的一组准许参数。使用调用方法来使架构性飞地的许可有效并对其产生一准许。EMKPERMIT确保许可中的公钥由u代码授权(通过将包含的公钥的散列与内部散列比较)。
在ISV的情形下,ISV的密钥将具有由Intel签署的许可。在无密钥准许的情况下调用EMKPERMIT将使用Intel散列来验证许可上的签名并创建授权ISV密钥的散列的准许以表征合法的许可签署密钥。然后第二次调用包括ISV密钥的准许的EMKPERMIT。EMKPERMIT使密钥准许的MAC有效,并随后使用ISV密钥的散列,在此之前EMKPERMIT使用Intel散列。假设飞地许可中的公钥散列至ISV密钥中的值并且飞地许可由其正确地签署,则EMKPERMIT将对该飞地产生准许。该准许指示许可信息(它在整个链上是一致的)、许可链中的所有公钥的散列、飞地的测量及其能力。
在EMKPERMIT中通过u代码执行下面的步骤:
1.将参数复制至便笺式存储器(以保护竞争条件攻击)
2.计算许可中公钥的散列
3.如果密钥准许==空
a.验证许可公钥散列=Intel密钥散列或失败。
4.否则
a.使用准许密钥使密钥准许的MAC有效
b.验证许可公钥散列=密钥准许的实体散列,或失败。
5.使具有公钥的证书签名有效
6.确保许可信息、能力和标志在许可和密钥准许之间一致。
7.通过下列步骤创建准许:
a.公钥散列=Hash(KeyPermit.Hash,Hash(License PubKey))
b.能力=KeyPermit.Capabilities&License.Capabilities
c.测量=License.Measurement
d.ISV SVN=许可SVN
e.标志=许可标志
8.密钥ID=核中的当前密钥ID
9.cpuMAC=使用准许密钥计算出的CMAC
10.许可MAC=0x0000……0000
许可飞地被设计成作出有关飞地发起在u代码视程范围之外的判决。例如,例如,u代码无法评价Intel的ISV的事务安排是否允许附加飞地部署。许可飞地被设计成采集任何需要的素材以作出评价,并要么进一步批准飞地发起要么否决它。该许可飞地只需要支持复杂事务安排,并且不需要整批许可(例如使飞地发起到任何平台上达到需要的次数的能力)。
许可飞地被期望是一种系统服务。如果许可指示其需要来自许可飞地的进一步批准,则由EMKPERMIT创建的许可链和飞地准许被传递至许可飞地。该许可飞地然后产生一批准请求。该应用随后将该批准请求送至合适的许可当局,该许可当局产生一批准通知。这被传回到许可飞地,并且该许可飞地使用该许可密钥以使许可MAC字段中的准许MAC化。
一旦对飞地发布一准许,它可由飞地发起过程中的u-code评价和强制。这作为EINIT指令的一部分完成,该EINIT指令取该准许的线性地址作为参数。接下来的附加步骤作为经认证的飞地机制的一部分被添加至EINIT。
1.将准许复制至便笺式存储器
2.使用准许密钥验证准许上的cpuMAC
3.如果许可类型!=整批,则使用许可密钥来验证许可MAC
4.将准许中的测量与SECS中的MR.EADD作比较
5.将准许中的标志与SECS中的标志作比较
6.将准许中的公钥散列复制入MR.Policy
7.将ISV SVN复制至SECS
8.将准许中的能力映射复制入SECS
能力
当前能力映射是该飞地可用的能力的128位掩模。
表错误!文档中没有指定样式文本.-22能力位表
空间是基于拟由EINIT采取的行动组织的。被预留以供将来使用作为环层约束的位00-03在该飞地上是激活的。04-07被预留以指示将来准许什么样的页保护。08-23是在EGETKEY.24-31用于其它控制的过程中可用的处理器密钥,例如使用证明用或我们想要限制的将来技术的基于名称模式。某些能力在调试模式下可能永远不会被飞地用到。调试列指示一种能力用于调试模式下是否合法。
在下一代中,位00可指示环层和VT约束应用至该飞地。位01-02指示飞地被允许运行在什么环层,而位02指示飞地是否运行在VT根模式。在每个EENTER,当前CPL可与位01-02比较以确定是否允许该飞地执行在该环层。如果作出尝试以使其执行在错误的环,则EENTER将会失败。同样,如果环约束是激活的,如果位03开启,则飞地可仅从VT根模式进入。在第一代中,这些位是MBZ。
飞地页可被加密或仅受完整性保护。另外,页可以是可执行的或不那样。在下一代中,这些属性可被跟踪并强制在EPCM的安全信息部分中。这些能力位被预留以基于飞地页是否可执行和飞地是否已被EINIT化而控制将加密应用到飞地中的飞地页。
许多结构性飞地是环3实体,它们需要对CPU中或由CPU保护的密钥进行访问。EGETKEY提供对这些密钥的访问,同时能力位由EGETKEY使用以确定对密钥的访问是否被允许。
下面是具有其属性和简短描述的当前架构性飞地列表。
无论何时需要新设备证明密钥(DAK)或提供证明密钥(PAK),具有能力KEY_PROVISION并由Intel授权的提供飞地运行在单个组件平台上。其目的是允许飞地基于由EGETKEY提供的供给种子推导出设备ID和提供密钥。提供飞地则使用这些密钥来证明平台至供给服务器的真实性并检取设备证明密钥(DAK)。在检取DAK之后,供给飞地将其密封以使引用飞地能检取它。供给飞地随后选择性地使用DAK以通过平台证明密钥(PAK)提供者认证并使PAK失效。使用PAK通过确保针对特定的ISV而为用户提供更好的私密性,它们的活动无法与其平台的前一拥有者的活动相关联。在检取PAK之后,供给飞地将其密封以使引用飞地可检取它。
具有能力KEY_REPORT并由飞地授权的引用飞地具有由用来供给EPID密钥的供给飞地(典型为Intel)相同的作者。其位置是对所有应用可得的OS服务。其目的是允许飞地解密封平台EPID密钥。来自EREPORT的报告提供作为输入。飞地使用EGETKEY来检取报告密钥。该报告密钥随后用来验证该报告。飞地通过使用EPID签署一引用。
具有KEY_LICENSE能力并由Intel授权并由根Intel签署的许可飞地通过飞地(OS服务)传输并被特别地实例化。其目的是评价复杂许可策略。如果飞地要求来自许可飞地的附加许可确认,则EINIT仅在许可飞地使用许可密钥以对准许作CMAC操作之后接收它。
在单组件系统中,由飞地架构使用的所有对称密钥从存储在处理器的融合阵列中的具有唯一性的单个源中推导出。该密钥层级被分割成取决于平台实现的SE TCB层级以及其结构在所有安全飞地实现上一致的SE密钥层级。TCB恢复和EPID供给基础的密钥化素材是由充当SE密钥层级的根的SE TCB层级提供的。用于飞地指令集和可信架构性飞地两者中的所有密钥化素材是由SE密钥层级提供的。
平台提供两个融合的128位平台唯一密钥。这些密钥在融合结构中使用存储在秘密CPU逻辑中的密钥被加密。从该密钥中导出若干单目的的密钥,基于平台的需求应用TCB恢复技术。所得到的密钥充当SE密钥层级中的根。
使用EGETKEY指令来检取架构性飞地的密钥。
飞地架构也需要使用非对称密钥来将REPORT值的证明提供给平台之外的系统。该密钥,即EPID密钥最早在融合结构中提供,但可使用从部署后的密钥层级中导出的密钥再次提供。供给EPID证明密钥的方法在本规范的范围之外。更多信息可在设备证明密钥(DAK)供给规范中找到。
最后,飞地的架构也利用所有处理器逻辑中的密钥,用以在OEM处提供密钥素材。该密钥已知为盒外经验全局密钥。我们对该密钥执行类似的推导操作以提供ISV唯一性。从OOB密钥导出的这些密钥如何如由ISV使用落在本说明书范围之外。
尽管密钥层级的SE TCB部分是平台特定的,然而所有基础需要相同的密钥基集。我们将它们称为基密钥。它们全部衍生为融合密钥和逻辑密钥,并且是SE密钥层级的根。这些密钥由SE指令使用以导出直接用于SE架构中的所有密钥。这些密钥是TCB密钥层级的结果。存在四种SE基密钥加EPID部件,它们可通过平台特定机制供SE架构使用。表错误!文档中没有指定样式文本.-23描述了这些密钥中的每一个。
表错误!文档中没有指定样式文本.-23安全飞地基密钥
图17示出本发明一个实施例的对于单组件安全飞地的平台密钥层级的可能实现。盒外基密钥1700可从可用推导资源1750推导出1702以产生盒外密钥1704。可用推导资源1750是具有包含固定值1752、拥有者时期1754、安全飞地安全性版本1756、SECS测量寄存器1758、ISV安全性版本1760和SECS标识1762的要素的字串。供给密钥1710向Intel后端证明平台的真实性。EPID ID 1712是签署密钥。最初安全ID密钥团1718是一引用并与安全ID种子1716关联。基Ops密钥1714可与来自可用推导资源1750的信息结合以导出1720一系列密钥,包括飞地密钥1730、准许密钥1732、许可密钥1734、报告密钥1736、认证密钥1738以及密封密钥1740。
图17a示出多组件密钥层级的一个实施例。
安全飞地指令和数据结构依赖于作为密钥化素材的来源的基密钥。错误!引用源未找到.中所示的平台密钥层级描述了平台密钥素材的层级关系以及如何从平台根密钥中导出密钥。
飞地交换密钥1752是用来加密安全飞地控制结构(SECS)页同时不在飞地页高速缓冲存储器(EPC)中受到保护的对称密钥。该密钥仅由u代码使用。
准许密钥1754用来提供准许的真实性和完整性,包括飞地的能力和许可信息。准许被MAC化以确保其在转变至EINIT时的完整性。该密钥由EMKPERMIT u代码和EINIT使用。
许可密钥1756用来声明与无法由u代码评价的许可策略的兼容性。该许可密钥用来从由EINIT评价的许可飞地产生经认证的批准。该密钥由EINIT u代码使用,并可经由EGETKEY供具有KEY_LICENSE能力集的飞地使用。
报告密钥1758用来提供报告的真实性和完整性。报告由EREPORT作MAC操作以确保其在转变至引用飞地时的完整性。该密钥由EREPORT u代码使用并可经由EGETKEY供具有QUOTE能力集的飞地使用。
认证密钥1760是飞地特定的密钥,并用来提供从引用飞地传输至ISV飞地的数据的真实性和完整性并允许同一平台上的飞地-飞地认证。该密钥可经由EGETKEY对所有飞地可用,并且具有ISV_AUTH能力集的那些飞地可规定其需要什么密钥。
密封密钥1762为每个飞地提供128位密钥以对其敏感的数据进行加密。数个密封策略可被整合入该密封密钥,为ISV提供关于什么软件可解密封其数据的灵活性。这些密钥可经由EGETKEY供任何飞地使用,但个别地一个密封密钥仅可供满足请求的密封策略的飞地使用。
EPID ID 1712唯一地识别该组件。其唯一目的是允许供给设备证明密钥,这些密钥是基于EPID的匿名证明密钥。仅供给飞地可访问EPID ID。供给飞地将仅在安全信道上将其提供给批准的供给服务器,并仅在供给进程中这样做,所述供给进程是由用户或操作系统发起的。该ID可经由EGETKEY对具有PROVISIONING能力的飞地可用。
供给密钥1710用来向Intel后端证明平台的真实性,并认证当前SETCB运行。通过示范对供给密钥的访问,供给服务器保证该飞地事实上是拥有EPID ID的设备,并运行至少规定的TCB安全性版本。供给密钥对该组件和对其作出请求的供给飞地的签署者是唯一的。如果在单个平台上使用多于一个的供给基础设施,这就在这些供给基础设施之间形成分隔。该密钥可经由EGETKEY对具有KEY_PROVISION能力的飞地可用。
供给密封密钥为供给飞地提供128位密钥从而以甚至在拥有者改变之后也能检取的方式对供给进行加密。该密钥用来对旧EPID加密以证明在获取新EPID的同时平台尚未被调用。供给密钥对该组件和作出请求的供给飞地的签署者来说是唯一的。如果在单个平台上使用多于一个的供给基础设施,这就在这些供给基础设施之间形成分隔。该密钥可经由EGETKEY对具有KEY_PROVISION能力的飞地可用。
ISV盒外(OOB)经验密钥1700是所有Intel平台和ISV之间的共享密钥。该密钥从对特定ISV唯一的OOB根推导得出。ISV将能赢得对该密钥的访问,允许它们加密该密钥的秘密并放置在OEM的硬盘镜像中。这些秘密将仅对其安全运行在安全飞地中的代码进行访问,并且不需要平台在线或完成证明密钥提供。这些密钥经由EGETKEY对具有OOB能力的飞地可用。
供给的密钥是那些对安全飞地架构关键的密钥,但它们不是从平台密钥化素材中推导出的。这些密钥从供给服务器或离线技术供给。设备证明密钥(DAK)是用来证明各飞地的特性的匿名签署密钥(EPID)。这可由ISV在密钥或秘密供给期间使用以确保该敏感信息仅被送至它们的未经篡改的应用的受保护实例。
对于设备证明密钥具有两个来源。优选的架构通过在融合结构中的最初DAK压缩作为EPID密钥团和EPID熵来运载。这允许平台在第一次上电后立即执行证明。第二来源是通过联系DAK供给服务器并在使用EPIDID和供给密钥提供硬件的合法性之后下载一个。该第二方法由不具有融合的EPID密钥的平台使用并可在我们撤销潜在TCB的版本后在任何平台使用。具有PROVISIONING能力的飞地可经由EGETKEY访问EPID融合。
平台证明密钥(PAK)提供选择性的附加私密级别。DAK的某些用途可与之关联。尤其是如果一ISV飞地具有基于名称的证明能力,则该单个ISV可确定一给定的EPID是否正在再次访问该服务(然而,多个ISV无法勾结以跟踪用户)。由于DAK束缚于平台,而不是拥有者,因此这种联系通过瀑布效应继续。因此一些用户宁可使用他们的DAK来向第三方声明其平台的合法性,所述第三方将发布一PAK以供其日常证明使用。在多组件平台中,每个组件的DAK用来建立PAK,该PAK表示证明中的整个平台。
对用户可访问密钥的密钥推导应当遵循NIST专门出版物800-108(对于使用伪随机函数的密钥推导的建议)。在密钥推导函数的构造中,需要伪随机函数(PRF)。PRF应当基于如2005年5月出版的整块加密操作模式的建议-真实性的CMAC模式的NIST SP800-38B(http://csrc.nist.gov/publications/nistpubs/800-108/sp800-108.pdf)中定义的AES-CMAC算法。密钥推导通常看上去如下:
推导密钥=PRF父密钥(推导字串)
推导字串由基于请求的特定密钥的8个要素的子集构成。表错误!文档中没有指定样式文本.-24描述了可作为推导的一部分的每个可用要素。
表错误!文档中没有指定样式文本.-24:可用推导字串要素
每个密钥有预定组的推导要素,它们包括推导字串。表错误!文档中没有指定样式的文本.-25描述了哪些要素被包含在来自密钥层级的每个密钥中。每个列代表一个密钥,而行代表特定要素是否包含在该密钥中。如果请求飞地的SECS指示其处于调试模式,则包括调试字串,而“请求”表示该要素不是必需的,但在请求中可选择以推导出该密钥。
表错误!文档中没有指定样式的文本.-25:密钥推导字串组成
用于软件隔离和恢复的安全飞地支持技术在引导序列中的许多点具有折衷。为了支持隔离。被提供给飞地的所有长期密钥化素材是使用当前TCB的安全版本推导出的。
该章节描述了其可恢复TCB由u代码、MCHECK构成的平台的示例性架构,并将要描述微代码(或uVMM)。硬件需求对于任何SE支持平台来说是相同的,然而准确的密钥流依赖于特定TCB要素。其它平台可使用与这里应用的技术相似的技术来支持。
在硬件中需要下面的密钥以支持基于CPU的保护技术。这些密钥是TCB密钥层级的基础。
步进特定的256位逻辑密钥:256位逻辑密钥被分成两部分——128位融合包裹密钥以及128位盒外经验密钥。可对两者使用单个128位密钥,然而,这样做增加了更多u代码。
芯片特定的544位融合密钥:这些包括32位的组id,256位的安全IdA.x值以及256位的前种子。A.x值和256位前种子通过前述128位融合包裹密钥加密。
临时寄存器:密钥推导进程要求密钥被存储和位于组件上,并仅对u代码可用。两个128位寄存器在平台运行时间过程中是需要的。附加的256位的空间是EPID密钥所需的,直到CMA向上和运行为止。在这之后附加的256位在CPU中不再需要。
TCB SVN寄存器:寄存器是64位可锁寄存器,该寄存器被细分以保持每个TCB层的SVN。特定细分任凭平台设计者处理,但8位SVN是理想的。该寄存器的每个区段可独立地上锁。
将密钥绑定至特定组的TCB版本是通过使u代码基于将要开始执行的引导序列的类型从融合密钥推导出第一组密钥来实现的。在此之后融合结构被锁住,并且推导串发生在每次载入引导序列时。
在载入低层代码之后,链继续以为飞地中运行的软件引入ISV赋值的安全版本。对于任何特定配置,从当前版本推导出的密钥是可访问的,来自之前配置的密钥也是如此。这允许至较新的非易受攻击版本的无缝用户数据转换。
一旦生成芯片特定的密钥,则用包裹密钥的密钥对其进行加密。这增加了通过硬件监视工具提取密钥以及为存放至该部分之前的转换中的密钥提供保护。
用来加密这些密钥的密文算法是10轮128位AES-ECB解密。密钥生成服务器可对每个密钥采用AES-ECB加密以生成将紧附于融合结构的密文文本密钥。
用于TCB密钥层级中的密钥推导的伪随机函数(PRF)是平台特定的。对于支持AES-NI的平台,我们推荐128位AES-ECB。其目标是提供从其它密钥推导密钥的不可逆方式。对于这部分,我们使用下列函数原型:
void PRF(uintl 28*key,uint 128*string,uintl 28*key_out){
Use AES-ECB to encrypt using key key
Return resulting cipher text to key_out
对于PRF存在三种方式用于密钥推导。PRF环推导用来将u代码SVN注入到密钥中,同时在不同SVN的密钥之间建立联系,具体地表示为:
PRFLoop(x-1)=PRFPRFLoop(x)(const)
这提供数据的前向迁移。以运行u代码SVN 3为例,飞地使用EGETKEY来检取基于该版本(PRFLoop(3))的密封密钥,并用其密封数据。传递现场u代码更新并且下一引导的u代码SVN为4。在更新后,EGETKEY实现将访问PRFLoop(4)。当飞地从EGETKEY请求SVN 3密钥时,它可计算PRFLoop(3)=PRFPRFLoop(4)(常数)并因此检取旧的密封密钥。
为了建立这种属性,使用PRF环,然而由于性质PRFLoop(x-1)是从PRFLoop(x)计算出的,因此我们需要建立最大SVN并从此向回计算。需要基于要求的性能针对每个平台类型建立特定的最大值。我们推荐32作为初始最大值点。
PRF环推导的应用一般表示如下:
该方法将用来将u代码的SVN注入SVN密钥,它将是隐藏在SE基密钥后面的潜在密钥。融合结构中的芯片特定密钥包含288位EPID值和256位的随机密钥。所有非临时的对称密钥可从这些256位中推导出,这些对称密钥由2个128位密钥构成。因此,可创建一项技术以从单个密钥导出多个密钥。为此,在对融合密钥解密后,我们用它来调用使用不同固定常数的PRF。
密钥分割应用一般表示如下:
//利用从融合密钥推导出的2个密钥来填充key_registers
PRF(source,CONSTANT1,&sub_key1);
PRF(source,CONSTANT2,&sub_key2);
这项技术用来产生用作EPID ID的一部分和供给ID的随机数。
一旦SVN密钥已基于u代码SVN被环推导出,则可将其储存在例如SECMA的受保护存储器中。微代码将使用对微代码露出的MSR,这只是为了从SVN密钥中导出多个密钥。MSR采用一密钥选择器,该密钥选择器指示推导的基础是全局盒外密钥还是融合密钥以及对于每个TCB层的一组请求的SVN。它验证请求小于或等于当前值。u代码应用任何必要的PRF以检取旧的SVN密钥以及PRF、请求的TCB SVN。
//针对请求的svn施加进一步的推导
一旦适当的SVN密钥可用,则在请求的TCB SVN上将其用作CMAC的密钥。微代码则将其用作Ops密钥的SE Ops种子(从不为Intel所知的融合密钥的部分推导出的值)上的CMAC密钥,或作为供给基密钥的固定字串。
se_base_key=CMAC(svn_base_key,se_ops_seed);
图18示出本发明一个实施例中的基于微代码的安全飞地密钥层级的一个示例。在重置微代码1800层级中,全局包裹逻辑密钥1801和Intel已知的唯一根融合结构1802是对解包1806函数的输入。解包1806和微代码SVN 1805的输出进入PRF环1808。微代码SVN 1805和全球根逻辑密钥1803进入另一PRF环1809。该PRF环1808的输出被存储在SVN密钥1810寄存器中。PRF环1809的输出被存储在全局密钥寄存器1812中。微代码SVN 1805被存储在TCBSVN寄存器1814中。全局包裹逻辑密钥1801和SE EPID A.x融合结构1893是解包1807函数的输入并且其结果被存储在SE EPID 1816寄存器中。在MCheck 1820层级中,MCheck SVN1821和TCB SVN寄存器1814的输出被存储在TCB SVN寄存器1826中。全局密钥寄存器1812被存储在全局密钥寄存器1824中。SE EPID 1816被存储在SE EPID 1828中。在负载微代码1830层级中,微代码SVN 1831和TCB SVN寄存器1826的输出被存储在TCB SVN寄存器1846中。微代码SVN寄存器1822被存储在微代码SVN寄存器1832中。全局密钥寄存器1824被存储在全局密钥寄存器1834中。SE EPID 1828被存储在SE EPID 1838中。在XuMSR推导密钥1840层级中,微代码SVN差1841进入PRF环1842和PRF环1844。微代码SVN 1832寄存器将数据送至PRF环1842,并且全局密钥寄存器1834将数据送至PRF环1844。PRF环1842的输出和TCBSVN寄存器1836的输出进入PRF环1846,并且PRF环1844的输出和TCBSVN寄存器1836的输出进入PRF环1848。PRF环1846的输出被存储在SVN基密钥1850中,并且PRF环1848的输出被存储在SVN基密钥1850中,而PRF环1848的输出被存储在全局密钥1852中。在微代码1860层级中,Intel不知道唯一的根融合结构1894被存储在种子11856中,同时EPID群ID融合结构被存储在EPID组1858中。种子11856进入PRF环1886和PRF环1888中。PRF环1888的输出是SE EPID种子1 1892。PRF环1886的输出是SE ops种子1890。来自SVN基密钥1850的SE ops种子1890以及请求的SVN 1864进入CMAC 1868函数以产生SE ops密钥1872。来自SVN基密钥1850的当前SVN 1862进入CMAC 1866以产生SE供给密钥1870。当SVN基密钥等于{0,0,0}1874时,SVN基密钥1850被存储在种子0 1876中。种子0 1876进入PRF环1878和PRF环1880。PRF环1878的输出是SE EPID ID 1882,而PRF环1880的输出是SE EPID种子0 1884。
所有核同步并使用门铃或类似机制确保它们全在MCHECK中。一旦全部核在执行MCHECK,则通过BSP执行下列步骤。AP不参与到密钥流中:
1.u代码读取、解密和锁融合。
2.u代码将PRF环施加到SVN密钥,并将PRF环施加到OOBE密钥,从而将u代码的SVN注入到两密钥中。U代码将其SVN写至TCB SVN寄存器并锁住该部分。
3.MCHECK加载器或早先的MCHECK代码将MCHECK的SVN写至TCB SVN寄存器并将其锁住。
4.微代码补丁加载器将微代码补丁SVN写至TCB SVN寄存器并将其锁住。
要么在微代码初始化期间要么一旦调用EGETKEY,微代码计算满足请求所需的SE基密钥。该基密钥可高速缓存在CMA中以供提高性能的进一步使用。
表错误!文档中没有指定样式的文本.-26描述了如何计算基密钥。
表错误!文档中没有指定样式的文本.-26:基密钥计算
为了保护平台瀑布之间的用户隐私和数据,256位随机拥有者时期被包含到密钥推导中。该值是在拥有权改变过程中随机形成的。在使用飞地密钥前,软件可将拥有者时期写至SE_EPOCH_MSR。这可通过将其永久地存储在闪存中的BIOS来实现。它可从例如用户引导口令散列的某些用户输入中计算出。它也可在允许飞地使用前由安全飞地驱动器提供。
需要该值的可信度以确保由该平台解密的数据无法在原始授权的飞地中由瀑布后的拥有膝上计算机的某人解密。该值的危及不导致任何飞地数据的危及。
SE密钥信息结构是存储在存储器或组件的受保护区域中的非永久性结构。CMA是最可能的位置,但是任何芯片上受保护的存储也是可以的。在上电期间,SE密钥信息被初始化。密钥ID被置为一随机值,并且密钥计数被置为0。在每次使用飞地密钥、准许密钥和密钥ID读取的报告密钥时,密钥计数被增一。在2^32次密钥使用后,密钥ID改变至一新的随机值,并且密钥计数被重置为0。SE密钥信息布局被表示在5中。
表错误!文档中没有指定样式的文本.-27:SE密钥信息
一旦上电,平台密钥表由u代码初始化。BIOS或其它主机固件从永久性存储或从用户获取当前拥有者时期并将其写至LoadOwnerEpochMSR。此时,飞地密钥层级是可用的。
许多飞地的结构依赖于密钥的使用以提供飞地数据的真实性和私密性,并且为了保持处理器复杂度,使用最小值架构性飞地以处理高级别用途的这些密钥。例如,引用飞地使用REPORT密钥来建立REPORT结构,该REPORT结构由EREPORT指令产生并形成在平台上,并且PERMITING飞地使用PERMIT密钥来形成飞地PERMIT,该飞地PERMIT当发起飞地时由EINIT消耗。
另外,任何应用层飞地需要访问一密钥以密封被存储在飞地外的平台上的秘密,并当该应用飞地被重新建立——甚至横跨多个功率周期时被解除密封。
这样做的机制是EGETKEY指令。它是用于建立关于当前软件环境的秘密的单个接口。
EGETKEY当前提供对下列密钥的访问:
·PROVISIONING KEY ID-由架构性供给飞地使用以识别已对处理器(使用PROVISIONING KEY)唯一地加密的数据团。
·PROVISIONING KEY-由架构性供给飞地使用以解密已对处理器唯一地加密的数据团。
·PROVISIONING SEAL KEY-由架构性供给飞地使用以加密EPID以使该飞地即使在拥有者改变之后也能对其解密。
·PERMIT KEY-由架构性准许飞地使用以创建PERMIT。
·REPORT KEY-由架构性引用飞地使用以验证REPORT结构。
·ISV AUTH KEY-由架构性引用飞地使用以针对具体对象应用飞地创建认证数据。
·AUTH KEY-由应用飞地使用以认证由架构性引用飞地向其发送的认证数据。
·SEAL KEY-由应用飞地使用以加密其希望存储在飞地外的数据
·OOB EXPERIENCE KEY-由ISV使用以为盒外经验用途(例如蓝光播放器)预供给经加密的数据。
这些值的大多数不是原始留在处理器中,事实上是根据需要由EGETKEY从单个融合密钥值中推导出的。它们根据需要被推导出,因为这些密钥中的每一个不是单个密钥而是处于来自可能集合的单个密钥中。所传递的具体密钥依赖于若干参数,其中一些参数是用户可选择的,另外一些是基于系统或特定状态的。
为了选择密钥,将KeyRequest结构作为EGETKEY指令的输入。如选择用户想要的密钥一样,KeyRequest结构允许调用者在他的控制下指定他想要在创建密钥中使用的那些变量。下面的图表规定了密钥请求结构:
表错误!文档中没有指定样式的文本.-28:密钥请求结构
密钥选择用来识别用户需要的密钥,而密钥策略用来确立哪些附加值用于创建密钥——是架构性飞地的具体安全版本,还是应用飞地的具体版本,还是与当前飞地关联的测量寄存器(当EGETKEY从飞地中被调用时)。
可对密钥推导增加额外的随机性,这是尤其必要的,以防止密钥的损坏,并由PERMITING和QUOTING架构性飞地使用。当创建SEALing密钥时,也应当由应用飞地使用。将该字段置为零表示不增加额外的随机性,否则该字段指向256位对齐的数据值。下面的图表规定密钥选择字段的结构。
表错误!文档中没有指定样式的文本.-29:密钥请求密钥值结构
密钥策略是位字段选择器并用来确定是否要么来自用户要么系统状态的特定值拟用于推导该密钥。
表错误!文档中没有指定样式的文本.-30:密钥请求策略结构
位 | 名称 | 描述 |
15:02 | 预留的 | 预留的,可以为零 |
01 | MR_POLICY | 使用飞地的POLICY测量寄存器推导密钥 |
00 | MR_EADD | 使用飞地的EADD测量寄存器推导密钥 |
飞地寄存器和控制
表错误!文档中没有指定样式的文本.-31:31SE寄存器布局
为飞地提供两个允许级别。第一允许是由BIOS置位的位中的opt。它是一次性写入函数。它启用或禁止飞地能力,直到下一次重置为止。第二次启用被提供给OS或VMM以根据需要动态地启动或中断飞地能力。
图19是可在本发明一个实施例中找到的飞地CTL_MSR寄存器的图。最低有效位是启用1900。寄存器的位1处于启动1910。位2-63被预留。
飞地能力通过首先置位错误!基准源未找到中的Enclave CTL_MSR中的启用位来启用。当组件重置发生时,该位默认为禁用的。该位可在组件重置后写入一次。
BIOS对该位置位以启用飞地。如果BIOS对该位清除,则飞地无法被启用,直到该部分被重置为止。
软件可通过执行CPUID指令来检测对飞地的支持。CPUID将返回一结果,该结果指示飞地是否得到支持。
如果该位中的Opt被清除,则CPUID报告该飞地将不执行。
系统软件使用错误!基准源未找到中所示的Enclave CTL_MSR来控制飞地能力。启动位允许软件动态地控制对飞地能力的访问。
软件可通过执行CPUID指令来检测对飞地的支持。如果Enclave CTL_MSR中的该启动位被置位,则指示飞地支持。
TCSMSR寄存器是每个处理器上包含TCS地址的寄存器。它由异常管理和RDTCSPTR使用。当进入飞地时它被加载。当执行EENTER时,寄存器被加载以TCS的值。它由ERDTCSPTR读取。寄存器大小基于处理器的模式。
每个处理器上的飞地基地址寄存器包含处于执行状态下的飞地的低位地址。该低位地址当进入飞地时由微代码加载。寄存器大小基于处理器的模式。该寄存器对软件是不可见的。它是微代码临时的。
寄存器保持当前飞地的高位地址极限。当进入飞地时它被加载。当飞地开始执行时,寄存器被加载以存储在SECS中的值。它是微代码临时寄存器。寄存器大小基于处理器的模式。
飞地页高速缓冲存储器(EPC)最大尺寸寄存器表示EPC的最大尺寸。该尺寸以4096字节页的数目给出。它是32位寄存器。该寄存器是只读的以指示当前设计中支持的最大尺寸EPC。
EPC尺寸寄存器EPC_SIZE_MSR指示EPC当前定义的尺寸。加载寄存器导致被定义至该尺寸的一个EPC。该值给出在4096位页中。例如,一个4096位页可以是1。寄存器的值无法超出EPC_MAX值。如果该值超出EPC_MAX值,则由WRMSR指令获得GP故障。对该寄存器的写入将使写之前EPC中的所有数据无效。在更新该寄存器之前,软件可保存所有EPC条目(如有必要)。
EPC基寄存器指示EPC的基地址位置。对该寄存器的写入将使写入前EPC中的所有数据无效。在更新该寄存器之前,软件可保存所有EPC条目(如果需要)。
一般来说,没有外部接口会允许可能危及飞地安全性的任何转移或交易。安全飞地需要飞地密钥的随机数。使用数字随机数发生器产生随机位。随机数发生器可由微代码安全地访问。它不需要位于该部分的核中。
图26示出针对本发明一个实施例的用于数字随机数发生器的处理器组件。该处理器组件2600可包含多个核,即核0 2640和核1 2670。核2640可包含微代码2642、微代码2644、微代码2646、RNG微代码模块2650以及RNG队列2654。核1 2670可包含微代码2672、微代码2674、微代码2676、RNG微代码模块2680以及RNG队列2684。读随机指令2630可与微代码2642通信,同时读随机指令2635可与微代码2672通信。处理器组件2600也可包括DRNG2602,它取STD 2608、OPE 2610、PSK 2612和TSC 2614。DRNG 2602可包含数字熵源2604,该数字熵源2604连接于在线自检2606。在线自检2606的输出可以是经组合的调节器/确定性随机位发生器(DRBG)2620的一个输入。
飞地在创建时可设置成调试飞地。调试飞地将允许使用EDBGRD和EDBGWR指令对飞地内容的外部访问。调试飞地通过设定ECREATE指令中的调试标志来设置。该位被存储在飞地的SECS中。
通过调试位清除创建的飞地是生产飞地。EPC包含指示该飞地是调试飞地的调试位。飞地在主存储器或盘中保持在加密状态。需要查找飞地内容的调试器将存储器加载入EPC。EDBGRD和EDBGWR指令可用来访问驻留在EPC中的飞地存储器位置。调试飞地不需要准许以执行。它可不经有效准许地执行。
当进入生产飞地时,调试控制寄存器DR7被保存在TCS保存区中。DR7被示出在图27中。图27示出针对本发明一个实施例的调试寄存器DR72700。寄存器DR7 2700包含位L02702、L1 2706、L2 2710、L3 2714、G02704、G1 2708、G2 2712以及G3 2716。DR7寄存器2700中的其它位包括LE 2718、GE 2720、001 2722、GD 2724、00 2726、R/W0 2728、LEN0 2730、R/W1 2732、LEN1 2734、R/W2 2736、LEN2 2738、R/W3 2740以及LEN32742。
位L3-L0和G3-G0被置为零值。DR7在飞地退出时返回至其初始值。
对于调试飞地,调试寄存器值是不变的。当RFLAGS.TF在EENTER指令开始处被置位时,存在两种要考虑的情形:
调试器是旧有的(非SE-认识的)或飞地正处于生产(非-调试)模式。
SE-认识的调试器是面向调试模式的飞地。
在第一情形下,#DB异常可发生在下一EEXIT指令的对象上。这样将飞地视为大的、不透明的操作。在第二情形下,用户已结束自由至通过飞地的单个步骤。这个动作由飞地中的3个数据字段以及EENTER、EEXIT和EIRET的特殊处理支持。
表错误!文档中没有指定样式的文本.-32:TF标志数据字段
表错误!文档中没有指定样式的文本.-33:具有TF的指令动作
寄存器值被存储在TCS存储区内。寄存器被置为0。在飞地退出时,寄存器被恢复到进入时的值。如果该飞地具有在进入时启用的分支路线,则EENTER是在进入飞地前最后的条目。当退出飞地时,退出后的第一个位置被写至分支路线。
如果在飞地中执行,Int n和Int 3指令被报告作为GP故障。当调试飞地时,调试器可与GP故障条件挂钩。
在该文本中,我们描述了实现AES分组密码的CMAC工作模式的新技术。CMAC是支持消息真实性的模式。它接受消息A和密钥K作为输入并返回认证标签T。认证标签的推导是使用CBC(密码块链接)算法完成的。CMAC比CBC更复杂,因为它包括用于保护免受长度扩展攻击的机制。我们将这些称为“CMAC的三种特性”。在后面的章节中我们提供CBC和CMAC的总览。
图20示出本发明一个实施例中使用的密码块链接算法。初始化矢量2000和级1输入2010进入异或门2012。异或门2012的输出进入级1块密码2015。级1块密码输出2018随后连同级2输入2020一起进入级2异或门2022。异或门2022的输出进入级2分组密码2025。级2分组密码输出2028随后进入密码块链(未绘出)的下一级。
CBC算法利用分组密码来提供一些数据段的可信度或计算该数据上的认证标签。CBC算法背后的主要理念是在加密前通过下一输入块对来自前一加密的输出求异或。如此,可存在于输入数据中的图案在密文中被消除。另外,其间的异或运算与块密码转换的组合提供用于推导理想地不可伪造的消息认证标签的强混合。
CBC算法在下文中给出并在图20中示出。与AES的情形相同,假设密码为128位分组密码。
CBC(IV,X,CIPHER,K)
令IV为要产生的标签的初始值
令X=[X1,X2,……,Xn]为完整128位块形式的输入
CMAC规范包括用于初始化和结束CBC算法的三种附加算法。我们将这些称为CMAC的“三种特性”。第一种特性涉及来自对称密钥K的两个子密钥值K1、K2的推导。子密钥K1、K2推导自中间值L。CMAC规定L通过使用对称密钥值K将对称密钥分组密码转换施加于由多个零构成的字串(即0128)推导。这种关系示出于等式(1):
L=CIPHERK(0128)(1)
一旦L被推导出,则检查L的最高显著位。如果为零,则通过向左平移一位位置从L推导出K1。否则将L向左平移一位位置并另外与一特定值Rb求异或以产生K1。Rb被定义为二进制形式的<012010000111>。K2遵循同一过程从K1中产生。
子密钥K1、K2的推导在下面以伪代码形式给出。我们将MSB()意指为一个值的最高有效位。
CMAC的第二种特性涉及在将CBC算法施加到输入数据之前发生的填充。如果数据的最后一个块不是结束块,则将该分组以等于“1”的位继之以所需要数量个0来填充,以使最后一个块变得完整。
CMAC的第三种特性涉及为了避免长度扩展攻击发生的对最后一个块的修改。如果该最后一个块是一个完整块(无需填充),则将该最后一个块与子密钥K1求异或。否则,就与子密钥K2求异或。
CMAC标签生成和有效的算法列出如下:
令X=[X1,X2,……,Xn]为完整128位块形式的输入
If Xn是完整的
令X=[X1,X2,……,Xn]为完整128位块形式的输入
If Xn是完整的
在下面的章节中我们示出当所使用的对称密钥分组密码是AES并且处理器支持AES轮加速的一组指令时如何实现CBC()算法。Intel架构在Westmere处理器(2009)和类似的时帧上支持4种新的这种指令。这些指令是AESENC(AES轮加密)。AESENCLAST(AES最末轮加密)、AESDEC(AES轮解密)以及AESDECLAST(AES最末轮解密)。对于这些指令的说明如下:
表错误!文档中没有指定样式的文本.-34:AES轮指令
为了使用AES轮指令实现CMAC模式,仅调用AESENC AESENCLAST就足够了,因为标签有效进程与标签发生相同。错误!引用源未找到.示出与单个AES分组的加密关联的流程图。错误!引用源未找到.示出与使用CBC算法对多个AES块加密相关联的流程图。
为了实现密钥日程转换,人们可使用逆混合列的AESIMC指令以及AESKEYGENASSIST指令。AESKEYGENASSIST用来产生产生用于加密的轮密钥。AESIMC用来将加密轮密钥转换成根据等效逆密码模型的可用于解密的形式。AESIMC和AESKEYGENASSIST指令的描述在下面的网址给出:
http://softwarecommunity.intel.com/articles/eng/3788.htm
CMAC是涉及使用128位数量的大尾序(endian)注解规定的。为了在小尾序机器中正确地实现CMAC,人们需要在源代码实现中的某些点执行16字节宽的字节反射(bytereflection)操作。这些操作可使用PSHUFB指令(1时钟等待时间,生产量)快速地执行。之后我们描述需要字节混洗(shuffling)的那些点。
在SUBKEYS()算法中,在通过在零字串上施加AES密码导出后并在两个子密钥导出前在L上需要字节反射。另外,在两个子密钥从L导出后,在这两个子密钥上也需要字节反射。SUBKEYS()实现以C语言表示如下:
接下来,只有在该最后一个块不完整的情况下才在填充前后在最后一个块上要求字节反射。这些步骤用C语言表示如下:
其中function_pshufb()执行128位宽的字节反射。
对于SMI的SE要求
飞地不允许在SMM空间内执行。在SMM模式下执行飞地的尝试将导致指令的GP故障。当在飞地中执行的同时SMI发生时,处理器可保存离开飞地内部的寄存器状态并退出。当退出发生时,TBD MSR位被置位以指示在执行飞地的同时SMI发生。SMM代码无法访问飞地数据。联系EPC区的尝试将导致在实时模式下返回垃圾数据并在受保护模式返回EPC页故障。
某些指令是不允许执行的。有许多一般规则用来确定哪些指令是合法的。
1.在飞地中不允许环层改变。改变或可能改变环层的指令是禁止的。
2.外部软件无法对飞地中的VMEXITS提供服务。在飞地中产生或可能产生VMEXIT的所有指令是禁止的。
3.软件无法在飞地中创建虚拟机。所有VMX指令是禁止的。
4.执行I/O基准的指令在飞地中是禁止的。
在第一代飞地中,处理器可运行在环3,当进入飞地时IOPL被置为0。
当飞地运行在虚拟化或非虚拟化环境中时,为了保持编程环境,表错误!文档中没有指定样式的文本.35中列出的指令是不合法的。
表错误!文档中没有指定样式的文本.35飞地中不合法的指令
对飞地中的状态施加约束。当进入飞地时,GDTR.limit、LDTR.limit、IA32_EFER.SCE和IA32_SYSENTER_CS被保存在TCS区域中。本地值被清除。访问这些寄存器或造成对这些寄存器访问的指令将在飞地中失效。当离开飞地时,GDTR.limit、LDTR.limit、IA32_EFER.SCE和IA32_SYSENTER_CS被恢复。
表错误!文档中没有指定样式的文本.36-将不执行的指令
飞地的寿命被分成不同的几个阶段。第一阶段是飞地创建。第二阶段是飞地使用。最后一个阶段是飞地毁灭。
飞地的创建和使用需要OS/VMM的支持。尽管飞地因为安全性将不取决于OS/VMM,然而要求OS/VMM正确地维护某些硬件数据结构。OS/VMM维护这些指令的失败将不会导致安全性丧失,但可能造成飞地的全体失效。
若干指令支持飞地的证明、秘密数据的密封和解封以及经认证飞地的准许。
在第一阶段,飞地可安全地构建并且内部软件环境建立以由应用使用。三个指令用来创建飞地。第一指令ECREAATE设置最初的状态环境。该指令创建飞地密钥,加载、加密和完整性检查用来存储飞地数据结构的两个页。第二指令EADDPRE将数据页加至飞地。它将代码、堆栈和堆阵中所需的页加至飞地中。第三指令EINIT将内部软件环境设置成一已知状态。在该指令结束时,飞地已移动至第二阶段,即使用阶段。
在执行EINIT前,构造软件要么通过执行EMKPERMIT要么使用准许飞地已获得一准许。
通过EENTER指令进入飞地。该指令将机器转换到飞地模式。它将控制转移至预定义的入口。EEXIT指令从飞地返回至外部应用。EIRRET指令从中断出口返回到飞地中。
当经由EENTER或EIRET进入飞地时,通过指令执行下列操作。保存和清除GDTR.limit、LDTR.limit、IA32_EFER.SCE和IA32_SYSENTER_CS。在退出时恢复GDTR、LDTR、IA32_EFER以及IA32_SYSENTER_CS。
不存在用于毁灭飞地的指令。
EDBG_READ指令对调试飞地中的位置作出8字节读取。对于非调试飞地则不允许任何访问。EDBG_WRITE指令对调试飞地中的位置作出8字节写入。对非调试飞地不允许任何访问。
飞地页高速缓冲存储器(EPC)藉由2个指令管理。两个指令加载/存储EPC页(ELPG和EWBINVPG)。
EREPORT产生密文保护的结构,该结果保持飞地测量。EGETKEY提供检索不同类型飞地特定密钥的手段。EMKPERMIT用来创建未认证飞地的准许。
表错误!文档中没有指定样式的文本.3指令类属
2对内部无使用模型,但允许EMKPERMIT从内部执行时没有已知的损害
3将来版本可允许从环0进入飞地。
一旦中断,可在飞地中保存(并隐藏)处理器状态并随后将该状态清除。此外,甚至中断的返回地址也可被隐藏。
在执行飞地的同时发生中断可以操作系统预期的形式将信息推到中断堆栈以避免改变OS代码的需要。为此,指向蹦床(trampoline)码的指针被推至中断堆栈上作为RIP。该蹦床码最后借助具有特殊参数(q.v.)的EENTER指令返回至飞地。
拟使用的中断堆栈是使用与针对非SE模式相同的规则来选择的:
·如果存在特权级别改变,则中断堆栈将是与新环关联的一个。
·如果不存在特权级别改变,则使用当前未信任的堆栈。
·如果使用IA-32e IST机制,则使用该方法来选择中断堆栈。
图23示出在一个实施例中在通过堆栈切换中断之后的应用和中断堆栈。当前保存状态区帧2300包含RSP寄存器2305。线程控制结构2310能包含状态保存区2312和中断返回例程2314的计数。中断堆栈2330包含SS寄存器2332、RSP寄存器2334、标志寄存器2336、CS寄存器2338、指令寄存器2340以及误码2342。中断堆栈2330可将其RSP寄存器2334中的数据发送给应用堆栈2320以及保存状态区2300的计数。误码2342来自于推入2346后的RSP。中断路由例程2314和指令寄存器2340送出每线程的蹦床至uRST2344中。
在所有情形下,中断堆栈和推至其上的信息的选择与非SE操作一致。图23示出在具有堆栈切换中断后的应用和中断堆栈。没有堆栈切换的中断使用应用堆栈。另外,TCS指针置于RBX以供当中断后重新开始飞地时由EENTER指令将来使用。
TCS::IRR(中断返回例程)指向稍后返回到特定线程的每线程代码序列。该指针被推至中断堆栈作为返回RIP。这导致使IRET返回到执行中断返回代码(该代码包括专门的EENTER指令)所在的程序的一组数据结构。EENTER取在中断时间初始化的RBX寄存器(并由OS保持)并将其用作TCS以再次进入飞地。
RFLAGS中的下列位在寄存器被推至中断堆栈之前被清除:
CF进位标志 SF签名标志
PF奇偶标志 OF溢出标志
AF调节标志 DF方向标志
ZF零标志
图24示出在本发明一个实施例中实现多状态保存区域槽的堆栈的可能方法。线程控制结构2400可包含下一状态保存区域槽2402、当前状态保持区域槽2404以及状态保存区域槽2406。状态保存区域0 2410、状态保存区域1 2412以及状态保存区域N 2418是状态保存区域内的三个不同选择的位置。下一状态保存区域槽2402规定状态保存区域(状态保存区域0 2410)中使用的位置。当前状态保存区域槽2404指定用于状态保存区域(状态保存区域1 2412)的位置。状态保存区域槽2406指定用于状态保存区域(状态保存区域N 2418)的位置。
状态保存区域保持中断时的飞地状态。由于中断可被传递至可随后再次进入飞地的用户模式,因此SSA是如错误!基准源未找到中所示的多个SSA槽的堆栈。拟使用的状态存储区域的位置受TCS中三个变量控制:即状态保存存储槽的数目(NSSA)(定义状态保存区域堆栈中的槽总数)、当前状态保存存储槽(CSSA)(定义在下一中断使用的当前槽)、状态保存区域(SSA)(用来保存中断时的处理器状态的一组保存区域槽)。
当在飞地中的线程上执行的同时发生中断时,微代码通过检查TCS::SSA和TCS::CSSA来确定使用的保存区域。处理器状态被保存和清除(以避免泄漏秘密)并且TCS::CSSA被增1。如后面描述的那样,如果异常占据最后一个槽,则将不可能将该异常传递至飞地。
注意:在EENTER上,CSSA可小于NSSA,这确保有至少一个存储区域可供中断使用(除非EENTER正用来从中断返回)。
图25示出在本发明一个实施例中具有因为中断、故障和陷阱的状态转换的状态机的一部分。可能的状态是不活动的2500、活动的2510、异常的2520、经处理的(EENTER不合法)2530以及处理中的2540。当EENTER出发至TCS::ENTRY 2502时,不活动的2500转换至活动的2510。当EEXIT2504发生时,活动的2510转换至不活动的2500。当中断、故障或陷阱2512发生时,活动的2510转换至异常的2520。当EIRET 2514发生时,异常的2520转换至活动的2510。当EENTER出发至TCS::HANDLER 2524时,异常的2520转换至处理中的2540。当EIRET2522发生2522时,异常的2520转换至处理中的2540。当中断、故障或陷阱2526发生时,处理中的2540转换至异常的2520。当EEXIT 2532发生时,处理中的2540转换至经处理的2530。当处理飞地异常管理器和EIRET 2534中的中断时,经处理的2530转换至处理中的2540。当处理不来自飞地异常管理器的中断且EIRET 2534发生时,经处理的2530转换至活动的2510。虚线转换2522、2526、2534仅发生在当处理飞地异常管理器中的中断时。
错误!引用源未找到.示出飞地状态机应付中断的一部分。中断开始于选择性的堆栈切换以及将合成中断帧推至中断堆栈上。如果事件是中断,则飞地进入中断状态。如果事件是异常,则飞地进入异常状态。为了既确保飞地异常传递至飞地又防止由攻击应用代码传递假异常,要区别这两种状态。
在向中断状态的任何转变中,不可信代码(应用、OS或其两者)只能使用EENTER/RETURN_FROM_INTERRUPT重新开始飞地。
在向异常状态的任何转变中,不可信代码(应用、OS或其两者)可确定为:
·通过使用EIRET重新开始飞地以返回到中断的IP。这是如何处理页故障的一个例子。注意如果中断由故障造成并且不做任何事来校正故障状态,则将再次执行故障指令并且再次出故障。然而陷阱之后的EIRET将返回至陷阱指令之后的指令。
·调用飞地异常管理器。
·丢弃线程或飞地。
预期状态下的EENTER进至处理中的状态。EEXIT从陷阱管理器(处理中的状态)进至经处理的状态。ENTER/NORMAL在这种状态下是不合法的。来自蹦床的EIRET重新开始在最后一次中断时被推至SSA的状态;要么是活动的状态要么是处理中的状态。
安全飞地指令被分割成两个操作码,即特权的操作码和非特权的操作码。指令操作由调用指令时RAX中的值确定。
表错误!文档中没有指定样式的文本.-2飞地非特权的指令布局
表错误!文档中没有指定样式的文本.-3飞地特权的指令布局
ECREATE指令初始化受保护的SECS。源操作数指向page_info结构。内容页字段指向未经保护的SECS结构。SECS结构可以是页对齐的。SECS基值和边界值的低12位可以是0。SECS是EPC中的空槽的地址。sec_info是未经保护的sec_info结构的地址。相应的sec_info标志字段可正确地被初始化。
指令输入
RAX 0x0
RBX PAGE_INFO
指针
指令输出
如果指令失败,寄存器RAX.RAX包含误码。
指令操作
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成US#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
Rex:忽略的
受保护的模式异常
#GP(0) 如果当前特权级别不为0
#PF(故障码) 如果页故障出现在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD ECREATE指令在真实地址模式下不可识别
虚拟8086模式异常
#UD ECREATE指令在8086模式下不可识别
EADDPRE
指令描述
EADDPRE允许特权软件将飞地外的页复制至飞地中由lin_addr指定的页,并使用sec_info标志字段来设置飞地页的属性。
作为指令的一部分,页被散列并且得到的散列值在飞地测量寄存器中被扩展。
EADDPRE可仅在尚未被EINIT指令初始化的飞地上执行。
指令输入
RAX 0x1
RBX PAGE_INFO指针
RCX EPC线性地址
RDX SMAP指针
指令操作
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成US#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#GP(0) 如果当前特权级别不为0
#PF(故障码) 如果页故障出现在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD EADDPRE指令在真实地址模式下不可识别
虚拟8086模式异常
#UD EADDPRE指令在8086模式下不可识别
EADDPOST
指令描述
EALLOCATE允许特权软件初始化飞地的由lin_addr指定的SMAP条目并使用sec_info标志字段设置飞地页的属性。
在飞地能访问页之前,它可使用EACCEPT指令在飞地中接受页。EALLOCATE只能在已通过EINIT指令初始化的飞地上执行。
指令输入
RAX 0xa
RBX PAGE_INFO
指针
RCX EPC线性地址
RDX SMAP指针
指令操作
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成US#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#GP(0) 如果当前特权级别不为0
#PF(故障码) 如果页故障出现在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD EADDPOST指令在真实地址模式下不可识别
虚拟8086模式异常
#UD EADDPOST指令在8086模式下不可识别
EMKPERMIT
指令描述
认证一飞地或许可并从中产生一准许。如果rbx==NULL,则证书可由Intel签署。否则证书可由rbx准许中指示的密钥签署。
指令输入
LICENSE指针 | PERMIT指针(入) | PERMIT指针(出) |
指令操作
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成UD#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#GP(0) 如果当前特权级别不为0
#PF(故障码) 如果页故障出现在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD 该指令在真实地址模式下不可识别
虚拟8086模式异常
#UD 该指令在8086模式下不可识别
EINIT
指令描述
EINIT将飞地标记为在一软件环境中准备好运行,在结束成功初始化时,EENTER将对飞地准许。
指令输入
RAX 0x2
RBX SECS指针
RCX PERMIT指针
指令操作
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成UD#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#GP(0) 如果当前特权级别不为0
#PF(故障码) 如果页故障出现在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD 该指令在真实地址模式下不可识别
虚拟8086模式异常
#UD 该指令在8086模式下不可识别
ELPG
指令描述
该指令用来将页加载入飞地页高速缓冲存储器(EPC)。
指令输入
源页的线性地址:page_info
目的地的线性地址:epc_la
指令操作
返回:
如果成功,指令将ELFAGS寄存器中的Z标志置为0,否则将Z标志置为1。ENCLAVE_STATUS_MSR保持下列原因之一:
1.页验证失败
2.参数不被正确地对齐
3.Page_info参数因SECS负载而畸形
影响的标志
见操作
前缀用途
锁住:造成UD#
REP:造成UD#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#GP(0) 如果当前特权级别不为0
#PF(故障码) 如果页故障出现在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD 该指令在真实地址模式下不可识别
虚拟8086模式异常
#UD 该指令在8086模式下不可识别
EWRINVPG
指令描述
该指令用来将脏页从EPC回写至主存储器。
指令输入
page_info
epc_la
指令操作
返回:
如果成功,指令将ELFAGS寄存器中的Z标志置为0,否则将Z置为1。ENCLAVE_STATUS_MSR保持下列原因之一:
1.指定的EPC槽未被占据
2.参数未被正确地对齐
影响的标志
见操作
前缀用途
锁住:造成UD#
REP:造成UD#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#GP(0) 如果当前特权级别不为0
#PF(故障码) 如果页故障出现在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD 该指令在真实地址模式下不可识别
虚拟8086模式异常
#UD 该指令在8086模式下不可识别
EUPSMAP
指令描述
该指令检查和更新留驻在EPC中的飞地页的版本。
指令输入
leaf
epc_la
smap_la
指令操作
返回:
如果成功,指令将ELFAGS寄存器中的Z标志置为0,否则将Z置为1。ENCLAVE_STATUS_MSR保持下列原因之一:
1.TBD
影响的标志
见操作
前缀用途
锁住:造成UD#
REP:造成UD#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#GP(0) 如果当前特权级别不为0
#PF(故障码) 如果页故障出现在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD 该指令在真实地址模式下不可识别
虚拟8086模式异常
#UD 该指令在8086模式下不可识别
ERMOVE
指令描述
当将数据加载入EPC时,该指令更新SMAP。
指令输入
leaf
epc_la
smap_la
指令操作
返回:
如果成功,指令将ELFAGS寄存器中的Z标志置为0,否则将Z标志置为1。ENCLAVE_STATUS_MSR保持下列原因之一:
2.TBD
影响的标志
见操作
前缀用途
锁住:造成UD#
REP:造成UD#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#GP(0) 如果当前特权级别不为0
#PF(故障码) 如果页故障出现在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD 该指令在真实地址模式下不可识别
虚拟8086模式异常
#UD 该指令在8086模式下不可识别
EADDSMAP
指令描述
当飞地已初始化,该指令用来将新页添加至SMAP……
指令输入
page_info
epc_la
smap_la
指令操作
返回:
如果成功,指令将ELFAGS寄存器中的Z标志置为0,否则将Z标志置为1。ENCLAVE_STATUS_MSR保持下列原因之一:
3.TBD
影响的标志
见操作
前缀用途
锁住:造成UD#
REP:造成UD#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#GP(0) 如果当前特权级别不为0
#PF(故障码) 如果页故障出现在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD 该指令在真实地址模式下不可识别
虚拟8086模式异常
#UD 该指令在8086模式下不可识别
EMODIFY
指令描述
该指令修改SEC_INFO字段以允许飞地修改飞地中的页。该飞地请求改变页但随后可接受该改变以结束进程。
指令输入
SEC_INFO指针 | EPC线性地址 | 掩模 |
指令操作
返回:
如果成功,指令将ELFAGS寄存器中的Z标志置为0,否则将Z标志置为1。ENCLAVE_STATUS_MSR保持下列原因之一:
4.TBD
影响的标志
见操作
前缀用途
锁住:造成UD#
REP:造成UD#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#GP(0) 如果当前特权级别不为0
#PF(故障码) 如果页故障出现在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD 指令在真实地址模式下不可识别
虚拟8086模式异常
#UD 指令在8086模式下不可识别
EACCEPT
指令描述
飞地中的软件使用该指令以接受对SEC_INFO字段的改变。这允许SMAP更新至新的页类型。
指令输入
线性地址 | 标志 | 掩模 |
指令操作
返回:
如果成功,指令将ELFAGS寄存器中的Z标志置为0,否则将Z标志置为1。ENCLAVE_STATUS_MSR保持下列原因之一:
5.TBD
影响的标志
见操作
前缀用途
锁住:造成UD#
REP:造成UD#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#GP(0) 如果当前特权级别不为0
#PF(故障码) 如果页故障出现在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD 该指令在真实地址模式下不可识别
虚拟8086模式异常
#UD 该指令在8086模式下不可识别
EENTER
指令描述
EENTER指令将执行转移至飞地。在指令结束时,CPU在TCS oENTRY或oHANDLER中规定的IP运行在飞地模式。
EENTER检查TCS是有效和可用以供进入。TCS和相应的SSA可留驻在存储器中以使指令继续。
EENTER也可检查状态机以确定进入的类型并检查是否一个逻辑处理器在TCS中被同时激活。
RFLAGS.TF具有ENNTER上略为修改的动作。RFLAGS.TF被存储在TCS.SAVE_TF中并随后从TCS.TF加载。随后根据RFLAGS.TF的更新值有条件地生成调试异常。
如果飞地不处于调试模式,调试寄存器DR7被存储入TCS.DR7并被清除。对于IA32_DEBUGCTL_MSR也是如此。
指令输入
RAX 0x4
RBX TCS指针
指令输出
RCX EPC线性地址
指令操作
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成UD#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
RFLAGS.TF动作
在EENTER执行开始时RFLAGS.TF的值对EENTER完成时的陷阱没有任何影响。相反,从TCS加载的RFLAGS.TF的值判断是否采用一陷阱。
DR7动作
如果飞地不处于调试模式,则调试寄存器DR7被保存在TCS.DR7中并被清除。
IA32_DEBUG_CTL动作
如果飞地不处于调试模式,则IA32_DEBUG_CTL MSR被保存在TCS.DEBUG_CTL中并被清除。
受保护的模式异常
真实地址模式异常
#UD ECALL指令在真实地址模式下不可识别
虚拟8086模式异常
#UD ECALL指令在8086模式下不可识别
EEXIT
EEXIT退出到飞地之外。
指令描述
EEXIT禁用飞地模式并分支至RBX中指定的位置。
没有寄存器受该指令影响。如果秘密包含在任何寄存器中,飞地软件负有清除这些寄存器的飞地软件的责任。
RFLAGS.TF对EEXIT具有略微的修正动作。RFLAGS.TF从TCS.SAVE_TF被加载。调试异常随后根据RFLAGS.TF的更新值有条件地产生。
如果飞地不处于调试模式,则调试寄存器DR7从TCS.DR7被加载。这个动作和RFLAGS.TF的动作在???中更详细地记载。
指令输入
RAX 0x6
RBX 目标地址
指令操作
对RFLAGS.TF和RFLAGS.RF的正常处理现在进行;
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成US#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
RFLAGS.TF动作
在EEXIT执行开始时RFLAGS.TF的值对EEXIT完成时的陷阱没有任何影响。相反,从SSA加载的RFLAGS.TF的值判断是否采用一陷阱。
DR7动作
如果飞地不处于调试模式,则调试寄存器DR7被从TCS.DR7被加载。
IA32_DEBUG_CTL动作
如果飞地不处于调试模式,则IA32_DEBUG_CTL MSR从TCS.DEBUG_CTL被加载。
受保护的模式异常
真实地址模式异常
#UD EEXIT指令在真实地址模式下不可识别
虚拟8086模式异常
#UD EEXIT指令在8086模式下不可识别
EIRET
指令描述
EIRET指令使用之前存储在SSA中的机器状态重新开始执行由于异常或中断而中断的飞地。
EIRET检查该TCS是有效的和可供重新开始的。TCS和相应的SSA可留驻在存储器中以使指令继续。
EIRET也检查状态机以确定进入类型并检查每次是否只有一个逻辑处理器在TCS中活动。
如果RFLAGS.TF在EIRET被置位,调试异常将在指令结束时发生,即正常TF动作。该异常将被报告为已发生在飞地中(以普通SE定义的形式),其中尚未执行任何指令。由于EIRET从SSA恢复RFLAGS,则TF在EIRET结束时变得置位。在这种情形下,TF将影响下列指令;同样是正常TF动作。
指令输入
RAX 0x5
RBX TCS指针
指令操作
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成UD#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
RFLAGS.TF动作
如果RFLAGS.TF在EIRET指令开始时被置位,则#DB将在结束后发生。将在如果没有置位TF则控制已转移至的RIP报告异常。在效果上,飞地中将没有前向进度发生。
作为EIRET的正常操作的一部分,RFLAGS从SSA副本恢复。如果结果TF被置位,则#DB将在飞地中执行目标指令后发生。
这些动作与正常IA IRET指令的动作一致。
DR7动作
DR7从之前在最后一次中断或异常中存储的SSA副本中恢复。
IA32_DEBUG_CTL动作
IA32_DEBUG_CTL MSR从之前在最后一次中断或异常中存储的SSA副本中恢复。
受保护的模式异常
真实地址模式异常
#UD ECALL指令在真实地址模式下不可识别
虚拟8086模式异常
#UD ECALL指令在8086模式下不可识别
EREPORT
EREPORT指令报告关于飞地内容的测量
指令描述
EREPORT检索飞地测量寄存器、其能力以及调试状态(标志)。所有这些值使用对称消息认证码受到保护,该对称消息认证码受到保护可使用REPORT密钥验证。需要REPORT密钥的飞地可在它们的SECS中具有合适的能力集以使用EGETKEY指令检索它。
指令的结果被沉积在目的地位置,output_buffer_la。
指令输入
RAX 0x0
RBX output_buffer_la
RCX userInput_la
指令操作
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成US#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#PF(故障码) 如果页故障发生在访问存储器操作数中。
#UD 如果飞地不被启用
真实地址模式异常
#UD EREPORT指令在真实地址模式下不可识别
虚拟8086模式异常
#UD EREPORT指令在8086模式下不可识别
ERDMR
ERDMR指令从飞地SECS读出测量寄存器值。
指令描述
该指令只能从飞地外部执行。如果SECS指向一有效SECS页,则该指令将飞地测量寄存器的内容输出至由output_buffer_la指定的地址。
指令输入
RAX 0x8
RBX sec_la
RCX output_buffer_la
指令操作
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成US#
区段超越:N/A
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#PF(故障码) 如果页故障发生在访问存储器操作数中。
#UD 如果飞地不被启用
真实地址模式异常
#UD EREPORT指令在真实地址模式下不可识别
虚拟8086模式异常
#UD EREPORT指令在8086模式下不可识别
EGETKEY
由飞地码使用以从处理器密钥层级返回一特定密钥。
指令描述
所需的密钥是使用密钥请求结构规定的,其地址作为输入提供。该地址可以是天然对齐的。
输出一直是256位数据值。output_la对该值需要天然地对齐。
输入
RAX 0x02
RBX request_la
RCX output_buffer_la
指令操作
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成US#
区段超越:不适用
操作数大小:造成UD#
地址大小:忽略的
受保护的模式异常
#PF(故障码) 如果页故障发生在访问存储器操作数中。
#UD 如果飞地不被启用
真实地址模式异常
#UD EGETKEY指令在真实地址模式下不可识别
虚拟8086模式异常
#UD EGETKEY指令在8086模式下不可识别
ERDTCSPTR
指令描述
ERDTCSPTR指令用来将当前TCS线性地址读入RBX。
指令输出
RAX 0x3
指令输出
RBX 当前TCS指针
指令操作
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成US#
区段超越:不适用
操作数大小:造成的UD#
地址大小:忽略的
受保护的模式异常
#UD 如果飞地不被启用
#GP(0) 如果在飞地外执行
真实地址模式异常
#UD ERDTCSPTR指令在真实地址模式下不可识别
虚拟8086模式异常
#UD ERDTCSPTR指令在8086模式下不可识别
EDBGRD
指令描述
EDBGRD指令用来从调试飞地中读取8个字节
指令输入
epc_la
dest
指令操作
影响的标志
无
前缀用途
锁住:造成UD#
REP:造成UD#
区段超越:不适用
操作数大小:造成的UD#
地址大小:忽略的
受保护的模式异常
#GP(0) 如果飞地不是标记的调试
#PF(故障码) 如果页故障发生在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD EDBGRD指令在真实地址模式下不可识别
虚拟8086模式异常
#UD EDBGRD指令在8086模式下不可识别
EDBGWR
指令描述
EDBGWR指令用来将8个字节写至调试飞地页
指令输入
src
epc_la
指令操作
影响的标志
无
前缀用途
TBD
受保护的模式异常
GP(0) 如果飞地不是标记的调试
#PF(故障码) 如果页故障发生在访问存储器操作数中
#UD 如果飞地不被启用
真实地址模式异常
#UD EDBGWR指令在真实地址模式下不可识别
虚拟8086模式异常
#UD EDBGWRITE指令在8086模式下不可识别
ERDINFO
ERDINFO指令返回关于飞地页高速缓冲存储器的内容的信息。
指令描述
如果在飞地外执行,EREPORT向飞地测量寄存器报告其能力和调试状态(标志)。所有这些值使用对称消息认证码受到保护,该对称消息认证码使用EVERIFYREPORT指令被验证。
该指令的结果被沉积在目的地位置output_buffer_la。
指令输入
epc_la //EPC中的页的线性地址
page_info //page_info中的SEC_INFO字段可将有效指针提
供给//天然对齐的SEC_INFO结构
指令操作
受影响的标志
RFLAGS.ZF
前缀用途
锁住:造成UD#
REP:造成US#
区段超越:不适用
操作数大小:造成的UD#
地址大小:忽略的
受保护的模式异常
真实地址模式异常
#UD EREPORT指令在真实地址模式下不可识别
虚拟8086模式异常
#UD EREPORT指令在8086模式下不可识别
例程参照
------------------------------------------------------------------------
退出
该章提供用于退出处理的伪代码。该代码是当存在从未列入飞地码计划的飞地退出时调用的。飞地执行在其停止在的位置重新开始。需要重新开始的信息被存储在外侧堆栈上。处理器的架构状态被保存在适当的保存区中。
操作
获得读取器锁
RW锁住启用逻辑处理器以访问共享资源并提供线程可能访问共享资源的两种模式:
·共享模式允许对多个读取器逻辑处理器共享的只读访问,这允许它们同时从共享的资源读数据。
·排它模式允许一次对一个写入器逻辑的读/写访问。当已在排它模式下获得锁时,没有其它线程能够访问共享的资源,直到写入器解除锁为止。
单个RW锁能以任一模式获得;读取器逻辑处理器能以共享模式获取它,相反写入器逻辑处理器能以排它模式获得它。逻辑处理器以公平顺序获得请求拥有权。
下面是RW锁函数。
acquire_reader_lock,release_reader_lock,acquire_writer_lock,release_lock
子例程描述
以共享模式获得锁
子例程输入
volatile se_rw_lock_t*l
子例程操作
影响的标志
非
异常
否
解除读取器锁
子例程描述
解除以共享模式获得的锁
子例程输入
volatile se_rw_lock_t*l
子例程操作
atomic_inc16((uint16*)&l->curr);/*对写入器撤回读*/
受影响的标志
无
异常
无
获得写入器锁
子例程描述
获得排它模式下的锁
子例程输入
volatile se_rw_lock_t*l
子例程操作
受影响的标志
无
异常
无
解除写入器锁
子例程描述
解除以排它模式获得的锁
子例程输入
volatile se_rw_lock_t*l
子例程操作
受影响的标志
无
异常
无
xutranslate
子例程描述
该子例程事实上是一硬件添加,籍此u代码对u代码揭露PMH地址翻译功能。XUTRANSLATE本质上是取PMH上下文和线性地址作为输入并产生最终物理地址作为输出的uOp。如果PMH在页表浏览过程中遇到任何故障条件,则将它们报告给u代码。该uOP的准确细节超出本文档的范围。
子例程输入
TBD
子例程操作
受影响的标志
无
异常
无
推导密钥
子例程描述
该子例程用来通过在具有标识密钥的推导缓冲器上执行CMAC操作而创建密钥。推导缓冲器需要是多个128位。
子例程输入
pBaseKey-拟使用的基密钥
derivationBuffer-拟散列的固定大小数据段
子例程操作
受影响的标志
无
异常
无。
Claims (14)
1.一种处理器,包括:
执行逻辑单元,其被配置为用于执行:
至少第一指令以在执行访问受保护数据的程序期间在飞地页高速缓冲存储器(EPC)和系统存储器之间移动受保护的数据,其中所述程序运行在受保护模式中;以及
至少第二指令以允许调试一个或多个安全飞地,其中所述至少第二指令仅对已经允许被调试的一个或多个飞地篡夺飞地安全性,
其中安全飞地是一组指令,该指令为应用提供安全场所以执行代码并将数据存储入OS进程的上下文中,飞地是在该环境中执行的一个应用。
2.如权利要求1所述的处理器,其特征在于,使用安全映射(SMAP)以用于当所述程序被存储在硬盘驱动器或受保护的存储器中时帮助确保所述程序的完整性。
3.如权利要求1所述的处理器,其特征在于,所述执行逻辑单元被配置为用于执行至少第三指令以识别在所述安全飞地中运行的软件线程,其中所述第三指令通知用户程序关于所述软件线程的身份。
4.如权利要求1所述的处理器,其特征在于,所述执行逻辑单元被配置为用于执行至少第三指令以动态地访问至少一个信息字段以确定存储在安全飞地中的数据的完整性,其中所述至少一个信息字段包括安全映射(SMAP)字段和安全信息(SEC_INFO)字段。
5.如权利要求1所述的处理器,其特征在于,所述执行逻辑单元被配置为用于执行至少第三指令以将所述安全飞地的状态报告给本地代理或远程代理,其中所述安全飞地被存储在存储器中。
6.如权利要求1所述的处理器,其特征在于,使用密文存储器空隙(CMA)以用于当软件程序正在执行时保护所述软件程序不受攻击;使用安全映射(SMAP)以用于当所述软件程序不在执行中时保护所述软件程序。
7.如权利要求1所述的处理器,其特征在于,所述执行逻辑单元被配置为用于执行至少一个安全飞地访问指令以分配或解除分配安全飞地内的存储器或软件线程。
8.如权利要求1所述的处理器,其特征在于:使用层级保护树,SMAP,以用于允许在单个处理器周期中所述安全飞地内的多重存储器更新。
9.如权利要求1所述的处理器,其特征在于,所述执行逻辑单元被配置为用于执行第三指令以将唯一密钥提供给所述安全飞地。
10.如权利要求1所述的处理器,其特征在于,所述执行逻辑单元被配置为用于执行至少第三指令以构建拟由不可信代理管理的可信环境。
11.如权利要求1所述的处理器,其特征在于,所述执行逻辑单元被配置为用于执行至少第三指令以确定访问所述安全飞地的许可的有效性,其中所述第三指令将所述飞地的大小与许可证书规定的大小作比较以确定所述许可的有效性。
12.如权利要求1所述的处理器,其特征在于,所述执行逻辑单元被配置为用于允许对安全飞地的用户层策略管理,其中所述执行逻辑单元受一个或多个控制位控制。
13.如权利要求1所述的处理器,其特征在于,所述执行逻辑单元被配置为用于执行至少第三指令以允许对所述安全飞地的至少一个实例进行访问,其中所述安全飞地被授权给用户。
14.如权利要求1所述的处理器,其特征在于,所述执行逻辑单元被配置为用于执行至少第三指令以分别将存储器页分配至飞地页高速缓冲存储器(EPC),或将存储器页从飞地页高速缓冲存储器(EPC)解除分配。
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
PCT/US2009/069212 WO2011078855A1 (en) | 2009-12-22 | 2009-12-22 | Method and apparatus to provide secure application execution |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102473224A CN102473224A (zh) | 2012-05-23 |
CN102473224B true CN102473224B (zh) | 2016-10-12 |
Family
ID=44196072
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200980160114.XA Expired - Fee Related CN102473224B (zh) | 2009-12-22 | 2009-12-22 | 提供安全应用执行的方法和装置 |
Country Status (7)
Country | Link |
---|---|
JP (1) | JP5443599B2 (zh) |
KR (1) | KR101457355B1 (zh) |
CN (1) | CN102473224B (zh) |
BR (1) | BRPI0924512A2 (zh) |
DE (1) | DE112009005466T5 (zh) |
GB (2) | GB2550698B (zh) |
WO (1) | WO2011078855A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019120335A3 (en) * | 2019-04-19 | 2020-02-13 | Alibaba Group Holding Limited | Methods and devices for executing trusted applications on processor with support for protected execution environments |
Families Citing this family (67)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9087200B2 (en) | 2009-12-22 | 2015-07-21 | Intel Corporation | Method and apparatus to provide secure application execution |
US8739177B2 (en) | 2010-06-21 | 2014-05-27 | Intel Corporation | Method for network interface sharing among multiple virtual machines |
US9053042B2 (en) | 2012-06-27 | 2015-06-09 | Intel Corporation | Method, system, and device for modifying a secure enclave configuration without changing the enclave measurement |
US9519803B2 (en) | 2012-11-30 | 2016-12-13 | Intel Corporation | Secure environment for graphics processing units |
CA2892608C (en) | 2012-12-07 | 2021-10-19 | Vertex Pharmaceuticals Incorporated | Compounds useful as inhibitors of atr kinase |
US9747102B2 (en) * | 2012-12-28 | 2017-08-29 | Intel Corporation | Memory management in secure enclaves |
US9323686B2 (en) * | 2012-12-28 | 2016-04-26 | Intel Corporation | Paging in secure enclaves |
US20140189246A1 (en) * | 2012-12-31 | 2014-07-03 | Bin Xing | Measuring applications loaded in secure enclaves at runtime |
US9053059B2 (en) * | 2013-03-06 | 2015-06-09 | Intel Corporation | Roots-of-trust for measurement of virtual machines |
US9058494B2 (en) * | 2013-03-15 | 2015-06-16 | Intel Corporation | Method, apparatus, system, and computer readable medium to provide secure operation |
US9430384B2 (en) * | 2013-03-31 | 2016-08-30 | Intel Corporation | Instructions and logic to provide advanced paging capabilities for secure enclave page caches |
US9087202B2 (en) | 2013-05-10 | 2015-07-21 | Intel Corporation | Entry/exit architecture for protected device modules |
WO2014201059A1 (en) * | 2013-06-10 | 2014-12-18 | Certimix, Llc | Secure storing and offline transfering of digitally transferable assets |
US9338918B2 (en) | 2013-07-10 | 2016-05-10 | Samsung Electronics Co., Ltd. | Socket interposer and computer system using the socket interposer |
US9698989B2 (en) * | 2013-07-23 | 2017-07-04 | Intel Corporation | Feature licensing in a secure processing environment |
US20150033034A1 (en) * | 2013-07-23 | 2015-01-29 | Gideon Gerzon | Measuring a secure enclave |
US9767044B2 (en) * | 2013-09-24 | 2017-09-19 | Intel Corporation | Secure memory repartitioning |
US9501668B2 (en) | 2013-09-25 | 2016-11-22 | Intel Corporation | Secure video ouput path |
WO2015060858A1 (en) * | 2013-10-24 | 2015-04-30 | Intel Corporation | Methods and apparatus for protecting software from unauthorized copying |
US10121144B2 (en) * | 2013-11-04 | 2018-11-06 | Apple Inc. | Using biometric authentication for NFC-based payments |
CN105723377B (zh) * | 2013-12-17 | 2019-06-04 | 英特尔公司 | 供内核模式应用使用的安全区域 |
US9514317B2 (en) * | 2013-12-19 | 2016-12-06 | Intel Corporation | Policy-based trusted inspection of rights managed content |
KR101883816B1 (ko) * | 2013-12-19 | 2018-07-31 | 인텔 코포레이션 | 클라이언트 디바이스 상에서의 다수의 디지털 저작권 관리 프로토콜 지원 기술 |
US9448950B2 (en) | 2013-12-24 | 2016-09-20 | Intel Corporation | Using authenticated manifests to enable external certification of multi-processor platforms |
US9413765B2 (en) | 2014-03-25 | 2016-08-09 | Intel Corporation | Multinode hubs for trusted computing |
US9864861B2 (en) | 2014-03-27 | 2018-01-09 | Intel Corporation | Object oriented marshaling scheme for calls to a secure region |
US9705892B2 (en) | 2014-06-27 | 2017-07-11 | Intel Corporation | Trusted time service for offline mode |
US9703733B2 (en) * | 2014-06-27 | 2017-07-11 | Intel Corporation | Instructions and logic to interrupt and resume paging in a secure enclave page cache |
CN105573831B (zh) * | 2014-10-13 | 2019-11-26 | 龙芯中科技术有限公司 | 数据转移方法和装置 |
US10181027B2 (en) * | 2014-10-17 | 2019-01-15 | Intel Corporation | Interface between a device and a secure processing environment |
US9940456B2 (en) | 2014-12-16 | 2018-04-10 | Intel Corporation | Using trusted execution environments for security of code and data |
US9710622B2 (en) * | 2015-02-23 | 2017-07-18 | Intel Corporation | Instructions and logic to fork processes of secure enclaves and establish child enclaves in a secure enclave page cache |
US9606940B2 (en) | 2015-03-27 | 2017-03-28 | Intel Corporation | Methods and apparatus to utilize a trusted loader in a trusted computing environment |
US9875189B2 (en) | 2015-06-12 | 2018-01-23 | Intel Corporation | Supporting secure memory intent |
US9716710B2 (en) * | 2015-06-26 | 2017-07-25 | Intel Corporation | Technologies for virtualized access to security services provided by a converged manageability and security engine |
US9996479B2 (en) * | 2015-08-17 | 2018-06-12 | Micron Technology, Inc. | Encryption of executables in computational memory |
US10061941B2 (en) | 2015-08-19 | 2018-08-28 | Altera Corporation | Systems and methods for multiport to multiport cryptography |
US10031861B2 (en) | 2015-09-25 | 2018-07-24 | Intel Corporation | Protect non-memory encryption engine (non-mee) metadata in trusted execution environment |
US10846409B2 (en) * | 2015-11-19 | 2020-11-24 | Nagravision S.A. | Method to verify the execution integrity of an application in a target device |
US9798641B2 (en) * | 2015-12-22 | 2017-10-24 | Intel Corporation | Method to increase cloud availability and silicon isolation using secure enclaves |
US10503931B2 (en) * | 2016-05-09 | 2019-12-10 | Arris Enterprises Llc | Method and apparatus for dynamic executable verification |
IE20170239A1 (en) | 2016-11-14 | 2018-05-16 | Google Llc | System of Enclaves |
US10324857B2 (en) * | 2017-01-26 | 2019-06-18 | Intel Corporation | Linear memory address transformation and management |
CN108469986B (zh) * | 2017-02-23 | 2021-04-09 | 华为技术有限公司 | 一种数据迁移方法及装置 |
GB2564097B (en) * | 2017-06-28 | 2019-10-23 | Advanced Risc Mach Ltd | Memory region locking |
GB2563882B (en) * | 2017-06-28 | 2019-10-23 | Advanced Risc Mach Ltd | Interrupting sequences of command actions performed upon memory regions |
CN110785746B (zh) | 2017-06-28 | 2024-04-12 | Arm有限公司 | 存储器区域锁定 |
CN111259380B (zh) * | 2017-08-22 | 2021-02-12 | 海光信息技术股份有限公司 | 内存页转移方法和函数调用方法 |
KR102080497B1 (ko) * | 2017-10-31 | 2020-02-24 | 삼성에스디에스 주식회사 | 멀티 채널 블록 체인 기반 시스템의 채널간 데이터 교환 방법 및 그 시스템 |
US11943368B2 (en) | 2017-11-03 | 2024-03-26 | Microsoft Technology Licensing, Llc | Provisioning trusted execution environment based on chain of trust including platform |
US20190140846A1 (en) * | 2017-11-03 | 2019-05-09 | Microsoft Technology Licensing, Llc | Provisioning trusted execution environment(s) based on chain of trust including platform |
US10867092B2 (en) | 2017-12-16 | 2020-12-15 | Intel Corporation | Avoiding asynchronous enclave exits based on requests to invalidate translation lookaside buffer entries |
US10552344B2 (en) | 2017-12-26 | 2020-02-04 | Intel Corporation | Unblock instruction to reverse page block during paging |
US10970390B2 (en) | 2018-02-15 | 2021-04-06 | Intel Corporation | Mechanism to prevent software side channels |
US10838773B2 (en) * | 2018-03-30 | 2020-11-17 | Intel Corporation | Techniques for dynamic resource allocation among cryptographic domains |
US11556437B2 (en) | 2018-08-22 | 2023-01-17 | Intel Corporation | Live migration of virtual devices in a scalable input/output (I/O) virtualization (S-IOV) architecture |
CN111614464B (zh) * | 2019-01-31 | 2023-09-29 | 创新先进技术有限公司 | 区块链中安全更新密钥的方法及节点、存储介质 |
CN110032883B (zh) * | 2019-01-31 | 2020-05-29 | 阿里巴巴集团控股有限公司 | 区块链中实现隐私保护的方法、系统和节点 |
CN110008736A (zh) * | 2019-01-31 | 2019-07-12 | 阿里巴巴集团控股有限公司 | 区块链中实现隐私保护的方法及节点、存储介质 |
CN110032885B (zh) * | 2019-02-19 | 2020-03-06 | 阿里巴巴集团控股有限公司 | 区块链中实现隐私保护的方法、节点和存储介质 |
CN109901880B (zh) * | 2019-02-28 | 2020-11-20 | 瑞芯微电子股份有限公司 | 一种spinlock硬件电路及电子设备 |
CN110069920A (zh) * | 2019-03-06 | 2019-07-30 | 上海交通大学 | 基于虚拟化保证sgx安全性的方法和系统 |
CN110096887B (zh) | 2019-03-22 | 2020-06-30 | 阿里巴巴集团控股有限公司 | 一种可信计算方法及服务器 |
US11044080B2 (en) | 2019-06-24 | 2021-06-22 | International Business Machines Corporation | Cryptographic key orchestration between trusted containers in a multi-node cluster |
JP6885640B1 (ja) * | 2020-10-01 | 2021-06-16 | 株式会社ラムダシステムズ | 画像処理装置 |
US11792644B2 (en) * | 2021-06-21 | 2023-10-17 | Motional Ad Llc | Session key generation for autonomous vehicle operation |
CN113821835B (zh) * | 2021-11-24 | 2022-02-08 | 飞腾信息技术有限公司 | 密钥管理方法、密钥管理装置和计算设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101116081A (zh) * | 2005-02-11 | 2008-01-30 | 通用数据保护公司 | 用于微处理器数据安全的方法和系统 |
CN101268650A (zh) * | 2005-12-08 | 2008-09-17 | 艾格瑞系统有限公司 | 在微控制器中用于数据安全性处理的方法和装置 |
CN101454751A (zh) * | 2006-05-26 | 2009-06-10 | 英特尔公司 | 在点对点互连系统上的安全环境初始化指令的执行 |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP4098478B2 (ja) * | 2001-01-31 | 2008-06-11 | 株式会社東芝 | マイクロプロセッサ |
JP2002353960A (ja) * | 2001-05-30 | 2002-12-06 | Fujitsu Ltd | コード実行装置およびコード配布方法 |
JP4263976B2 (ja) * | 2003-09-24 | 2009-05-13 | 株式会社東芝 | オンチップマルチコア型耐タンパプロセッサ |
US7934076B2 (en) * | 2004-09-30 | 2011-04-26 | Intel Corporation | System and method for limiting exposure of hardware failure information for a secured execution environment |
JP2008530663A (ja) * | 2005-02-11 | 2008-08-07 | ユニバーサル データ プロテクション コーポレーション | マイクロプロセッサのデータセキュリティの方法およびシステム |
JP4795812B2 (ja) * | 2006-02-22 | 2011-10-19 | 富士通セミコンダクター株式会社 | セキュアプロセッサ |
JP2008033457A (ja) * | 2006-07-26 | 2008-02-14 | Internatl Business Mach Corp <Ibm> | 暗号化ソフトウェアを処理する方法及び中央処理装置 |
JP4912921B2 (ja) * | 2007-02-27 | 2012-04-11 | 富士通セミコンダクター株式会社 | セキュアプロセッサシステム、セキュアプロセッサ及びセキュアプロセッサシステムの制御方法 |
-
2009
- 2009-12-22 JP JP2012516046A patent/JP5443599B2/ja not_active Expired - Fee Related
- 2009-12-22 BR BRPI0924512A patent/BRPI0924512A2/pt not_active Application Discontinuation
- 2009-12-22 DE DE112009005466T patent/DE112009005466T5/de not_active Withdrawn
- 2009-12-22 GB GB1709341.0A patent/GB2550698B/en not_active Expired - Fee Related
- 2009-12-22 CN CN200980160114.XA patent/CN102473224B/zh not_active Expired - Fee Related
- 2009-12-22 KR KR1020127016450A patent/KR101457355B1/ko active IP Right Grant
- 2009-12-22 GB GB1118724.2A patent/GB2481563B/en not_active Expired - Fee Related
- 2009-12-22 WO PCT/US2009/069212 patent/WO2011078855A1/en active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101116081A (zh) * | 2005-02-11 | 2008-01-30 | 通用数据保护公司 | 用于微处理器数据安全的方法和系统 |
CN101268650A (zh) * | 2005-12-08 | 2008-09-17 | 艾格瑞系统有限公司 | 在微控制器中用于数据安全性处理的方法和装置 |
CN101454751A (zh) * | 2006-05-26 | 2009-06-10 | 英特尔公司 | 在点对点互连系统上的安全环境初始化指令的执行 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2019120335A3 (en) * | 2019-04-19 | 2020-02-13 | Alibaba Group Holding Limited | Methods and devices for executing trusted applications on processor with support for protected execution environments |
Also Published As
Publication number | Publication date |
---|---|
GB201709341D0 (en) | 2017-07-26 |
JP2012530961A (ja) | 2012-12-06 |
DE112009005466T5 (de) | 2012-10-31 |
KR101457355B1 (ko) | 2014-11-04 |
GB2481563A (en) | 2011-12-28 |
JP5443599B2 (ja) | 2014-03-19 |
GB2550698B (en) | 2018-04-11 |
WO2011078855A9 (en) | 2011-09-09 |
GB2550698A (en) | 2017-11-29 |
GB2481563B (en) | 2017-07-19 |
BRPI0924512A2 (pt) | 2016-03-01 |
KR20120099472A (ko) | 2012-09-10 |
GB201118724D0 (en) | 2011-12-14 |
WO2011078855A1 (en) | 2011-06-30 |
CN102473224A (zh) | 2012-05-23 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102473224B (zh) | 提供安全应用执行的方法和装置 | |
US10885202B2 (en) | Method and apparatus to provide secure application execution | |
US9904632B2 (en) | Technique for supporting multiple secure enclaves | |
US10325118B2 (en) | Cryptographic cache lines for a trusted execution environment | |
Götzfried et al. | Cache attacks on Intel SGX | |
CN108509250A (zh) | 具有受保护的访客机验证主机控制的安全公共云 | |
US9276750B2 (en) | Secure processing environment measurement and attestation | |
CN109565444A (zh) | 安全公共云 | |
US9684608B2 (en) | Maintaining a secure processing environment across power cycles | |
TWI608378B (zh) | 裝置與安全處理環境之間的介面 | |
US20230269076A1 (en) | Creating, using, and managing protected cryptography keys | |
JP6068325B2 (ja) | セキュアなアプリケーションの実行を提供するプロセッサ | |
JP5316592B2 (ja) | セキュアプロセッサ用プログラム | |
JP6777288B2 (ja) | プロセッサ | |
CN114692231A (zh) | 用于针对硬件重放攻击和存储器访问模式泄漏的提高的恢复力的存储器地址总线保护 | |
JP6480403B2 (ja) | 装置 | |
JP6085320B2 (ja) | プロセッサ、プログラム、システム及び方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20161012 Termination date: 20191222 |