isa可访问的物理不可克隆函数
背景技术:1.物理不可克隆函数(puf)是对于给定的输入和条件(质询)来提供充当用于半导体器件(例如,处理器)的唯一标识符的物理上定义的输出(响应)的物理对象。示例puf是晶体管器件的阵列,其响应基于在半导体制造期间自然地发生的唯一的物理变化。由于该唯一的响应,puf提供平台唯一的熵,该平台唯一的熵可被用于生成不可克隆的密码密钥。例如,对于(跨引导被生成的相同值)。由于puf生成的熵对平台(例如,台式计算机、膝上型计算机、平板计算机等)是唯一的,因此在不同的平台上被使用的相同的puf电路将生成不同的熵,这使得由puf生成的密码密钥不可克隆。
附图说明
2.将参考附图来描述根据本公开的各实施例,其中:
3.图1是根据本公开的实现方式的计算系统的示意性框图,该计算系统使用td在虚拟化系统中提供隔离。
4.图2(a)图示根据当前实施例的使用puf来生成和使用密钥以包裹和解包数据的示例。
5.图2(b)图示根据当前实施例的用于包裹和解包秘密的示例过程。
6.图2(c)图示根据当前实施例的用于包裹和解包秘密的另一示例过程。
7.图3图示用于处理诸如sv-puf指令之类的指令的硬件的实施例。
8.图4是图示位向量的功能框图,该位向量表示包裹的数据要被绑定到的平台/处理器配置。
9.图5图示由处理器执行以处理wrp指令的方法的实施例。
10.图6(a)-图6(b)图示根据当前实施例的用于执行包裹(wrp)指令的方法。
11.图7图示用于执行wrp指令的伪代码的实施例。
12.图8图示处理unwrp指令的实施例。
13.图9(a)-图9(b)图示根据当前实施例的用于由处理器执行以执行解包(unwrp)指令的方法。
14.图10图示用于执行unwrp指令的伪代码的实施例。
15.图11图示签名数据结构的实施例,该签名数据结构被用于定义哪个签名算法要在unwrpmac的执行期间被使用。
16.图12图示处理unwrpmac指令的实施例。
17.图13(a)-图13(b)图示根据当前实施例的用于由处理器执行以处理unwrpmac指令的方法1302。
18.图14图示用于执行unwrpmac指令的伪代码的实施例。
19.图15图示使用配置指令来配置受保护的域的示例。
20.图16图示用于要被存储在“其他”寄存器中的一个寄存器中的keyid_ctrl的示例配置。
21.图17图示处理pconfig指令的实施例。
22.图18(a)-图18(b)图示根据当前实施例的用于由处理器执行以执行加密密钥编程指令以对目标编程的方法。
23.图19图示用于执行pconfig指令的伪代码的实施例。
24.图20是图示根据当前实施例的用于处理指令的示例系统的硬件的功能框图;
25.图21是图示根据当前实施例的处理器的功能框图;
26.图22(a)是图示根据当前实施例的示例有序流水线和示例寄存器重命名的乱序发布/执行流水线两者的功能框图;
27.图22(b)是图示根据当前实施例的要包括在处理器中的示例有序架构核和示例寄存器重命名的乱序发布/执行架构核两者的功能框图;
28.图23是图示根据当前实施例的(多个)执行单元电路的功能框图;
29.图24是图示根据当前实施例的寄存器架构的功能框图;
30.图25是图示根据当前实施例的指令格式的功能框图;
31.图26是图示根据当前实施例的图25的指令格式的寻址字段的细节的功能框图;
32.图27是图示根据当前实施例的图25的指令格式的第一示例前缀的细节的功能框图;
33.图28(a)-图28(d)是图示根据当前实施例的图27的第一示例前缀的r字段、x字段和b字段如何被使用的功能框图;
34.图29(a)-图29(b)是图示根据当前实施例的图25的指令格式的第二示例前缀的细节的功能框图;
35.图30是图示根据当前实施例的图25的指令格式的第三示例前缀的细节的功能框图;以及
36.图31是根据当前实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的功能框图。
具体实施方式
37.本公开关于用于使用由物理不可克隆函数(puf)生成的密钥来对数据加密的方法、装置、系统以及存储指令的非暂态计算机可读存储介质。加密是对信息编码的过程,并且是被用于保护存储在计算机上的敏感信息(例如,密码)的安全性或隐私性的工具。加密过程将被称为明文的信息的原始表示转换为被称为密文的替代形式。加密方案通常使用由算法生成的伪随机加密密钥。拥有密钥的经授权方可容易地对经编码的信息解密。在不拥有密钥的情况下对经编码的信息解密是可能的,但是对于设计良好的加密方案,需要大量计算资源和技术。
38.因此,为了维持经编码的信息的秘密,防止由未经授权方对加密密钥的访问是重要的。用于在加密密钥(或任何秘密信息,诸如,密码)被存储在计算机上时保护该加密密钥的一种方法是使用电子熔丝来存储秘密信息。长期以来,熔丝被视为是安全的,但是近期的研究已显示,被确定的硬件攻击者可扫描熔丝并恢复秘密信息。当前的实施例通过利用puf生成的加密密钥保护秘密信息来解决该问题。puf有利地针对扫描加以保护,并且puf电路也能抵抗侧信道攻击(例如,使用em辐射的攻击)。
39.根据一些实施例,软件可见的puf(sv-puf)通过指令将puf功能暴露于软件。这些指令中的一条或多条指令包括sv-puf isa或isa扩展(贯穿说明书,sv-puf isa将作为所使用的术语,但是下文适用于isa扩展)。当前实施例公开了使用sv-puf以包裹秘密,并使用puf导出的密钥将它们束缚于平台。该包裹(加密和完整性保护)可在诸如密码、密钥、缓存(cookie)等的秘密不在使用中时保护它们,并且在使用的时刻解包/检取按照明文的秘密。使用puf导出的密钥而被保护的秘密随后可被返回到软件,或者可被用于对平台上的(多个)加密引擎(例如,可从加利福尼亚州圣克拉拉市的英特尔公司获得的多密钥总存储器加密(mktme))编程。在对(多个)加密引擎编程的情况下,有利地,秘密在初始供应之后、贯穿平台的寿命从不按明文被透露,并且替代地使用当前实施例的指令、通过接口直接被编程到(多个)期望的加密引擎。
40.当前实施例有利地实现使用puf导出的密钥将秘密绑定至平台以保护它们。此外,秘密可被束缚于平台(例如,平台固件验证程序(诸如,英特尔引导防护)是否被启用)和处理器(例如,秘密被包裹在飞地或受信任域内部)的配置。此外,秘密跨引导被保留,因为每当系统重新引导时,由puf生成相同的密钥。
41.如在本公开中所构想,实施例包括称为受信任的域扩展(tdx)的处理器安全性能力,以经由存储器加密和完整性的使用、经由存储器控制器引擎来满足增加的安全目标。如在tdx中所使用,受信任的域(td)是受保护的vm。
42.实施例包括称为安全扩展页表(sept)的附加扩展页表(ept)结构,该附加扩展页表(ept)结构由处理器用于td私有页走查。sept是逐td的ept(即,每个td具有其自身的sept),该逐td的ept仅由受信任域资源管理器(tdrm)经由新添加到处理器的指令集架构(isa)的特殊指令来管理。在不使用这些指令的情况下,tdrm不能改变sept,否则将由处理器报告完整性失败。在其他实施例中,可以使用处理器范围-寄存器保护来对sept的全部或部分进行访问控制。
43.在典型的vm实现中,处理器针对每个虚拟存储器控制结构(vmcs)支持一个ept指针(eptp)。vmcs是存储器中针对每个vm存在一次的数据结构,而vm由vmm管理。在不同vm之间的执行上下文的每一次改变的情况下,针对当前vm恢复vmcs,由此定义vm的虚拟处理器的状态。vmm管理由eptp引用的ept。在实施例中,vm可以由td封装,并且vmcs可以由称为受信任域控制结构(tdcs)的类似控制结构代替,该受信任域控制结构(tdcs)管理td的宾客状态。
44.描述了使用受信任域(td)在虚拟化系统中提供隔离的架构。当前的计算趋势是通过利用由云服务提供方(csp)提供的主控服务将数据和企业工作负载放置在云中。作为在云中主控数据和企业工作负载的结果,csp的客户(本文中称为租户)正在为其工作负载请求更好的安全性和隔离解决方案。具体而言,客户正在寻找能够在租户的软件的tcb外部实现csp提供的软件的操作的解决方案。系统的tcb指的是具有影响对系统的整体操作的信任的能力的硬件、固件和/或软件组件的集合。
45.在本公开的实现方式中,提供td架构以及用于td架构的指令集架构(isa)扩展(在本文中称为td扩展(tdx))以为在不受信任的csp基础结构中执行的客户(租户)软件提供机密性(和完整性)。td架构(其可以是芯片上系统(soc)能力)在td工作负载与csp软件之间提供隔离,该csp软件诸如csp的虚拟机管理器(vmm)。td架构的组件可以包括:1)经由mk-总存
储器加密(mktme)引擎的存储器加密,2)资源管理能力,在本文中称为受信任域资源管理器(tdrm)(tdrm可以是虚拟机监视器(vmm)的软件扩展),以及3)处理器中的执行状态和存储器隔离能力,其经由cpu管理的存储器所有权表(mot)并经由cpu访问受控的td控制结构来提供。td架构提供了处理器部署td的能力,td利用mk-tme引擎、mot、和访问受控的td控制结构来实现td工作负载的安全操作。
46.在一个实现方式中,租户的软件在被称为td的架构概念中执行。td(也称为租户td)是指租户工作负载(其可包括例如操作系统(os)本身以及在该os之上运行的其他环3应用、或在vmm之上运行的虚拟机(vm)以及其他环3应用)。每个td独立于系统中的其他td进行操作,并且在平台上使用由tdrm指派的(多个)逻辑处理器、存储器和i/o。每个td使用mk-tme引擎的至少一个专用加密密钥在存储器中被密码隔离,该至少一个专用加密密钥用于对与受信任域相关联的(保存代码和/或数据的)存储器进行加密。
47.在本公开的实现方式中,td架构中的tdrm充当用于td的主机,并且具有对核和其他平台硬件的完全控制。tdrm将(多个)逻辑处理器指派给td中的软件。然而,tdrm不能够访问在所指派的(多个)逻辑处理器上的td的执行状态。类似地,tdrm将物理存储器和i/o资源指派给td,但由于使用由处理器针对每个td实施的单独的加密密钥、以及对存储器的其他完整性和重放控制而无权访问td的存储器状态。在td中执行的软件以降低的特权操作,使得tdrm可保留对平台资源的控制。然而,在所定义的情况下,tdrm不能影响存储器中或cpu结构中的td状态的机密性或完整性。
48.用于在虚拟化系统中提供隔离的常规系统不完全从租户的tcb提取csp软件。此外,常规系统可能使用本公开的实现方式所避免的多个单独的芯片组子系统而显著地增加tcb。本公开的实现方式的td架构通过从tcb移除csp软件来明确地减少tcb以提供客户(租户)工作负载与csp软件之间的隔离。实现方式通过为csp客户工作负载(租户td)提供安全隔离来提供对常规系统的技术改进,并允许从客户的tcb移除csp软件,同时满足csp的安全性和功能要求。此外,td架构可扩展到多个td,这可支持多个租户工作负载。此外,本文中描述的td架构是通用的,并且可以应用于任何动态随机存取存储器(dram)或基于存储类存储器(scm)的存储器(诸如,非易失性双列直插存储器模块(nv-dimm))。由此,本公开的实现方式允许软件利用性能益处(诸如,用于scm的nvdimm直接存取存储(das)模式)而不损害平台安全要求。
49.图1是根据本公开的实现方式的计算系统100的示意性框图,该计算系统100使用td在虚拟化系统中提供隔离。虚拟化系统100包括虚拟化服务器110,该虚拟化服务器110支持多个客户端设备101a
–
101c。虚拟化服务器110包括执行tdrm 180的至少一个处理器112(也称为处理设备)。tdrm180可以包括vmm(也可以称为管理程序),该vmm可以对一个或多个td190a-190c实例化,这一个或多个td 190a-190c经由网络接口170可由客户端设备101a-101c访问。客户端设备101a-101c可包括但不限于台式计算机、平板计算机、膝上型计算机、上网本、笔记本计算机、个人数字助理(pda)、服务器、工作站、蜂窝电话、移动计算设备、智能电话、互联网设备或任何其他类型的计算设备。
50.td可以指租户(例如,客户)工作负载。租户工作负载可包括例如os本身以及在该os之上运行的其他环3应用,或者可包括在vmm之上运行的vm以及其他环3应用。在本公开的实现方式中,可以使用用于对与td相关联的(保存代码和数据的)存储器进行加密的单独的
140的部分。在一些实施例中,它是(多个)核120的部分。
58.在本公开的实现方式中,tdrm 180充当主机,并且具有对核120和其他平台硬件的完全控制。tdrm 180将(多个)逻辑处理器指派给td 190a-190c中的软件。然而,tdrm 180不能访问在所指派的(多个)逻辑处理器上的td 190a-190c的执行状态。类似地,tdrm 180将物理存储器和i/o资源指派给td 190a-190c,但是由于多个单独的加密密钥以及对存储器的其他完整性和重放控制而无权访问td 190a的存储器状态。
59.关于单独的加密密钥,处理器可以利用mk-tme引擎145对在执行期间使用的存储器加密(和解密)。利用总存储器加密(tme),由在核120上执行的软件进行的任何存储器访问都可以利用加密密钥在存储器中被加密。mk-tme是对允许使用多个加密密钥(所支持的密钥数量取决于实现方式)的tme的增强。处理器112可以利用mktme引擎145以使得使用不同的mk-tme密钥对不同的页加密。mk-tme引擎145可以被用在本文中所描述的td架构中,以支持针对每个td 190a-190c的一个或多个加密密钥,从而帮助实现不同的csp客户工作负载之间的密码隔离。例如,当在td架构中使用mk-tme引擎145时,cpu默认强制要求:将使用td专用密钥来加密td(所有页)。此外,td可以进一步将特定td页选择为是明文,或者是使用对csp软件不透明的不同短暂密钥而被加密的。mk-tme引擎145可以包括用于一个或多个密钥的存储。在一些实施例中,在管芯上存在至少一个熔丝密钥。
60.每个td 190a-190c是支持由(例如,使用虚拟机扩展(vmx)的)vmm、os和/或(由os主控的)应用软件组成的软件栈的软件环境。每个td 190a-190c独立于其他td 190a-190c进行操作,并且在平台上使用由tdrm 180指派的(多个)逻辑处理器、存储器和i/o。在td 190a-190c中执行的软件以降低的特权操作,使得tdrm 180能够保持对平台资源的控制;然而,在所定义的情况下,tdrm不会影响td 190a-190c的机密性或完整性。
61.本公开的实现方式不限于计算机系统。可在其他设备(诸如,手持式设备和嵌入式应用)中使用本公开的替代实现方式。手持式设备的一些示例包括,蜂窝电话、网际协议设备、数码相机、个人数字助理(pda)和手持式pc。嵌入式应用可包括微控制器、数字信号处理设备(dsp)、芯片上系统、网络计算机(netpc)、机顶盒、网络集线器、广域网(wan)交换机,或能够根据至少一个实现方式执行一条或多条指令的任何其他系统。
62.可在单个处理设备台式机或服务器系统的上下文中描述一个实现方式,但是替代实现方式可被包括在多处理设备系统中。计算系统100可以是“中枢”系统架构的示例。计算系统100包括用于处理数据信号的处理器112。作为一个说明性示例,处理器112包括例如复杂指令集计算机(cisc)微处理设备、精简指令集计算(risc)微处理设备、超长指令字(vliw)微处理设备、实现指令集的组合的处理设备或任何其他处理设备(诸如,数字信号处理设备)。处理器112耦合至处理设备总线,该处理设备总线在处理器112与计算系统100中的其他组件之间传送数据信号,计算系统100中的其他组件诸如存储指令、数据或指令和数据的任何组合的主存储器114和/或次级存储118。计算系统100的其他组件可包括图形加速器、存储器控制器中枢、i/o控制器中枢、无线收发机、闪存bios、网络控制器、音频控制器、串行扩展端口、i/o控制器等。这些元件执行为熟悉本领域的人员公知的它们的常规功能。
63.在一个实现方式中,处理器112包括第1级(l1)内部高速缓存存储器。取决于架构,处理器112可具有单个内部高速缓存或多级的内部高速缓存。取决于特定实现方式和需求,其他实现方式包括内部高速缓存和外部高速缓存两者的组合。寄存器堆用于将不同类型的
数据存储在各种寄存器中,这些寄存器包括整数寄存器、浮点寄存器、向量寄存器、区块化寄存器、影子寄存器、检查点寄存器、状态寄存器、配置寄存器、以及指令指针寄存器。
64.应当注意,执行单元可具有浮点单元,或可不具有浮点单元。在一个实现方式中,处理器112包括用于存储微代码的微代码(ucode)rom,该微代码当被执行时,用于执行用于某些宏指令的算法或处置复杂场景。在此,微代码是潜在地可更新的以处置针对处理器112的逻辑漏洞/修复。
65.也可在微控制器、嵌入式处理设备、图形设备、dsp以及其他类型的逻辑电路中使用执行单元的替代实现方式。系统100包括主存储器114(也可称为存储器114)。主存储器114包括dram设备、静态随机存取存储器(sram)设备、闪存设备或其他存储器设备。主存储器114存储由数据信号表示的、用于由处理器112执行的指令和/或数据。处理器112经由处理设备总线而耦合至主存储器114。诸如存储器控制器中枢(mch)之类的系统逻辑芯片可耦合至处理设备总线和主存储器114。mch可提供至主存储器114的高带宽存储器路径,用于指令和数据存储并用于图形命令、数据和纹理的存储。例如,mch可用于在处理器112、主存储器114与系统100中的其他组件之间引导数据信号,并且用于在处理设备总线、存储器114与系统i/o之间桥接数据信号。mch可通过存储器接口而耦合至存储器114。在一些实现方式中,系统逻辑芯片可提供图形端口,用于通过加速图形端口(agp)互连而耦合至图形控制器。
66.计算系统100还可包括i/o控制器中枢(ich)。ich可提供经由本地i/o总线而至一些i/o设备的直接连接。本地i/o总线是用于将外围设备连接到存储器114、芯片组和处理器112的高速i/o总线。一些示例是音频控制器、固件中枢(闪存bios)、无线收发机、数据存储、包含用户输入和键盘接口的传统i/o控制器、诸如通用串行总线(usb)之类的串行扩展端口、以及网络控制器。数据存储设备可包括硬盘驱动器、软盘驱动器、cd-rom设备、闪存设备、或其他大容量存储设备。
67.对于系统的另一实现方式,由如上所述的处理设备核120执行的指令可与芯片上系统一起使用。芯片上系统的一个实现方式包括处理设备和存储器。用于一个此类系统的存储器是闪存。闪存可以位于与处理设备和其他系统组件相同的管芯上。此外,诸如存储器控制器或图形控制器之类的其他逻辑块也可以位于芯片上系统上。
68.图2(a)图示根据当前实施例的使用puf来生成和使用密钥以包裹和解包数据的示例。一般而言,根据当前实施例的包裹指令的执行接收要被保持安全的数据(本文中可称为“秘密”)。秘密可以是任何信息,例如但不限于密码、加密密钥等。包裹指令接收作为输入的部分的秘密,并且使用puf导出的密钥对它加密。输入被更新并被包裹(例如,加密和完整性保护)。在一些实施例中,秘密包裹过程的输出(本文中可称为“二进制大对象(blob)”或“包裹的二进制大对象”)被束缚于特定使用。例如,二进制大对象可被生成以保护软件计划在稍后时刻检取的秘密。在另一示例中,二进制大对象可被生成以保护用于编程到密码引擎的密钥。作为该使用的示例,用于持久存储器的mktme密钥可使用当前isa来保护。
69.为了使用在包裹的二进制大对象中可用的秘密,当前实施例进一步提供解包指令的执行,该解包指令从软件接收包裹的二进制大对象作为输入操作数并解包该二进制大对象(例如,解密并验证完整性),并使用puf导出的密钥对秘密解密。取决于计划的使用(其由软件在包裹时向指令指示),被检取的秘密随后被返回至软件或编程到密码引擎。在一些实
施例中,包裹指令允许平台和处理器配置被包括在包裹中,使得解包指令将仅在包裹时期望的平台和处理器配置在解包时活跃的情况下才允许二进制大对象解包。
70.进一步参考图2(a),软件向根据当前实施例的sv-puf isa 2(a)02的sv-puf包裹指令请求使用puf导出的密钥2(a)04对秘密加密。附加于提供要加密的秘密,软件还提供质询2(a)06,该质询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来对秘密加密,并且对包含经加密的秘密的数据结构进行完整性保护以生成包裹的二进制大对象。包裹的二进制大对象随后被返回到由软件提供的存储器位置中的软件。
71.稍后,当软件需要使用秘密时,软件向sv-puf isa 2(a)02的解包指令请求对被包含在二进制大对象中的秘密的解包。在一些实施例中,sv-puf isa 2(a)02具有多条用于解包的指令,并且针对来自软件的给定的解包请求而被调用的特定指令取决于在那个实例中秘密的使用。在其中软件需要检取秘密的第一示例中,sv-puf isa 2(a)02的第一解包指令接收包裹的二进制大对象作为输入操作数,并且通过校验二进制大对象的完整性并对它解密来解包秘密。被检取的秘密随后被往回返回到软件。附加于提供要解包的二进制大对象,软件还提供质询2(a)06,该质询2(a)06被用于从根puf密钥(下文描述)生成puf导出的密钥2(a)04以用于解包二进制大对象。
72.在其中秘密被用于编程到密码引擎,诸如其中持久存储器密钥使用包裹的二进制大对象被编程到mktme引擎的第二示例中,sv-puf isa 2(a)02的第二解包指令接收包裹的二进制大对象作为输入操作数,并且通过校验二进制大对象的完整性并对秘密数据解密来解包数据结构,但是不将(多个)被检取的密钥返回到软件。替代地,密钥通过接口被直接编程到目标密码引擎,由此从不暴露存储器中的按照明文的(多个)密钥。附加于提供要解包的二进制大对象,软件还提供质询2(a)06,该质询2(a)06被用于从根puf密钥(下文描述)生成puf导出的密钥2(a)04以用于解包二进制大对象。
73.图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。在一些实施例中,puf根密钥使用标准密钥导出函数(kdf)与质询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指定的且作为对wrp指令的输入被提供的存储器位置中提供包裹的二进制大对象作为wrp指令的输出。当软件2(b)06保护的秘密不在使用中时,该软件2(b)06将二进制大对象保留在存储器中。
74.进一步参考图2(b),在2(b)s12处,当软件2(b)06需要对二进制大对象中所包含的秘密的访问权时,该软件2(b)06调用另一指令解包(unwrp)(下文描述),传递包裹的二进制大对象以及质询2(a)06作为对sv-puf指令2(a)02的输入操作数。在2(b)s14处,sv-puf指令2(a)02的unwrp指令使用质询2(a)06以及二进制大对象作为puf电路2(a)08的输入以检取被用于包裹二进制大对象的唯一的puf导出的密钥2(a)04。sv-puf isa 2(a)02的unwrp指令随后使用puf导出的密钥2(a)04,以在2(b)s14处对包裹的二进制大对象解密并验证其完整性。仅在由软件2(b)06在2(b)s12处传递的包裹的二进制大对象与在2(b)s10处sv-puf指令2(a)02提供给软件2(b)06的包裹的二进制大对象相比未被修改的情况下,完整性验证才将是成功的。如果完整性验证是成功的,则在2(b)s16处,解包的数据被往回返回到软件。
75.图2(c)图示根据当前实施例的用于包裹和解包秘密的另一示例过程。在图2(c)的实施例中,软件2(c)06将加密密钥编程到平台上的硬件块。此类使用的一个非限制性示例是将用于持久存储器的密钥编程到mktme引擎。在该使用中,在供应阶段(其可在用户在企业环境中在it中心接收到他或她的雇主发放的计算机时发生)期间,要用于持久存储器加密的密钥使用与上文参考图2(b)描述的实施例类似的puf导出的密钥被加密。动作2(c)s04、2(c)s08和2(c)s10使用如先前在上文中分别参考步骤2(b)s04、2(b)s08和2(b)s10描述的wrp指令。
76.进一步参考图2(c),在2(c)s12处,当软件2(c)06想要对密钥编程时(例如,在每次重新引导以建立持久存储器密钥时),该软件2(c)06调用另一指令pconfig(下文描述),传递包裹的二进制大对象以及质询2(a)06作为对sv-puf isa 2(a)02的输入操作数。在2(c)s14处,sv-puf指令2(a)02的pconfig指令解包二进制大对象并验证二进制大对象的完整性,如上文在2(b)s14处所描述。然而,在该实施例中,与使被解密的秘密往回返回到软件2(c)06不同,在2(c)s16处,密钥通过接口被编程到密钥编程目标2(c)18(例如,加密引擎)。以此方式,有利地,密钥在供应阶段之外在存储器中从不被暴露,供应阶段典型地在平台的寿命期间仅发生一次。在2(c)s20处,sv-puf指令2(a)02将成功/失败编程的响应返回到作出请求的软件2(c)06。
77.在一些实施例中,isa(例如,wrp、unwrp、unwrpmac、pconfig)由处理器核2290的执行引擎2250的(多个)执行集群2260执行(图22(b))。例如,执行单元电路2262可执行当前的isa以与puf电路2280通信,从而将质询2(a)06传递到puf电路2280,并从puf电路2280接收puf导出的密钥2(a)04。在一些实施例中,puf电路2280可以是执行引擎2250的部分,而在其他实施例中,puf电路2280可在执行引擎2250外部。
78.图3图示用于处理诸如sv-puf指令之类的指令的硬件的实施例。如图所示,存储303存储要被执行的sv-puf指令301。
79.指令301由解码电路305接收。例如,解码电路305从取出逻辑/电路接收该指令。指令包括用于操作码、第一源和第二源、和目的地的字段。在一些实施例中,源和目的地是寄存器,并且在其他实施例中,源和目的地中的一个或多个是存储器位置。在一些实施例中,操作码详述要执行哪个(些)算术操作。
80.稍后将详述至少一个指令格式的更详细的实施例。解码电路305将指令解码为一个或多个操作。在一些实施例中,该解码包括:生成要由执行电路(诸如,执行电路309)执行的多个微操作。解码电路305还对指令前缀解码。
81.在一些实施例中,寄存器重命名、寄存器分配和/或调度电路307提供用于以下一项或多项的功能:1)将逻辑操作数值重命名为物理操作数值(例如,一些实施例中的寄存器别名表);2)将状态位和标志分配给经解码的指令;以及3)(例如,在一些实施例中,使用预留站)调度经解码的指令供在指令池外部的执行电路上执行。
82.寄存器(寄存器堆)和/或存储器308将数据存储为要被执行电路309操作的指令的操作数。示例寄存器类型包括紧缩数据寄存器、通用寄存器和浮点寄存器。
83.执行电路309执行经解码的指令(例如,sv-puf指令)。在其他附图(至少包括图22(a)-图22(b))中示出示例详述执行电路。经解码的sv-puf指令的执行使执行电路执行由指令的操作码指示的(多个)动作。对于指令中的一些指令,执行电路309与sv-puf电路310交互(如果那个电路不被包括在执行电路309中)。在一些实施例中,sv-puf电路310是核的部分。在一些实施例中,sv-puf电路310在核外部。
84.在一些实施例中,引退/写回电路311在架构上将目的地寄存器提交到寄存器或存储器308中,并且引退指令。
85.sv-puf isa的第一指令是包裹指令(wrp)。wrp指令的执行使数据使用由sv-puf生成的密钥来加密。在一些实施例中,wrp指令与最高特权保护环(例如,环-0)相关联。因此,当软件调用wrp指令时,在完成包裹过程之前,可能需要确认以确定该软件具有必要的特权。为了调用wrp指令,软件向sv-puf wrp指令传递输入存储器缓冲器位置、输出存储器缓冲器位置、以及要被提供给puf的质询,以生成包裹密钥。wrp指令将bind_struct(下文描述)用作输入和输出结构来进行操作,该bind_struct允许对目标专用数据的指定。在一些实施例中,wrp指令标识三个操作数。源操作数用于存储源(输入)bind_struct的位置。第一目的地操作数用于存储wrp指令的执行的操作状态。第二目的地操作数用于存储目的地(输出)bind_struct的位置。
86.在一些实施例中,所标识的操作数中的一个或多个是寄存器(例如,rax、rbx、rcx等)。在一些实施例中,所标识的操作数中的一个或多个是存储器位置。在一些实施例中,struct(结构体)的位置由地址提供。例如,第一源操作数存储用于输入struct的地址,等等。在一些实施例中,wrp指令影响以下标志或条件码:零标志、进位标志、奇偶校验标志、溢出标志、调整标志、和/或符号标志。零标志(zf)在成功的包裹时被清除,并在其他情况下被设置为1,而cf、pf、af、of和sf总是被清除。
87.wrp指令包括用于对操作码编码的一个或多个字段。该操作码用于指示执行电路至少用于:利用puf生成的包裹密钥对来自输入数据结构的秘密信息进行加密;将包裹的秘密信息绑定至目标;更新输入数据结构;对经更新的数据结构生成mac;将mac存储在输入数据结构中以生成输出数据结构;根据第二目的地操作数的针对指令的用途来存储输出数据结构,该输出数据结构具有包裹的秘密信息和目标的指示。操作状态也可被更新。
88.下表示出bind_struct的结构,并且bind_struct的字段在表正下方描述。
bind_struct
89.注意,对具有所生成的seqid、经加密的btencdata(或那个数据的部分)、btdata和预留字段的数据结构生成mac,该mac不受完整性保护(它提供该保护)。在一些实施例中,使用ghash函数来生成mac。
90.mac:该字段是针对由wrp指令生成的数据结构的消息认证码。软件不填充该字段。因此,在输入侧,该字段可以为空。
91.消息认证码(mac)是针对数据的密码校验和,其使用会话密钥来检测对数据的偶然和有意修改两者。mac需要两个输入:消息、以及仅由该消息的发起方及其计划的(多个)接收方所知的秘密密钥。这允许消息的接收方验证消息的完整性,并认证消息的发送方具有共享的秘密密钥。如果发送方不知晓秘密密钥,则散列值随后将是不同的,这将告知接收方消息不是来自原始的发送方。
92.btid:该字段是针对包裹的目标,并且由软件填充。可存在针对根据当前实施例的使用的一个或多个目标。示例包括cpu(或核)、存储器加密引擎等。将包裹的数据束缚至特定使用增强了数据包裹过程的安全性,如下文进一步所描述。
93.图4是图示位向量的功能框图,该位向量表示包裹的数据要被绑定到的平台/处理器配置。位向量402中的字段指示对应的程序是活跃的还是不活跃的,并且位的位置的状态共同指示平台/处理器配置。在一些实施例中,wrp指令微代码在包裹过程期间使用该位向量402,并且通过将二进制大对象包括在针对输出bind_struct(表1)生成的mac中来将该二进制大对象绑定至由位向量402指示的配置。在一些实施例中,wrp指令的执行不进行任何校验,但是解包指令(例如,unwrp、unwrpmac和/或pconfig)对平台/处理器配置进行校验,
并且仅在软件提供的(作为bind_struct中的btdata(下文详述)的部分的)配置在解包时是活跃的情况下才允许解包。因此,软件在请求绑定之前校验当前的平台/处理器配置,以确保它不将秘密绑定至在平台上不是活跃的配置。针对不活跃配置进行的绑定将导致不能够被解包以检取(多个)秘密的二进制大对象。例如,如果平台固件验证程序(例如,英特尔引导防护)在包裹时不被启用,并且软件在不首先验证引导防护被启用的情况下请求绑定,则如果引导防护在解包时不被启用,那么unwrp指令将不允许对二进制大对象解包。
94.作为另一示例实施例,wrp指令允许向软件身份(identity)(例如,进程身份、飞地测量、虚拟机/受信任域测量)的包裹。wrp指令的执行如果被请求绑定至软件的身份,则从硬件拾取该身份并将它包括在所生成的mac中。在解包时,解包指令的执行使用来自硬件的身份来验证mac。如果解包二进制大对象的软件不拥有该二进制大对象,则解包将失败。
95.seqid:该字段是用于由wrp指令执行的经认证加密的初始化向量。在一些实施例中,微代码随机生成该向量,并将它用于加密和mac生成。该字段稍后在解包过程期间被使用以对mac进行解密和验证。
96.btencdata:该字段承载软件正请求以被包裹的数据(秘密)。作为示例,对于mktme密钥编程,该字段承载两个密钥:数据加密密钥;以及tweak(微调)密钥,用于在xts模式(具有密文偷窃的基于xex的经tweak的密码本模式)中使用高级加密标准(aes)进行加密。在一些实施例中,每个密钥在尺寸上可以高达256b。有利地,软件可使用密钥来以密码方式保护任何量的数据,并且随后使用当前的sv-puf isa来保护该密钥,由此允许利用sv-puf来保护任意大量的数据。
97.btdata:该字段承载诸如以下各项的信息:质询,其要由puf电路使用以生成密钥;以及配置向量,其用于向wrp指令指示要与数据包裹一起被包括的平台和处理器配置。在一些实施例中,该字段可包括使用puf导出的密钥来控制数据包裹的一个或多个子字段。例如,并且如下表所示,可存在两个子字段:1)质询,被用于生成puf导出的密钥;以及2)位向量,用于承载包裹的数据要被绑定到的平台/处理器配置。btdata
98.图5图示由处理器执行以处理wrp指令的方法的实施例。例如,如图22(b)中所示的处理器核、如详述的流水线等执行该方法。在501处,取出单条wrp指令。例如,取出wrp指令。wrp指令包括用于以下各项的字段:操作码;第一目的地操作数,其用于存储wrp指令的执行的操作状态;源操作数,其用于存储输入/源bind_struct的位置(例如,地址)或对其编码;以及目的地操作数,其用于存储输出/目的地位置的位置(例如,地址)或对其编码。注意,在
一些实施例中,bind_struct中的一个或多个被存储在一个或多个寄存器中,并且在一些实施例中,bind_struct中的一个或多个被存储在一个或多个寄存器中。在一些实施例中,wrp指令进一步包括用于写掩码的字段。在一些实施例中,从指令高速缓存取出wrp指令。该操作码用于指示执行电路至少用于:利用puf生成的加密密钥对来自输入数据结构的秘密信息进行加密;将包裹的秘密信息绑定至目标;更新输入数据结构;对经更新的数据结构生成mac;将mac存储在输入数据结构中以生成包裹的输出数据结构;根据第二目的地操作数的针对指令的用途来存储包裹的输出数据结构,该包裹的输出数据结构具有经加密的秘密信息和目标的指示。附加地,执行的操作状态被存储在所标识的第一目的地操作数中。
99.在一些实施例中,执行电路用于:使用由puf生成的密钥对来自输入数据结构的数据加密;并且将经加密的数据存储在输出数据结构中,其中,用于激发puf的质询在输入数据结构中被找到;并且将操作状态存储在所标识的第一目的地操作数中。在一些实施例中,通过使用所生成的密钥以及被用作初始向量的临时值用于密码引擎来执行加密。在一些实施例中,mac使用puf生成的密钥、针对整个输入数据结构(包括对seqid和经加密的数据的更新)来计算,并且被存储在输出数据结构(其是经更新的输入数据结构)中。注意,在一些实施例中,在其他操作之前,整个输入数据结构被复制到输出数据结构中(然而,一些字段可被覆写)。
100.在一些实施例中,在502处,在解码之前,被取出的单条指令被转换为不同指令集架构的一条或多条指令。不同指令集架构的一条或多条指令的执行用于在功能上等同于根据单条指令的操作码的执行。
101.在503处,对取出的单条指令(或经转换的(多条)指令)解码。例如,由诸如本文中详述的解码电路之类的解码电路对取出的wrp指令进行解码。
102.在505处,检取与经解码的指令的源操作数相关联的数据值。例如,当源操作数中的一个或多个是存储器操作数时,检取来自所指示的存储器位置的数据。
103.在507处,由诸如本文中所详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令(或经转换的(多条)指令)。对于wrp指令,该执行将使执行电路根据操作码执行经解码的指令以至少用于:利用puf生成的加密密钥对来自输入数据结构的秘密信息进行加密;将包裹的秘密信息绑定至目标;更新输入数据结构;对经更新的数据结构生成mac;将mac存储在输入数据结构中以生成包裹的输出数据结构;根据第二目的地操作数的针对指令的用途来存储包裹的输出数据结构,该包裹的输出数据结构具有经加密的秘密信息和目标的指示。
104.在一些实施例中,执行电路用于:使用由puf生成的密钥对来自输入数据结构的数据加密;并且将经加密的数据存储在输入数据结构(其将变得是输出数据结构)中,其中,用于激发puf的质询在输入数据结构中被找到;并且将操作状态存储在所标识的第一目的地操作数中。在一些实施例中,通过使用所生成的密钥和被用作初始向量的临时值作为对密码引擎的输入来执行加密。初始向量作为seqid被存储在输出数据结构中。在一些实施例中,mac使用puf生成的密钥、针对整个数据结构来计算,并且被存储在输出数据结构中。注意,在一些实施例中,在其他操作之前,整个输入数据结构被复制到输出数据结构中(然而,一些字段可被覆写,诸如,seqid、mac、btencdata)。
105.在一些实施例中,在509处,提交或引退指令。
106.图6(a)-图6(b)图示根据当前实施例的用于执行包裹(wrp)指令的方法。注意,该执行可由执行电路和/或sv-puf电路来执行。在604处,作出关于sv-puf是否被支持的确定。在一些实施例中,这方面在型号专用寄存器(msr)中被设置。如果确定了sv-puf不被支持,则在606处,执行由于未定义的指令而中止。然而,如果确定了sv-puf被支持,则执行进展到608,在608处,确定请求包裹的软件是否是具有特权的(例如,环-0)。如果确定了请求包裹的软件不是具有特权的,则在610处,执行由于一般保护错误而退出。然而,如果确定了请求包裹的软件是具有特权的,则执行进展到612,在612处,确定源寄存器的内容和目的地寄存器的内容是否被对齐。如果确定了源寄存器的内容和目的地寄存器的内容没有被对齐,则在614处,过程由于一般保护错误而退出。然而,如果确定了源寄存器的内容和第二目的地寄存器的内容被对齐,则过程进展到616,在616处,确定源寄存器的内容和目的地寄存器的内容是否重叠。如果确定了源寄存器的内容和目的地寄存器的内容重叠,则在618处,过程由于一般保护错误而退出。然而,如果确定了源寄存器的内容和目的地寄存器的内容不重叠,则过程进展到620,在620处,将由存储在源操作数(例如,rbx)中的地址信息标识的输入结构加载到存储器中。过程602随后进展到622。
107.在622处,确定任何预留字段是否在由存储在源操作数中的地址信息标识的输入结构中被设置。如果确定了在由存储在源操作数中的地址信息标识的输入结构中具有被设置的预留字段,则在624处,过程由于一般保护错误而退出。然而,如果确定了在由存储在源操作数中的地址信息标识的输入结构中没有被设置的预留字段,则过程进展到626,在626处,(例如,使用硬件数字生成器)生成用于加密的临时种子。过程602随后进展到628。
108.在628处,确定临时种子是否具有足够的熵(随机度)。如果确定了临时种子不具有足够的熵,则过程进展到630,在630处,零标志被设置为1,以指示数据不被包裹,并且状态寄存器(例如,rax)被设置以指示熵错误。然而,如果确定了临时种子具有足够的熵,则过程进展到632,在632处,使用存储在bind_struct的btdata字段中的质询从puf获得包裹密钥。过程602随后进展到634。
109.在634处,使用包裹密钥以及来自输入bind_struct的seqid字段的临时种子对来自输入bind_struct的btendcdata字段的数据加密。经加密的数据随后被写入由存储在第二目的地操作数(例如,rcx)中的地址信息标识的输出bind_struct的btendcdata字段。
110.在636处,mac使用包裹密钥、针对经加密的数据来计算,并且mac随后被写入输出bind_struct的mac字段。
111.在638处,针对包裹的目标(btid)和质询(btdata)从它们在输入bind_struct中的相应字段被复制到它们在输出bind_struct中的相应字段。
112.在640处,利用所生成的临时种子值填充输出bind_struct中的种子值。
113.在642处,零标志被设置为0,其指示数据被成功地包裹,并且目的地寄存器(例如,rax)被设置以指示成功。
114.在644处,所有其他标志都被清除。
115.图7图示用于执行wrp指令的伪代码的实施例。
116.一般而言,unwrp指令允许对被包含在由wrp指令生成的包裹的二进制大对象内的数据的解密。unwrp指令取得包裹的二进制大对象,解包二进制大对象(例如,确认mac是正确的),并且返回经解密的秘密。如果软件将(由bind_struct中的btid指示的)不同的解包
目标传递到unwrp指令,则解包过程将失败。有利地,在包裹时,btid作为mac的部分被包括。因此,不受信任的软件不能够改变btid来将二进制大对象用于与在包裹时指定的一个目的不同的目的。换言之,wrp指令确保包裹的数据被绑定至目标。
117.在一些实施例中,unwrp指令与最高特权保护环(例如,环-0)相关联。因此,当软件调用unwrp指令时,在完成包裹过程之前,sv-puf isa可确认软件具有必要的特权。为了调用unwrp指令,软件传递使用wrp指令生成的包裹的二进制大对象、指向将接收解包的数据的输出缓冲器的指针、以及要被提供给puf以生成解包密钥的质询。unwrp指令将bind_struct(上文描述)用作输入结构来进行操作,该bind_struct允许对目标专用数据的指定。
118.unwrp指令将bind_struct(下文描述)用作输入和输出结构来进行操作,该bind_struct允许对目标专用数据的指定。在一些实施例中,unwrp指令标识三个操作数。源操作数用于存储源(输入)包裹的bind_struct的位置。第二目的地操作数用于存储目的地(输出)解包的bind_struct的位置。第一目的地操作数用于存储unwrp指令的执行的操作状态。unwrp指令影响以下标志:zf在成功的解包时被清除,并在其他情况下被设置为1;cf、pf、af、of和sf总是被清除。
119.图8图示处理unwrp指令的实施例。该处理利用以下一者或多者:执行电路、puf电路、加密电路、和/或mac电路。
120.在801处,取出单条unwrp指令。例如,取出unwrp指令。unwrp指令包括用于以下各项的字段:操作码;第一目的地操作数,其用于存储unwrp指令的执行的操作状态;源操作数,其用于存储输入/源bind_struct的位置(例如,地址)或对其编码;以及目的地操作数,其用于存储输出/目的地位置的位置(例如,地址)或对其编码。注意,在一些实施例中,bind_struct中的一个或多个被存储在一个或多个寄存器中,并且在一些实施例中,bind_struct中的一个或多个被存储在一个或多个寄存器中。在一些实施例中,unwrp指令进一步包括用于写掩码的字段。在一些实施例中,从指令高速缓存取出unwrp指令。操作码用于指示执行电路至少用于:用puf生成的解密密钥对来自输入数据结构的秘密信息解密;根据第二目的地操作数的针对指令的用途来存储经解密的秘密信息(例如,存储在由第二目的地操作数提供的存储器位置处,或存储在第二目的地操作数本身中)。附加地,执行的操作状态被存储在所标识的第一目的地操作数中。附加地,执行的操作状态被存储在所标识的第一目的地操作数中。
121.在一些实施例中,执行电路用于:使用由puf生成的密钥对来自输入数据结构的数据解密;并且将经解密的数据存储在输出数据结构中,其中,用于激发puf的质询在输入数据结构中被找到;并且将操作状态存储在所标识的第一目的地操作数中。在一些实施例中,通过将所生成的密钥和来自输入数据结构的序列id提供给密码引擎来执行解密。在一些实施例中,输入数据结构首先使用mac比较来验证。例如,mac通过从输入数据结构移除该mac且随后对其余数据生成mac来计算。输入数据结构的mac和所生成的mac随后被比较以确定包裹的二进制大对象的任何数据是否已改变。注意,在一些实施例中,在其他操作之前,整个输入数据结构被复制到输出数据结构中。
122.在一些实施例中,在802处,在解码之前,被取出的单条指令被转换为不同指令集架构的一条或多条指令。不同指令集架构的一条或多条指令的执行用于在功能上等同于根据单条指令的操作码的执行。
123.在803处,对取出的单条指令(或经转换的(多条)指令)解码。例如,由诸如本文中详述的解码电路之类的解码电路对取出的unwrp指令进行解码。
124.在805处,检取与经解码的指令的源操作数相关联的数据值。例如,当源操作数中的一个或多个是存储器操作数时,检取来自所指示的存储器位置的数据。
125.在807处,由诸如本文中所详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令(或经转换的(多条)指令)。对于unwrp指令,该执行将使执行电路根据操作码执行经解码的指令以至少用于:用puf生成的解密密钥对来自输入数据结构的秘密信息解密;根据第二目的地操作数的针对指令的用途来存储经解密的秘密信息(例如,存储在由第二目的地操作数提供的存储器位置处,或存储在第二目的地操作数本身中)。附加地,执行的操作状态被存储在所标识的第一目的地操作数中。附加地,执行的操作状态被存储在所标识的第一目的地操作数中。
126.在一些实施例中,执行电路用于:使用由puf生成的密钥对来自输入数据结构的数据解密;并且将经解密的数据存储在输出数据结构中,其中,用于激发puf的质询在输入数据结构中被找到;并且将操作状态存储在所标识的第一目的地操作数中。在一些实施例中,通过将所生成的密钥和来自输入数据结构的序列id提供给密码引擎来执行解密。在一些实施例中,输入数据结构首先使用mac比较来验证。例如,mac通过从输入数据结构移除该mac且随后对其余数据生成mac来计算。输入数据结构的mac和所生成的mac随后被比较以确定包裹的二进制大对象的任何数据是否已改变。注意,在一些实施例中,在其他操作之前,整个输入数据结构被复制到输出数据结构中。
127.在一些实施例中,在809处,提交或引退指令。
128.图9(a)-图9(b)图示根据当前实施例的用于由处理器执行以执行解包(unwrp)指令的方法902。注意,sv-puf电路还涉及用于密钥的生成。在904处,确定sv-puf是否被支持。在一些实施例中,这方面在型号专用寄存器(msr)中被设置。如果确定了sv-puf不被支持,则在906处,过程由于未定义的指令而中止。然而,如果确定了sv-puf被支持,则过程进展到908,在908处,确定请求包裹的软件是否是具有特权的(例如,环-0)。如果确定了请求包裹的软件不是具有特权的,则在910处,过程由于一般保护错误而退出。然而,如果确定了请求包裹的软件是具有特权的,则过程进展到912,在912处,确定源寄存器的内容是否被对齐。如果确定了源寄存器的内容没有被对齐,则在914处,过程由于一般保护错误而退出。然而,如果确定了源寄存器的内容被对齐,则过程进展到916,在916处,确定第二目的地寄存器的内容是否被对齐。
129.如果确定了源寄存器的内容没有被对齐,则在918处,过程由于一般保护错误而退出。然而,如果确定了目的地寄存器的内容被对齐,则过程进展到920,在920处,确定源寄存器的内容和第二目的地寄存器的内容是否重叠。
130.如果确定了源寄存器的内容和目的地寄存器的内容重叠,则在922处,过程由于一般保护错误而退出。然而,如果确定了源寄存器的内容和目的地寄存器的内容不重叠,则过程进展到924,在924处,将由存储在第一源操作数(例如,rbx)中的地址信息标识的输入结构加载到存储器中。过程902随后进展到926。
131.在926处,确定任何预留字段是否在由存储在第一源操作数中的地址信息标识的输入结构中被设置。如果确定了在由存储在第一源操作数中的地址信息标识的输入结构中
具有被设置的预留字段,则在928处,过程由于一般保护错误而退出。然而,如果确定了在由存储在第一源操作数中的地址信息标识的输入结构中没有被设置的预留字段,则过程进展到930,在930处,确定(例如,由bind_struct中的btid指示的)解包目标是否是软件。如果确定了解包目标不是软件,则过程进展到932,在932处,零标志被设置为1,以指示数据不被解包,并且状态寄存器(诸如rax之类的第一目的地)被设置以指示无效目标错误。然而,如果确定了解包目标是软件,则过程进展到934,在934处,使用存储在bind_struct的btdata字段中的质询从puf获得解包密钥。过程902随后进展到936。
132.在936处,使用解包密钥以及输入bind_struct的seqid字段对来自输入bind_struct的btendcdata字段的数据解密。过程902随后进展到938。
133.在938处,确定解包是否成功。如果确定了解包不成功(例如,由于mac失配),则过程进展到940,在940处,零标志被设置为1,以指示数据不被解包,并且状态寄存器(例如,rax)被设置以指示解包失败。然而,如果确定了解包成功(例如,由于mac匹配),则过程进展到942,在942处,解包的数据被写入由存储在第二源操作数(例如,rcx)中的地址信息标识的输出缓冲器,零标志被设置为0,其指示数据被成功地解包,并且目的地寄存器(例如,rax)被设置以指示成功。过程902随后进展到944,在944处,所有其他标志都被清除。
134.图10图示用于执行unwrp指令的伪代码的实施例。
135.在一些实施例中,解包指令包括用于指向被设备身份/密钥包裹的方式,并且包括64位的输入的标识符,该64位的输入可被用于提供从服务器接收的身份质询。此外,该解包指令(使用操作码助记符unwrpmac)还取得用于控制签名算法的输入。
136.如果不同用途的二进制大对象(由btid指示)被传递到unwrpmac,则解包将失败。注意,在包裹时,btid作为mac的部分被包括,并且因此不受信任的软件不能够仅改变btid来将用于一个用途的二进制大对象用于另一用途。换言之,wrp指令确保绑定至目标/用途。unwrpmac指令的输出是经签名的响应。
137.在一些实施例中,unwrpmac指令是环0指令。在一些实施例中,unwrpmac指令利用四个操作数:1)源/目的地操作数,其作为源提供身份质询以供由sv-puf电路生成密钥,并且作为目的地存储执行后的操作状态;2)第一源,其用于提供要使用的签名算法的指示(注意,该源可以是寄存器、存储器位置、或经编码的立即数);3)第二源,其用于存储保存要在执行期间使用的包裹(解包)密钥的输入结构的位置(例如,寄存器或存储器位置)或对其编码;以及4)目的地操作数,其用于存储在执行期间生成的经签名的响应要被放置到之处的位置(例如,寄存器或存储器位置)或对其编码。unwrpmac指令的执行在成功时可清除zf(或者在其他情况下设置为1),并且unwrpmac指令的执行可清除条件码或标志寄存器的其他标志。
138.图11图示签名数据结构的实施例,该签名数据结构被用于定义哪个签名算法要在unwrpmac的执行期间被使用。如图所示,该签名控制数据结构是位向量,其中每个位的位置表示签名函数(例如,mac生成函数)。在该示例中,存在具有变化的输出尺寸(例如,从224位到512位)的四个基于sha-3的mac函数。在一些实施例中,所生成的输出将被填补到512位。在一些实施例中,签名控制数据结构被存储在作为msr或gpr的寄存器中。在一些实施例中,签名控制数据结构被编码在指令的立即数中。在一些实施例中,签名控制数据结构被存储在存储器位置中。
139.图12图示处理unwrpmac指令的实施例。在1201处,取出单条unwrpmac指令。例如,取出unwrpmac指令。unwrpmac指令包括:用于操作码的一个或多个字段;用于标识源/目的地操作数的一个或多个字段,该源/目的地操作数作为源提供身份质询以供sv-puf电路生成密钥,并且作为目的地存储执行后的操作状态;用于标识第一源操作数的一个或多个字段,该第一源操作数用于提供要使用的签名算法的指示;用于标识第二源操作数的一个或多个字段,该第二源操作数用于存储用于保存要在执行期间使用的包裹(解包)密钥和要被解密的数据的输入数据结构的位置或对其编码;以及用于标识目的地操作数的一个或多个字段,该目的地操作数用于存储在执行期间生成的经签名的响应要被放置在的位置或对其编码。操作码用于指示执行电路至少用于:利用puf生成的包裹密钥对来自第二源操作数的输入数据结构的秘密信息解密;使用源/目的地操作数的身份质询、根据由第一源操作数指示的签名算法来生成解包的秘密信息的经签名的响应;以及将经签名的响应存储在所标识的目的地中。附加地,执行的操作状态被存储在所标识的源/目的地操作数中。
140.在一些实施例中,在1202处,在解码之前,被取出的单条指令被转换为不同指令集架构的一条或多条指令。不同指令集架构的一条或多条指令的执行用于在功能上等同于根据单条指令的操作码的执行。
141.在1203处,对取出的单条指令(或经转换的(多条)指令)解码。例如,由诸如本文中详述的解码电路之类的解码电路对取出的unwrpmac指令进行解码。
142.在1205处,检取与经解码的指令的源操作数相关联的数据值。例如,当源操作数中的一个或多个是存储器操作数时,检取来自所指示的存储器位置的数据。
143.在1207处,由诸如本文中所详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令(或经转换的(多条)指令)。对于unwrpmac指令,该执行将使执行电路根据操作码执行经解码的指令以至少用于:利用puf生成的密钥对来自第二源操作数的输入数据结构的秘密信息解密;使用源/目的地操作数的身份质询、根据由第一源操作数指示的签名算法来生成经解密的秘密信息的经签名的响应;以及将经签名的响应存储在所标识的目的地中。附加地,执行的操作状态被存储在所标识的源/目的地操作数中。
144.在一些实施例中,通过将所生成的密钥和来自输入数据结构的序列id提供给密码引擎来执行解密。在一些实施例中,输入数据结构首先使用mac比较来验证。例如,mac通过从输入数据结构移除该mac且随后对其余数据生成mac来计算。输入数据结构的mac和所生成的mac随后被比较以确定包裹的二进制大对象的任何数据是否已改变。注意,在一些实施例中,在其他操作之前,整个输入数据结构被复制到输出数据结构中。
145.在一些实施例中,在1209处,提交或引退指令。
146.图13(a)-图13(b)图示根据当前实施例的用于由处理器执行以处理unwrapmac指令的方法1302。注意,sv-puf电路还涉及用于密钥的生成。在1304处,确定sv-puf是否被支持。在一些实施例中,这方面在型号专用寄存器(msr)中被设置。如果确定了sv-puf不被支持,则在1306处,过程由于未定义的指令而中止。然而,如果确定了sv-puf被支持,则过程进展到1308,在1308处,确定请求包裹的软件是否是具有特权的(例如,环-0)。如果确定了请求包裹的软件不是具有特权的,则在1310处,过程由于一般保护错误而退出。然而,如果确定了请求包裹的软件是具有特权的,则过程进展到1312,在1312处,确定第二源寄存器的内容是否被对齐。如果确定了源寄存器的内容没有被对齐,则在1314处,过程由于一般保护错
误而退出。然而,如果确定了源寄存器的内容被对齐,则过程进展到1316,在1316处,确定目的地寄存器的内容是否被对齐。
147.如果确定了源寄存器的内容没有被对齐,则在1318处,过程由于一般保护错误而退出。然而,如果确定了目的地寄存器的内容被对齐,则过程进展到1320,在1320处,确定第二源寄存器的内容和目的地寄存器的内容是否重叠。
148.如果确定了源寄存器的内容和目的地寄存器的内容重叠,则在1322处,过程由于一般保护错误而退出。然而,如果确定了源寄存器的内容和目的地寄存器的内容不重叠,则过程进展到1324,在1324处,将由存储在第二源操作数(例如,rbx)中的地址信息标识的输入结构加载到存储器中。过程1302随后进展到1326。
149.在1326处,确定任何预留字段是否在由存储在第一源操作数中的地址信息标识的输入结构中被设置。如果确定了在由存储在第一源操作数中的地址信息标识的输入结构中具有被设置的预留字段,则在1328处,过程由于一般保护错误而退出。然而,如果确定了在由存储在第一源操作数中的地址信息标识的输入结构中没有被设置的预留字段,则过程进展到1330,在1330处,确定(例如,由bind_struct中的btid指示的)解包目标是否是软件。如果确定了解包目标不是软件,则过程进展到1331,在1331处,零标志被设置为1,以指示数据不被解包,并且源/目的地(例如,诸如rax之类的状态寄存器)被设置以指示无效目标错误。然而,如果确定了解包目标是软件,则过程进展到1332,在1332处,确定在第一源操作数中是否设置了多于一个的算法。如果多于一个的算法被设置,则零标志被设置为1,并且源/目的地中的状态被设置为无效签名。当仅一个算法被设置时,流程继续到1334,在1334处使用作为质询被存储在bind_struct的btdata字段中的质询从puf获得解包密钥。过程1302随后进展到1336。
150.在1336处,使用解包密钥以及输入bind_struct的seqid字段对来自输入bind_struct的btendcdata字段的数据解密。过程1302随后进展到1338。
151.在1338处,确定解包是否成功。如果确定了解包不成功(例如,由于mac失配),则过程进展到1340,在1340处,零标志被设置为1,以指示数据不被解包,并且源/目的地(例如,rax)被设置以指示解包失败。然而,如果确定了解包成功(例如,由于mac匹配),则过程进展到1342,在1342处,使用由源/目的地的身份质询生成的密钥、根据由第一源指示的算法来生成经签名的响应。注意,可通过将身份质询提供给sv-puf来生成密钥。
152.在1343处,在所指示的目的地处填充经签名的响应。在一些实施例中,经签名的响应被填补,使得尺寸为512位。
153.过程1302随后进展到1344,在1344处,所有其他标志都被清除。
154.图14图示用于执行unwrpmac指令的伪代码的实施例。
155.在一些实施例中,可使用由处理器实现的处理器指令(诸如,结合图15和贯穿本公开描述的“平台配置”(pconfig)指令)来定义和/或配置受保护的域。例如,pconfig指令可用于通过对存储器或安全引擎的密钥表中的新条目进行编程(或通过修改现有的条目)来定义和/或配置受保护的域。密钥表包括密钥id、密钥、以及对密钥的使用(或密钥的缺乏)的指示。以此方式,可以使用pconfig指令来以编程方式(例如,由管理软件)定义和配置受保护的域。
156.图15图示使用处理器指令来配置受保护的域的示例。在一些实施例中,例如,处理
器可以实现可用于配置与存储器保护系统相关联的受保护的域的指令。例如,处理器指令可以是“平台配置”(pconfig)指令、“受信任平台行动管理程序”(tpas)指令和/或任何其他合适类型的指令。
157.例如,“平台配置”(pconfig)指令可用于通过对存储器保护控制器的域密钥表(例如,存储器加密引擎的域密钥表)中的新条目进行编程(或通过修改现有的条目)来定义和/或配置受保护的域。以此方式,可以使用pconfig指令来以编程方式定义和配置受保护的域。一旦已经使用pconfig指令来配置受保护的域,与受保护的域相关联的存储器地址就按照由针对受保护的域的配置所指定的方式被保护。例如,当使用加密保护时,数据在被写入受保护的域内的存储器地址之前被加密,并且从受保护的域内的存储器地址读取的数据在被返回到作出请求的处理器之前被解密。
158.在一些实施例中,pconfig指令可能需要某个特权级别或特权环。例如,处理器可以支持特权级别或特权环的层级结构以限制对某些资源的访问。在一些实施例中,特权环0可能是限制性最小的级别,而数字较高的特权环可能是限制性越来越强的。例如,特权环0可用于系统管理软件(例如,操作系统内核和设备驱动程序),而特权环3可用于用户区应用。因此,在一些实施例中,pconfig指令可以是环0指令,其只能由在最高特权环中执行的软件使用(例如,用于配置受保护的域的管理软件)。替代地或附加地,pconfig指令可以是环-3指令,其可以由任何用户区应用使用以配置其自身的受保护的域。
159.pconfig指令的操作码用于指示执行电路用于执行用于配置平台特征的一个或多个功能。在一些实施例中,存在用于pconfig指令的显式操作数,但是存在多个隐式操作数。具体而言,第一寄存器(例如,eax)存储要被调用的叶函数的指示,并且一个或多个其他寄存器(例如,rbx、rcx和/或rdx)被用于叶专用目的。注意,叶允许单条指令基于这些寄存器的值来执行不同功能。
160.对于以下描述,要执行的pconfig函数用于支持使用包裹的二进制大对象的mktme密钥编程、或使用包裹的二进制大对象的其他加密引擎编程。在一些实施例中,第一寄存器被设置为不同于0或1的值。在一些实施例中,“其他”寄存器中的一个寄存器(例如,rbx)指示密钥id控制值,并且这些寄存器中的另一寄存器(例如,rcx)提供包裹的bind_struct的地址。密钥id控制值被用于
161.所图示的示例标识在使用pconfig指令执行域配置的软件1510与存储器安全引擎145之间的调用流程。存储器安全引擎145可包括提供密码存储器保护的任何引擎、控制器或其他组件。软件1510可以包括用于配置由存储器安全引擎保护的域的任何软件,诸如虚拟机管理器和/或其他管理软件。所图示的调用流程通过软件1510选择用于对特定域的加密密钥进行编程的密钥编程模式而开始(调用1502a)。例如,如下文进一步讨论,软件1510可以直接为域指定密钥,或者可以请求生成随机密钥。然后,软件1510可以调用pconfig处理器指令来执行域配置(调用1502b)。当pconfig指令被调用时,存储器安全引擎针对特定域的密钥和保护模式而被编程(调用1502c)。然后,存储器安全引擎将状态代码返回至软件1510(调用1502d),并且然后状态代码由软件1510处理(调用1502e)。
162.在一些实施例中,pconfig指令可以支持用于配置和管理受保护的域的各种叶函数。当pconfig指令被执行时,例如,可以在硬件寄存器(例如,eax寄存器)中指定要调用的特定叶函数。在一些实施例中,还可以在硬件寄存器(例如,rbx/rcx/rdx寄存器)中指定由
特定叶函数使用的参数。
163.下表图示可用于启用对多个叶函数的支持的pconfig叶编码的示例。虽然仅定义一个叶函数(key_program叶),但可以使用预留的叶编码来定义附加的叶函数,以扩展pconfig指令的功能。pconfig叶函数编码
164.pconfig指令的密钥编程叶函数(key_program)可用于对受保护的域的密钥进行编程。在一些实施例中,由密钥编程叶函数使用的参数可以在密钥编程结构(key_program_struct)中指定,并且密钥编程结构的地址可以在硬件寄存器(例如,rbx寄存器)中指定。下表图示密钥编程结构(key_program_struct)的示例实施例。密钥编程结构(key_program_struct)
165.如图所示,密钥编程结构标识被编程的特定域的密钥id,并且它还指定密钥编程命令。在一些实施例中,例如,密钥编程叶函数可以支持多个密钥编程命令,并且可以在密钥编程结构中指定期望的命令。此外,在一些实施例中,密钥编程结构还可以包括(多个)预留字段,预留字段可用于对密钥编程叶函数的后续扩展。
166.下表图示可由密钥编程叶函数支持的密钥编程命令的示例。
密钥编程命令
167.在执行密钥编程叶函数后,可在硬件寄存器中指定返回值或状态代码,以指示密钥编程函数是否成功。下表图示可由密钥编程叶函数返回的状态代码的示例。由密钥编程叶函数(key_program)返回的状态代码
168.虽然所图示的实施例使用pconfig处理器指令来执行域配置,但其他实施例可以使用替代和/或附加的方法来进行域配置。例如,在一些实施例中,域配置可以使用硬件寄存器来执行。例如,可以实现pconfig型号专用寄存器(msr)以用于执行域配置,从而允许软件通过写入pconfig msr(例如,利用在寄存器(诸如ecx寄存器)中传递的pconfig msr的索引来执行wrmsr指令)来调用pconfig操作。此外,pconfig操作的某些参数(及其相关联的叶函数和命令)可以在硬件寄存器中传递。例如,密钥编程结构(key_program_struct)的地址可以在硬件寄存器中传递,这些硬件寄存器诸如edx寄存器、eax寄存器、或这两个寄存器(例如,对于64位存储器地址)。然后,pconfig操作可以以上述类似的方式执行。
169.此外,在一些实施例中,pconfig操作可以利用包裹的二进制大对象以用于域密钥编程。以此方式,可以对域密钥进行编程,而不将密钥透露给管理软件。在一些实施例中,例如,可以实现附加的pconfig叶函数,以使密钥能被包裹,并且然后在被解包后随后被编程到存储器安全引擎。
170.在一些实施例中,存储器加密能力寄存器(me_capability_msr)可被用于允许软件发现存储器加密能力。例如,软件可以读取me_capability_msr(例如,使用读取msr(rdmsr)指令)来标识所支持的加密类型和/或算法、可并发地使用的加密密钥的最大数量、用于密钥id的位的最大数量,等等。me_capability_msr可被用于标识所支持的加密算法、密钥id的最大数量、密钥的最大数量等。
171.存储器加密激活寄存器(me_activate_msr)可被用于激活密码存储器保护(例如,mktme)。该msr可包括:用于接合只读锁(其至少锁定该寄存器)的字段、用于启用存储器加密的字段、用于选择用于默认加密的密钥的字段、用于指定在从待机恢复之际对默认密钥发生什么的字段、用于标识要使用的默认加密算法的字段、用于标识用于密钥id的位数的字段、以及用于限制可被使用的加密算法的字段。
172.用于实现pconfig指令的示例伪代码提供如下:
173.图16图示用于要被存储在“其他”寄存器中的一个寄存器(例如,rbx)中的keyid_ctrl的示例配置。该控制提供加密算法和密钥id,该加密算法和密钥id被用于确定mktme引擎是否可被编程。
174.图17图示处理pconfig指令的实施例。该处理利用以下一者或多者:执行电路、puf电路、加密电路、和/或mac电路。
175.在1701处,取出单条pconfig指令。例如,取出pconfig指令。pconfig指令包括用于操作码的字段,该操作码用于指示存储器保护控制器要根据叶操作被编程,其中,第一隐式操作数用于提供叶操作的指示,第二隐式操作数用于提供密钥标识符(密钥id)和加密算法的指示,第三隐式操作数用于提供输入数据结构的位置,其中,操作码用于指示执行电路用于:使用由物理不可克隆函数(puf)生成的解包密钥对来自输入数据结构的经加密的数据解密,经解密的数据包括串接的密钥;使用针对密钥id的串接的密钥(例如,数据密钥以及一个或多个tweak密钥中的一者或多者)、基于所指示的加密算法对存储器保护控制器编程;以及设置操作状态。
176.在一些实施例中,执行电路用于:使用由puf生成的密钥对来自输入数据结构的数据解密;并且将经解密的数据存储在输出数据结构中,其中,用于激发puf的质询在输入数据结构中被找到;并且将操作状态存储在所标识的第一目的地操作数中。在一些实施例中,
通过将所生成的密钥和来自输入数据结构的序列id提供给密码引擎来执行解密。在一些实施例中,输入数据结构首先使用mac比较来验证。例如,mac通过从输入数据结构移除该mac且随后对其余数据生成mac来计算。输入数据结构的mac和所生成的mac随后被比较以确定包裹的二进制大对象的任何数据是否已改变。注意,在一些实施例中,在其他操作之前,整个输入数据结构被复制到输出数据结构中。
177.在一些实施例中,在1702处,在解码之前,被取出的单条指令被转换为不同指令集架构的一条或多条指令。不同指令集架构的一条或多条指令的执行用于在功能上等同于根据单条指令的操作码的执行。
178.在1703处,对取出的单条指令(或经转换的(多条)指令)解码。例如,由诸如本文中详述的解码电路之类的解码电路对取出的pconfig指令进行解码。
179.在1705处,检取与经解码的指令的源操作数相关联的数据值。例如,当源操作数中的一个或多个是存储器操作数时,检取来自所指示的存储器位置的数据。
180.在1707处,由诸如本文中所详述的执行电路(硬件)之类的执行电路(硬件)执行经解码的指令(或经转换的(多条)指令)。对于pconfig指令,该执行将使执行电路如上文所述地根据操作码来执行经解码的指令。
181.在一些实施例中,执行电路用于:使用由puf生成的密钥对来自输入数据结构的数据解密;并且将经解密的数据存储在输出数据结构中,其中,用于激发puf的质询在输入数据结构中被找到;并且将操作状态存储在所标识的第一目的地操作数中。在一些实施例中,通过将所生成的密钥和来自输入数据结构的序列id提供给密码引擎来执行解密。在一些实施例中,输入数据结构首先使用mac比较来验证。例如,mac通过从输入数据结构移除该mac且随后对其余数据生成mac来计算。输入数据结构的mac和所生成的mac随后被比较以确定包裹的二进制大对象的任何数据是否已改变。注意,在一些实施例中,在其他操作之前,整个输入数据结构被复制到输出数据结构中。
182.在一些实施例中,在1709处,提交或引退指令。
183.图18(a)-图18(b)图示根据当前实施例的用于由处理器执行以执行加密密钥编程(pconfig)指令以对目标编程的方法1802。一般而言,pconfig指令允许软件将加密密钥和其他目标专用信息编程到期望的目标。更具体地,目标标识密钥要被编程到的加密引擎。例如,目标可以是在平台上执行的mktme(可从加利福尼亚州圣克拉拉市的英特尔公司得到的多密钥总存储器加密)的实例。
184.在1804处,确定sv-puf是否被支持。在一些实施例中,这方面在型号专用寄存器(msr)中被设置。如果确定了sv-puf不被支持,则在1806处,过程由于一般保护错误而退出。然而,如果确定了sv-puf被支持,则过程进展到1808,在1808处,确定由软件标识的目标(例如,加密引擎)当前是否是活跃的,并且执行其他目标专用校验。例如,在目标是加密引擎的情况下,pconfig指令可校验由软件提供的keyid是否在范围内。如果确定了由软件标识的目标当前不是活跃的,则在1810处,过程由于一般保护错误而退出。然而,如果确定了由软件标识的目标当前是活跃的,则过程进展到1812,在1812处,确定源寄存器的内容是否被对齐。如果确定了源寄存器的内容没有被对齐,则在1814处,过程由于一般保护错误而退出。然而,如果确定了源寄存器的内容被对齐,则过程进展到1816。
185.在1816处,将由存储在第二源操作数(例如,rcx)中的地址信息标识的输入结构加
载到存储器中。过程1802随后进展到1818。在1818处,将临时密钥id控制设置为等于由存储在第一源操作数(例如,rbx)中的地址信息标识的值。过程1802随后进展到1820。
186.在1820处,确定任何预留字段是否在由存储在第一源操作数中的地址信息标识的输入结构中被设置。如果确定了在由存储在第一源操作数中的地址信息标识的输入结构中具有被设置的预留字段,则在1822处,过程由于一般保护错误而退出。然而,如果确定了在由存储在第一源操作数中的地址信息标识的输入结构中没有被设置的预留字段,则过程进展到1824,在1824处,确定任何预留字段是否在由存储在第一源操作数中的地址信息标识的临时密钥id控制中被设置。如果确定了在由存储在第一源操作数中的地址信息标识的临时密钥id控制中具有被设置的预留字段,则在1826处,过程由于一般保护错误而退出。然而,如果确定了在由存储在第一源操作数中的地址信息标识的临时密钥id控制中没有被设置的预留字段,则过程进展到1828。
187.在1828处,确定(例如,由bind_struct中的btid指示的)解包目标是否是加密引擎(或由软件在wrp过程期间指定的另一目标)。如果确定了解包目标不是加密引擎,则过程进展到1830,在1830处,零标志被设置为1,以指示数据不被解包,并且目的地寄存器(例如,eax)被设置以指示无效目标错误。然而,如果确定了解包目标是加密引擎,则过程进展到1832,在1832处,确定临时密钥id控制是否有效。例如,临时密钥id控制的值是否与key_program_struct一致(密钥id和加密算法是否相同)?
188.如果确定了临时密钥id控制不是有效的,则过程进展到1834,在1834处,零标志被设置为1,以指示数据不被解包,并且目的地寄存器(例如,eax)被设置以指示无效密钥id错误。然而,如果确定了临时密钥id控制是有效的,则过程进展到1836,在1836处,确定目标是否是活跃的。如果确定了目标不是活跃的,则过程进展到1838,在1838处,零标志被设置为1,以指示数据不被解包,并且目的地寄存器(例如,eax)被设置以指示不活跃目标错误。然而,如果确定了目标活跃,则过程进展到1840。
189.在1840处,使用存储在bind_struct的btdata字段中的质询从puf获得解包密钥。过程1802随后进展到1842,在1842处,使用解包密钥以及输入bind_struct的seqid字段对来自输入bind_struct的btendcdata字段的数据解密。过程1802随后进展到1844。
190.在1844处,确定解包是否成功。如果确定了解包不成功(例如,由于mac失配),则过程进展到1846,在1846处,零标志被设置为1,以指示数据不被解包,并且目的地寄存器(例如,eax)被设置以指示解包失败。然而,如果确定了解包成功(例如,由于mac匹配),则过程进展到1848,在1848处,确定密钥表是否被锁定。如果确定了没有锁,则过程进展到1850,在1850处,零标志被设置为1,以指示数据不被解包,并且目的地寄存器(例如,eax)被设置以指示设备忙碌错误。然而,如果确定了存在锁,则过程进展到1852,在1852处,解包的数据和用于密钥id的(多个)tweak密钥被编程到目标加密引擎,零标志被设置为0,其指示数据被成功地解包,目的地寄存器(例如,eax)被设置以指示成功,并且锁被释放。过程1802随后进展到1854,在1854处,所有其他标志都被清除。
191.图19图示用于执行pconfig指令的伪代码的实施例。
192.以上指令等可在多个架构、系统、格式等中被具体化,并且这些架构、系统、格式等的示例在下文中详述。示例计算机架构
193.下文详述的是对示例计算机架构的描述。本领域中已知的对膝上型设备、台式机、手持式pc、个人数字助理、工程工作站、服务器、网络设备、网络中枢、交换机、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
194.图20图示示例系统的实施例。多处理器系统2000是点对点互连系统,并且包括多个处理器,多个处理器包括经由点对点互连2050耦合的第一处理器2070和第二处理器2080。在一些实施例中,第一处理器2070和第二处理器2080是同构的。在一些实施例中,第一处理器2070和第二处理器2080是异构的。
195.处理器2070和2080示出为分别包括集成存储器控制器(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,这些存储器可以是本地附连到相应处理器的主存储器的部分。
196.处理器2070、2080可各自经由使用p-p接口2076、2094、2086和2098的各个p-p接口2052和2054与芯片组2090交换信息。芯片组2090可以任选地经由高性能接口2092来与协处理器2038交换信息。在一些实施例中,协处理器2038是专用处理器,诸如例如,高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器,等等。
197.共享高速缓存(未示出)可被包括在任一处理器2070、2080中,或在这两个处理器的外部但经由p-p互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
198.芯片组2090可以经由接口2096耦合到第一互连2016。在一些实施例中,第一互连2016可以是外围组件互连(pci)互连或诸如pci快捷互连或另一i/o互连之类的互连。在一些实施例中,第一互连2016耦合到功率控制单元(pcu)2017,功率控制单元2017可以包括用于执行与处理器2070、2080和/或协处理器2038有关的功率管理操作的电路、软件和/或固件。pcu 2017将控制信息提供给电压调节器(未示出),以使电压调节器生成适当的经调节的电压。pcu 2017还提供控制信息以控制所生成的操作电压。在各实施例中,pcu 2017可包括用于执行基于硬件的功率管理的各种功率管理逻辑单元(例如,电路)。此类功率管理可以完全由处理器控制(例如,由各种处理器硬件控制,并且其可以由工作负载和/或功率、热约束或其他处理器约束触发),并且/或者功率管理可以响应于外部源(诸如,平台或管理功率源或系统软件)而被执行。
199.pcu 2017被图示为作为与处理器2070和/或处理器2080分开的逻辑存在。在其他情形下,pcu 2017可以在(多个)处理器2070或2080的核中的给定的一个或多个核(未示出)上执行。在一些情况下,可将pcu 2017实现为被配置成用于执行其自身的专用功率管理代码(有时被称为p代码)的(专用的或通用的)微控制器或其他控制逻辑。在另外的其他实施例中,将由pcu 2017执行的功率管理操作可在处理器外部实现,诸如,通过分开的功率管理集成电路(pmic)或处理器外部的另一组件的方式。在另外的其他实施例中,将由pcu 2017
执行的功率管理操作可在bios或其他系统软件内实现。
200.各种i/o设备2014可连同互连(总线)桥2018耦合至第一互连2016,互连桥2018将第一互连2016耦合至第二互连2020。在一些实施例中,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列(fpga)或任何其他处理器的一个或多个附加处理器2015耦合到第一互连2016。在一些实施例中,第二互连2020可以是低引脚数(lpc)互连。各种设备可以耦合到第二互连2020,包括例如,键盘和/或鼠标2022、通信设备2027和存储单元电路2028。在一些实施例中,存储单元电路2028可以是可以包括指令/代码和数据2030的盘驱动器或其他大容量存储设备。此外,音频i/o 2024可被耦合至第二互连2020。注意,与上述点对点架构不同的其他架构是可能的。例如,代替点对点架构,诸如多处理器系统2000之类的系统可以实现多分支互连或其他此类架构。示例核架构、处理器和计算机架构
201.处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现方式可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现方式可包括:1)cpu,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)计算的一个或多个专用核。此类不同的处理器导致不同的计算机系统架构,这些计算机系统架构可包括:1)在与cpu分开的芯片上的协处理器;2)在与cpu相同的封装中但在分开的管芯上的协处理器;3)与cpu在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上系统,其可以将所描述的cpu(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例核架构,随后描述示例处理器和计算机架构。
202.图21图示可具有多于一个的核、可具有集成存储器控制器、并且可具有集成图形器件的处理器2100的实施例的框图。实线框图示具有单个核2102a、系统代理2110、以及一个或多个互连控制器单元电路的集合2116的处理器2100,而任选的虚线框图示具有多个核2102(a)-(n)、系统代理单元电路2110中的一个或多个集成存储器控制器单元电路的集合2114、和专用逻辑2108、以及一个或多个互连控制器单元电路的集合2116的替代处理器2100。注意,处理器2100可以是图20的处理器2070、2080、2038或2015中的一个。
203.因此,处理器2100的不同实现方式可包括:1)cpu,其中专用逻辑2108是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核,未示出),并且核2102(a)-(n)是一个或多个通用核(例如,通用有序核、通用乱序核、或这两者的组合);2)协处理器,其中核2102(a)-(n)是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核2102(a)-(n)是大量通用有序核。因此,处理器2100可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元电路)、高吞吐量的集成众核(mic)协处理器(包括30个或更多核)、嵌入式处理器,等等。处理器2100可以被实现在一个或多个芯片上。处理器2100可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,bicmos、cmos、或nmos)中的任何技术被实现在一个或多
个基板上。
204.存储器层级结构包括核2102(a)-(n)内的一个或多个级别的高速缓存单元电路2104(a)-(n)、一个或多个共享高速缓存单元电路的集合2106、以及耦合至集成存储器控制器单元电路的集合2114的外部存储器(未示出)。一个或多个共享高速缓存单元电路的集合2106可包括一个或多个中间级别的高速缓存(诸如第二级(l2)、第三级(l3)、第四级(l4))或其他级别的高速缓存(诸如末级高速缓存(llc))和/或以上各项的组合。尽管在一些实施例中,基于环的互连网络电路2112将专用逻辑2108(例如,集成图形逻辑)、共享高速缓存单元电路的集合2106以及系统代理单元电路2110互连,但替代实施例使用任何数量的公知技术来将这些单元互连。在一些实施例中,维持共享高速缓存单元电路2106和核2102(a)-(n)中的一个或多个之间的一致性。
205.在一些实施例中,核2102(a)-(n)中的一个或多个能够实现多线程化。系统代理单元电路2110包括协调和操作核2102(a)-(n)的那些组件。系统代理单元电路2110可包括例如功率控制单元(pcu)电路和/或显示单元电路(未示出)。pcu可以是对核2102(a)-(n)和/或专用逻辑2108(例如,集成图形逻辑)的功率状态进行调节所需的逻辑和组件,或可包括这些逻辑和组件。显示单元电路用于驱动一个或多个外部连接的显示器。
206.核2102(a)-(n)在架构指令集方面可以是同构的或异构的;即,核2102(a)-(n)中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。示例核架构有序和乱序核框图
207.图22(a)是图示根据当前实施例的示例有序流水线以及示例寄存器重命名的乱序发布/执行流水线两者的框图。图22(b)是图示根据当前实施例的要包括在处理器中的示例有序架构核和示例寄存器重命名的乱序发布/执行架构核两者的框图。图22(a)-图22(b)中的实线框图示有序流水线和有序核,而任选的虚线框图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。
208.在图22(a)中,处理器流水线2200包括取出级2202、可选的长度解码级2204、解码级2206、可选的分配级2208、可选的重命名级2210、调度(也称为分派或发布)级2212、可选的寄存器读取/存储器读取级2214、执行级2216、写回/存储器写入级2218、可选的异常处置级2222、以及可选的提交级2224。一个或多个操作可以在这些处理器流水线级中的每一级中执行。例如,在取出级2202期间,从指令存储器取出一条或多条指令,在解码级2206期间,可以对所取出的一条或多条指令进行解码,可以生成使用所转发的寄存器端口的地址(例如,加载存储单元(lsu)地址),并且可以执行分支转发(例如,立即数偏移或链接寄存器(lr))。在一个实施例中,解码级2206和寄存器读取/存储器读取级2214可以组合成一个流水线级。在一个实施例中,在执行级2216期间,可以执行经解码的指令,可以执行lsu地址/数据流水线到高级微控制器总线(ahb)接口,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。
209.作为示例,图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。
210.图22(b)示出处理器核2290,处理器核2290包括耦合到执行引擎单元电路2250的前端单元电路2230,并且两者耦合到存储器单元电路2270。核2290可以是精简指令集计算(risc)核、复杂指令集计算(cisc)核、超长指令字(vliw)核、或混合或替代的核类型。作为又一选项,核2290可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核,等等。
211.前端单元电路2230可包括耦合至指令高速缓存单元电路2234的分支预测单元电路2232,该指令高速缓存单元电路2234耦合至指令转换后备缓冲器(tlb)2236,该指令转换后备缓冲器2236耦合至指令取出单元电路2238,该指令取出单元电路2238耦合至解码单元电路2240。在一个实施例中,指令高速缓存单元电路2234被包括在存储器单元电路2270中,而不是在前端单元电路2230中。解码单元电路2240(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元电路2240可进一步包括地址生成单元电路(agu,未示出)。在一个实施例中,agu使用所转发的寄存器端口生成lsu地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发、lr寄存器分支转发等)。解码单元电路2240可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核2290包括存储用于某些宏指令的微代码的微代码rom(未示出)或其他介质(例如,在解码单元电路2240中,或以其他方式在前端单元电路2230内)。在一个实施例中,解码单元电路2240包括微操作(micro-op)或操作高速缓存(未示出)以保持/高速缓存在处理器流水线2200的解码级2206或其他级期间生成的经解码的操作、微标签或微操作。解码单元电路2240可耦合到执行引擎单元电路2250中的重命名/分配器单元电路2252。
212.执行引擎电路2250包括重命名/分配器单元电路2252,该重命名/分配器单元电路2252耦合到引退单元电路2254和一个或多个调度器电路的集合2256。(多个)调度器电路2256表示任意数量的不同调度器,包括预留站、中央指令窗口等。在一些实施例中,(多个)调度器电路2256可以包括算术逻辑单元(alu)调度器/调度电路、alu队列、算术生成单元(agu)调度器/调度电路、agu队列,等等。(多个)调度器电路2256耦合到(多个)物理寄存器堆电路2258。(多个)物理寄存器堆电路2258中的每个物理寄存器堆电路表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一条指令的地址的指令指针)等。在一个实施例中,(多个)物理寄存器堆单元电路2258包括向量寄存器单元电路、写掩码寄存器单元电路和标量寄存器单元电路。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、通用寄存器等。(多个)物理寄存器堆单元电路2258由引退单元电路2254(也称为引退队列)重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器(rob)和(多个)引退寄存器堆;使用(多个)未来文件、(多
个)历史缓冲器和(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元电路2254和(多个)物理寄存器堆电路2258耦合到(多个)执行集群2260。(多个)执行集群2260包括一个或多个执行单元电路的集合2262以及一个或多个存储器访问电路的集合2264。执行单元电路2262可执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元或执行单元电路,但是其他实施例可包括仅一个执行单元电路或全都执行所有功能的多个执行单元/执行单元电路。(多个)调度器电路2256、(多个)物理寄存器堆单元电路2258和(多个)执行集群2260示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器电路、(多个)物理寄存器堆单元电路和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元电路2264的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
213.在一些实施例中,执行引擎单元电路2250可包括puf电路2280,而在其他实施例中,puf电路2280可在执行引擎单元电路2250外部。在一些实施例中,执行引擎单元电路2250可以执行加载存储单元(lsu)地址/数据流水线到高级微控制器总线(ahb)接口(未示出)、以及地址分阶段和写回、数据分阶段加载、存储和分支。
214.存储器访问电路的集合2264耦合到存储器单元电路2270,该存储器单元电路2270包括数据tlb单元电路2272,该数据tlb单元电路2272耦合到数据高速缓存电路2274,该数据高速缓存电路2274耦合到第二级(l2)高速缓存电路2276。在一个示例实施例中,存储器访问单元电路2264可包括加载单元电路、存储地址单元电路和存储数据单元电路,其中的每一个均耦合至存储器单元电路2270中的数据tlb电路2272。指令高速缓存电路2234还耦合到存储器单元电路2270中的第二级(l2)高速缓存单元电路2276。在一个实施例中,指令高速缓存2234和数据高速缓存2274被组合为l2高速缓存单元电路2276、第三级(l3)高速缓存单元电路(未示出)和/或主存储器中的单个指令和数据高速缓存(未示出)。l2高速缓存单元电路2276耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。
215.核2290可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);mips指令集;arm指令集(具有诸如neon的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核2290包括用于支持紧缩数据指令集扩展(例如,avx1、avx2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
216.在一些实施例中,当前的isa(例如,wrp、unwrp、pconfig)由核2290的执行引擎2250的(多个)执行集群2260执行(图22(b))。例如,执行单元电路2262可执行当前的isa以与puf电路2280通信,从而将质询2(a)06传递到puf电路2280,并从puf电路2280接收puf导出的密钥2(a)04。示例(多个)执行单元电路
217.图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位执行单元)。示例寄存器架构
218.图24是根据一些实施例的寄存器架构2400的框图。如图所示,存在向量/simd寄存器2410,在宽度上从128位到1024位变化。在一些实施例中,向量/simd寄存器2410在物理上是512位的,并且取决于映射,只有较低位中的一些位被使用。例如,在一些实施例中,向量/simd寄存器2410是512位的zmm寄存器:较低的256位用于ymm寄存器,并且较低的128位用于xmm寄存器。由此,存在寄存器的叠加。在一些实施例中,向量长度字段在最大长度与一个或多个其他较短长度之间进行选择,其中每个此类较短长度是前一长度的一半长度。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;取决于实施例,较高阶数据元素位置保持与在指令之前相同或者被归零。
219.在一些实施例中,寄存器架构2400包括写掩码/断言寄存器2415。例如,在一些实施例中,存在8个写掩码/断言寄存器(有时称为k0到k7),它们的尺寸各自为16位、32位、64位或128位。写掩码/断言寄存器2415可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间免于更新)和/或归零(例如,归零向量掩码允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些实施例中,给定的写掩码/断言寄存器2415中的每个数据元素位置对应于目的地的数据元素位置。在其他实施例中,写掩码/断言寄存器2415是可缩放的,并由给定向量元素的设定数量个启用位组成(例如,每个64位向量元素有8个启用位)。
220.寄存器架构2400包括多个通用寄存器2425。这些寄存器可以是16位、32位、64位等,并且可用于标量操作。在一些实施例中,这些寄存器通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8到r15来引用。
221.在一些实施例中,寄存器架构2400包括标量浮点寄存器2445,标量浮点寄存器2445用于使用x87指令集扩展的对32/64/80位浮点数据的标量浮点操作,或者作为mmx寄存器对64位紧缩整数数据执行操作,以及用于为在mmx和xmm寄存器之间执行的一些操作保存操作数。
222.一个或多个标志寄存器2440(例如,eflags,rflags等)存储用于算术、比较和系统操作的状态和控制信息。例如,一个或多个标志寄存器2440可以存储条件代码信息,诸如进位、奇偶性、辅助进位、零、符号和溢出。在一些实施例中,一个或多个标志寄存器2440被称为程序状态和控制寄存器。
223.段寄存器2420包含用于访问存储器的段点。在一些实施例中,这些寄存器通过名称cs、ds、ss、es、fs和gs来引用。
224.机器专用寄存器(msr)2435控制和报告处理器性能。大多数msr 2435处置与系统有关的功能,并且不可由应用程序访问。机器校验寄存器2460由控制、状态和错误报告msr
组成,这些msr用于检测和报告硬件错误。
225.一个或多个指令指针寄存器2430存储指令指针值。(多个)控制寄存器2455(例如,cr0-cr4)确定处理器(例如,处理器2070、2080、2038、2015和/或2100)的操作模式和当前执行的任务的特性。调试寄存器2450控制并允许监控处理器或核的调试操作。
226.存储器管理寄存器2465指定用于受保护模式存储器管理的数据结构的位置。这些寄存器可以包括gdtr、idrt、任务寄存器和ldtr寄存器。
227.本发明的替代实施例可以使用更宽的或更窄的寄存器。另外,本发明的替代实施例可以使用更多、更少或不同的寄存器堆和寄存器。指令集
228.指令集架构(isa)可包括一种或多种指令格式。给定的指令格式可定义各种字段(例如,位的数量、位的位置)以指定要执行的操作(例如,操作码)以及将对其执行该操作的(多个)操作数和/或(多个)其他数据字段(例如,掩码),等等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,可将给定指令格式的指令模板定义为具有该指令格式的字段(所包括的字段通常按照相同顺序,但是至少一些字段因为较少的字段被包括而具有不同的位的位置)的不同子集,和/或定义为具有以不同方式进行解释的给定字段。由此,isa的每一条指令使用给定的指令格式(并且如果被定义,则按照该指令格式的指令模板中的给定的一个指令模板)来表达,并包括用于指定操作和操作数的字段。例如,示例add(加法)指令具有特定的操作码和指令格式,该特定的指令格式包括用于指定该操作码的操作码字段和用于选择操作数(源1/目的地以及源2)的操作数字段;并且该add指令在指令流中出现将使得在操作数字段中具有选择特定操作数的特定的内容。示例指令格式
229.本文中所描述的(多条)指令的实施例能以不同格式来具体化。此外,在下文中详述示例系统、架构和流水线。(多条)指令的实施例可在此类系统、架构和流水线上执行,但是不限于详述的那些系统、架构和流水线。
230.图25图示指令格式的实施例。如图所示,指令可以包括多个组分,包括但不限于用于以下各项的一个或多个字段:一个或多个前缀2501,操作码2503,寻址信息2505(例如,寄存器标识符、存储器寻址信息等),位移值2507,和/或立即数2509。注意,一些指令利用格式中的一些或全部字段,而其他指令可能仅使用用于操作码2503的字段。在一些实施例中,图示的顺序是这些字段要被编码的顺序,然而,应当理解,在其他实施例中,这些字段可以以不同的顺序被编码、组合等。
231.(多个)前缀字段2501在使用时对指令进行修改。在一些实施例中,一个或多个前缀用于重复串指令(例如,0xf0、0xf2、0xf3等),提供分段超控(例如,0x2e、0x36、0x3e、0x26、0x64、0x65、0x2e、0x3e等),执行总线锁定操作,和/或改变操作数(例如,0x66)和地址尺寸(例如,0x67)。某些指令需要强制性前缀(例如,0x66、0xf2、0xf3等)。这些前缀中的某些前缀可能被认为是“传统”前缀。在本文中详述其一个或多个示例的其他前缀指示和/或提供进一步的能力,诸如指定特定寄存器等。其他前缀通常在传统前缀之后。
232.操作码字段2503用于至少部分地定义在对指令的解码时要执行的操作。在一些实施例中,在操作码字段2503中编码的主操作码的长度为1、2或3字节。在其他实施例中,主操作码可以是不同的长度。附加的3位操作码字段有时被编码在另一个字段中。
233.寻址字段2505用于寻址指令的一个或多个操作数,诸如存储器或一个或多个寄存器中的位置。图26图示寻址字段2505的实施例。在该图示中,示出可选的mod r/m字节2602和可选的比例、索引、基址(sib)字节2604。mod r/m字节2602和sib字节2604用于编码指令的多达两个操作数,其中每一个是直接的寄存器或有效的存储器地址。注意,这些字段中的每一个都是可选的,因为并非所有的指令都包括这些字段中的一个或多个。mod r/m字节2602包括mod字段2642、寄存器字段2644、和r/m字段2646。
234.mod字段2642的内容将存储器访问模式和非存储器访问模式区分开。在一些实施例中,当mod字段2642的值为b11时,利用寄存器直接寻址模式,否则使用寄存器间接寻址。
235.寄存器字段2644可以编码目的地寄存器操作数或源寄存器操作数,或者可以编码操作码扩展而不用于编码任何指令操作数。寄存器索引字段2644的内容直接地或通过地址生成来指定源或目的地操作数的位置(在寄存器中或在存储器中)。在一些实施例中,寄存器字段2644利用来自前缀(例如,前缀2501)的附加位来补充以允许更大的寻址。
236.r/m字段2646可用于编码引用存储器地址的指令操作数,或者可用于编码目的地寄存器操作数或源寄存器操作数。注意,在一些实施例中,r/m字段2646可与mod字段2642组合以指示寻址模式。
237.sib字节2604包括比例字段2652、索引字段2654和基址字段2656以用于地址的生成。比例字段2652指示比例因数。索引字段2654指定要使用的索引寄存器。在一些实施例中,索引字段2654利用来自前缀(例如,前缀2501)的附加位来补充以允许更大的寻址。基址字段2656指定要使用的基址寄存器。在一些实施例中,基址字段2656利用来自前缀(例如,前缀2501)的附加位来补充以允许更大的寻址。在实践中,比例字段2652的内容允许对索引字段2654的内容进行缩放以用于存储器地址生成(例如,用于使用2
比例
*索引+基址的地址生成)。
238.一些寻址形式利用位移值来生成存储器地址。例如,可以根据2
比例
*索引+基址+位移、索引*比例+位移、r/m+位移、指令指针(rip/eip)+位移、寄存器+位移等生成存储器地址。位移可以是1字节、2字节、4字节等的值。在一些实施例中,位移字段2507提供该值。此外,在一些实施例中,在寻址字段2505的mod字段中编码位移因数使用,其指示压缩的位移方案,对于该方案,通过将disp8与基于向量长度、b的值和指令的输入元素尺寸确定的比例因数n相乘来计算位移值。位移值被存储在位移字段2507中。
239.在一些实施例中,立即数字段2509指定指令的立即数。立即数可以被编码为1字节的值、2字节的值、4字节的值,等等。
240.图27图示第一前缀2501(a)的实施例。在一些实施例中,第一前缀2501(a)是rex前缀的实施例。使用该前缀的指令可以指定通用寄存器、64位紧缩数据寄存器(例如,单指令多数据(simd)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,cr8-cr15和dr8-dr15)。
241.取决于格式,使用第一前缀2501(a)的指令可以使用3位字段指定多达三个寄存器:1)使用mod r/m字节2602的reg字段2644和r/m字段2646;2)使用mod r/m字节2602与sib字节2604,包括使用reg字段2644和基址字段2656和索引字段2654;或者3)使用操作码的寄存器字段。
242.在第一前缀2501(a)中,位位置7:4被设置为0100。位位置3(w)可用于确定操作数
尺寸,但可能不能单独确定操作数宽度。由此,当w=0时,操作数尺寸由代码段描述符(cs.d)确定,并且当w=1时,操作数尺寸为64位。
243.请注意,添加另一个位允许寻址16(24)个寄存器,而单独的mod r/m reg字段2644和mod r/m r/m字段2646各自只能寻址8个寄存器。
244.在第一前缀2501(a)中,位位置2(r)可以是mod r/m reg字段2644的扩展,并且当该字段编码通用寄存器、64位紧缩数据寄存器(例如,sse寄存器)、或控制或调试寄存器时,可用于修改mod r/m reg字段2644。当mod r/m字节2602指定其他寄存器或定义扩展操作码时,r被忽略。
245.位位置1(x)x位可以修改sib字节索引字段2654。
246.位位置b(b)b可以修改mod r/m r/m字段2646或sib字节基址字段2656中的基址;或者其可以修改用于访问通用寄存器(例如,通用寄存器2425)的操作码寄存器字段。
247.图28(a)-图28(d)图示如何使用第一前缀2501(a)的r、x和b字段的实施例。图28(a)图示当sib字节2604不用于存储器寻址时,来自第一前缀2501(a)的r和b用于扩展mod r/m字节2602的reg字段2644和r/m字段2646。图28(b)图示当sib字节2604未被使用时(寄存器-寄存器寻址),来自第一前缀2501(a)的r和b用于扩展mod r/m字节2602的reg字段2644和r/m字段2646。图28(c)图示当sib字节2604用于存储器寻址时,来自第一前缀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。
248.图29(a)-图29(b)图示第二前缀2501(b)的实施例。在一些实施例中,第二前缀2501(b)是vex前缀的实施例。第二前缀2501(b)编码允许指令具有多于两个操作数,并允许simd向量寄存器(例如,向量/simd寄存器2410)长于64位(例如,128位和256位)。第二前缀2501(b)的使用提供了三操作数(或更多操作数)的语法。例如,先前的两操作数指令执行诸如a=a+b之类的操作,其覆写源操作数。第二前缀2501(b)的使用使操作数能执行非破坏性操作,诸如a=b+c。
249.在一些实施例中,第二前缀2501(b)有两种形式——两字节形式和三字节形式。两字节的第二前缀2501(b)主要用于128位、标量和一些256位指令,而三字节的第二前缀2501(b)提供了对第一前缀2501(a)和3字节操作码指令的紧凑替换。
250.图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)。位[6:3]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。
[0251]
使用该前缀的指令可以使用mod r/m r/m字段2646来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。
[0252]
使用该前缀的指令可以使用mod r/m reg字段2644来编码目的地寄存器操作数或
源寄存器操作数,或者被视为操作码扩展并且不用于编码任何指令操作数。
[0253]
对于支持四个操作数的指令语法,vvvv、mod r/m r/m字段2646和mod r/m reg字段2644编码四个操作数中的三个操作数。然后,立即数2509的位[7:4]用于编码第三源寄存器操作数。
[0254]
图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前导操作码,等等。
[0255]
字节2 2917的位[7]与第一前缀2501(a)的w类似地使用,包括帮助确定可提升的操作数尺寸。位[2]用于指示向量的长度(l)(其中值0是标量或128位向量,而值1是256位向量)。位[1:0]提供操作码的扩展性,相当于一些传统前缀(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。位[6:3]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。
[0256]
使用该前缀的指令可以使用mod r/m r/m字段2646来编码引用存储器地址的指令操作数,或者编码目的地寄存器操作数或源寄存器操作数。
[0257]
使用该前缀的指令可以使用mod r/m reg字段2644来编码目的地寄存器操作数或源寄存器操作数,或者被视为操作码扩展并且不用于编码任何指令操作数。
[0258]
对于支持四个操作数的指令语法,vvvv、mod r/m r/m字段2646和mod r/m reg字段2644编码四个操作数中的三个操作数。然后,立即数2509的位[7:4]用于编码第三源寄存器操作数。
[0259]
图30图示第三前缀2501(c)的实施例。在一些实施例中,第三前缀2501(c)是evex前缀的实施例。第三前缀2501(c)的所图示的实施例是四字节前缀。
[0260]
第三前缀2501(c)可以以64位模式编码32个向量寄存器(例如,128位、256位和512位寄存器)。在一些实施例中,利用写掩码/操作掩码(参见前面的图中对寄存器的讨论,诸如图24)或断言的指令利用该前缀。操作掩码寄存器允许条件处理或选择控制。使用第二前缀2501(b)来编码操作掩码指令,其源/目的地操作数是操作掩码寄存器,并将操作掩码寄存器的内容视为单个值。
[0261]
第三前缀2501(c)可以编码专用于指令类的功能(例如,具有“加载+操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。
[0262]
第三前缀2501(c)的第一字节是格式字段3011,在一个示例中,格式字段3011的值为62h。后续的字节被称为有效载荷字节3015-3019,并且共同形成24位值p[23:0],从而以一个或多个字段的形式提供特定能力(本文中详述)。
[0263]
在一些实施例中,有效载荷字节3019的p[1:0]与低两个mmmmm位相同。在一些实施例中,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。p[14:11]示出为vvvv,可用于:1)编码第一源寄存器操作数,以反转(1补码)的形式指定,并且对具有2个或更多个源操作数的指令有效;2)编码目的地寄存器操作数,以1补码的形式指定,用于某些向量移位;或者3)不编码任何操作数,字段被保留,并且应当包含某个值,诸如1111b。
[0264]
p[15]类似于第一前缀2501(a)和第二前缀2511(b)的w,并且可以用作操作码扩展位或操作数尺寸提升。
[0265]
p[18:16]指定操作掩码(写掩码)寄存器(例如,写掩码/断言寄存器2415)中的寄存器的索引。在一个实施例中,特定值aaa=000具有暗示没有操作掩码用于特定指令的特殊行为(这能以各种方式实现,包括使用硬连线为全部为一的操作掩码或者绕过掩码硬件的硬件来实现)。当合并时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间保护目的地中的任何元素集免于更新,而在其他实施例中,保持其中对应掩码位具有0的目的地的每一元素的旧值。相反,当归零时,向量掩码允许在执行(由基础操作和扩充操作指定的)任何操作期间使目的地中的任何元素集归零,在一个实施例中,目的地的元素在对应掩码位具有0值时被设置为0。该功能的子集是控制正在被执行的操作的向量长度的能力(即,从第一个到最后一个正在被修改的元素的跨度);然而,被修改的元素不一定要是连续的。由此,操作掩码字段允许部分向量操作,包括加载、存储、算术、逻辑等。尽管描述了其中操作掩码字段的内容选择多个操作掩码寄存器中的包含要使用的操作掩码的一个操作掩码寄存器(并且由此操作掩码字段的内容间接地标识要执行的掩码)的实施例,但是替代实施例相反或另外允许掩码写字段的内容直接地指定要执行的掩码。
[0266]
p[19]可以与p[14:11]组合,以非破坏性源语法编码第二源向量寄存器,其可以使用p[19]访问高16个向量寄存器。p[20]编码多种功能,其在不同类别的指令之间有所不同,并且可以影响向量长度/舍入控制指定符字段(p[22:21])的含义。p[23]指示对合并-写掩码的支持(例如,当设置为0时)或对归零和合并-写掩码的支持(例如,当设置为1时)。
[0267]
使用第三前缀2501(c)的指令中的对寄存器的编码的示例实施例在下面的表中详述。
64位模式下的32寄存器支持64位模式下的32寄存器支持32位模式下的编码寄存器指定符操作掩码寄存器指定符编码
[0268]
可将程序代码应用于输入指令以执行本文描述的功能并生成输出信息。可以将输
出信息应用于一个或多个输出设备。为了本公开的目的,处理系统包括具有处理器的任何系统,不作为限制,该处理器诸如例如,数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。
[0269]
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
[0270]
本文公开的机制的各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
[0271]
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“ip核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
[0272]
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(cd-rom)、可重写紧致盘(cd-rw)以及磁光盘;半导体器件,诸如,只读存储器(rom)、诸如动态随机存取存储器(dram)和静态随机存取存储器(sram)的随机存取存储器(ram)、可擦除可编程只读存储器(eprom)、闪存、电可擦除可编程只读存储器(eeprom);相变存储器(pcm);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
[0273]
因此,本发明的实施例还包括非暂态有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(hdl),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也可被称为程序产品。仿真(包括二进制变换、代码变形等)
[0274]
在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
[0275]
图31图示根据当前实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图31示出可使用第一isa编译器3104来编译高级语言3102形式的程序,以生成可由具有至少一个第一指令集核的处理器3116原生执行的第一isa二进制代码3106。具有至少一个第一isa指令集核的处理器3116表示任何处理器,这些处理器能通过兼容地执行或以其它方式处理以下内容来执行与具有至少一个第一isa指令集核的处理器基本相同的功能:1)第一isa指令集核的指令集的实质部分,或2)目标为在具有至少一个第一isa指令集核的英特尔处理器上运行的应用或其他软件的目标代码版本,以便取得与具有至少一个第一isa指令
集核的处理器基本相同的结果。第一isa编译器3104表示可用于生成第一isa二进制代码3106(例如,目标代码)的编译器,该第一isa二进制代码3106能够通过附加的链接处理或无需附加的链接处理而在具有至少一个第一isa指令集核的处理器3116上被执行。类似地,图31示出可使用替代的指令集编译器3108来编译高级语言3102形式的程序,以生成可由不具有第一isa指令集核的处理器3114原生执行的替代的指令集二进制代码3110。指令转换器3112用于将第一isa二进制代码3106转换成可以由不具有第一isa指令集核的处理器3114原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码3110相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器3112通过仿真、模拟或任何其他过程来表示允许不具有第一isa指令集处理器或核的处理器或其他电子设备执行第一isa二进制代码3106的软件、固件、硬件或其组合。
[0276]
示例性实施例包括但不限于: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设置为1。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设置为1。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设置为1。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设置为1。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设置为1。49.如示例41所述的装置,其中,所述指令与最高特权的保护级别相关联。50.一种方法,包括:对单条指令解码以生成经解码的指令,所述经解码的指令包括:用于标识源/目的地操作数的一个或多个字段,所述源/目的地操作数作为源提供身份质询供由物理不可克隆函数(puf)电路生成密钥,并且作为目的地存储执行后的操作状态;用于标识第一源操作数的一个或多个字段,所述第一源操作数用于提供要使用的签名算法的指示;用于标识第二源操作数的一个或多个字段,所述第二源操作数用于存储用于保存要在执行期间使用的包裹密钥和要解密的数据的输入数据结构的位置或对其编码;以及用于标识目的地操作数的一个或多个字段,所述目的地操作数用于存储在执行期间被生成的经签名的响应要被放置之处的位置或对其编码,其中,操作码用于指示执行电路至少用于:利用puf生成的包裹密钥对来自所述第二源操作数的所述输入数据结构的秘密信息解密;使用所述源/目的地操作数的所述身份质询、根据由所述第一源操作数指示的所述签名算法生成解包的秘密信息的经签名的响应;将所述经签名的响应存储在所标识的目的地中;以及将执行的操作状态存储在所标识的源/目的地操作数中;以及根据所述操作码执行所述经解码的指令。51.如示例50所述的方法,其中,所述输入数据结构用于包括目标的标识符。52.如示例51所述的方法,其中,当所标识的目标不是处理器时,所述执行电路用于中止执行。53.如示例50所述的方法,其中,所述操作数是寄存器。54.如示例50所述的方法,其中,所述输入数据结构用于包括要在所述解密中使用的序列标识符。55.如示例50所述的方法,其中,所述输入数据结构用于包括用于标识质询的字段,所述质询由所述puf使用以生成所述密钥。56.如示例50所述的方法,其中,所述操作状态用于指示成功、失败、或熵错误中的一项。57.如示例50所述的方法,其中,所述执行电路用于当所述秘密信息被成功地加密
时清除零标志(zf),并且所述执行电路用于在其他情况下将所述zf设置为1。58.如示例50所述的方法,其中,所述指令与最高特权的保护级别相关联。59.一种机器可读介质,存储单条指令的实例,所述单条指令的所述实例当由一个或多个处理器处理时使所述一个或多个处理器用于:对所述单条指令的所述实例解码以生成经解码的指令,所述经解码的指令包括:1)用于标识第一目的地操作数的一个或多个字段;2)用于标识第二目的地操作数的一个或多个字段,所述第二目的地操作数用于在所述指令的执行之后存储经加密的数据结构、或用于存储用于在所述指令的执行之后存储经加密的数据结构的位置;3)用于标识源操作数的一个或多个字段,其中,所述源操作数用于存储要在加密过程中使用的输入数据结构、或用于存储要在加密过程中使用的输入数据结构的位置;以及4)用于操作码的一个或多个字段,所述操作码用于指示执行电路至少用于:利用puf生成的包裹密钥对来自所述第二源操作数的所述输入数据结构的秘密信息解密;使用所述源/目的地操作数的所述身份质询、根据由所述第一源操作数指示的所述签名算法来生成解包的秘密信息的经签名的响应;将所述经签名的响应存储在所标识的目的地中;以及将执行的操作状态存储在所标识的源/目的地操作数中;以及根据所述操作码执行所述经解码的指令。60.如示例59所述的机器可读介质,其中,所述操作数是寄存器。61.一种装置,包括:解码器电路,用于对单条指令解码以生成经解码的指令,所述指令包括操作码,所述操作码用于指示存储器保护控制器用于根据叶操作被编程,其中,第一隐式操作数用于提供所述叶操作的指示,第二隐式操作数用于提供密钥标识符(密钥id)和加密算法的指示,第三隐式操作数用于提供输入数据结构的位置,其中,所述操作码用于指示执行电路用于:使用由物理不可克隆函数(puf)生成的解包密钥对来自所述输入数据结构的经加密的数据解密,经解密的数据包括两个串接的密钥;使用针对所述密钥id的所述两个串接的密钥、基于所指示的加密算法来对所述存储器保护控制器编程;以及设置操作状态;以及执行电路,用于根据所述操作码执行所述经解码的指令。62.如示例61所述的装置,其中,所述串接的密钥中的第一密钥是tweak密钥。63.如示例61所述的装置,其中,所述串接的密钥中的第二密钥是数据密钥。64.如示例61所述的装置,其中,所述隐式操作数是寄存器。65.如示例64所述的装置,其中,所述第一隐式操作数是eax寄存器。66.如示例61所述的装置,其中,所述输入数据结构用于包括用于标识质询的字段,所述质询由所述puf使用以生成所述密钥。67.如示例61所述的装置,其中,所述操作状态用于指示成功、无效加密算法、无效密钥id、以及设备忙碌中的一项。68.如示例61所述的装置,其中,所述执行电路用于当所述秘密信息被成功地解密时清除零标志(zf),并且所述执行电路用于在其他情况下将所述zf设置为1。69.如示例61所述的装置,其中,所述指令与最高特权的保护级别相关联。70.一种方法,包括:对单条指令解码以生成经解码的指令,所述指令包括操作码,所述操作码用于指
示存储器保护控制器用于根据叶操作被编程,其中,第一隐式操作数用于提供所述叶操作的指示,第二隐式操作数用于提供密钥标识符(密钥id)和加密算法的指示,第三隐式操作数用于提供输入数据结构的位置,其中,所述操作码用于指示执行电路用于:使用由物理不可克隆函数(puf)生成的解包密钥对来自所述输入数据结构的经加密的数据解密,经解密的数据包括两个串接的密钥;使用针对所述密钥id的所述两个串接的密钥、基于所指示的加密算法来对所述存储器保护控制器编程;以及设置操作状态;以及执行电路,用于根据所述操作码执行所述经解码的指令。71.如示例70所述的方法,其中,所述串接的密钥中的第一密钥是tweak密钥。72.如示例71所述的方法,其中,所述串接的密钥中的第二密钥是数据密钥。73.如示例70所述的方法,其中,所述隐式操作数是寄存器。74.如示例73所述的方法,其中,所述第一隐式操作数是eax寄存器。75.如示例70所述的方法,其中,操作状态用于指示成功、无效加密算法、无效密钥id、以及设备忙碌中的一项。76.如示例70所述的方法,其中,所述执行用于当所述秘密信息被成功地加密时清除零标志(zf),并且所述执行用于在其他情况下将所述zf设置为1。77.如示例70所述的方法,其中,所述指令与最高特权的保护级别相关联。78.一种机器可读介质,存储单条指令的实例,所述单条指令的所述实例当由一个或多个处理器处理时使所述一个或多个处理器用于:对单条指令解码以生成经解码的指令,所述指令包括操作码,所述操作码用于指示存储器保护控制器用于根据叶操作被编程,其中,第一隐式操作数用于提供所述叶操作的指示,第二隐式操作数用于提供密钥标识符(密钥id)和加密算法的指示,第三隐式操作数用于提供输入数据结构的位置,其中,所述操作码用于指示执行电路用于:使用由物理不可克隆函数(puf)生成的解包密钥对来自所述输入数据结构的经加密的数据解密,经解密的数据包括两个串接的密钥;使用针对所述密钥id的所述两个串接的密钥、基于所指示的加密算法来对所述存储器保护控制器编程;以及设置操作状态;以及根据所述操作码执行所述经解码的指令。79.如示例78所述的机器可读介质,其中,所述操作数是隐式寄存器。
[0277]
对“一个实施例”、“实施例”、“示例实施例”等的引用指示所描述的实施例可包括特定的特征、结构或特性,但是每个实施例可以不一定包括该特定的特征、结构或特性。而且,此类短语不一定是指同一实施例。此外,当结合实施例描述特定的特征、结构或特性时,认为结合无论是否被明确描述的其他实施例而影响此类特征、结构或特性是在本领域技术人员的知识范围之内的。
[0278]
此外,在上文描述的各实施例中,除非另外专门指出,否则,诸如短语“a、b或c中的至少一个”之类的分隔语言旨在被理解为意味着a、b、或c、或其任何组合(例如,a、b、和/或c)。由此,分隔语言不旨在也不应当被理解为暗示给定的实施例要求a中的至少一个、b中的至少一个或c中的至少一个各自都存在。
[0279]
因此,说明书和附图应被认为是说明性而非限制性意义的。然而,将显而易见的是,可对这些实现方式作出各种修改和改变,而不背离如权利要求中所述的本公开的更宽泛的精神和范围。