首页> 中国专利> ISA可访问物理不可克隆功能

ISA可访问物理不可克隆功能

摘要

本公开提供了ISA可访问物理不可克隆功能。描述了用于利用由物理不可克隆功能(PUF)生成的密钥来对数据加密的技术。根据本公开的一种装置可包括解码器电路来对指令解码并且生成解码的指令。解码的指令包括操作对象和操作码。操作码表明执行电路将利用由PUF生成的密钥来对数据加密。该装置还可包括执行电路来根据操作码来执行解码的指令以对数据加密,来利用由PUF生成的密钥来生成加密数据。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-07-01

    公开

    发明专利申请公布

说明书

技术领域

本公开涉及计算机领域,更具体地涉及指令集体系结构(ISA)可访问物理不可克隆功能。

背景技术

物理不可克隆功能(physical unclonable function,PUF)是物理物体,其对于给定的输入和条件(挑战),提供物理定义的输出(响应),该输出(响应)作为半导体器件(例如,处理器)的唯一标识符。示例PUF是晶体管器件的阵列,其响应是基于半导体制造期间自然发生的独特物理变化的。由于这种独特的响应,PUF提供了平台独特的熵,这可被用于生成不可克隆的加密密钥。例如,在(跨启动生成的相同值)上。因为PUF生成的熵对于平台(例如,桌面型计算机、膝上型计算机、平板计算机,等等)是独特的,所以在不同平台上使用的相同PUF电路将生成不同的熵,这使得PUF生成的加密密钥是不可克隆的。

发明内容

本公开的一方面提供了一种装置,包括:解码器电路,用于对单个指令解码以生成解码的指令,所述解码的指令包括:1)用于标识第一目的地操作对象的一个或多个字段,2)用于标识第二目的地操作对象的一个或多个字段,所述第二目的地操作对象用于存储输出数据结构或者位置,所述输出数据结构在所述指令执行之后具有解密的数据,所述位置用于存储在所述指令执行之后具有解密的数据的数据结构,3)用于标识源操作对象的一个或多个字段,其中所述源操作对象用于存储要被用于解密过程中的输入数据结构或者存储要被用于解密过程中的输入数据结构的位置,以及4)用于操作码的一个或多个字段,所述操作码表明执行电路至少:用物理不可克隆功能(PUF)生成的加密密钥对来自所述输入数据结构的秘密信息进行加密,将包装的秘密信息绑定到目标,更新所述输入数据结构,在更新的数据结构上生成MAC,将所述MAC存储在所述输入数据结构中以生成包装的输出数据结构,根据所述第二目的地操作对象对所述指令的用途来存储所述包装的输出数据结构,所述包装的输出数据结构具有加密的秘密信息和对所述目标的指示;以及执行电路,用于根据所述操作码执行所述解码的指令。

本公开的一方面提供了一种方法,包括:对单个指令解码以生成解码的指令,所述解码的指令包括:1)用于标识第一目的地操作对象的一个或多个字段,2)用于标识第二目的地操作对象的一个或多个字段,所述第二目的地操作对象用于存储输出数据结构或者位置,所述输出数据结构在所述指令执行之后具有解密的数据,所述位置用于存储在所述指令执行之后具有解密的数据的数据结构,3)用于标识源操作对象的一个或多个字段,其中所述源操作对象用于存储要被用于解密过程中的输入数据结构或者存储要被用于解密过程中的输入数据结构的位置,以及4)用于操作码的一个或多个字段,所述操作码表明执行电路至少:用物理不可克隆功能(PUF)生成的加密密钥对来自所述输入数据结构的秘密信息进行加密,将包装的秘密信息绑定到目标,更新所述输入数据结构,在更新的数据结构上生成MAC,将所述MAC存储在所述输入数据结构中以生成包装的输出数据结构,根据所述第二目的地操作对象对所述指令的用途来存储所述包装的输出数据结构,所述包装的输出数据结构具有加密的秘密信息和对所述目标的指示;以及根据所述操作码执行所述解码的指令。

本公开的一方面提供了一种系统,包括:存储器,用于存储单个指令的实例;解码器电路,用于对所述单个指令的实例解码以生成解码的指令,所述解码的指令包括:1)用于标识第一目的地操作对象的一个或多个字段,2)用于标识第二目的地操作对象的一个或多个字段,所述第二目的地操作对象用于存储输出数据结构或者位置,所述输出数据结构在所述指令执行之后具有解密的数据,所述位置用于存储在所述指令执行之后具有解密的数据的数据结构,3)用于标识源操作对象的一个或多个字段,其中所述源操作对象用于存储要被用于解密过程中的输入数据结构或者存储要被用于解密过程中的输入数据结构的位置,以及4)用于操作码的一个或多个字段,所述操作码表明执行电路至少:用物理不可克隆功能(PUF) 生成的加密密钥对来自所述输入数据结构的秘密信息进行加密,将包装的秘密信息绑定到目标,更新所述输入数据结构,在更新的数据结构上生成 MAC,将所述MAC存储在所述输入数据结构中以生成包装的输出数据结构,根据所述第二目的地操作对象对所述指令的用途来存储所述包装的输出数据结构,所述包装的输出数据结构具有加密的秘密信息和对所述目标的指示;以及执行电路,用于根据所述操作码执行所述解码的指令。

附图说明

将参考附图描述根据本公开的各种实施例,其中:

图1是根据本公开的实现方式使用TD在虚拟化系统中提供隔离的计算系统的示意性框图;

图2(A)根据本公开实施例图示了使用PUF来生成和使用用于包装和解包数据的密钥的示例;

图2(B)根据本公开实施例图示了用于包装和解包秘密的示例过程;

图2(C)根据本公开实施例图示了用于包装和解包秘密的另一示例过程;

图3图示了处理指令(例如SV-PUF指令)的硬件的实施例;

图4是图示出表示包装数据要被绑定到的平台/处理器配置的比特向量的功能框图;

图5图示了处理器执行的处理WRP指令的方法的实施例;

图6(A)-(B)根据本公开实施例图示了用于包装(WRP)指令的执行的方法;

图7图示了用于WRP指令的执行的伪代码的实施例;

图8图示了处理UNWRP指令的实施例;

图9(A)-(B)根据本公开实施例图示了由处理器执行的执行解包 (UNWRP)指令的方法;

图10图示了用于UNWRP指令的执行的伪代码的实施例;

图11图示了用于定义在UNWRPMAC的执行期间要使用的签名算法的签名数据结构的实施例;

图12图示了处理UNWRPMAC指令的实施例;

图13(A)-(B)根据本公开实施例图示了由处理器执行的处理 UNWRPMAC指令的方法1302;

图14图示了用于UNWRPMAC指令的执行的伪代码的实施例;

图15图示了使用配置指令来配置受保护域的示例;

图16图示了将被存储在“其他”寄存器之一中的KEYID_CTRL的示例配置;

图17图示了处理PCONFIG指令的实施例;

图18(A)-(B)根据本公开实施例图示了由处理器执行的执行加密密钥编程指令以对目标编程的方法;

图19图示了用于PCONFIG指令的执行的伪代码的实施例;

图20是根据本公开实施例图示出用于处理指令的示例系统的硬件的功能框图;

图21是根据本公开实施例图示出处理器的功能框图;

图22(A)是根据本公开实施例图示出示例有序流水线和示例寄存器重命名、无序发出/执行流水线两者的功能框图;

图22(B)是根据本公开实施例图示出要被包括在处理器中的示例有序体系结构核心和示例寄存器重命名、无序发出/执行体系结构核心两者的功能框图;

图23是根据本公开实施例图示出(一个或多个)执行单元电路的功能框图;

图24是根据本公开实施例图示出寄存器体系结构的功能框图;

图25是根据本公开实施例图示出指令格式的功能框图;

图26是根据本公开实施例图示出图25的指令格式的寻址字段的细节的功能框图;

图27是根据本公开实施例图示出图25的指令格式的第一示例前缀的细节的功能框图;

图28(A)-(D)是根据本公开实施例图示出如何使用图27的第一示例前缀的R、X和B字段的功能框图。

图29(A)-(B)是根据本公开实施例图示出图25的指令格式的第二示例前缀的细节的功能框图;

图30是根据本公开实施例图示出图25的指令格式的第三示例前缀的细节的功能框图;以及

图31是根据本公开实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的功能框图。

具体实施方式

本公开涉及方法、装置、系统和存储指令的非暂态计算机可读存储介质,用于使用由物理不可克隆功能(PUF)生成的密钥来对数据进行加密。加密是对信息进行编码的过程,并且是一种用于保护存储在计算机上的敏感信息(例如,密码)的安全或隐私的工具。加密过程将信息的原始表现形式,即明文,转换为另一种形式,即密文。加密方案通常使用由算法生成的伪随机加密密钥。拥有密钥的授权方可以很容易地对编码信息进行解密。在不拥有密钥的情况下,也有可能对编码信息进行解密,但是,对于一个精心设计的加密方案,要求相当多的计算资源和技能。

为了维持编码信息的保密性,防止未经授权方访问加密密钥是很重要的。当加密密钥(或任何秘密信息,例如密码)被存储在计算机上时,保护它的一种方式是使用电子熔丝来存储秘密信息。熔丝长期以来被认为是安全的,但最近的研究表明,坚定的硬件攻击者可以扫描(scan)熔丝并且恢复秘密信息。本公开实施例通过用PUF生成的加密密钥保护秘密信息来解决这个问题。PUF有利地防止了扫描,而且PUF电路也能抵抗边通道 (side-channel)攻击(例如,使用EM辐射的攻击)。

根据一些实施例,软件可见的PUF(software-visible PUF,SV-PUF) 通过指令将PUF功能暴露给软件。这些指令中的一个或多个包括SV-PUF ISA或ISA扩展(在整个说明书各处,SV-PUF ISA将是使用的术语,但下面的文本适用于ISA扩展)。本公开实施例公开了使用SV-PUF来包装秘密,并且使用PUF派生的密钥来将其与平台相联系。这种包装(加密和完好性保护)可以在秘密(例如密码、密钥、cookie等等)未被使用时保护秘密,并且在使用时以明文形式解包/取回秘密。使用PUF派生密钥进行保护的秘密随后或者可被返回给软件,或者可被用来为平台上的(一个或多个)加密引擎(例如,可从加州圣克拉拉的英特尔公司获得的多密钥全存储器加密(Multi-Key Total Memory Encryption,MKTME))进行编程。在对(一个或多个)加密引擎进行编程的情况下,有利的是,秘密在初始配置之后至平台的生命周期内从未以明文形式被透露,而是使用本公开实施例的指令通过接口被直接编程到期望的(一个或多个)加密引擎。

本公开实施例有利地使得秘密能够与平台绑定,使用PUF派生的密钥来保护它们。此外,秘密可以与平台的配置(例如,是否启用了平台固件验证程序,例如Intel BootGuard)和处理器的配置(例如,秘密被包装在飞地(enclave)或信任域内)相联系。此外,由于每次系统重启时PUF都会生成相同的密钥,因此秘密在启动间被保留。

如本公开所设想的,实施例包括被称为可信域扩展(Trusted Domain Extension,TDX)的处理器安全能力,以通过使用经由存储器控制器引擎的存储器加密和完好性来满足更高的安全性目标。正如在TDX中使用的那样,可信域(Trusted Domain,TD)是受保护的VM。

实施例包括额外的扩展页表(extended page table,EPT)结构,被称为安全扩展页表(Secure Extended Page Table,SEPT),它被处理器用于 TD私有页游走。SEPT是基于每个TD的EPT(即,每个TD有它自己的 SEPT),它只由可信域资源管理器(Trusted DomainResource Manager,TDRM)经由新添加到处理器的指令集体系结构(instruction setarchitecture, ISA)的特殊指令来管理。如果不使用这些指令,TDRM则不能更改SEPT,否则处理器将报告完好性失效。在其他实施例中,可以使用处理器范围寄存器保护来对SEPT的全部或部分进行访问控制。

在典型的VM实现方式中,处理器基于每个虚拟存储器控制结构 (virtual memorycontrol structure,VMCS)支持一个EPT指针(EPT pointer,EPTP)。VMCS是存储器中的一种数据结构,它基于每个VM存在一次,而VM是由VMM管理的。随着不同VM之间执行情境的每一次变化,为当前VM恢复VMCS,从而定义VM的虚拟处理器的状态。VMM 管理由EPTP引用的EPT。在实施例中,VM可以被TD封装,并且VMCS 可以由被称为可信域控制结构(Trusted DomainControl Structure,TDCS) 的类似控制结构所替代,该结构管理TD的访客状态。

描述了使用信任域(trust domain,TD)来在虚拟化系统中提供隔离的体系结构。计算中的当前趋势是通过利用由云服务提供商(cloud service provider,CSP)提供的托管服务来将数据和企业工作负载放置在云中。作为将数据和企业工作负载托管在云中的结果,CSP的客户(本文中称为租户)在为其工作负载请求更好的安全性和隔离方案。尤其,客户在寻求解决方案来在租户的软件的TCB的外部使能CSP提供软件的操作。系统的 TCB指的是有能力影响对系统的整体操作的信任的一组硬件、固件和/或软件组件。

在本公开的实现方式中,提供了TD体系结构和TD体系结构的指令集体系结构(ISA)扩展(在此称为TD扩展(TD extension,TDX)),以为在不受信任的CSP基础设施中执行的客户(租户)软件提供机密性(和完好性)。TD体系结构可以是片上系统(System-on-Chip,SoC)能力,它在TD工作负载和CSP软件之间提供了隔离,其中CSP软件例如是CSP 的虚拟机管理器(virtual machine manager,VMM)。TD体系结构的组件可包括:1)经由MK全存储器加密(MK-Total Memory Encryption, MKTME)引擎进行的存储器加密;2)本文称为信任域资源管理器(trust domain resource manager,TDRM)的资源管理能力(TDRM可以是虚拟机监视器(Virtual Machine Monitor,VMM)的软件扩展);以及3)经由 CPU管理的存储器所有权表(Memory Ownership Table,MOT)和经由 CPU访问控制的TD控制结构在处理器中提供的执行状态和存储器隔离能力。TD体系结构提供了处理器部署TD的能力,这些TD利用MK-TME引擎、MOT和被访问控制的TD控制结构来实现TD工作负载的安全操作。

在一种实现方式中,租户的软件是在被称为TD的体系结构概念中被执行的。TD(也被称为租户TD)指的是租户工作负载(例如,它可包括单独的操作系统(operating system,OS)以及运行在OS之上的其他第3环应用,或者运行在VMM之上的虚拟机(VM)以及其他第3环应用)。每个TD独立于系统中的其他TD来进行操作,并且使用平台上的TDRM所指派的(一个或多个)逻辑处理器、存储器和I/O。每个TD在存储器中被加密隔离,使用MK-TME引擎的至少一个专属加密密钥来对与信任域相关联的存储器(保存代码和/或数据)进行加密。

在本公开的实现方式中,TD体系结构中的TDRM对于TD充当主机并且对于核心和其他平台硬件具有完全控制权。TDRM向TD中的软件指派 (一个或多个)逻辑处理器。然而,TDRM不能访问TD在指派的(一个或多个)逻辑处理器上的执行状态。类似地,TDRM向TD指派物理存储器和I/O资源,但不暗中参与访问TD的存储器状态,这是由于使用了处理器对每个TD强制实施的分开的加密密钥,以及存储器上的其他完好性和重放控制。在TD中执行的软件以降低的权限进行操作,从而使得TDRM 可保持对平台资源的控制。然而,TDRM不能影响在限定的情况下存储器或CPU结构中的TD状态的机密性或完好性。

用于在虚拟化系统中提供隔离的传统系统没有将CSP软件完全从租户的TCB中提取出来。此外,传统系统可能会使用单独的芯片组子系统来大幅增加TCB,而本公开的实现方式避免了这一点。本公开的实现方式的 TD体系结构通过从TCB中去除CSP软件以明确地减少TCB,从而在客户 (租户)工作负载和CSP软件之间提供了隔离。实现方式通过为CSP客户工作负载(租户TD)提供安全隔离而提供了相对于传统系统的技术改进,并且允许了从客户的TCB中去除CSP软件,同时满足CSP的安全性和功能要求。此外,TD体系结构可扩展到多个TD,这可以支持多个租户工作负载。此外,本文描述的TD体系结构是通用的,并且可被应用于任何动态随机访问存储器(dynamic random-access memory,DRAM),或者基于存储类存储器(storage class memory,SCM)的存储器,例如非易失性双列直插式存储器模块(Non-Volatile Dual In-line Memory Module,NV- DIMM)。因此,本公开的实现方式允许了软件利用性能益处,例如SCM 的NVDIMM直接访问存储(direct access storage,DAS)模式,而不影响平台安全性要求。

图1是根据本公开的实现方式使用TD在虚拟化系统中提供隔离的计算系统100的示意性框图。虚拟化系统100包括支持若干个客户端设备 101A-101C的虚拟化服务器110。虚拟化服务器110包括至少一个执行TDRM 180的处理器112(也称为处理设备)。TDRM 180可包括VMM (也可称为超级监督者),其可以实例化一个或多个TD 190A-190C,这些 TD可由客户端设备101A-101C经由网络接口170来访问。例如,客户端设备101A-101C可以包括但不限于桌面型计算机、平板计算机、膝上型计算机、上网本、笔记本计算机、个人数字助理(personal digital assistant, PDA)、服务器、工作站、蜂窝电话、移动计算设备、智能电话、互联网电器、或者任何其他类型的计算设备。

TD可以指租户(例如,客户)工作负载。租户工作负载例如可包括单独的OS以及运行在OS之上的其他第3环应用,或者可包括运行在VMM 之上的VM以及其他第3环应用。在本公开的实现方式中,使用单独的专有密钥来对与TD相关联的存储器(保存代码和数据)进行加密,可在存储器中对每个TD进行加密隔离。

处理器112可包括一个或多个核心120(也被称为处理核心120)、范围寄存器130、存储器管理单元(memory management unit,MMU)140、以及(一个或多个)输出端口150。处理器112可被用于系统中,该系统包括但不限于桌面型计算机、平板计算机、膝上型计算机、上网本、笔记本计算机、PDA、服务器、工作站、蜂窝电话、移动计算设备、智能电话、互联网电器、或者任何其他类型的计算设备。在另一种实现方式中,处理器112可被用于SoC系统中。

计算系统100代表了基于可从加州圣克拉拉的英特尔公司获得的微处理设备的处理系统,虽然也可以使用其他系统(包括具有其他微处理设备的PC、工程工作站、机顶盒,等等)。在一种实现方式中,样本系统100 执行可从华盛顿州雷德蒙市微软公司获得的WINDOWS

一个或多个处理核心120执行系统的指令。处理核心120包括但不限于预取逻辑以取得指令,解码逻辑以对指令解码,执行逻辑以执行指令,等等。在一种实现方式中,计算系统100包括诸如处理器112之类的组件以采用包括逻辑的执行单元来执行用于处理数据的算法。

虚拟化服务器110包括主存储器114和次级存储装置118,以存储程序二进制文件和OS驱动器事件。次级存储装置118中的数据可以被存储在被称为页的块中,并且每个页可以对应于一组物理存储器地址。虚拟化服务器110可以采用虚拟存储器管理,其中由(一个或多个)核心120运行的应用,例如TD 190A-190C,使用被映射到访客物理存储器地址的虚拟存储器地址,并且访客物理存储器地址被MMU 140映射到主机/系统物理地址。

核心120可执行MMU 140,以将页从次级存储装置118加载到主存储器114中(其包括易失性存储器和/或非易失性存储器),以由在处理器 112上(例如,在核心上)运行的软件更快地访问。当TD 190A-190C之一尝试访问与加载到主存储器114中的页的物理存储器地址相对应的虚拟存储器地址时,MMU 140返回所请求的数据。核心120可以执行TDRM 180的VMM部分,以将访客物理地址转换为主存储器的主机物理地址,并且为允许核心120读取、游走和解释这些映射的协议提供参数。

在一种实现方式中,处理器112实现了TD体系结构和TD体系结构的 ISA扩展(TDX)。TD体系结构提供TD工作负载190A-190C之间的隔离以及与在处理器112上执行的CSP软件(例如,TDRM 180和/或CSP VMM (例如,根VMM 180))的隔离。TD体系结构的组件可包括:1)经由 MK-ME引擎(存储器加密引擎(memory encryption engine,MEE)或存储器保护控制器)145或其他加密引擎进行的存储器加密,2)本文称为 TDRM 180的资源管理能力,以及3)经由MOT 160和经由受访问控制的 TD控制结构(即,TDCS 124和TDTCS 128)在处理器112中提供的执行状态和存储器隔离能力。TD体系结构提供了处理器112部署TD 190A-190C的能力,这些TD利用MK-TME引擎145、MOT 160和被访问控制的 TD控制结构(即,TDCS124和TDTCS 128)来实现TD工作负载190A- 190C的安全操作。

物理不可克隆功能(PUF)电路146响应挑战,以提供独特的值。注意,虽然被图示为处理器112的一部分,但PUF电路146可以在处理器112 的外部。在一些实施例中,它是MMU140的一部分。在一些实施例中,它是(一个或多个)核心120的一部分。

在本公开的实现方式中,TDRM 180充当主机并且对于核心120和其他平台硬件具有完全控制权。TDRM 180向TD 190A-190C中的软件指派 (一个或多个)逻辑处理器。然而,TDRM 180不能访问TD 190A-190C在指派的(一个或多个)逻辑处理器上的执行状态。类似地,TDRM 180向 TD 190A-190C指派物理存储器和I/O资源,但不暗中参与访问TD 190A的存储器状态,这是由于分开的加密密钥,以及存储器上的其他完好性和重放控制。

关于分开的加密密钥,处理器可以利用MK-TME引擎145来加密(和解密)在执行期间使用的存储器。利用全存储器加密(TME),在核心 120上执行的软件对任何存储器的访问都可以被用加密密钥在存储器中进行加密。MK-TME是对TME的增强,其允许了使用多个加密密钥(支持的密钥数目是取决于实现方式的)。处理器112可以利用MKTME引擎145 来使得不同的页被使用不同的MK-TME密钥来加密。MK-TME引擎145可以在本文描述的TD体系结构中被利用来支持每个TD 190A-190C的一个或多个加密密钥,以帮助实现不同的CSP客户工作负载之间的加密隔离。例如,当MK-TME引擎145被用于TD体系结构中时,CPU默认实施TD(所有页)将被使用TD特定的密钥进行加密。此外,TD可以进一步选择特定的TD页为明文或者被使用对CSP软件不透明的不同临时密钥进行加密。 MK-TME引擎145可包括用于一个或多个密钥的存储装置。在一些实施例中,在管芯上至少有一个熔丝密钥。

每个TD 190A-190C是一种软件环境,它支持由VMM(例如,使用虚拟机扩展(VMX))、OS和/或应用软件(由OS托管)构成的软件栈。每个TD 190A-190C独立于其他TD 190A-190C来进行操作,并且使用平台上的TDRM 180所指派的(一个或多个)逻辑处理器、存储器和I/O。在TD 190A-190C中执行的软件以降低的权限进行操作,从而使得TDRM 180 可保持对平台资源的控制;然而,TDRM不能影响在限定的情况下TD 190A-190C的机密性或完好性。

本公开的实现方式不限于计算机系统。本公开的替换实现方式可被用于其他设备中,例如手持设备和嵌入式应用。手持设备的一些示例包括蜂窝电话、互联网协议设备、数字相机、个人数字助理(PDA)和手持PC。嵌入式应用可包括微控制器、数字信号处理设备(digital signal processing device,DSP)、片上系统、网络计算机(NetPC)、机顶盒、网络集线器、广域网(wide area network,WAN)交换机、或者能够根据至少一种实现方式执行一个或多个指令的任何其他系统。

一种实现方式可在单处理设备桌面或服务器系统的情境中被描述,但替换实现方式可被包括在多处理设备系统中。计算系统100可以是“中枢”系统体系结构的示例。计算系统100包括处理器112来处理数据信号。处理器112作为一个说明性示例包括复杂指令集计算机(complex instruction set computer,CISC)微处理设备、精简指令集计算(reducedinstruction set computing,RISC)微处理设备、超长指令字(very long instructionword, VLIW)微处理设备、实现指令集的组合的处理设备,或者任何其他处理设备,例如数字信号处理设备。处理器112耦合到处理设备总线,该处理设备总线在处理器112和计算系统100中的其他组件之间传输数据信号,其他组件例如是主存储器114和/或次级存储装置118,其存储指令、数据或者这些的任何组合。计算系统100的其他组件可包括图形加速器、存储器控制器中枢、I/O控制器中枢、无线收发器、闪速BIOS、网络控制器、音频控制器、串行扩展端口、I/O控制器,等等。这些元件执行其传统功能,这些传统功能是本领域技术人员公知的。

在一种实现方式中,处理器112包括第1级(L1)内部缓存存储器。取决于体系结构,处理器112可具有单个内部缓存或者多个级别的内部缓存。其他实现方式包括内部和外部缓存的组合,这取决于特定的实现方式和需求。寄存器文件将不同类型的数据存储在各种寄存器中,包括整数寄存器、浮点寄存器、向量寄存器、联组寄存器、影子寄存器、检查点寄存器、状态寄存器、配置寄存器、以及指令指针寄存器。

应当注意,执行单元可具有也可不具有浮点单元。在一种实现方式中,处理器112包括微代码(ucode)ROM,用于存储微代码,该微代码当被执行时,将执行某些宏指令的算法或者应对复杂的场景。这里,微代码有可能是可更新的,以应对处理器112的逻辑错误/修复。

执行单元的替换实现方式也可被用于微控制器、嵌入式处理设备、图形设备、DSP、以及其他类型的逻辑电路。系统100包括主存储器114(也可称为存储器114)。主存储器114包括DRAM设备、静态随机访问存储器(SRAM)设备、闪存设备、或者其他存储器设备。主存储器114存储由数据信号表示的指令和/或数据,这些指令和数据将被处理器112执行。处理器112经由处理设备总线与主存储器114耦合。系统逻辑芯片,例如存储器控制器中枢(memorycontroller hub,MCH),可以耦合到处理设备总线和主存储器114。MCH可以向主存储器114提供高带宽存储器路径,用于指令和数据存储以及用于图形指令、数据和纹理的存储。MCH例如可被用于在处理器112、主存储器114和系统100中的其他组件之间引导数据信号,并且在处理设备总线、存储器114和系统1/0之间桥接数据信号。 MCH可通过存储器接口与存储器114耦合。在一些实现方式中,系统逻辑芯片可提供图形端口,用于通过加速图形端口(Accelerated Graphics Port, AGP)互连来耦合到图形控制器。

计算系统100还可包括I/O控制器中枢(I/O controller hub,ICH)。 ICH可经由本地I/O总线提供与一些I/O设备的直接连接。本地I/O总线是一种高速I/O总线,用于将外设连接到存储器114、芯片组和处理器112。一些示例是音频控制器、固件中枢(闪速BIOS)、无线收发器、数据存储、包含用户输入和键盘接口的传统I/O控制器、串行扩展端口(例如通用串行总线(Universal Serial Bus,USB))、以及网络控制器。数据存储设备可包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备、或者其他大容量存储设备。

对于系统的另一种实现方式,由上述的处理设备核心120执行的指令可以与片上系统一起使用。片上系统的一种实现方式包括处理设备和存储器。一个这种系统的存储器是闪存。闪存可以与处理设备和其他系统组件位于同一管芯上。此外,其他逻辑块,例如存储器控制器或图形控制器,也可位于片上系统上。

图2(A)根据本公开实施例图示了使用PUF来生成和使用用于包装 (wrap)和解包(unwrap)数据的密钥的示例。一般而言,根据本公开实施例的对包装指令的执行接收要被保持安全的数据(在此可称为“秘密”)。该秘密可以是任何信息,例如但不限于密码、加密密钥,等等。包装指令接收秘密作为输入的一部分,并且使用PUF派生的密钥来对其进行加密。输入被更新和包装(例如,加密和完好性保护)。在一些实施例中,秘密包装过程的输出(在此可称为“blob”(二进制大对象)或“包装的blob”)与特定用途相联系。例如,可以生成blob来保护软件打算在以后某个时间点取回的秘密。在另一示例中,可以生成blob来保护用于编程到加密引擎的密钥。作为这种用途的一种示例,可以使用本文ISA来保护用于持久性存储器的MKTME密钥。

为了使用在包装的blob中可用的秘密,本公开实施例进一步提供解包指令的执行,该解包指令的执行从软件接收包装的blob作为输入操作数,并且对blob进行解包(例如,解密和验证完好性),并且使用PUF派生密钥对该秘密进行解密。取回到的秘密随后被返回到软件或者编程到加密引擎,这取决于预期的用途,这是在包装时由软件向指令指示的。在一些实施例中,包装指令允许将平台和处理器配置包括在包装中,这样,只有在包装时所期望的平台和处理器配置在解包时处于活跃时,解包指令才会允许对blob进行解包。

进一步参考图2(A),软件请求根据本公开实施例的SV-PUF ISA 2(A)02的SV-PUF包装指令,使用PUF派生密钥2(A)04对秘密进行加密。除了提供要加密的秘密以外,软件还提供挑战2(A)06,该挑战用于从根 PUF密钥(下文描述)生成PUF派生密钥2(A)04。如下文进一步详细描述的,在一些实施例中,挑战2(A)06是由软件选择的256比特随机值,并且对于包装秘密和解包秘密都必须提供它。执行SV-PUF ISA的包装指令 (下文更详细描述)的执行电路在存储器结构中取得由软件提供的输入,并且使用由软件提供的挑战2(A)06,激发PUF电路2(A)08,来获得PUF 派生密钥2(A)04,以用于对秘密加密。在从PUF电路2(A)08取回密钥 2(A)04之后,包装指令的执行使用密钥2(A)04对秘密进行加密,并且对包含加密秘密的数据结构进行完好性保护,以生成包装blob。然后,包装 blob在由软件提供的存储器位置中被返回给软件。

之后,当软件需要使用该秘密时,软件会请求SV-PUF ISA 2(A)02的解包指令,对blob内包含的秘密进行解包。在一些实施例中,SV-PUF ISA 2(A)02具有多个用于解包的指令,并且对于来自软件的给定解包请求所调用的特定指令取决于该实例中对秘密的使用。在软件需要取回秘密的第一示例中,SV-PUF ISA 2(A)02的第一解包指令接收包装blob作为输入操作对象,并且通过检查blob的完好性和对其解密来解包秘密。取回的秘密随后被返回给软件。除了提供要解包的blob以外,软件还提供挑战2(A)06,该挑战用于从根PUF密钥(下文描述)生成PUF派生密钥2(A)04以用于对blob进行解包。

在第二示例中,如果秘密要被用于编程到加密引擎,例如使用包装 blob将持久性存储器密钥编程到MKTME引擎,则SV-PUF ISA 2(A)02的第二解包指令接收包装blob作为输入操作对象,并且通过检查blob的完好性和对秘密数据解密来对数据结构进行解包,但不向软件返回所取回的 (一个或多个)密钥。相反,密钥通过接口被直接编程到目标加密引擎,从而绝不会在存储器中以明文暴露出(一个或多个)密钥。除了提供要解包的blob以外,软件还提供挑战2(A)06,该挑战用于从根PUF密钥(下文描述)生成PUF派生密钥2(A)04以用于对blob进行解包。

图2(B)根据本公开实施例图示了用于包装和解包秘密的示例过程 2(B)02。在2(B)S04,要求保护秘密的软件2(B)06调用指令包装(下文描述的WRP),从而将要包装的数据作为输入操作对象与挑战2(A)06一起传递给SV-PUF指令2(A)02。在2(B)S08,SV-PUF指令2(A)02的WRP指令使用挑战2(A)06作为PUF电路2(A)08的输入来生成独特的PUF派生密钥2(A)04。在一些实施例中,使用标准密钥派生函数(key derivation function,KDF)来将PUF根密钥与挑战2(A)06混合。另外,在一些实施例中,PUF电路2(A)08本身可以为不同的用途提供多个根密钥。作为示例,可以有一个根密钥是为标准平台用途(例如,保护熔丝)派生的,以及另一个根密钥是用于SV-PUF用途的。SV-PUF ISA 2(A)02的WRP指令使用挑战2(A)06来获得PUF派生密钥2(A)04,并且使用PUF派生密钥2(A)04 在2(B)S08对秘密进行加密和完好性保护。在2(B)S10,SV-PUF指令 2(A)02在由软件2(B)06指定的存储器位置中提供包装blob作为WRP指令的输出,并且提供作为WRP指令的输入。当blob所保护的秘密不被使用时,软件2(B)06将该blob保留在存储器中。

进一步参考图2(B),在2(B)S12,当软件2(B)06需要访问包含在blob 内的秘密时,软件2(B)06调用另一指令解包(UNWRP)(下文描述),从而将包装blob作为输入操作对象与挑战2(A)06一起传递给SV-PUF指令 2(A)02。在2(B)S14,SV-PUF指令2(A)02的UNWRP指令将挑战2(A)06 与blob一起用作PUF电路2(A)08的输入,以取回用于包装blob的独特 PUF派生密钥2(A)04。SV-PUF ISA 2(A)02的UNWRP指令然后使用PUF 派生密钥2(A)04来对包装blob进行解密并且在2(B)S14处验证其完好性。只有当软件2(B)06在2(B)S12处传递的包装blob与SV-PUF指令2(A)02在 2(B)S10处提供给软件2(B)06的包装blob相比没有被修改时,完好性验证才会成功。如果完好性验证成功,则解包的数据在2(B)S16处被返回给软件。

图2(C)根据本公开实施例图示了用于包装和解包秘密的另一示例过程。在图2(C)的实施例中,软件2(B)06将加密密钥编程到平台上的硬件块。这种用途的一个非限制性示例是将用于持久性存储器的密钥编程到MKTME 引擎。在这种用途中,在配设阶段期间(这可能发生在用户在企业环境中的IT中心处接收到他或她的雇主发放的计算机时),要用于持久性存储器加密的密钥被使用与上文参考图2(B)描述的实施例类似的PUF派生密钥来进行加密。动作2(C)S04、2(C)S08和2(C)S10使用WRP指令,如先前分别参考步骤2(B)S04、2(B)S08和2(B)S10所描述的。

进一步参考图2(C),在2(C)S12,当软件2(C)06想要对密钥进行编程时(例如,在每次重启时,设置持久性存储器密钥),软件2(C)06调用另一指令PCONFIG(下文描述),从而将包装blob作为输入操作对象与挑战2(A)06一起传递给SV-PUF ISA 2(A)02。在2(C)S14,SV-PUF指令 2(A)02的PCONFIG指令解包blob并且验证其完好性,如上文在2(B)S14 处所述。然而,在本实施例中,不是将解密的秘密返回给软件2(C)06,而是在2(C)S16处,通过接口将密钥编程到密钥编程目标2(C)18(例如,加密引擎)。通过这种方式,有利地,密钥在配设阶段之后就永不会暴露在存储器中,而配设阶段在平台的生命周期期间通常只发生一次。在 2(B)S20,SV-PUF指令2(A)02向请求方软件2(C)06返回成功/失败编程的响应。

在一些实施例中,ISA(例如,WRP、UNWRP、UNWRPMAC、 PCONFIG)被处理器核心2290(图22(B))的执行引擎2250的(一个或多个)执行集群执行。例如,执行单元电路2262可以执行本文ISA以与PUF 电路2280通信,从而将挑战2(A)06传递给PUF电路2280,并且从PUF电路2280接收PUF派生密钥2(A)04。在一些实施例中,PUF电路2280可以是执行引擎2250的一部分,而在其他实施例中,PUF电路2280可以在执行引擎2250的外部。

图3图示了处理指令(例如SV-PUF指令)的硬件的实施例。如图所示,存储装置303存储要被执行的SV-PUF指令301。

指令301被解码电路305接收。例如,解码电路305从取得逻辑/电路接收此指令。该指令包括用于操作码、第一和第二源以及目的地的字段。在一些实施例中,源和目的地是寄存器,而在其他实施例中,一个或多个是存储器位置。在一些实施例中,操作码详细说明了要执行哪个(哪些) 算术操作。

稍后将详述至少一个指令格式的更详细实施例。解码电路305将指令解码成一个或多个操作。在一些实施例中,这个解码包括生成要被执行电路(例如执行电路309)执行的多个微操作。解码电路305也对指令前缀进行解码。

在一些实施例中,寄存器重命名、寄存器分配和/或调度电路307提供用于以下各项中的一个或多个的功能:1)将逻辑操作对象值重命名为物理操作对象值(例如,一些实施例中的寄存器别名表),2)向解码的指令分配状态比特和标志,以及3)调度解码的指令以在指令池之外的执行电路上执行(例如,在一些实施例中使用预留站)。

寄存器(寄存器文件)和/或存储器308存储数据作为要被执行电路 309进行操作的指令的操作对象。示例寄存器类型包括紧缩数据寄存器、通用寄存器、以及浮点寄存器。

执行电路309执行解码的指令(例如,SV-PUF指令)。示例详细执行电路在其他附图中示出,至少包括图22。解码的SV-PUF指令的执行使得执行电路执行该指令的操作码所指示的(一个或多个)动作。对于一些指令,执行电路309与SV-PUF电路310交互(如果该电路未被包括在执行电路309中的话)。在一些实施例中,SV-PUF电路310是核心的一部分。在一些实施例中,SV-PUF电路310在核心的外部。

在一些实施例中,引退/写回电路311从体系结构上将目的地寄存器提交到寄存器或存储器308中并且引退该指令。

SV-PUF ISA的第一指令是包装指令(WRP)。WRP指令的执行会使得数据被使用由SV-PUF生成的密钥来进行加密。在一些实施例中,WRP 指令与最高权限保护环(例如,第0环)相关联。因此,当软件调用WRP 指令时,可能需要确认,以确定软件在完成包装过程之前具有必要的权限。为了调用WRP指令,软件向SV-PUF WRP指令传递输入存储器缓冲区位置、输出存储器缓冲区位置、以及要被提供给PUF以生成包装密钥的挑战。 WRP指令使用BIND_STRUCT(下文描述)作为输入和输出结构来进行操作,这允许了对目标特定数据的指定。在一些实施例中,WRP指令标识了三个操作对象。源操作对象用于存储源(输入)BIND_STRUCT的位置。第一目的地操作对象用于存储WRP指令的执行的操作状态。第二目的地操作对象用于存储目的地(输出)BIND_STRUCT的位置。

在一些实施例中,所标识的操作对象中的一个或多个是寄存器(例如, RAX、RBC、RCX,等等)。在一些实施例中,所标识的操作对象中的一个或多个是存储器位置。在一些实施例中,结构的位置由地址提供。例如,第一源操作对象存储输入结构的地址,等等。WRP指令在一些实施例中影响以下标志或条件代码:零标志、进位标志、奇偶性标志、溢出标志、调整标志和/或符号标志。零标志(ZF)在成功包装时被清除,否则被设置为1,而CF、PF、AF、OF和SF总是被清除。

WRP指令包括用于对操作码编码的一个或多个字段。该操作码表明执行电路至少:将用PUF生成的包装密钥对来自输入数据结构的秘密信息进行加密,将包装的秘密信息与目标绑定,更新输入数据结构,在更新的数据结构上生成MAC,将MAC存储在输入数据结构中以生成输出数据结构,根据第二目的地操作对象对指令的用途来存储具有包装的秘密信息和对目标的指示的输出数据结构。操作状态也可被更新。

下面的表格示出了BIND_STRUCT的结构,并且就在表格下方描述了 BIND_STRUCT的字段。

BIND_STRUCT

注意,MAC是在具有生成的SEQID、加密的BTENCDATA(或者该数据的一部分)、BTDATA和保留字段的数据结构上生成的,这是没有被进行完好性保护的(它提供这种保护)。在一些实施例中,MAC是使用 GHASH函数来生成的。

MAC:这个字段是由WRP指令生成的数据结构上的消息认证码。软件不填充这个字段。因此,在输入侧,这个字段可能是空的。

消息认证码(message authentication code,MAC)是数据上的加密校验和,其使用会话密钥来检测对数据的意外和故意修改。MAC要求两个输入:消息和只有消息发起者及其(一个或多个)预期接收者知道的秘密密钥。这允许了消息的接收者验证消息的完好性,并且认证消息的发送者拥有共享的秘密密钥。如果发送者不知道秘密密钥,则散列值就会不同,这将告诉接收者该消息不是来自原始发送者。

BTID:这个字段是包装的目标,并且被软件填充。根据本公开实施例,可以有一个或多个目标供使用。示例包括CPU(或核心)、存储器加密引擎,等等。将包装数据与特定用途联系起来增强了数据包装过程的安全性,如下文进一步描述。

图4是图示出表示包装数据要被绑定到的平台/处理器配置的比特向量的功能框图。比特向量402中的字段表明相应的程序是活跃还是不活跃,并且比特位置的状态共同表明平台/处理器配置。在一些实施例中,WRP 指令微代码在包装过程期间使用该比特向量402,并且通过将其包括在输出BIND_STRUCT(表格1)上生成的MAC中来将blob绑定到由比特向量402指示的配置。在一些实施例中,WRP指令的执行不做任何检查,但解包指令(例如,UNWRP、UNWRPMAC和/或PCONFIG)检查平台/处理器配置,并且只有在软件提供的配置(作为BIND_STRUCT中的 BTDATA(下文详述)的一部分)在解包时是活跃的时,才允许解包。因此,在请求绑定之前,软件会检查当前的平台/处理器配置,以确保它不会将秘密绑定到在平台上不活跃的配置。针对不活跃的配置所做的绑定将导致无法被解包以取回(一个或多个)秘密的blob。例如,如果在包装时没有启用平台固件验证程序(例如,Intel Boot Guard),并且软件在没有首先验证Boot Guard已被启用的情况下请求了绑定,那么如果Boot Guard在解包时没有被启用,则UNWRP指令将不允许解包该blob。

作为另一个示例实施例,WRP指令允许了包装到软件身份(例如,进程身份、飞地测量、虚拟机/信任域测量)。如果被请求绑定到软件的身份,则WRP指令的执行会从硬件中挑选身份并且将其包括在生成的MAC中。在解包时,解包指令的执行使用来自硬件的身份来验证MAC。如果解包blob的软件并不拥有该blob,则解包将失败。

SEQID:这个字段是初始化向量,用于由WRP指令执行的认证加密。在一些实施例中,微代码随机生成这个向量,并且将其用于加密和MAC 生成。这个字段后来在解包过程期间被用来解密和验证MAC。

BTENCDATA:这个字段携带软件在请求包装的数据(秘密)。作为示例,对于MKTME密钥编程,这个字段携带两个密钥:数据加密密钥,以及用于在XTS模式中使用高级加密标准(Advanced Encryption Standard, AES)进行加密的调整(tweak)密钥(基于XEX的调整码本模式,具有密文窃取)。在一些实施例中,每个密钥的大小可以达到256b。有利的是,软件可以使用密钥对任何数量的数据进行加密保护,然后使用本文SV- PUF ISA来保护密钥,从而允许用SV-PUF来保护任意大量的数据。

BTDATA:这个字段携带诸如以下信息:PUF电路要用来生成密钥的挑战;以及配置向量,用来向WRP指令表明要与数据包装一起包括的平台和处理器配置。在一些实施例中,这个字段可包括一个或多个子字段,这些子字段控制使用PUF派生密钥的数据包装。例如,如以下表格所示,可以有两个子字段:1)用于生成PUF派生密钥的挑战,以及2)携带要与包装数据绑定的平台/处理器配置的比特向量。

BTDATA

图5图示了处理器执行的处理WRP指令的方法的实施例。例如,如图 22(B)所示的处理器核心、详述的流水线等等执行此方法。在501,取得单个WRP指令。例如,取得WRP指令。WRP指令包括用于如下项的字段:操作码、存储WRP指令的执行的操作状态的第一目的地操作对象、存储或编码输入/源BIND_STRUCT的位置(例如,地址)的源操作对象、以及存储或编码输出/目的地位置的位置(例如,地址)的目的地操作对象。注意,在一些实施例中,BIND_STRUCTS中的一个或多个被存储在一个或多个寄存器中,并且在一些实施例中,BIND_STRUCTS中的一个或多个被存储在一个或多个寄存器中。在一些实施例中,WRP指令还包括用于写入掩码(writemask)的字段。在一些实施例中,从指令缓存取得WRP指令。该操作码表明执行电路至少:用PUF生成的加密密钥对来自输入数据结构的秘密信息进行加密,将包装的秘密信息与目标绑定,更新输入数据结构,在更新的数据结构上生成MAC,将MAC存储在输入数据结构中以生成包装的输出数据结构,根据第二目的地操作对象对指令的用途来存储具有加密的秘密信息和对目标的指示的包装的输出数据结构。此外,执行的操作状态被存储在所标识的第一目的地操作对象中。

在一些实施例中,执行电路使用由PUF生成的密钥对来自输入数据结构的数据进行加密,并且将加密的数据存储在输出数据结构中,其中在输入数据结构中发现激发PUF的挑战,并且将操作状态存储在所标识的第一目的地操作对象中。在一些实施例中,通过使用生成的密钥和被用作密码引擎的初始向量的临时值来执行加密。在一些实施例中,使用PUF生成的密钥在整个输入数据结构(包括对SEQID和加密数据的更新)上计算 MAC,并且将其存储在输出数据结构中(这是经更新的输入数据结构)。注意,在一些实施例中,整个输入数据结构在其他操作之前被拷贝到输出数据结构中(然而,一些字段可能被覆盖)。

在一些实施例中,在解码之前,在502处,取得的单个指令被转化成另一指令集体系结构的一个或多个指令。另一指令集体系结构的一个或多个指令的执行将在功能上等同于根据操作码对单个指令的执行。

取得的单个指令(或者经转化的(一个或多个)指令)在503处被解码。例如,取得的WRP指令被解码电路解码,例如本文详述的解码电路。

在505处取回与解码的指令的源操作对象相关联的数据值。例如,当源操作对象中的一个或多个是存储器操作对象时,来自所指示的存储器位置的数据被取回。

在507,解码的指令(或者经转化的(一个或多个)指令)被执行电路(硬件)执行,例如本文详述的执行电路。对于WRP指令,该执行将使得执行电路根据操作码执行解码的指令以至少进行如下操作:用PUF生成的加密密钥对来自输入数据结构的秘密信息进行加密,将包装的秘密信息与目标绑定,更新输入数据结构,在更新的数据结构上生成MAC,将 MAC存储在输入数据结构中以生成包装的输出数据结构,根据第二目的地操作对象对指令的用途来存储具有加密的秘密信息和对目标的指示的包装的输出数据结构。

在一些实施例中,执行电路将使用由PUF生成的密钥对来自输入数据结构的数据进行加密,并且将加密的数据存储在输入数据结构(其将成为输出数据结构)中,其中在输入数据结构中发现激发PUF的挑战,并且将操作状态存储在所标识的第一目的地操作对象中。在一些实施例中,通过使用生成的密钥和被用作密码引擎的输入的初始向量的临时值来执行加密。该初始向量被存储为输出数据结构中的SEQID。在一些实施例中,使用 PUF生成的密钥在整个数据结构上计算MAC,并且将其存储在输出数据结构中。注意,在一些实施例中,整个输入数据结构在其他操作之前被拷贝到输出数据结构中(然而,一些字段可能被覆盖,例如SEQID、MAC、 BTENCDATA)。

在一些实施例中,该指令在509处被提交或引退。

图6根据本公开实施例图示了用于包装(WRP)指令的执行的方法。注意该执行可由执行电路和/或SV-PUF电路执行。在604处对是否支持 SV-PUF进行确定。在一些实施例中,这个方面被设置在模型特定寄存器 (model specific register,MSR)中。如果确定不支持SV-PUF,那么由于未定义指令,执行在606停止。然而,如果确定支持SV-PUF,那么执行前进到608,在608处,确定请求包装的软件是否有权限(例如,第0环)。如果确定请求包装的软件没有权限,那么由于一般保护故障,执行在610 退出。然而,如果确定请求包装的软件是有权限的,那么执行前进到612,在612处,确定源和目的地寄存器的内容是否对齐。如果确定源和目的地寄存器的内容没有对齐,那么由于一般保护故障,该过程在614退出。然而,如果确定源和第二目的地寄存器的内容是对齐的,那么该过程前进到616,在616处,确定源和目的地寄存器的内容是否重叠。如果确定源和目的地寄存器的内容重叠,那么由于一般保护故障,该过程在618退出。然而,如果确定源和目的地寄存器的内容不重叠,那么该过程前进到620,在620处,由存储在源操作对象(例如,RBX)中的地址信息所标识的输入结构被加载到存储器中。然后过程602前进到622。

在622,确定在由存储在源操作对象中的地址信息所标识的输入结构中是否设置了任何保留字段。如果确定在由存储在源操作对象中的地址信息所标识的输入结构中设置了保留字段,那么由于一般保护故障,该过程在624退出。然而,如果确定在由存储在源操作对象中的地址信息所标识的输入结构中没有设置保留字段,那么该过程前进到626,在626处,生成用于加密的临时种子(例如,使用硬件数字生成器)。然后过程602前进到628。

在628,确定临时种子是否有足够的熵(随机性)。如果确定临时种子没有足够的熵,那么该过程前进到630,在630处,零标志被设置为1,以表明数据没有被包装,并且状态寄存器(例如,RAX)被设置以表明熵差错。然而,如果确定临时种子有足够的熵,那么该过程前进到632,在 632处,使用存储在BIND_STRUCT的BTDATA字段中的挑战来从PUF获得包装密钥。然后过程602前进到634。

在634,使用包装密钥和来自输入BIND_STRUCT的SEQID字段的临时种子,对来自输入BIND_STRUCT的BTENDCDATA字段的数据进行加密。然后,加密的数据被写入到由存储在第二目的地操作对象(例如, RCX)中的地址信息所标识的输出BIND_STRUCT的BTENDCDATA字段。

在636,使用包装密钥在加密数据上计算MAC,然后将MAC写入到输出BIND_STRUCT的MAC字段。

在638,包装的目标(BTID)和挑战(BTDATA)被从输入 BIND_STRUCT中其相应的字段拷贝到输出BIND_STRUCT中其相应的字段。

在640,输出BIND_STRUCT中的种子值被填充以所生成的临时种子值。

在642,零标志被设置为0,表明数据被成功包装,并且目的地寄存器 (例如,RAX)被设置以表明成功。

在644,所有其他标志被清除。

图7图示了用于WRP指令的执行的伪代码的实施例。

一般而言,UNWRP指令允许了对由WRP指令生成的包装blob内所包含的数据的解密。UNWRP指令接收包装blob,对blob进行解包(例如,确认MAC是正确的),并且返回解密的秘密。如果软件向UNWRP指令传递不同的解包目标(由BIND_STRUCT中的BTID指示),则解包过程将失败。有利的是,在包装时,BTID被包括为MAC的一部分。因此,不受信任的软件不能改变BTID来将blob用于与包装时指定的目的不同的目的。换句话说,WRP指令确保包装数据被绑定到目标。

在一些实施例中,UNWRP指令与最高权限保护环(例如,第0环) 相关联。因此,当软件调用UNWRP指令时,SV-PUF ISA可以在完成包装过程之前确认软件拥有必要的权限。为了调用UNWRP指令,软件会传递利用WRP指令生成的包装blob、指向将接收解包数据的输出缓冲区的指针、以及将被提供给PUF以生成解包密钥的挑战。UNWRP指令使用 BIND_STRUCT(上文描述)作为输入结构来进行操作,这允许了对目标特定数据的指定。

UNWRP指令使用BIND_STRUCT(下文描述)作为输入和输出结构来进行操作,这允许了对目标特定数据的指定。在一些实施例中, UNWRP指令标识了三个操作对象。源操作对象用于存储源(输入)包装 BIND_STRUCT的位置。第二目的地操作对象用于存储目的地(输出)解包BIND_STRUCT的位置。第一目的地操作对象用于存储UNWRP指令的执行的操作状态。UNWRP指令影响以下标志:ZF在成功解包时被清除,否则被设置为1;CF、PF、AF、OF和SF总是被清除。

图8图示了处理UNWRP指令的实施例。该处理利用了执行电路、PUF 电路、加密电路和/或MAC电路中的一个或多个。

在801,取得单个UNWRP指令。例如,取得UNWRP指令。UNWRP 指令包括用于如下项的字段:操作码、存储UNWRP指令的执行的操作状态的第一目的地操作对象、存储或编码输入/源BIND_STRUCT的位置(例如,地址)的源操作对象、以及存储或编码输出/目的地位置的位置(例如,地址)的目的地操作对象。注意,在一些实施例中,BIND_STRUCTS中的一个或多个被存储在一个或多个寄存器中,并且在一些实施例中, BIND_STRUCTS中的一个或多个被存储在一个或多个寄存器中。在一些实施例中,UNWRP指令还包括用于写入掩码的字段。在一些实施例中,从指令缓存取得UNWRP指令。操作码表明执行电路至少:用PUF生成的解密密钥对来自输入数据结构的秘密信息进行解密,根据第二目的地操作对象对指令的用途来存储解密的秘密信息(例如,在由第二目的地操作对象提供的存储器位置处或者在第二目的地操作对象本身中)。此外,执行的操作状态被存储在所标识的第一目的地操作对象中。此外,执行的操作状态被存储在所标识的第一目的地操作对象中。

在一些实施例中,执行电路将使用由PUF生成的密钥对来自输入数据结构的数据进行解密,并且将解密的数据存储在输出数据结构中,其中在输入数据结构中发现激发PUF的挑战,并且将操作状态存储在所标识的第一目的地操作对象中。在一些实施例中,通过将生成的密钥和来自输入数据结构的序列ID提供给密码引擎来执行解密。在一些实施例中,首先利用 MAC比较来验证输入数据结构。例如,通过从输入数据结构中去除MAC,然后在剩余数据上生成MAC,来计算MAC。然后对输入数据结构的MAC 和生成的MAC进行比较,以确定包装blob的任何数据是否有变化。注意,在一些实施例中,整个输入数据结构在其他操作之前被拷贝到输出数据结构中。

在一些实施例中,在解码之前,在802处,取得的单个指令被转化成另一指令集体系结构的一个或多个指令。另一指令集体系结构的一个或多个指令的执行将在功能上等同于根据操作码对单个指令的执行。

取得的单个指令(或者经转化的(一个或多个)指令)在803处被解码。例如,取得的UNWRP指令被解码电路解码,例如本文详述的解码电路。

在805处取回与解码的指令的源操作对象相关联的数据值。例如,当源操作对象中的一个或多个是存储器操作对象时,来自所指示的存储器位置的数据被取回。

在807,解码的指令(或者经转化的(一个或多个)指令)被执行电路(硬件)执行,例如本文详述的执行电路。对于UNWRP指令,该执行将使得执行电路根据操作码执行解码的指令以至少进行如下操作:用PUF 生成的解密密钥对来自输入数据结构的秘密信息进行解密,根据第二目的地操作对象对指令的用途来存储解密的秘密信息(例如,在由第二目的地操作对象提供的存储器位置处或者在第二目的地操作对象本身中)。此外,执行的操作状态被存储在所标识的第一目的地操作对象中。此外,执行的操作状态被存储在所标识的第一目的地操作对象中。

在一些实施例中,执行电路将使用由PUF生成的密钥对来自输入数据结构的数据进行解密,并且将解密的数据存储在输出数据结构中,其中在输入数据结构中发现激发PUF的挑战,并且将操作状态存储在所标识的第一目的地操作对象中。在一些实施例中,通过将生成的密钥和来自输入数据结构的序列ID提供给密码引擎来执行解密。在一些实施例中,首先利用 MAC比较来验证输入数据结构。例如,通过从输入数据结构中去除MAC,然后在剩余数据上生成MAC,来计算MAC。然后对输入数据结构的MAC 和生成的MAC进行比较,以确定包装blob的任何数据是否有变化。注意,在一些实施例中,整个输入数据结构在其他操作之前被拷贝到输出数据结构中。

在一些实施例中,该指令在809处被提交或引退。

图9根据本公开实施例图示了由处理器执行的执行解包(UNWRP)指令的方法902。注意,SV-PUF电路也参与了密钥的生成。在904,确定是否支持SV-PUF。在一些实施例中,这个方面被设置在模型特定寄存器 (MSR)中。如果确定不支持SV-PUF,那么由于未定义指令,该过程在 906停止。然而,如果确定支持SV-PUF,那么该过程前进到908,在908 处,确定请求包装的软件是否有权限(例如,第0环)。如果确定请求包装的软件没有权限,那么由于一般保护故障,该过程在910退出。然而,如果确定请求包装的软件是有权限的,那么该过程前进到912,在912处,确定源寄存器的内容是否对齐。如果确定源寄存器的内容没有对齐,那么由于一般保护故障,该过程在914退出。然而,如果确定源寄存器的内容是对齐的,那么该过程前进到916,在916处,确定第二目的地寄存器的内容是否对齐。

如果确定源寄存器的内容没有对齐,那么由于一般保护故障,该过程在918退出。然而,如果确定目的地寄存器的内容是对齐的,那么该过程前进到920,在920处,确定源和第二目的地寄存器的内容是否重叠。

如果确定源和目的地寄存器的内容重叠,那么由于一般保护故障,该过程在922退出。然而,如果确定源和目的地寄存器的内容不重叠,那么该过程前进到924,在924处,由存储在第一源操作对象(例如,RBX) 中的地址信息所标识的输入结构被加载到存储器中。然后过程902前进到 926。

在926,确定在由存储在第一源操作对象中的地址信息所标识的输入结构中是否设置了任何保留字段。如果确定在由存储在第一源操作对象中的地址信息所标识的输入结构中设置了保留字段,那么由于一般保护故障,该过程在928退出。然而,如果确定在由存储在第一源操作对象中的地址信息所标识的输入结构中没有设置保留字段,那么该过程前进到930,在 930处,确定解包目标(例如,由BIND_STRUCT中的BTID所指示)是否是软件。如果确定解包目标不是软件,那么该过程前进到932,在932处,零标志被设置为1,以表明数据没有被解包,并且状态寄存器(第一目的地,例如RAX)被设置以表明无效目标差错。然而,如果确定解包目标是软件,那么该过程前进到934,在934处,使用存储在BIND_STRUCT的 BTDATA字段中的挑战来从PUF获得解包密钥。然后过程902前进到936。

在936,使用解包密钥和输入BIND_STRUCT的SEQID字段对来自输入BIND_STRUCT的BTENDCDATA字段的数据进行解密。然后过程902 前进到938。

在938,确定解包是否成功。如果确定解包没有成功(例如,因为 MAC不匹配),那么该过程前进到940,在940处,零标志被设置为1,以表明数据没有被解包,并且状态寄存器(例如,RAX)被设置以表明解包失败。然而,如果确定解包成功(例如,因为MAC匹配),那么该过程前进到942,在942处,解包的数据被写入到由存储在第二源操作对象 (例如,RCX)中的地址信息所标识的输出缓冲区,零标志被设置为0,表明数据被成功解包了,并且目的地寄存器(例如,RAX)被设置以表明成功。然后过程902前进到944,在944处,所有其他标志被清除。

图10图示了用于UNWRP指令的执行的伪代码的实施例。

在一些实施例中,解包指令包括一种用设备身份/密钥指向包装数据的方式,并且包括可被用于提供从服务器接收的身份挑战的64比特输入的标识符。此外,这个解包指令(使用操作码助记符UNWRPMAC)也取得输入来控制签名算法。

如果另一用途blob(由BTID指示)被传递给UNWRPMAC,则解包将失败。注意,在包装时,BTID被包括为MAC的一部分,因此不受信任的软件不能随便改变BTID来将用于一种用途的blob用于另一种用途。换句话说,WRP指令确保了绑定到目标/用途。UNWRPMAC指令的输出是经签名的响应。

在一些实施例中,UNWRPMAC指令是第0环指令。在一些实施例中, UNWRPMAC指令利用四个操作对象:1)源/目的地操作对象,其作为源为SV-PUF电路提供身份挑战以生成密钥,并且作为目的地来存储执行之后的操作状态;2)第一源,用于提供对要使用的签名算法的指示(注意这个源可以是寄存器、存储器位置或者编码的立即数);3)第二源,用于存储或编码保存在执行期间要使用的(解)包装密钥的输入结构的位置 (例如,寄存器或存储器位置);以及4)目的地操作对象,用于存储或编码在执行期间生成的签名响应将被放置在的位置(例如,寄存器或存储器位置)。UNWRPMAC指令的执行在成功时可以清除ZF(否则被设置为1),并且清除条件代码或标志寄存器的其他标志。

图11图示了用于定义在UNWRPMAC的执行期间要使用的签名算法的签名数据结构的实施例。如图所示,这个签名控制数据结构是比特向量,其中每个比特位置表示签名函数(例如,MAC生成函数)。在这个示例中,有四个基于SHA-3的MAC函数,它们具有不同的输出大小(例如,从224 比特到512比特)。在一些实施例中,生成的输出将被填充到512比特。在一些实施例中,签名控制数据结构作为MSR或GPR被存储在寄存器中。在一些实施例中,签名控制数据结构被编码在指令的立即数中。在一些实施例中,签名控制数据结构被存储在存储器位置中。

图12图示了处理UNWRPMAC指令的实施例。在1201,取得单个 UNWRPMAC指令。例如,取得UNWRPMAC指令。UNWRPMAC指令包括:用于操作码的一个或多个字段;用于标识源/目的地操作对象的一个或多个字段,该源/目的地操作对象作为源为SV-PUF电路提供身份挑战以生成密钥,并且作为目的地来存储执行之后的操作状态;用于标识第一源操作对象的一个或多个字段,该第一源操作对象用于提供对要使用的签名算法的指示;用于标识第二源操作对象的一个或多个字段,该第二源操作对象用于存储或编码输入数据结构的位置,以保存在执行期间要使用的(解) 包装密钥和要解密的数据;以及用于标识目的地操作对象的一个或多个字段,该目的地操作对象用于存储或编码在执行期间生成的签名响应要被放置在的位置。操作码表明执行电路至少:用PUF生成的包装密钥对来自第二源操作对象的输入数据结构的秘密信息进行解密,根据第一源操作对象所指示的签名算法使用源/目的地操作对象的身份挑战来生成解包的秘密信息的签名响应,并且将签名响应存储在所标识的目的地中。此外,执行的操作状态被存储在所标识的源/目的地操作对象中。

在一些实施例中,在解码之前,在1202处,取得的单个指令被转化成另一指令集体系结构的一个或多个指令。另一指令集体系结构的一个或多个指令的执行将在功能上等同于根据操作码对单个指令的执行。

取得的单个指令(或者经转化的(一个或多个)指令)在1203处被解码。例如,取得的UNWRPMAC指令被解码电路解码,例如本文详述的解码电路。

在1205处取回与解码的指令的源操作对象相关联的数据值。例如,当源操作对象中的一个或多个是存储器操作对象时,来自所指示的存储器位置的数据被取回。

在1207,解码的指令(或者经转化的(一个或多个)指令)被执行电路(硬件)执行,例如本文详述的执行电路。对于UNWRPMAC指令,该执行将使得执行电路根据操作码执行解码的指令以至少进行如下操作:用 PUF生成的密钥对来自第二源操作对象的输入数据结构的秘密信息进行解密,根据第一源操作对象所指示的签名算法使用源/目的地操作对象的身份挑战来生成解密的秘密信息的签名响应,并且将签名响应存储在所标识的目的地中。此外,执行的操作状态被存储在所标识的源/目的地操作对象中。

在一些实施例中,通过将生成的密钥和来自输入数据结构的序列ID提供给密码引擎来执行解密。在一些实施例中,首先利用MAC比较来验证输入数据结构。例如,通过从输入数据结构中去除MAC,然后在剩余数据上生成MAC,来计算MAC。然后对输入数据结构的MAC和生成的 MAC进行比较,以确定包装blob的任何数据是否有变化。注意,在一些实施例中,整个输入数据结构在其他操作之前被拷贝到输出数据结构中。

在一些实施例中,该指令在1209处被提交或引退。

图13根据本公开实施例图示了由处理器执行的处理unwrapmac指令的方法1302。注意,SV-PUF电路也参与了密钥的生成。在1304,确定是否支持SV-PUF。在一些实施例中,这个方面被设置在模型特定寄存器 (MSR)中。如果确定不支持SV-PUF,那么由于未定义指令,该过程在 1306停止。然而,如果确定支持SV-PUF,那么该过程前进到1308,在 1308处,确定请求包装的软件是否有权限(例如,第0环)。如果确定请求包装的软件没有权限,那么由于一般保护故障,该过程在1310退出。然而,如果确定请求包装的软件是有权限的,那么该过程前进到1312,在 1312处,确定第二源寄存器的内容是否对齐。如果确定源寄存器的内容没有对齐,那么由于一般保护故障,该过程在1314退出。然而,如果确定源寄存器的内容是对齐的,那么该过程前进到1316,在1316处,确定目的地寄存器的内容是否对齐。

如果确定源寄存器的内容没有对齐,那么由于一般保护故障,该过程在1318退出。然而,如果确定目的地寄存器的内容是对齐的,那么该过程前进到1320,在1320处,确定第二源寄存器和目的地寄存器的内容是否重叠。

如果确定源寄存器和目的地寄存器的内容重叠,那么由于一般保护故障,该过程在1322退出。然而,如果确定源寄存器和目的地寄存器的内容不重叠,那么该过程前进到1324,在1324处,由存储在第二源操作对象 (例如,RBX)中的地址信息所标识的输入结构被加载到存储器中。然后过程1302前进到1326。

在1326,确定在由存储在第一源操作对象中的地址信息所标识的输入结构中是否设置了任何保留字段。如果确定在由存储在第一源操作对象中的地址信息所标识的输入结构中设置了保留字段,那么由于一般保护故障,该过程在1328退出。然而,如果确定在由存储在第一源操作对象中的地址信息所标识的输入结构中没有设置保留字段,那么该过程前进到1330,在 1330处,确定解包目标(例如,由BIND_STRUCT中的BTID所指示)是否是软件。如果确定解包目标不是软件,那么该过程前进到1331,在1331 处,零标志被设置为1,以表明数据没有被解包,并且源/目的地(例如状态寄存器,比如RAX)被设置以表明无效目标差错。然而,如果确定解包目标是软件,那么该过程前进到1332,在1332处,确定在第一源操作对象中是否设置了多于一个算法。如果设置了多个算法,那么零标志被设置为1,并且源/目的地中的状态被设置为无效签名。当只设置了一个算法时,流程继续进行到1334,在1334处,使用存储在BIND_STRUCT的 BTDATA字段中的挑战作为挑战,从PUF获得解包密钥。然后过程1302 前进到1336。

在1336,使用解包密钥和输入BIND_STRUCT的SEQID字段对来自输入BIND_STRUCT的BTENDCDATA字段的数据进行解密。然后过程 1302前进到1338。

在1338,确定解包是否成功。如果确定解包没有成功(例如,因为 MAC不匹配),那么该过程前进到1340,在1340处,零标志被设置为1,以表明数据没有被解包,并且源/目的地(例如,RAX)被设置以表明解包失败。然而,如果确定解包成功(例如,因为MAC匹配),那么该过程前进到1342,在1342处,根据第一源操作对象所指示的算法,使用由源/ 目的地的身份挑战生成的密钥,生成签名的响应。注意,可以通过向SV- PUF提供身份挑战来生成该密钥。

在1343处,签名响应在所指示的目的地处被填充。在一些实施例中,签名响应被填充,使得大小为512比特。

然后过程1302前进到1344,在1344处,所有其他标志被清除。

图14图示了用于UNWRPMAC指令的执行的伪代码的实施例。

在一些实施例中,可以使用由处理器实现的处理器指令来定义和/或配置受保护的域,例如联系图15以及在本公开各处描述的“平台配置” (PCONFIG)指令。例如,通过在安全性引擎的存储器的密钥表中编程新的条目(或者修改现有条目),PCONFIG指令可被用于定义和/或配置受保护域。密钥表包括keyID、密钥、以及对密钥的用途的指示(或者对其的缺乏的指示)。以这种方式,可以使用PCONFIG指令以编程方式(例如,由管理软件)定义和配置受保护域。

图15图示了使用处理器指令来配置受保护域的示例。在一些实施例中,例如,处理器可以实现指令,该指令可被用于配置与存储器保护系统相关联的受保护域。例如,处理器指令可以是“平台配置”(PCONFIG)指令、“可信平台动作监督器”(trusted platformaction supervisor,TPAS)指令、和/或任何其他适当类型的指令。

例如,通过在存储器保护控制器的域密钥表(例如,存储器加密引擎的域密钥表)中编程新的条目(或者修改现有条目),“平台配置” (PCONFIG)指令可被用于定义和/或配置受保护域。以这种方式,可以使用PCONFIG指令以编程方式来定义和配置受保护域。一旦使用 PCONFIG指令配置了受保护域,与受保护域相关联的存储器地址就会以受保护域的配置所指定的方式受到保护。例如,当使用加密保护时,数据在被写入到受保护域内的存储器地址之前被加密,并且从受保护域内的存储器地址读取的数据在被返回到请求方处理器之前被解密。

在一些实施例中,PCONFIG指令可能要求一定的权限级别或权限环。例如,处理器可以支持权限级别或权限环的层次体系,以限制对某些资源的访问。在一些实施例中,权限环0可能是限制性最小的级别,而具有更高数字的权限环可能有越来越多的限制性。例如,权限环0可用于系统管理软件(例如,操作系统内核和设备驱动器),而权限环3可用于用户区应用。因此,在一些实施例中,PCONFIG指令可以是第0环指令,它只能由在最高权限环中执行的软件使用(例如,用于配置受保护域的管理软件)。替换地,或者额外地,PCONFIG指令可以是第3环指令,它可被任何用户区应用用来配置其自己的受保护域。

PCONFIG指令的操作码表明执行电路要执行用于配置平台特征的一个或多个功能。在一些实施例中,对于PCONFIG指令有显式操作对象,但存在多个隐式操作对象。具体地,第一寄存器(例如,EAX)存储了对要被调用的叶函数的指示,并且一个或多个其他寄存器(例如,RBX,RCX 和/或RDX)被用于叶特定的目的。注意,叶子允许了单个指令基于这些寄存器的值来执行不同的功能。

对于下面的描述,要执行的PCONFIG功能是支持使用包装blob的 MKTME密钥编程,或者使用包装blob的其他加密引擎编程。在一些实施例中,第一寄存器被设置为0或1以外的值。在一些实施例中,“其他”寄存器之一(例如,RBX)表明keyID控制值,并且这些寄存器中的另一个(例如,RCX)提供包装BIND_STRUCT的地址。keyID控制值被用于

图示的示例标识了使用PCONFIG指令执行域配置的软件1510和存储器安全性引擎145之间的调用流程。存储器安全性引擎145可包括任何引擎、控制器或者提供加密存储器保护的其他组件。软件1510可包括用于配置受存储器安全性引擎保护的域的任何软件,例如虚拟机管理器和/或其他管理软件。图示的调用流程开始于由软件1510选择用于针对特定域编程加密密钥的密钥编程模式(调用1502a)。例如,如下文进一步论述的,软件1510可以直接为该域指定密钥,或者可以请求生成随机密钥。然后,软件1510可以调用PCONFIG处理器指令来执行域配置(调用1502b)。当 PCONFIG指令被调用时,针对特定域的保护模式和密钥,存储器安全性引擎被编程(调用1502c)。然后,存储器安全性引擎向软件1510返回状态代码(调用1502d),然后该状态代码被软件1510处理(调用1502e)。

在一些实施例中,PCONFIG指令可以支持用于配置和管理受保护域的各种叶函数。例如,当PCONFIG指令被执行时,可以在硬件寄存器(例如,EAX寄存器)中指定要调用的特定叶函数。在一些实施例中,也可以在硬件寄存器(例如,RBX/RCX/RDX寄存器)中指定特定叶函数所使用的参数。

下面的表格说明了可用来实现对多个叶函数的支持的PCONFIG叶编码的示例。虽然只定义了一个叶函数(KEY_PROGRAM叶),但为了扩展PCONFIG指令的功能,可以使用保留的叶编码来定义额外的叶函数。

PCONFIG叶函数编码

PCONFIG指令的密钥编程叶函数(KEY_PROGRAM)可被用来针对受保护域编程密钥。在一些实施例中,可以在密钥编程结构 (KEY_PROGRAM_STRUCT)中指定密钥编程叶函数使用的参数,并且可以在硬件寄存器(例如,RBX寄存器)中指定密钥编程结构的地址。下面的表格说明了密钥编程结构(KEY_PROGRAM_STRUCT)的示例实施例。

密钥编程结构(KEY_PROGRAM_STRUCT)

如图所示,密钥编程结构标识了正被编程的特定域的KeyID,并且它还指定了密钥编程命令。在一些实施例中,例如,密钥编程叶函数可以支持多个密钥编程命令,并且期望的命令可以在密钥编程结构中指定。此外,在一些实施例中,密钥编程结构还可包括(一个或多个)保留字段,该保留字段可用于密钥编程叶函数的后续扩展。

下面的表格说明了密钥编程叶函数可以支持的密钥编程命令的示例。

密钥编程命令

在执行密钥编程叶函数之后,可以在硬件寄存器中指定返回值或状态代码,以表明密钥编程函数是否成功。下面的表格说明了密钥编程叶函数可以返回的状态代码的示例。

密钥编程叶函数返回的状态代码(KEY_PROGRAM)

虽然图示的实施例使用PCONFIG处理器指令来执行域配置,但其他实现方式可以使用替换和/或额外的方法来进行域配置。例如,在一些实施例中,可以使用硬件寄存器来执行域配置。例如,可以实现PCONFIG模型特定寄存器(MSR)来执行域配置,允许软件通过向PCONFIG MSR写入而调用PCONFIG操作(例如,执行WRMSR指令,在寄存器(例如 ECX寄存器)中传递PCONFIG MSR的索引)。此外,可以在硬件寄存器中传递PCONFIG操作(及其关联的叶函数和命令)的某些参数。例如,可以在硬件寄存器中传递密钥编程结构(KEY_PROGRAM_STRUCT)的地址,例如EDX寄存器、EAX寄存器、或者这两个寄存器(例如,对于 64比特存储器地址)。然后,可以按与上述类似的方式执行PCONFIG操作。

此外,在一些实施例中,PCONFIG操作可以利用包装blob来进行域密钥编程。以这种方式,可以对域密钥进行编程,而不将密钥透露给管理软件。在一些实施例中,例如,可以实现额外的PCONFIG叶函数,以使得密钥能够被包装,然后在被解包之后被编程到存储器安全性引擎。

在一些实施例中,存储器加密能力寄存器(ME_CAPABILITY_MSR) 可被用于允许软件发现存储器加密能力。例如,软件可以读取 ME_CAPABILITY_MSR(例如,使用读取MSR(RDMSR)指令)以标识所支持的加密类型和/或算法、可同时使用的加密密钥的最大数目、用于 keyID的比特的最大数目,等等。ME_CAPABILITY_MSR可被用于标识支持的加密算法、keyID的最大数目、密钥的最大数目,等等。

存储器加密激活寄存器(ME_ACTIVATE_MSR)可被用于激活加密存储器保护(例如,MKTME)。这个MSR可包括:用于衔接(engage) 只读锁(其至少锁定这个寄存器)的字段;用于启用存储器加密的字段;用于选择默认加密的密钥的字段;用于指定在从待机状态恢复时默认密钥发生了什么的字段;用于标识要使用的默认加密算法的字段;用于标识要用于keyID的比特的数目的字段;以及用于限制可以使用的加密算法的字段。

下面提供了用于实现PCONFIG指令的示例伪代码。

图16图示了将被存储在“其他”寄存器(例如,RBX)之一中的 KEYID_CTRL的示例配置。这个控制提供了加密算法和keyID,用于确定 MKTME引擎是否可以被编程。

图17图示了处理PCONFIG指令的实施例。该处理利用了执行电路、 PUF电路、加密电路和/或MAC电路中的一个或多个。

在1701,取得单个PCONFIG指令。例如,取得PCONFIG指令。 PCONFIG指令包括用于操作码的字段,以表明要根据叶操作对存储器保护控制器进行编程,其中第一隐式操作对象提供对叶操作的指示,第二隐式操作对象提供密钥标识符(keyID)和对加密算法的指示,第三隐式操作对象提供输入数据结构的位置,其中操作对象表明执行电路用于:使用由物理不可克隆功能(PUF)生成的解包密钥对来自输入数据结构的加密数据进行解密,解密的数据包括串接的密钥;基于keyID、基于所指示的加密算法使用串接的密钥(例如,一个或多个调整密钥和数据密钥中的一个或多个)对存储器保护控制器进行编程;并且设置操作状态。

在一些实施例中,执行电路用于:使用由PUF生成的密钥对来自输入数据结构的数据进行解密,并且将解密的数据存储在输出数据结构中,其中在输入数据结构中发现激发PUF的挑战;以及将操作状态存储在所标识的第一目的地操作对象中。在一些实施例中,通过将生成的密钥和来自输入数据结构的序列ID提供给密码引擎来执行解密。在一些实施例中,首先利用MAC比较来验证输入数据结构。例如,通过从输入数据结构中去除 MAC,然后在剩余数据上生成MAC,来计算MAC。然后对输入数据结构的MAC和生成的MAC进行比较,以确定包装blob的任何数据是否有变化。注意,在一些实施例中,整个输入数据结构在其他操作之前被拷贝到输出数据结构中。

在一些实施例中,在解码之前,在1702处,取得的单个指令被转化成另一指令集体系结构的一个或多个指令。另一指令集体系结构的一个或多个指令的执行将在功能上等同于根据操作码对单个指令的执行。

取得的单个指令(或者经转化的(一个或多个)指令)在1703处被解码。例如,取得的PCONFIG指令被解码电路解码,例如本文详述的解码电路。

在1705处取回与解码的指令的源操作对象相关联的数据值。例如,当源操作对象中的一个或多个是存储器操作对象时,来自所指示的存储器位置的数据被取回。

在1707,解码的指令(或者经转化的(一个或多个)指令)被执行电路(硬件)执行,例如本文详述的执行电路。对于PCONFIG指令,该执行将使得执行电路根据上面提到的操作码来执行解码的指令。

在一些实施例中,执行电路将使用由PUF生成的密钥对来自输入数据结构的数据进行解密,并且将解密的数据存储在输出数据结构中,其中在输入数据结构中发现激发PUF的挑战,并且将操作状态存储在所标识的第一目的地操作对象中。在一些实施例中,通过将生成的密钥和来自输入数据结构的序列ID提供给密码引擎来执行解密。在一些实施例中,首先利用 MAC比较来验证输入数据结构。例如,通过从输入数据结构中去除MAC,然后在剩余数据上生成MAC,来计算MAC。然后对输入数据结构的MAC 和生成的MAC进行比较,以确定包装blob的任何数据是否有变化。注意,在一些实施例中,整个输入数据结构在其他操作之前被拷贝到输出数据结构中。

在一些实施例中,该指令在1709处被提交或引退。

图18根据本公开实施例图示了由处理器执行的执行加密密钥编程 (PCONFIG)指令以对目标编程的方法1802。一般而言,PCONFIG指令允许了软件将加密密钥和其他目标特定信息编程到期望的目标。更具体而言,目标标识了密钥要被编程到的加密引擎。例如,目标可以是在平台上执行的MKTME(可从加州圣克拉拉的英特尔公司获得的多密钥全存储器加密)的实例。

在1804,确定是否支持SV-PUF。在一些实施例中,这个方面被设置在模型特定寄存器(MSR)中。如果确定不支持SV-PUF,那么由于一般保护故障,该过程在1806退出。然而,如果确定支持SV-PUF,那么该过程前进到1808,在1808处,确定由软件标识的目标(例如,加密引擎) 当前是否活跃,并且执行其他特定于目标的检查。例如,当目标是加密引擎时,PCONFIG指令可以检查由软件提供的KEYID是否在范围内。如果确定由软件标识的目标当前不活跃,那么由于一般保护故障,该过程在 1810退出。然而,如果确定由软件标识的目标当前活跃,那么该过程前进到1812,在1812处,确定源寄存器的内容是否对齐。如果确定源寄存器的内容没有对齐,那么由于一般保护故障,该过程在1814退出。然而,如果确定源寄存器的内容对齐,那么该过程前进到1816。

在1816,由存储在第二源操作对象(例如,RCX)中的地址信息所标识的输入结构被加载到存储器中。然后过程1802前进到1818。在1818,临时密钥ID控制被设置为等于由存储在第一源操作对象(例如,RBX)中的地址信息所标识的值。然后过程1802前进到1820。

在1820,确定在由存储在第一源操作对象中的地址信息所标识的输入结构中是否设置了任何保留字段。如果确定在由存储在第一源操作对象中的地址信息所标识的输入结构中设置了保留字段,那么由于一般保护故障,该过程在1822退出。然而,如果确定在由存储在第一源操作对象中的地址信息所标识的输入结构中没有设置保留字段,那么该过程前进到1824,在 1824处,确定在由存储在第一源操作对象中的地址信息所标识的临时密钥ID控制中是否设置了任何保留字段。如果确定在由存储在第一源操作对象中的地址信息所标识的临时密钥ID控制中设置了保留字段,那么由于一般保护故障,该过程在1826退出。然而,如果确定在由存储在第一源操作对象中的地址信息所标识的临时密钥ID控制中没有设置保留字段,那么该过程前进到1828。

在1828,确定解包目标(例如,由BIND_STRUCT中的BTID指示) 是否是加密引擎(或者在WRP过程期间由软件指定的另一目标)。如果确定解包目标不是加密引擎,那么该过程前进到1830,在1830处,零标志被设置为1,以表明数据没有被解包,并且目的地寄存器(例如,EAX) 被设置以表明无效目标差错。然而,如果确定解包目标是加密引擎,那么该过程前进到1832,在1832处,确定临时密钥ID控制是否有效。例如,临时密钥ID控制的值是否与KEY_PROGRAM_STRUCT相吻合(密钥ID 和加密算法是否相同)?

如果确定临时密钥ID控制无效,那么该过程前进到1834,在1834处,零标志被设置为1,以表明数据没有被解包,并且目的地寄存器(例如, EAX)被设置以表明无效密钥ID差错。然而,如果确定临时密钥ID控制有效,那么该过程前进到1836,在1836处,确定目标是否活跃。如果确定目标不活跃,那么该过程前进到1838,在1838处,零标志被设置为1,以表明数据没有被解包,并且目的地寄存器(例如,EAX)被设置以表明不活跃目标差错。然而,如果确定目标是活跃的,那么该过程前进到1840。

在1840,使用存储在BIND_STRUCT的BTDATA字段中的挑战,从 PUF获得解包密钥。然后过程1802前进到1842,在1842处,使用解包密钥和输入BIND_STRUCT的SEQID字段对来自输入BIND_STRUCT的 BTENDCDATA字段的数据进行解密。然后过程1802前进到1844。

在1844,确定解包是否成功。如果确定解包没有成功(例如,因为 MAC不匹配),那么该过程前进到1846,在1846处,零标志被设置为1,以表明数据没有被解包,并且目的地寄存器(例如,EAX)被设置以表明解包失败。然而,如果确定解包成功(例如,因为MAC匹配),那么该过程前进到1848,在1848处,确定密钥表是否被锁定。如果确定没有锁定,那么该过程前进到1850,在1850处,零标志被设置为1,以表明数据没有被解包,并且目的地寄存器(例如,EAX)被设置以表明设备繁忙差错。然而,如果确定存在锁定,那么该过程前进到1852,在1852处,解包的数据和密钥ID的(一个或多个)调整密钥被编程到目标加密引擎,零标志被设置为0,表明数据被成功解包,目的地寄存器(例如,EAX)被设置来指示成功,并且锁定被释放。然后过程1802前进到1854,在1854 处,所有其他标志被清除。

图19图示了用于PCONFIG指令的执行的伪代码的实施例。

上述指令等等可以体现在多种体系结构、系统、格式等等中,并且其示例将在下文详述。

示例计算机体系结构

下面详细给出对示例计算机体系结构的描述。本领域中已知的用于膝上型电脑、桌面型电脑、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器 (digital signal processor,DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备、以及各种其他电子设备的其他系统设计和配置,也是适当的。总之,能够包含本文公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般是适当的。

图20图示了示例系统的实施例。多处理器系统2000是一种点到点互连系统,并且包括多个处理器,其中包括经由点到点互连2050耦合的第一处理器2070和第二处理器2080。在一些实施例中,第一处理器2070和第二处理器2080是同构的。在一些实施例中,第一处理器2070和第二处理器2080是异构的。

处理器2070和2080被示为分别包括集成存储器控制器(integrated memorycontroller,IMC)硬件2072和2082。处理器2070还包括点到点 (P-P)接口2076和2078作为其互连控制器单元的一部分;类似地,第二处理器2080包括P-P接口2086和2088。处理器2070、2080可利用P-P接口电路2078、2088经由点到点(P-P)接口2050交换信息。IMC 2072和2082将处理器2070、2080耦合到各自的存储器,即存储器2032和存储器 2034,这些存储器可以是在本地附接到各个处理器的主存储器的一部分。

处理器2070、2080可各自利用P-P接口2076、2094、2086、2098经由个体P-P接口2052、2054来与芯片组2090交换信息。芯片组2090可以可选地经由高性能接口2092与协处理器2038交换信息。在一些实施例中,协处理器2038是专用处理器,例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。

共享缓存(未示出)可被包括在任一处理器2070、2080中,或者在两个处理器之外,但经由P-P互连与处理器连接,从而使得任一个或两个处理器的本地缓存信息在处理器被置于低功率模式中的情况下可被存储在该共享缓存中。

芯片组2090可经由接口2096耦合到第一互连2016。在一些实施例中,第一互连2016可以是外围组件互连(Peripheral Component Interconnect, PCI)互连,或者诸如快速PCI互连或另一I/O互连之类的互连。在一些实施例中,第一互连2016耦合到功率控制单元(power control unit,PCU) 2017,它可包括电路、软件和/或固件,以执行关于处理器2070、2080和/ 或协处理器2038的功率管理操作。PCU 2017向电压调节器(未示出)提供控制信息以使得电压调节器生成适当的调节电压。PCU 2017还提供控制信息以控制生成的操作电压。在各种实施例中,PCU 2017可包括多种功率管理逻辑单元(例如,电路)来执行基于硬件的功率管理。这种功率管理可以是完全受处理器控制的(例如,由各种处理器硬件控制,并且可由工作负载和/或功率约束、热约束或其他处理器约束所触发),和/或功率管理可响应于外部源(例如,平台或功率管理源或系统软件)而被执行。

PCU 2017被图示为作为与处理器2070和/或处理器2080分开的逻辑存在。在其他情况下,PCU 2017可在(一个或多个)处理器2070或2080的核心(未示出)的给定的一个或多个上执行。在一些情况下,PCU 2017可被实现为被配置为执行其自己的专用功率管理代码(有时称为P代码)的微控制器(专用或通用)或者其他控制逻辑。在另外的其他实施例中,PCU 2017要执行的功率管理操作可被实现在处理器外部,例如借由单独的功率管理集成电路(power management integrated circuit,PMIC)或者在处理器外部的另一组件来实现。在另外的其他实施例中,PCU 2017要执行的功率管理操作可被实现在BIOS或其他系统软件内。

各种I/O设备1414可耦合到第一互连2016,以及将第一互连2016耦合到第二互连2020的互连(总线)桥2018。在一些实施例中,一个或多个额外的处理器2015,例如协处理器、高吞吐量MIC处理器、GPGPU、加速器(例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列(FPGA)、或者任何其他处理器,耦合到第一互连2016。在一些实施例中,第二互连2020可以是低引脚数(low pin count,LPC)互连。各种设备可耦合到第二互连2020,包括例如键盘和/或鼠标2022、通信设备2027、和存储单元电路2028。存储单元电路2028可以是盘驱动器或其他大容量存储设备,在一些实施例中,它可包括指令/代码和数据2030。另外,音频I/O 2024可耦合到第二互连2020。注意,除了上述的点到点体系结构以外其他体系结构也是可能的。例如,取代点到点体系结构,诸如多处理器系统2000之类的系统可实现多点分支互连或者其他这种体系结构。

示例核心体系结构、处理器和计算机体系结构

可以按不同的方式、为了不同的目的、在不同的处理器中实现处理器核心。例如,这种核心的实现方式可包括:1)打算用于通用计算的通用有序核心;2)打算用于通用计算的高性能通用无序核心;3)主要打算用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实现方式可包括:1)包括打算用于通用计算的一个或多个通用有序核心和/或打算用于通用计算的一个或多个通用无序核心的CPU;以及2)包括主要打算用于图形和/或科学(吞吐量)计算的一个或多个专用核心的协处理器。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可包括:1) 协处理器在与CPU分开的芯片上;2)协处理器在与CPU相同的封装中、分开的管芯上;3)协处理器与CPU在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可在同一管芯上包括所描述的CPU(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)、上述的协处理器以及额外的功能。接下来描述示例核心体系结构,然后是对示例处理器和计算机体系结构的描述。

图21图示了处理器2100的实施例的框图,该处理器可具有多于一个核心,可具有集成的存储器控制器,并且可具有集成的图形。实线框图示了具有单个核心2102A、系统代理2110和一组一个或多个互连控制器单元电路2116的处理器2100,而可选的虚线框图示了具有多个核心2102(A)- (N)、系统代理单元电路2110中的一组一个或多个集成存储器控制单元电路2114和专用逻辑2108以及一组一个或多个互连控制器单元电路2116的替换处理器2100。注意处理器2100可以是图20的处理器2070、2080、 2038或2015之一。

从而,处理器2100的不同实现方式可包括:1)其中专用逻辑2108是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心,未示出),并且核心2102(A)-(N)是一个或多个通用核心(例如,通用有序核心、通用无序核心、或者两者的组合)的CPU;2)其中核心2102(A)-(N)是大量的主要打算用于图形和/或科学(吞吐量)的专用核心的协处理器;以及3)其中核心2102(A)-(N)是大量的通用有序核心的协处理器。从而,处理器 2100可以是通用处理器、协处理器或者专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元电路)、高吞吐量集成众核(many integrated core,MIC)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。处理器2100可被实现在一个或多个芯片上。处理器2100可以是一个或多个衬底的一部分和/或可利用若干个工艺技术中的任何一者被实现在一个或多个衬底上,这些技术例如是BiCMOS、 CMOS或NMOS。

存储器层次体系包括核心2102(A)-(N)内的一级或多级缓存单元电路 2104(A)-(N)、一组或一个或多个共享缓存单元电路2106、以及耦合到该组集成存储器控制器单元电路2114的外部存储器(未示出)。该组一个或多个共享缓存单元电路2106可包括一个或多个中间级别缓存(例如第2级 (L2)、第3级(L3)、第4级(4)或者其他级别的缓存),比如最后一级缓存(last level cache,LLC),和/或这些的组合。虽然在一些实施例中基于环的互连网络电路2112互连专用逻辑2108(例如,集成图形逻辑)、该组共享缓存单元电路2106和系统代理单元电路2110,但替换实施例使用任何数目的公知技术来互连这种单元。在一些实施例中,在共享缓存单元电路2106中的一个或多个和核心2102(A)-(N)之间维持一致性。

在一些实施例中,核心2102(A)-(N)中的一个或多个能够进行多线程处理。系统代理单元电路2110包括协调和操作核心2102(A)-(N)的那些组件。系统代理单元电路2110可包括例如功率控制单元(power control unit, PCU)电路和/或显示单元电路(未示出)。PCU可以是或者可以包括调节核心2102(A)-(N)和专用逻辑2108(例如,集成图形逻辑)的功率状态所需要的逻辑和组件。显示单元电路用于驱动一个或多个在外部连接的显示器。

核心2102(A)-(N)就体系结构指令集而言可以是同构的或者异构的;也就是说,核心2102(A)-(N)中的两个或更多个可能够执行同一指令集,而其他核心可能够只执行该指令集的子集或者不同的指令集。

示例核心体系结构

有序和无序核心框图

图22(A)是根据本公开实施例图示出示例有序流水线和示例寄存器重命名、无序发出/执行流水线两者的框图。图22(B)是根据本公开实施例图示出要被包括在处理器中的示例有序体系结构核心和示例寄存器重命名、无序发出/执行体系结构核心两者的框图。图22(A)-(B)中的实线框图示了有序流水线和有序核心,而可选的虚线框图示了寄存器重命名、无序发出/ 执行流水线和核心。考虑到有序方面是无序方面的子集,将描述无序方面。

在图22(A)中,处理器流水线2200包括取得阶段2202、可选的长度解码阶段2204、解码阶段2206、可选的分配阶段2208、可选的重命名阶段 2210、调度(也称为调遣或发出)阶段2212、可选的寄存器读取/存储器读取阶段2214、执行阶段2216、写回/存储器写入阶段2218、可选的异常处理阶段2222、以及可选的提交阶段2224。在这些处理器流水线阶段的每一者中可执行一个或多个操作。例如,在取得阶段2202期间,从指令存储器取得一个或多个指令,在解码阶段2206期间,可以对取得的一个或多个指令进行解码,可以生成使用转发寄存器端口的地址(例如,加载存储单元(load store unit,LSU)地址),并且可以执行分支转发(例如,立即数偏移或者链接寄存器(link register,LR))。在一个实施例中,解码阶段2206和寄存器读取/存储器读取阶段2214可以被组合到一个流水线阶段中。在一个实施例中,在执行阶段2216期间,可以执行解码的指令,可以执行到高级微控制器总线(AdvancedMicrocontroller Bus,AHB)接口的LSU地址/数据流水线化,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。

作为示例,图22(B)中所示的示例寄存器重命名、无序发出/执行核心体系结构2290可实现流水线2200如下:1)指令取得2238执行取得和长度解码阶段2202和2204;2)解码单元电路2240执行解码阶段2206;3) 重命名/分配器单元电路2252执行分配阶段2208和重命名阶段2210;4) 调度器单元电路2256执行调度阶段2212;5)物理寄存器文件单元电路2258和存储器单元电路2270执行寄存器读取/存储器读取阶段2214;执行集群2260执行执行阶段2216;6)存储器单元电路2270和物理寄存器文件单元电路2258执行写回/存储器写入阶段2218;7)在异常处理阶段2222 中可涉及各种单元(单元电路);并且8)引退单元电路2254和物理寄存器文件单元电路2258执行提交阶段2224。

图22(B)示出了处理器核心2290包括耦合到执行引擎单元电路2250的前端单元电路2230,并且两者都耦合到存储器单元电路2270。核心2290 可以是精简指令集计算(reduced instruction set computing,RISC)核心、复杂指令集计算(complexinstruction set computing,CISC)核心、超长指令字(very long instruction word,VLIW)核心、或者混合或替换核心类型。作为另外一个选项,核心2290可以是专用核心,例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(general purposecomputing graphics processing unit,GPGPU)核心、图形核心,等等。

前端单元电路2230可包括分支预测单元电路2232,其耦合到指令缓存单元电路2234,指令缓存单元电路2234耦合到指令转化后备缓冲器 (translation lookasidebuffer,TLB)2236,指令TLB 2236耦合到指令取得单元电路2238,指令取得单元电路2238耦合到解码单元电路2240。在一个实施例中,指令缓存单元电路2234被包括在存储器单元电路2270中,而不是前端单元电路2230。解码单元电路2240(或解码器)可对指令解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或者其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或者其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元电路2240可还包括地址生成单元电路 (AGU,未示出)。在一个实施例中,AGU使用转发的寄存器端口来生成LSU地址,并且可进一步执行分支转发(例如,立即数偏移分支转发, LR寄存器分支转发,等等)。可利用各种不同的机制来实现解码单元电路 2240。适当机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列 (programmable logic array,PLA)、微代码只读存储器(read onlymemory, ROM),等等。在一个实施例中,核心2290包括微代码ROM(未示出) 或其他介质,其为某些宏指令存储微代码(例如,在解码单元电路2240中或者以其他方式在前端单元2230内)。在一个实施例中,解码单元电路 2240包括微操作(micro-op)或操作缓存(未示出),以保持/缓存在解码 2206或处理器流水线2200的其他阶段期间生成的经解码的操作、微标记或微操作。解码单元电路2240可耦合到执行引擎单元电路2250中的重命名/分配器单元电路2252。

执行引擎电路2250包括重命名/分配器单元电路2252,其耦合到引退单元电路2254和一组一个或多个调度器电路2256。调度器电路2256表示任何数目的不同调度器,包括预留站、中央指令窗口,等等。在一些实施例中,调度器电路2256可包括算术逻辑单元(arithmetic logic unit,ALU) 调度器/调度电路、ALU队列、算术生成单元(arithmeticgeneration unit, AGU)调度器/调度电路、AGU队列,等等。调度器电路2256耦合到物理寄存器文件电路2258。物理寄存器文件电路2258的每一者表示一个或多个物理寄存器文件,这些物理寄存器文件中的不同物理寄存器文件存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针),等等。在一个实施例中,物理寄存器文件单元电路2258包括向量寄存器单元电路、写入掩码寄存器单元电路、以及标量寄存器单元电路。这些寄存器单元可提供体系结构式向量寄存器、向量掩码寄存器、通用寄存器,等等。物理寄存器文件单元电路2258与引退单元电路2254(也称为退役队列或引退队列)重叠以说明可用来实现寄存器重命名和无序执行的各种方式(例如,利用(一个或多个)重排序缓冲器(reorder buffer,ROB)和(一个或多个)引退寄存器文件;利用(一个或多个)未来文件、 (一个或多个)历史缓冲器、以及(一个或多个)引退寄存器文件;利用寄存器图谱和寄存器的池;等等)。引退单元电路2254和物理寄存器文件电路2258耦合到(一个或多个)执行集群2260。(一个或多个)执行集群2260包括一组一个或多个执行单元电路2262和一组一个或多个存储器访问电路2264。执行单元电路2262可在各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)上执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)。虽然一些实施例可包括专用于特定功能或功能集合的若干个执行单元或执行单元电路,但其他实施例可只包括一个执行单元电路或者全部执行所有功能的多个执行单元/执行单元电路。调度器电路2256、物理寄存器文件单元电路2258、以及(一个或多个)执行集群2260被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线,它们各自具有其自己的调度器电路、物理寄存器文件单元电路和/或执行集群—并且在单独的存储器访问流水线的情况下,实现了某些实施例,其中只有此流水线的执行集群具有存储器访问单元电路2264)。还应当理解,在使用分开流水线的情况下,这些流水线中的一个或多个可以是无序发出/ 执行,并且其余的是有序的。

在一些实施例中,执行引擎单元电路2250可包括PUF电路2280,而在其他实施例中,PUF电路2280可以在执行引擎单元电路2250的外部。在一些实施例中,执行引擎单元电路2250可以执行到高级微控制器总线 (AHB)接口(未示出)的加载存储单元(LSU)地址/数据流水线化,以及地址阶段和写回、数据阶段加载、存储、以及分支。

存储器访问电路2264的集合耦合到存储器单元电路2270,存储器单元电路2270包括数据TLB单元电路2272,数据TLB单元电路2272耦合到数据缓存电路2274,数据缓存电路2274耦合到第2级(L2)缓存电路 2276。在一个示例实施例中,存储器访问单元电路2264可包括加载单元电路、存储地址单元电路、以及存储数据单元电路,它们中的每一者耦合到存储器单元电路2270中的数据TLB电路2272。指令缓存电路2234进一步耦合到存储器单元电路2270中的第2级(L2)缓存单元电路2276。在一个实施例中,指令缓存2234和数据缓存2274在L2缓存单元电路2276、第3级(L3)缓存单元电路(未示出)和/或主存储器中被组合成单个指令和数据缓存(未示出)。L2缓存单元电路2276耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。

核心2290可支持一个或多个指令集(例如,x86指令集(带有已随着较新版本添加的一些扩展);MIPS指令集;ARM指令集(带有可选的额外扩展,例如NEON)),包括本文描述的(一个或多个)指令。在一个实施例中,核心2290包括逻辑来支持紧缩数据指令集扩展(例如,AVX1、 AVX2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。

在一些实施例中,本文ISA(例如,WRP、UNWRP、PCONFIG)被核心2290(图22(B))的执行引擎2250的(一个或多个)执行集群2260执行。例如,执行单元电路2262可以执行本文ISA以与PUF电路2280通信,将挑战2(A)06传递给PUF电路2280,并且从PUF电路2280接收PUF派生密钥2(A)04。

示例执行单元电路

图23图示了执行单元电路的实施例,例如图22(B)的执行单元电路 2262。如图所示,执行单元电路2262可包括一个或多个ALU电路2301、向量/SIMD单元电路2303、加载/存储单元电路2305、和/或分支/跳转单元电路2307。ALU电路2301执行整数算术和/或布尔操作。向量/SIMD单元电路2303对紧缩数据(例如,SIMD/向量寄存器)执行向量/SIMD操作。加载/存储单元电路2305执行加载和存储指令,以将数据从存储器加载到寄存器中,或者从寄存器存储到存储器。加载/存储单元电路2305也可以生成地址。分支/跳转单元电路2307依据指令引起到某个存储器地址的分支或跳转。FPU电路2309执行浮点算术。执行单元电路2262的宽度依据实施例而有所不同,并且可以在例如从16比特到1024比特的范围中。在一些实施例中,两个或更多个更小的执行单元被从逻辑上组合以形成更大的执行单元(例如,两个128比特执行单元被从逻辑上组合以形成256比特执行单元)。

示例寄存器体系结构

图24是根据一些实施例的寄存器体系结构2400的框图。如图所示,存在向量/SIMD寄存器2410,其宽度从128比特到1024比特不等。在一些实施例中,向量/SIMD寄存器2410在物理上是512比特的,并且取决于映射,只有一些低位比特被使用。例如,在一些实施例中,向量/SIMD寄存器2410是512比特的ZMM寄存器:低位256比特被用于YMM寄存器,并且低位128比特被用于XMM寄存器。因此,存在寄存器的覆盖。在一些实施例中,向量长度字段在最大长度和一个或多个其他更短的长度之间做出选择,其中每个这种更短长度是前一长度的一半长度;标量操作是在 ZMM/YMM/XMM寄存器中的最低阶数据元素位置上执行的操作;更高阶数据元素位置或者被保持与其在该指令之前相同,或者被归零,这取决于实施例。

在一些实施例中,寄存器体系结构2400包括写入掩码/谓词寄存器 2415。例如,在一些实施例中,有8个写入掩码/谓词寄存器(有时称为k0 至k7),其中每一者是16比特、32比特、64比特或128比特大小的。写入掩码/谓词寄存器2415可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间免受更新)和/或归零(例如,归零向量掩码允许了目的地中的任何元素集合在任何操作的执行期间被归零)。在一些实施例中,给定的写入掩码/谓词寄存器2415中的每个数据元素位置对应于目的地的一个数据元素位置。在其他实施例中,写入掩码/谓词寄存器 2415是可缩放的,并且由给定向量元素的设定数目的使能比特组成(例如,每个64比特向量元素有8个使能比特)。

寄存器体系结构2400包括多个通用寄存器2425。这些寄存器可以是 16比特、32比特、64比特等等,并且可被用于标量操作。在一些实施例中,这些寄存器被用名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、 RSP以及R8至R15来引用。

在一些实施例中,寄存器体系结构2400包括标量浮点寄存器2445,它被用于使用x87指令集扩展的32/64/80比特浮点数据上的标量浮点操作,或者作为MMX寄存器,来对64比特紧缩整数数据执行操作,以及为 MMX和XMM寄存器之间执行的一些操作保存操作对象。

一个或多个标志寄存器2440(例如,EFLAGS,RFLAGS,等等)存储状态和控制信息,用于算术、比较和系统操作。例如,一个或多个标志寄存器2440可以存储条件代码信息,例如进位、奇偶性、辅助进位、零、符号、以及溢出。在一些实施例中,一个或多个标志寄存器2440被称为程序状态和控制寄存器。

片段寄存器2420包含用于访问存储器的片段点。在一些实施例中,这些寄存器由名称CS、DS、SS、ES、FS和GS来称呼。

机器特定寄存器(machine-specific register,MSR)2435控制和报告处理器性能。大多数MSR 2435处理与系统有关的功能,并且是应用程序不可访问的。机器检查寄存器2460由用于检测和报告硬件差错的控制、状态和差错报告MSR组成。

一个或多个指令指针寄存器2430存储指令指针值。(一个或多个)控制寄存器2455(例如,CR0-CR4)确定处理器(例如,处理器2070、2080、 2038、2018和/或2100)的操作模式和当前执行任务的特性。调试寄存器 2450控制并允许监视处理器或核心的调试操作。

存储器管理寄存器2465指定用于保护模式存储器管理中的数据结构的位置。这些寄存器可包括GDTR、IDRT、任务寄存器、以及LDTR寄存器。

本公开的替换实施例可使用更宽或更窄的寄存器。此外,本公开的替换实施例可使用更多、更少或不同的寄存器文件和寄存器。

指令集

指令集体系结构(ISA)可包括一个或多个指令格式。给定的指令格式可定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要在其上执行该操作的(一个或多个)操作对象和/ 或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为包括的字段更少) 和/或被定义为具有以不同方式被解读的给定字段。从而,ISA的每个指令是利用给定的指令格式来表达的(并且如果定义了的话,以该指令格式的指令模板中的给定一个指令模板来表达)并且包括用于指定操作和操作对象的字段。例如,示例ADD指令具有特定的操作码和指令格式,该格式包括操作码字段来指定该操作码并且包括操作对象字段来选择操作对象 (源1/目的地和源2),并且这个ADD指令在指令流中的出现将在操作对象字段中具有选择特定操作对象的特定内容。

示例指令格式

可按不同的格式来实现本文描述的(一个或多个)指令的实施例。此外,下文详述了示例系统、体系结构和流水线。(一个或多个)指令的实施例可在这种系统、体系结构和流水线上被执行,但不限于详述的那些。

图25图示了指令格式的实施例。如图所示,指令可包括多个组件,包括但不限于一个或多个字段,用于:一个或多个前缀2501、操作码2503、寻址信息2505(例如,寄存器标识符、存储器寻址信息,等等)、位移值 2507、和/或立即数2509。注意,一些指令利用了该格式的一些或所有字段,而其他指令可能只使用操作码2503的字段。在一些实施例中,图示的顺序是这些字段要被编码的顺序,然而,应当明白,在其他实施例中,这些字段可被以不同的顺序来编码、被组合,等等。

(一个或多个)前缀字段2501当被使用时会修改指令。在一些实施例中,一个或多个前缀被用于重复字符串指令(例如,0xF0、0xF2、0xF3,等等),以提供片段覆盖(例如,0x2E、0x36、0x3E、0x26、0x64、0x65、0x2E、0x3E,等等),以执行总线锁定操作,和/或改变操作对象(例如, 0x66)和地址大小(例如,0x67)。某些指令要求强制性的前缀(例如, 0x66、0xF2、0xF3,等等)。这些前缀中的某些可能被认为是“传统”前缀。其他前缀——其一个或多个示例在此详述——表明和/或提供了进一步的能力,例如指定特定的寄存器,等等。其他前缀通常在传统前缀之后。

操作码字段2503被用于至少部分地定义在指令解码时要执行的操作。在一些实施例中,在操作码字段2503中编码的主操作码的长度为1、2或 3个字节。在其他实施例中,主操作码可以是不同的长度。额外的3比特操作码字段有时被编码在另一个字段中。

寻址字段2505被用于寻址指令的一个或多个操作对象,例如存储器中的位置或者一个或多个寄存器。图26图示了寻址字段2505的实施例。在这个图示中,示出了可选的ModR/M字节2602和可选的缩放比例、索引、基址(Scale,Index,Base,SIB)字节2604。ModR/M字节2602和SIB字节 2604被用于编码一指令的多达两个操作对象,每个操作对象是直接寄存器或有效存储器地址。注意,这些字段中的每一者是可选的,即,不是所有的指令都包括这些字段中的一个或多个。MOD R/M字节2602包括MOD 字段2642、寄存器字段2644、和R/M字段2646。

MOD字段2642的内容区分存储器访问和非存储器访问模式。在一些实施例中,当MOD字段2642的值为b11时,就利用了寄存器直接寻址模式,否则就使用寄存器间接寻址。

寄存器字段2644可编码目的地寄存器操作对象或者源寄存器操作对象,或者可编码操作码扩展,并且可不被用于编码任何指令操作对象。寄存器索引字段3644的内容直接指定或者通过地址生成指定源或目的地操作对象的位置(在寄存器中或者在存储器中)。在一些实施例中,寄存器字段 2644被补充以来自前缀(例如,前缀2501)的额外比特,以允许更大的寻址。

R/M字段2646可被用于编码引用存储器地址的指令操作对象,或者可被用于编码目的地寄存器操作对象或源寄存器操作对象。注意R/M字段 2646在一些实施例中可被与MOD字段2642相组合以规定寻址模式。

SIB字节2604包括缩放比例字段2652、索引字段2654、以及基址字段2656,以用于地址的生成。缩放比例字段2652指示缩放因子。索引字段2654指定要使用的索引寄存器。在一些实施例中,索引字段2654被补充以来自前缀(例如,前缀2501)的额外比特,以允许更大的寻址。基址字段2656指定了要使用的基址寄存器。在一些实施例中,基址字段2656 被补充以来自前缀(例如,前缀2501)的额外比特,以允许更大的寻址。在实践中,缩放比例字段2652的内容允许了缩放索引字段2654的内容以进行存储器地址生成(例如,对于使用2

一些寻址形式利用位移值来生成存储器地址。例如,可以根据2

在一些实施例中,立即数字段2509为指令指定立即数。立即数可以被编码为1字节值、2字节值、4字节值,等等。

图27图示了第一前缀2501(A)的实施例。在一些实施例中,第一前缀 2501(A)是REX前缀的实施例。使用这个前缀的指令可以指定通用寄存器、 64比特紧缩数据寄存器(例如,单指令、多数据(single instruction, multiple data,SIMD)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,CR8-CR15和DR8-DR15)。

使用第一前缀2501(A)的指令可以使用3比特字段指定最多达三个寄存器,这取决于格式:1)使用reg字段2644和Mod R/M字节2602的R/M 字段2646;2)使用Mod R/M字节2602与SIB字节2604,包括使用reg字段2644和基址字段2656和索引字段2654;或者3)使用操作码的寄存器字段。

在第一前缀2501(A)中,比特位置7:4被设置为0100。比特位置3(W) 可被用于确定操作对象大小,但可能不会单独确定操作对象宽度。因此,当W=0时,操作对象大小由代码段描述符(code segment descriptor, CS.D)决定,而当W=1时,操作对象大小为64比特。

注意,添加另一个比特则允许了寻址16(2

在第一前缀2501(A)中,比特位置2(R)可以是MOD R/M reg字段 2644的扩展,并且当该字段编码通用寄存器、64比特紧缩数据寄存器(例如,SSE寄存器)或者控制或调试寄存器时,可被用来修改ModR/M reg字段2644。当Mod R/M字节2602指定其他寄存器或定义扩展操作码时,R 被忽略。

比特位置1(X)X比特可以修改SIB字节索引字段2654。

比特位置B(B)B可以修改Mod R/M R/M字段2646中的基址或SIB字节基址字段2656;或者它可以修改用于访问通用寄存器(例如,通用寄存器2425)的操作码寄存器字段。

图28(A)-(D)图示了如何使用第一前缀2501(A)的R、X和B字段的实施例。图28(A)图示了当SIB字节26 04不被用于存储器寻址时,来自第一前缀2501(A)的R和B被用来扩展MOD R/M字节2602的reg字段2644和 R/M字段2646。图28(B)图示了当不使用SIB字节26 04时,来自第一前缀 2501(A)的R和B被用来扩展MOD R/M字节2602的reg字段2644和R/M 字段2646(寄存器-寄存器寻址)。图28(B)图示了当SIB字节26 04被用于存储器寻址时,来自第一前缀2501(A)的R、X和B被用于扩展MOD R/M字节2602的reg字段2644以及索引字段2654和基址字段2656。图 28(D)图示了当寄存器被编码在操作码2503中时来自第一前缀2501(A)的B 被用来扩展MOD R/M字节2602的reg字段2644。

图29(A)-(B)图示了第二前缀2501(B)的实施例。在一些实施例中,第二前缀2501(B)是VEX前缀的实施例。第二前缀2501(B)编码允许了指令具有两个以上的操作对象,并且允许了SIMD向量寄存器(例如,向量 /SIMD寄存器2410)长于64比特(例如,128比特和256比特)。第二前缀2501(B)的使用提供了三操作对象(或更多)的语法。例如,先前的两操作对象指令执行比如A=A+B之类的操作,这覆写了源操作对象。对第二前缀2501(B)的使用使得操作对象能够执行非破坏性操作,例如A=B +C。

在一些实施例中,第二前缀2501(B)有两种形式——两字节形式和三字节形式。两字节的第二前缀2501(B)主要用于128比特、标量和一些256 比特指令,而三字节的第二前缀2501(B)提供了第一前缀2501(A)和3字节操作码指令的紧凑替换。

图29(A)图示了第二前缀2501(B)的两字节形式的实施例。在一个示例中,格式字段2901(字节0 2903)包含值C5H。在一个示例中,字节1 2905在比特[7]中包括“R”值。这个值是第一前缀2501(A)的相同值的补码。比特[2]被用来规定向量的长度(L)(其中0的值是标量或者128比特向量,而1的值是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码外延性(例如,00=无前缀,01=66H,10=F3H,并且11= F2H)。被示为vvvv的比特[6:3]可被用于:1)编码了以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)编码了对于某些向量移位以反码形式指定的目的地寄存器操作对象;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。

使用这个前缀的指令可以使用Mod R/M R/M字段2646来编码引用存储器地址的指令操作对象,或者编码目标寄存器操作对象或源寄存器操作对象。

使用这个前缀的指令可以使用Mod R/M reg字段2644来编码目的地寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对待,而不被用于编码任何指令操作对象。

对于支持四个操作对象的指令语法,vvvv、Mod R/M R/M字段2646和 Mod R/M reg字段2644编码了四个操作对象中的三个。然后立即数2509的比特[7:4]被用来编码第三源寄存器操作对象。

图29(B)图示了第二前缀2501(B)的三字节形式的实施例。在一个示例中,格式字段2911(字节0 2913)包含值C4H。字节1 2915在比特[7:5]中包括“R”、“X”和“B”,它们是第一前缀2501(A)的相同值的补码。字节1 2915的比特[4:0](示为mmmmm)包括内容来根据需要编码一个或多个隐含的前导操作码字节。例如,00001意味着0FH前导操作码,00010 意味着0F38H前导操作码,00011意味着0F3AH前导操作码,等等。

字节2 2917的比特[7]与第一前缀2501(A)的W使用相似,包括帮助确定可提升的操作对象大小。比特[2]被用来规定向量的长度(L)(其中0 的值是标量或者128比特向量,而1的值是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码外延性(例如,00=无前缀,01=66H, 10=F3H,并且11=F2H)。被示为vvvv的比特[6:3]可被用于:1)编码了以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)编码了对于某些向量移位以反码形式指定的目的地寄存器操作对象;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。

使用这个前缀的指令可以使用Mod R/M R/M字段2646来编码引用存储器地址的指令操作对象,或者编码目标寄存器操作对象或源寄存器操作对象。

使用这个前缀的指令可以使用Mod R/M reg字段2644来编码目的地寄存器操作对象或者源寄存器操作对象,或者被作为操作码扩展来对待,而不被用于编码任何指令操作对象。

对于支持四个操作对象的指令语法,vvvv、Mod R/M R/M字段2646和 Mod R/M reg字段2644编码了四个操作对象中的三个。然后立即数2509的比特[7:4]被用来编码第三源寄存器操作对象。

图30图示了第三前缀2501(C)的实施例。在一些实施例中,第三前缀 2501(C)是EVEX前缀的实施例。第三前缀2501(C)的图示实施例是四字节前缀。

第三前缀2501(C)可以在64比特模式中编码32个向量寄存器(例如, 128比特、256比特和512比特寄存器)。在一些实施例中,利用写入掩码 /操作掩码(opmask)(见先前图中对于寄存器的论述,例如图24)或预测的指令利用这个前缀。操作掩码寄存器允许了进行条件处理或选择控制。操作掩码指令——其源/目的地操作对象是操作掩码寄存器并且将操作掩码寄存器的内容视为单个值——是使用第二前缀2501(B)来编码的。

第三前缀2501(C)可以编码指令类所特定的功能(例如,具有“加载+ 操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。

第三前缀2501(C)的第一字节是格式字段3011,它在一个示例中具有 62H的值。随后的字节被称为有效载荷字节3015-3019,并且共同形成 P[23:0]的24比特值,以一个或多个字段的形式提供特定的能力(在此详述)。

在一些实施例中,有效载荷字节3019的P[1:0]与低位的两个mmmm比特相同。在一些实施例中,P[3:2]被保留。比特P[4](R’)在与P[7]和 Mod R/M reg字段2644相组合时允许了访问高16向量寄存器集合。当不需要SIB类型寻址时,P[6]也可提供对高16向量寄存器的访问。P[7:5]由R、 X和B构成,它们是向量寄存器、通用寄存器、存储器寻址的操作对象指定符修饰符比特,并且当与Mod R/M寄存器字段2644和Mod R/M R/M字段2646相组合时,允许了访问低8个寄存器之外的下一组8个寄存器。 P[9:8]提供等同于一些传统前缀的操作码外延性(例如,00=无前缀,01= 66H,10=F3H,并且11=F2H)。P[10]在一些实施例中是固定值1。被示为vvvv的P[14:11]可被用于:1)编码了以反转(反码)形式指定的第一源寄存器操作对象,并且对于具有2个或更多个源操作对象的指令是有效的;2)编码了对于某些向量移位以反码形式指定的目的地寄存器操作对象;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。

P[15]类似于第一前缀2501(A)和第二前缀2511(B)的W,并且可以作为操作码扩展比特或操作对象大小提升。

P[18:16]指定操作掩码(写入掩码)寄存器(例如,写入掩码/谓词寄存器2415)中的寄存器的索引。在一个实施例中,特定值aaa=000具有特殊行为,暗示着没有操作掩码被用于特定指令(这可按多种方式来实现,包括使用硬连线到全一的操作掩码或者绕过掩蔽硬件的硬件)。当合并时,向量掩码允许了目的地中的任何一组元素在(由基本操作和增强操作指定的)任何操作的执行期间免受更新,而在其他实施例中则保留目的地的每个元素的旧值,其中相应的掩码比特具有0。与之不同,当归零向量掩码允许目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被归零时,在一个实施例中,当相应的掩码比特具有0值时,目的地的一个元素被设置为0。这个功能的子集是控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不是必须要连续。从而,操作掩码字段允许了部分向量操作,包括加载、存储、算术、逻辑,等等。虽然描述了其中操作掩码字段的内容选择了若干个操作掩码寄存器中包含要使用的操作掩码的一个操作掩码寄存器(从而操作掩码字段的内容间接标识了那个要执行的掩蔽)的实施例,但作为替代或附加,替换实施例允许了掩码写入字段的内容直接指定要执行的掩蔽。

P[19]可以与P[14:11]相组合,来以非破坏性源语法编码第二源向量寄存器,该语法可以使用P[19]来访问高16个向量寄存器。P[20]编码多种功能,这些功能在不同类别的指令中有所不同,并且可影响向量长度/舍入控制指定符字段(P[22:21])的含义。P[23]表明对合并-写入掩蔽的支持(例如,当被设置为0时)或者对归零和合并-写入掩蔽(例如,当被设置为1 时)的支持。

在下面的表格中详述了在使用第三前缀2501(C)的指令中对寄存器的编码的示例实施例。

64比特模式中的32寄存器支持

32比特模式中的编码寄存器指定符

操作掩码寄存器指定符编码

程序代码可被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可被应用到一个或多个输出设备。对于本公开而言,处理系统包括任何具有处理器的系统,例如但不限于数字信号处理器(DSP)、微控制器、专用集成电路(application specificintegrated circuit,ASIC)或者微处理器。

可以用高级别过程式或面向对象的编程语言来实现程序代码以与处理系统进行通信。如果希望,也可以用汇编或机器语言来实现程序代码。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是经编译或者经解译的语言。

可以用硬件、软件、固件或者这种实现方案的组合来实现本文公开的机制的实施例。本公开的实施例可被实现为在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备、以及至少一个输出设备的可编程系统上执行的计算机程序或程序代码。

至少一个实施例的一个或多个方面可由被存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令来实现,这些代表性指令当被机器读取时使得该机器制作逻辑来执行本文描述的技术。这种被称为“IP核心”的表现形式可被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制作机器中。

这种机器可读存储介质可包括但不限于由机器或设备制造或形成的物品的非暂态有形布置,包括诸如以下项之类的存储介质:硬盘,任何其他类型的盘(包括软盘、光盘、致密盘只读存储器(compact disk read-only memory,CD-ROM)、可改写致密盘(compactdisk rewritable,CD-RW)、以及磁光盘),半导体设备(诸如,只读存储器(read-onlymemory, ROM),诸如动态随机访问存储器(dynamic random access memory, DRAM)、静态随机访问存储器(static random access memory,SRAM) 之类的随机访问存储器(randomaccess memory,RAM),可擦除可编程只读存储器(erasable programmable read-onlymemory,EPROM),闪速存储器,电可擦除可编程只读存储器(electrically erasableprogrammable read- only memory,EEPROM),相变存储器(phase change memory,PCM)),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。

因此,本公开的实施例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(Hardware Description Language,HDL)。这种实施例也可被称为程序产品。

仿真(包括二进制转化、代码变形等等)

在一些情况下,指令转换器可被用于将指令从源指令集转换到目标指令集。例如,指令转换器可将指令转化(例如,利用静态二进制转化、包括动态编译的动态二进制转化)、变形、仿真或者以其他方式转换到要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上一部分在处理器外。

图31是根据本公开实施例与使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令相对比的框图。在图示的实施例中,指令转换器是软件指令转换器,虽然可替换地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图31示出了高级别语言3102的程序可被利用第一ISA编译器3104来编译以生成第一ISA二进制代码3106,第一ISA二进制代码3106可由具有至少一个第一指令集核心的处理器3116 原生执行。具有至少一个第一ISA指令集核心的处理器3116表示任何这样的处理器:这种处理器可通过兼容地执行或以其他方式处理(1)第一ISA 指令集核心的指令集的实质部分或者(2)目标为在具有至少一个第一ISA 指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本,来执行与具有至少一个第一ISA指令集核心的

示例性实施例包括但不限于:

1.一种装置,包括:

解码器电路,来对单个指令解码以生成解码的指令,所述解码的指令包括:1)一个或多个字段,来标识第一目的地操作对象,2)一个或多个字段,来标识第二目的地操作对象,所述第二目的地操作对象或者存储在所述指令的执行之后具有解密的数据的输出数据结构,或者存储用于存储具有在所述指令的执行之后具有解密的数据的数据结构的位置,3)一个或多个字段,来标识源操作对象,其中所述源操作对象或者存储要被用于解密过程中的输入数据结构,或者存储要被用于解密过程中的输入数据结构的位置,以及4)用于操作码的一个或多个字段,所述操作码表明执行电路至少:用物理不可克隆功能(PUF)生成的加密密钥对来自所述输入数据结构的秘密信息进行加密,将包装的秘密信息绑定到目标,更新所述输入数据结构,在更新的数据结构上生成MAC,将所述MAC存储在所述输入数据结构中以生成包装的输出数据结构,根据所述第二目的地操作对象对所述指令的用途来存储具有加密的秘密信息和对所述目标的指示的包装的输出数据结构;以及

执行电路,来根据所述操作码执行所述解码的指令。

2.如示例1所述的装置,其中所述输出数据结构包括目标的标识符。

3.如示例2所述的装置,其中所述目标是以下之一:平台和处理器配置,或者加密引擎。

4.如示例1所述的装置,其中所述操作对象是寄存器。

5.如示例1所述的装置,其中所述输出数据结构包括用于种子的字段,所述种子用于生成要被用于经认证的解密的初始化向量。

6.如示例1所述的装置,其中所述输入数据结构包括字段来标识被所述PUF用于生成所述密钥的挑战。

7.如示例1所述的装置,其中所述第一目的地操作对象之一存储表明以下之一的操作状态:成功,失败,或者熵差错。

8.如示例1所述的装置,其中所述执行电路在所述秘密信息被成功加密时清除零标志(ZF),并且所述执行电路在其他情况下将所述ZF设置为一。

9.如示例1所述的装置,其中所述指令与最高权限保护级别相关联。

10.一种装置,包括:

对单个指令解码以生成解码的指令,所述解码的指令包括:1)一个或多个字段,来标识第一目的地操作对象,2)一个或多个字段,来标识第二目的地操作对象,所述第二目的地操作对象或者存储在所述指令的执行之后具有解密的数据的输出数据结构,或者存储用于存储具有在所述指令的执行之后具有解密的数据的数据结构的位置,3)一个或多个字段,来标识源操作对象,其中所述源操作对象或者存储要被用于解密过程中的输入数据结构,或者存储要被用于解密过程中的输入数据结构的位置,以及4)用于操作码的一个或多个字段,所述操作码表明执行电路至少:用物理不可克隆功能(PUF)生成的加密密钥对来自所述输入数据结构的秘密信息进行加密,将包装的秘密信息绑定到目标,更新所述输入数据结构,在更新的数据结构上生成MAC,将所述MAC存储在所述输入数据结构中以生成包装的输出数据结构,根据所述第二目的地操作对象对所述指令的用途来存储具有加密的秘密信息和对所述目标的指示的包装的输出数据结构;并且

根据所述操作码执行所述解码的指令。

11.如示例10所述的方法,其中所述输出数据结构包括目标的标识符。

12.如示例11所述的方法,其中所述目标是以下之一:平台和处理器配置,或者加密引擎。

13.如示例10所述的方法,其中所述操作对象是寄存器。

14.如示例10所述的方法,其中所述输出数据结构包括用于种子的字段,所述种子用于生成要被用于经认证的解密的初始化向量。

15.如示例10所述的方法,其中所述输入数据结构包括字段来标识被所述PUF用于生成所述密钥的挑战。

16.如示例10所述的方法,其中所述第一目的地操作对象之一存储表明以下之一的操作状态:成功,失败,或者熵差错。

17.如示例10所述的方法,其中所述执行电路在所述秘密信息被成功加密时清除零标志(ZF),并且所述执行电路在其他情况下将所述ZF设置为一。

18.如示例10所述的方法,其中所述指令与最高权限保护级别相关联。

19.一种机器可读介质,存储单个指令的实例,所述单个指令当被一个或多个处理器处理时,使得所述一个或多个处理器:

对所述单个指令的实例解码以生成解码的指令,所述解码的指令包括: 1)一个或多个字段,来标识第一目的地操作对象,2)一个或多个字段,来标识第二目的地操作对象,所述第二目的地操作对象或者存储在所述指令的执行之后具有解密的数据的输出数据结构,或者存储用于存储具有在所述指令的执行之后具有解密的数据的数据结构的位置,3)一个或多个字段,来标识源操作对象,其中所述源操作对象或者存储要被用于解密过程中的输入数据结构,或者存储要被用于解密过程中的输入数据结构的位置,以及4)用于操作码的一个或多个字段,所述操作码表明执行电路至少:用物理不可克隆功能(PUF)生成的加密密钥对来自所述输入数据结构的秘密信息进行加密,将包装的秘密信息绑定到目标,更新所述输入数据结构,在更新的数据结构上生成MAC,将所述MAC存储在所述输入数据结构中以生成包装的输出数据结构,根据所述第二目的地操作对象对所述指令的用途来存储具有加密的秘密信息和对所述目标的指示的包装的输出数据结构;并且

根据所述操作码执行所述解码的指令。

20.如示例19所述的机器可读介质,其中所述操作对象是寄存器。

21.一种装置,包括:

解码器电路,来对单个指令解码以生成解码的指令,所述解码的指令包括:1)一个或多个字段,来标识第一目的地操作对象,2)一个或多个字段,来标识第二目的地操作对象,所述第二目的地操作对象或者存储在所述指令的执行之后的加密数据结构,或者存储用于存储在所述指令的执行之后的加密数据结构的位置,3)一个或多个字段,来标识源操作对象,其中所述源操作对象或者存储要被用于加密过程中的输入数据结构,或者存储要被用于加密过程中的输入数据结构的位置,以及4)用于操作码的一个或多个字段,所述操作码表明执行电路至少:用物理不可克隆功能 (PUF)生成的解密密钥对来自所述输入数据结构的秘密信息进行解密并且根据所述第二目的地操作对象对所述指令的用途来存储解密的秘密信息;以及

执行电路,来根据所述操作码执行所述解码的指令。

22.如示例21所述的装置,其中所述输入数据结构包括目标的标识符。

23.如示例22所述的装置,其中当所标识的目标不是处理器时,所述执行电路停止执行。

24.如示例21所述的装置,其中所述操作对象是寄存器。

25.如示例21所述的装置,其中所述输入数据结构包括要被用于所述解密中的序列标识符。

26.如示例21所述的装置,其中所述输入数据结构包括字段来标识被所述PUF用于生成所述密钥的挑战。

27.如示例21所述的装置,其中所述操作状态表明以下之一:成功,失败,或者熵差错。

28.如示例21所述的装置,其中所述执行电路在所述秘密信息被成功解密时清除零标志(ZF),并且所述执行电路在其他情况下将所述ZF设置为一。

29.如示例21所述的装置,其中所述指令与最高权限保护级别相关联。

30.一种装置,包括:

对单个指令解码以生成解码的指令,所述解码的指令包括:1)一个或多个字段,来标识第一目的地操作对象,2)一个或多个字段,来标识第二目的地操作对象,所述第二目的地操作对象或者存储在所述指令的执行之后的加密数据结构,或者存储用于存储在所述指令的执行之后的加密数据结构的位置,3)一个或多个字段,来标识源操作对象,其中所述源操作对象或者存储要被用于加密过程中的输入数据结构,或者存储要被用于加密过程中的输入数据结构的位置,以及4)用于操作码的一个或多个字段,所述操作码表明执行电路至少用物理不可克隆功能(PUF)生成的解密密钥对来自所述输入数据结构的秘密信息进行解密并且根据所述第二目的地操作对象对所述指令的用途来存储解密的秘密信息;并且

根据所述操作码执行所述解码的指令。

31.如示例30所述的方法,其中所述输入数据结构包括目标的标识符。

32.如示例31所述的方法,其中当所标识的目标不是处理器时,所述执行电路停止执行。

33.如示例30所述的方法,其中所述操作对象是寄存器。

34.如示例30所述的方法,其中所述输入数据结构包括要被用于所述解密中的序列标识符。

35.如示例30所述的方法,其中所述输入数据结构包括字段来标识被所述PUF用于生成所述密钥的挑战。

36.如示例30所述的方法,其中所述操作状态表明以下之一:成功,失败,或者熵差错。

37.如示例30所述的方法,其中所述执行电路在所述秘密信息被成功加密时清除零标志(ZF),并且所述执行电路在其他情况下将所述ZF设置为一。

38.如示例30所述的方法,其中所述指令与最高权限保护级别相关联。

39.一种机器可读介质,存储单个指令的实例,所述单个指令当被一个或多个处理器处理时,使得所述一个或多个处理器:

对所述单个指令的实例解码以生成解码的指令,所述解码的指令包括: 1)一个或多个字段,来标识第一目的地操作对象,2)一个或多个字段,来标识第二目的地操作对象,所述第二目的地操作对象或者存储在所述指令的执行之后的加密数据结构,或者存储用于存储在所述指令的执行之后的加密数据结构的位置,3)一个或多个字段,来标识源操作对象,其中所述源操作对象或者存储要被用于加密过程中的输入数据结构,或者存储要被用于加密过程中的输入数据结构的位置,以及4)用于操作码的一个或多个字段,所述操作码表明执行电路至少:用物理不可克隆功能(PUF) 生成的解密密钥对来自所述输入数据结构的秘密信息进行解密并且根据所述第二目的地操作对象对所述指令的用途来存储解密的秘密信息;并且

根据所述操作码执行所述解码的指令。

40.如示例39所述的机器可读介质,其中所述操作对象是寄存器。

41.一种装置,包括:

解码器电路,来对单个指令解码以生成解码的指令,所述解码的指令包括:一个或多个字段,来标识源/目的地操作对象,其作为源为物理不可克隆功能(PUF)电路提供身份挑战以生成密钥,并且作为目的地存储执行之后的操作状态;一个或多个字段,来标识提供对要使用的签名算法的指示的第一源操作对象;一个或多个字段,来标识第二源操作对象,其存储或编码输入数据结构的位置,来保存在执行期间要使用的包装密钥和要解密的数据;以及一个或多个字段,来标识目的地操作对象,其存储或编码在执行期间生成的签名响应要被放置到的位置,其中所述操作码表明执行电路至少:用PUF生成的包装密钥对来自所述第二源操作对象的输入数据结构的秘密信息进行解密,根据所述第一源操作对象所指示的签名算法利用所述源/目的地操作对象的身份挑战来生成未包装的秘密信息的签名响应,将所述签名响应存储在所标识的目的地中,并且将执行的操作状态存储在所标识的源/目的地操作对象中;以及

执行电路,来根据所述操作码执行所述解码的指令。

42.如示例41所述的装置,其中所述输入数据结构包括目标的标识符。

43.如示例42所述的装置,其中当所标识的目标不是处理器时,所述执行电路停止执行。

44.如示例41所述的装置,其中所述操作对象是寄存器。

45.如示例41所述的装置,其中所述输入数据结构包括要被用于所述解密中的序列标识符。

46.如示例41所述的装置,其中所述输入数据结构包括字段来标识被所述PUF用于生成所述密钥的挑战。

47.如示例41所述的装置,其中所述操作状态表明以下之一:成功,失败,或者熵差错。

48.如示例41所述的装置,其中所述执行电路在所述秘密信息被成功解密时清除零标志(ZF),并且所述执行电路在其他情况下将所述ZF设置为一。

49.如示例41所述的装置,其中所述指令与最高权限保护级别相关联。

50.一种装置,包括:

对单个指令解码以生成解码的指令,所述解码的指令包括:一个或多个字段,来标识源/目的地操作对象,其作为源为物理不可克隆功能(PUF) 电路提供身份挑战以生成密钥,并且作为目的地存储执行之后的操作状态;一个或多个字段,来标识提供对要使用的签名算法的指示的第一源操作对象;一个或多个字段,来标识第二源操作对象,其存储或编码输入数据结构的位置,来保存在执行期间要使用的包装密钥和要解密的数据;以及一个或多个字段,来标识目的地操作对象,其存储或编码在执行期间生成的签名响应要被放置到的位置,其中所述操作码表明执行电路至少:用PUF 生成的包装密钥对来自所述第二源操作对象的输入数据结构的秘密信息进行解密,根据所述第一源操作对象所指示的签名算法利用所述源/目的地操作对象的身份挑战来生成未包装的秘密信息的签名响应,将所述签名响应存储在所标识的目的地中,并且将执行的操作状态存储在所标识的源/目的地操作对象中;并且

根据所述操作码执行所述解码的指令。

51.如示例50所述的方法,其中所述输入数据结构包括目标的标识符。

52.如示例51所述的方法,其中当所标识的目标不是处理器时,所述执行电路停止执行。

53.如示例50所述的方法,其中所述操作对象是寄存器。

54.如示例50所述的方法,其中所述输入数据结构包括要被用于所述解密中的序列标识符。

55.如示例50所述的方法,其中所述输入数据结构包括字段来标识被所述PUF用于生成所述密钥的挑战。

56.如示例50所述的方法,其中所述操作状态表明以下之一:成功,失败,或者熵差错。

57.如示例50所述的方法,其中所述执行电路在所述秘密信息被成功加密时清除零标志(ZF),并且所述执行电路在其他情况下将所述ZF设置为一。

58.如示例50所述的方法,其中所述指令与最高权限保护级别相关联。

59.一种机器可读介质,存储单个指令的实例,所述单个指令当被一个或多个处理器处理时,使得所述一个或多个处理器:

对所述单个指令的实例解码以生成解码的指令,所述解码的指令包括: 1)一个或多个字段,来标识第一目的地操作对象,2)一个或多个字段,来标识第二目的地操作对象,所述第二目的地操作对象或者存储在所述指令的执行之后的加密数据结构,或者存储用于存储在所述指令的执行之后的加密数据结构的位置,3)一个或多个字段,来标识源操作对象,其中所述源操作对象或者存储要被用于加密过程中的输入数据结构,或者存储要被用于加密过程中的输入数据结构的位置,以及4)用于操作码的一个或多个字段,所述操作码表明执行电路至少:用PUF生成的包装密钥对来自所述第二源操作对象的输入数据结构的秘密信息进行解密,根据所述第一源操作对象所指示的签名算法利用所述源/目的地操作对象的身份挑战来生成未包装的秘密信息的签名响应,将所述签名响应存储在所标识的目的地中,并且将执行的操作状态存储在所标识的源/目的地操作对象中;并且

根据所述操作码执行所述解码的指令。

60.如示例59所述的机器可读介质,其中所述操作对象是寄存器。

61.一种装置,包括:

解码器电路,来对单个指令解码以生成解码的指令,所述指令包括操作码,来表明存储器保护控制器要根据叶操作被编程,其中第一隐式操作对象提供对所述叶操作的指示,第二隐式操作对象提供密钥标识符 (keyID)和对加密算法的指示,第三隐式操作对象提供输入数据结构的位置,其中所述操作码表明执行电路将利用由物理不可克隆功能(PUF)生成的解包密钥对来自所述输入数据结构的加密数据进行解密,解密的数据包括两个串接的密钥,基于所指示的加密算法基于所述keyID利用所述两个串接的密钥对所述存储器保护控制器进行编程,并且设置操作状态;以及

执行电路,来根据所述操作码执行所述解码的指令。

62.如示例61所述的装置,其中所述串接的密钥中的第一密钥是调整密钥。

63.如示例62所述的装置,其中所述串接的密钥中的第二密钥是数据密钥。

64.如示例61所述的装置,其中所述隐式操作对象是寄存器。

65.如示例64所述的装置,其中所述第一隐式操作对象是EAX寄存器。

66.如示例61所述的装置,其中所述输入数据结构包括字段来标识被所述PUF用于生成所述密钥的挑战。

67.如示例61所述的装置,其中所述操作状态表明以下之一:成功,无效加密算法,无效keyID,以及设备繁忙。

68.如示例61所述的装置,其中所述执行电路在所述秘密信息被成功解密时清除零标志(ZF),并且所述执行电路在其他情况下将所述ZF设置为一。

69.如示例61所述的装置,其中所述指令与最高权限保护级别相关联。

70.一种方法,包括:

对单个指令解码以生成解码的指令,所述指令包括操作码,来表明存储器保护控制器要根据叶操作被编程,其中第一隐式操作对象提供对所述叶操作的指示,第二隐式操作对象提供密钥标识符(keyID)和对加密算法的指示,第三隐式操作对象提供输入数据结构的位置,其中所述操作码表明执行电路将利用由物理不可克隆功能(PUF)生成的解包密钥对来自所述输入数据结构的加密数据进行解密,解密的数据包括两个串接的密钥,基于所指示的加密算法基于所述keyID利用所述两个串接的密钥对所述存储器保护控制器进行编程,并且设置操作状态;并且

执行电路,来根据所述操作码执行所述解码的指令。

71.如示例70所述的方法,其中所述串接的密钥中的第一密钥是调整密钥。

72.如示例71所述的方法,其中所述串接的密钥中的第二密钥是数据密钥。

73.如示例70所述的方法,其中所述隐式操作对象是寄存器。

74.如示例73所述的方法,其中所述第一隐式操作对象是EAX寄存器。

75.如示例70所述的方法,其中操作状态表明以下之一:成功,无效加密算法,无效keyID,以及设备繁忙。

76.如示例70所述的方法,其中所述执行在所述秘密信息被成功加密时清除零标志(ZF),并且所述执行电路在其他情况下将所述ZF设置为一。

77.如示例70所述的方法,其中所述指令与最高权限保护级别相关联。

78.一种机器可读介质,存储单个指令的实例,所述单个指令当被一个或多个处理器处理时,使得所述一个或多个处理器:

对单个指令解码以生成解码的指令,所述指令包括操作码,来表明存储器保护控制器要根据叶操作被编程,其中第一隐式操作对象提供对所述叶操作的指示,第二隐式操作对象提供密钥标识符(keyID)和对加密算法的指示,第三隐式操作对象提供输入数据结构的位置,其中所述操作码表明执行电路将利用由物理不可克隆功能(PUF)生成的解包密钥对来自所述输入数据结构的加密数据进行解密,解密的数据包括两个串接的密钥,基于所指示的加密算法基于所述keyID利用所述两个串接的密钥对所述存储器保护控制器进行编程,并且设置操作状态;并且

根据所述操作码执行所述解码的指令。

79.如示例78所述的机器可读介质,其中所述操作对象是隐式寄存器。

提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可包括特定的特征、结构或特性,但可能不一定每个实施例都包括该特定特征、结构或特性。此外,这种短语不一定指的是同一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性,是在本领域技术人员的知识范围内的。

此外,在上文描述的各种实施例中,除非另有特别注明,否则诸如短语“A、B或C中的至少一者”之类的析取语言打算被理解为意指A、B或 C,或者其任何组合(例如,A、B和/或C)。因此,析取语言并不打算也不应当被理解为暗示给定的实施例要求至少一个A、至少一个B或者至少一个C各自都存在。

说明书和附图因此应被认为是说明性的,而不是限制性的。然而,很明显,在不脱离如权利要求中记载的本公开的更宽精神和范围的情况下,可对其进行各种修改和改变。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号