[go: up one dir, main page]

CN118740368A - 密码替换盒操作中的错误检测 - Google Patents

密码替换盒操作中的错误检测 Download PDF

Info

Publication number
CN118740368A
CN118740368A CN202311805241.9A CN202311805241A CN118740368A CN 118740368 A CN118740368 A CN 118740368A CN 202311805241 A CN202311805241 A CN 202311805241A CN 118740368 A CN118740368 A CN 118740368A
Authority
CN
China
Prior art keywords
bit
circuit
error
output
box
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202311805241.9A
Other languages
English (en)
Inventor
拉加万·古玛
萨努·马修
阿维纳什·L·瓦尔纳
基尔克·S·雅普
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN118740368A publication Critical patent/CN118740368A/zh
Pending legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/002Countermeasures against attacks on cryptographic mechanisms
    • H04L9/004Countermeasures against attacks on cryptographic mechanisms for fault attacks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0631Substitution permutation network [SPN], i.e. cipher composed of a number of stages or rounds each involving linear and nonlinear transformations, e.g. AES algorithms
    • GPHYSICS
    • G09EDUCATION; CRYPTOGRAPHY; DISPLAY; ADVERTISING; SEALS
    • G09CCIPHERING OR DECIPHERING APPARATUS FOR CRYPTOGRAPHIC OR OTHER PURPOSES INVOLVING THE NEED FOR SECRECY
    • G09C1/00Apparatus or methods whereby a given sequence of signs, e.g. an intelligible text, is transformed into an unintelligible sequence of signs by transposing the signs or groups of signs or by replacing them by others according to a predetermined system
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/06Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols the encryption apparatus using shift registers or memories for block-wise or stream coding, e.g. DES systems or RC4; Hash functions; Pseudorandom sequence generators
    • H04L9/0618Block ciphers, i.e. encrypting groups of characters of a plain text message using fixed encryption transformation
    • H04L9/0637Modes of operation, e.g. cipher block chaining [CBC], electronic codebook [ECB] or Galois/counter mode [GCM]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/12Details relating to cryptographic hardware or logic circuitry
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L2209/00Additional information or applications relating to cryptographic mechanisms or cryptographic arrangements for secret or secure communication H04L9/00
    • H04L2209/26Testing cryptographic entity, e.g. testing integrity of encryption key or encryption algorithm

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

本公开涉及密码替换盒操作中的错误检测。一个方面的一种装置包括替换盒(S盒)电路。S盒电路包括乘法逆电路。乘法逆电路用于接收伽罗瓦域的8位输入并且生成伽罗瓦域的对应8位输出。只要在生成8位输出时没有错误,8位输出就是8位输入的乘法逆。该装置还包括错误检测电路,其用于接收8位输入并与S盒电路耦合以接收8位输出。错误检测电路用于至少部分地基于8位输出是否是8位输入的乘法逆来检测在生成8位输出时是否已经发生错误。还公开了其他装置、方法和系统。

Description

密码替换盒操作中的错误检测
技术领域
本文描述的实施例总体涉及密码学。具体地,本文描述的实施例总体涉及密码学中的错误检测。
背景技术
密码技术是用于保护计算机系统和其它电子设备中的数据(例如,期望保持秘密或机密的数据)的技术。密码技术通常涉及使用密码算法和密码密钥来保护数据。例如,加密(有时称为加密法)使用加密密钥根据密码算法对输入数据或明文执行一系列操作或变换,以生成通常难以理解的输出加密数据或密文。同样,解密(有时称为逆加密法)使用解密密钥根据密码算法对输入的加密数据或密文执行一系列操作或变换,以生成输出解密数据或明文。
一种已知的密码算法是高级加密标准(advanced encryption standard,AES),其由美国国家标准与技术研究院(national institute of standards andtechnology,NIST)公布为联邦信息处理标准(federal informationprocessing standard,FIPS)197。AES有时被称为Rijndael算法。AES是使用128位的固定块大小的块加密算法、使用应当保密的密钥的密钥算法、以及使用相同密钥进行加密和解密的对称密钥算法。128位数据的固定块大小被称为状态,并被布置为十六字节的4×4阵列。AES算法可以用于在10、12或14个连续轮中加密128位状态或解密128位状态,这取决于对于AES-128、AES-192和AES-256密钥大小分别是否是128位、192位、或者256位。
在AES和其它密钥加密法中,密钥应当保持秘密或机密。如果攻击者不知道密钥,则密码算法的特性通常使得不可能、实际上不可行、或者至少极其困难地从加密数据或密文中重新生成未加密数据或明文。然而,如果攻击者能够知道或确定密钥,则能够容易地从加密数据重新生成未加密数据。
发明内容
本公开的一方面提供了一种装置,包括:替换盒(S盒)电路,所述S盒电路包括乘法逆电路,所述乘法逆电路用于接收伽罗瓦域的8位输入并且生成伽罗瓦域的对应8位输出,其中,当在生成所述8位输出时没有错误时,所述8位输出是所述8位输入的乘法逆;以及错误检测电路,所述错误检测电路用于接收所述8位输入,并且所述错误检测电路与所述S盒电路耦合以接收所述8位输出,所述错误检测电路用于至少部分地基于所述8位输出是否是所述8位输入的乘法逆来检测在生成所述8位输出时是否已经发生错误。
本公开的一方面提供了一种方法,包括:对伽罗瓦域的8位输入执行替换盒(S盒)操作以生成伽罗瓦域的对应8位输出,其中,当在生成所述8位输出时没有错误时,所述8位输出是所述8位输入的乘法逆;以及至少部分地基于所述8位输出是否是所述8位输入的乘法逆来检测在生成所述8位输出时是否发生了错误。
本公开的一方面提供了一种系统,包括:处理器;存储器;以及密码单元,所述密码单元与所述处理器耦合并且与所述存储器耦合,所述密码单元用于对从所述处理器发送到所述存储器的数据进行加密,所述密码单元包括替换盒(S盒)电路,所述S盒电路包括乘法逆电路,所述乘法逆电路用于接收伽罗瓦域的8位输入并且生成伽罗瓦域的对应8位输出,其中,当在生成所述8位输出时没有错误时,所述8位输出是所述8位输入的乘法逆;以及错误检测电路,所述错误检测电路用于接收所述8位输入,并且所述错误检测电路与所述S盒电路耦合以接收所述8位输出,所述错误检测电路用于至少部分地基于所述8位输出是否是所述8位输入的乘法逆来检测在生成所述8位输出时是否已经发生错误。
本公开的一方面提供了一种装置,包括:替换盒(S盒)组件,所述S盒组件包括乘法逆组件,所述乘法逆组件用于接收伽罗瓦域的8位输入并且生成伽罗瓦域的对应8位输出,其中,当在生成所述8位输出时没有错误时,所述8位输出是所述8位输入的乘法逆;以及错误检测组件,所述错误检测组件用于接收所述8位输入,并且所述错误检测组件与所述S盒组件耦合以接收所述8位输出,所述错误检测组件用于至少部分地基于所述8位输出是否是所述8位输入的乘法逆来检测在生成所述8位输出时是否已经发生错误。
本公开的一方面提供了一种处理器,包括用于执行上述方法的组件。
本公开的一方面提供了一种机器可读介质,所述机器可读介质包括机器可读指令,所述机器可读指令当被执行时使得机器执行上述方法。
本公开的一方面提供了一种计算机程序产品,所述计算机程序产品包括指令,所述指令当被处理器执行时使得所述处理器执行上述方法。
附图说明
通过参考以下描述和用于说明实施例的附图,可以最好地理解本公开。在附图中:
图1是AES单元和对应的错误检测电路的示例的框图。
图2是S盒电路的详细示例实施例的电路图。
图3是S盒电路和错误检测电路的第一实施例的框图。
图4是S盒电路和错误检测电路的第二实施例的框图。
图5是S盒电路和错误检测电路的第三实施例的框图。
图6是例示了十六个S盒部分和组合电路的框图,每个S盒部分具有对应的错误检测电路,组合电路用于将从十六个错误检测电路输出的十六个错误信号组合成组合错误信号。
图7是乘法逆后AES电路和对应的错误检测电路的框图。
图8是具有比AES数据路径电路更多的时间裕量的错误检测电路的实施例的框图。
图9是使用AES密码单元来提供存储器加密的系统的框图。
图10是具有用于加密和解密数据的AES密码单元的处理器的框图。
图11是具有用于加密和解密数据的S盒单元的处理器的框图。
图12例示了示例计算系统。
图13例示了可以具有一个或多个核心和集成存储器控制器的示例处理器和/或片上系统(SoC)的框图。
图14(A)是例示了根据示例的示例有序流水线和示例寄存器重命名、无序发布/执行流水线两者的框图。
图14(B)是例示了根据示例的要被包括在处理器中的示例有序架构核心和示例寄存器重命名、无序发布/执行架构核心两者的框图。
图15例示了(一个或多个)执行单元电路的示例。
图16是根据一些示例的寄存器架构的框图。
图17例示了指令格式的示例。
图18例示了寻址信息字段的示例。
图19例示了第一前缀的示例。
图20(A)至图20(D)例示了如何使用图19中的第一前缀的R、X和B字段的示例。
图21(A)至图21(B)例示了第二前缀的示例。
图22例示了第三前缀的示例。
图23是例示了根据示例的使用软件指令转换器将源指令集架构中的二进制指令转换为目标指令集架构中的二进制指令的框图。
具体实施方式
一种挑战是攻击者可能将AES硬件单元和某些其它密码硬件单元作为目标,以试图获得秘密信息(例如,密钥)。攻击者可能使用的一种技术是故障注入,诸如电压毛刺、时钟毛刺或激光/电磁脉冲注入。在这种技术中,可能导致或引起在AES或其它密码硬件单元的电路中发生错误。例如,在电压毛刺攻击中,电压被降低,直到电路产生故障而导致错误。这种错误可能导致被破坏或有故障的密文/加密数据,其可能被分析来发现密钥。例如,有故障的密文/加密数据可能减少密钥空间的样本空间,从而降低了基础密码算法的安全性,并且可能采用差分故障密码分析来提取密钥。常规上,AES或其它密码硬件单元可能不能检测这样的错误,或者可能不能检测在AES硬件单元的某些部分(例如,替换盒(substitutionbox,S盒)电路)中发生的错误。
本文公开了用于检测AES和其它密码单元(例如,S盒电路)内的错误的方法、装置和电路。有利地,这些方法、装置和电路可以用于在运行时间期间进行检测和保护以防止故障注入攻击(例如,电压毛刺攻击)。在以下描述中,阐述了许多具体细节(例如,具体电路、微架构细节、操作序列、处理器配置等)。然而,可以在没有这些具体细节的情况下实践实施例。在其他情况下,没有详细示出公知的电路、结构和技术,以避免使对本说明书的理解模糊。
图1是AES单元100和对应的错误检测电路101的示例的框图。AES单元包括添加轮密钥电路102、S盒电路103、移位行电路104和混合列电路105。数据106(例如,用于第一轮的未加密数据或用于中间轮的部分加密数据)可以被提供或输入到添加轮密钥电路。还可提供轮密钥107(从该轮的加密密钥导出的密钥)作为到添加轮密钥电路的输入。添加轮密钥电路可以将输入数据与输入轮密钥相加或以其他方式组合。例如,可使用逐位异或(XOR)运算将输入数据的各个字节与轮密钥的字节组合以产生128位中间值。
S盒电路103可从添加轮密钥电路接收128位中间值。如下面将进一步解释的,S盒电路可具有用于处理128位中间值的十六个8位切片或部分。S盒电路可以对128位中间值执行非线性字节替换操作,其中,128位中间值的各个字节被另一字节值(例如,至少概念上对应于查找表)替换。S盒电路可以基于提供非线性的伽罗瓦域(Galois field)GF(28)上的乘法逆(multiplicative inverse)。为了避免基于简单代数特性的攻击,可以通过将乘法逆函数与可逆仿射变换(invertible affine transformation)组合来构造S盒。
移位行电路104可以接收S盒电路的输出。移位行电路可以执行位线性转置操作,其中,来自S盒电路的输出的最后三行的字节被向左循环移位特定数量的偏移。
混合列电路105可以接收移位行电路的输出。混合列电路可以对移位行电路的输出的列执行位线性变换或混合操作。这可以混合或组合各个列中的四个字节(例如,彼此独立地)以产生新的列。例如,4×4阵列或状态的各个列可被当做GF(28)上的多项式,然后可以以x4+1为模与固定多项式c(x)=3x3+x2+x+2相乘。混合列电路以虚线表示,以表明混合列电路用于除了最后一轮之外的所有AES轮。
在一些实施例中,AES单元可输出所描述的单轮的加密数据109(例如,将加密数据存储在处理器的寄存器中)。在其他实施例中,如图所示,混合列电路的输出可以可选地作为输入沿着虚线箭头108返回到添加轮密钥电路,以执行另一轮(例如,直到在10、12或14轮之后输出加密数据109为止)。
在一些实施例中,错误检测电路101可检测AES单元或其任何部分中的错误。在一些实施例中,错误检测电路可以仅检测S盒电路中的错误。错误检测电路可以输出表明是否已经检测到错误的错误信号112。
为了说明某些概念,已经在AES加密的上下文中描述了AES单元。然而,应该理解,相同或不同的AES单元可以用于解密。用于解密的电路和操作大致是用于加密的操作的逆转。
图2是S盒电路203的详细示例实施例的电路图。S盒电路用于处理被标记为S-boxin[7:0]的、有限域或伽罗瓦域中的一个8位字节的输入数据。8位字节S-boxin[7:0]被分配成输入最高有效或“高”4位半字节(nibble)(bh)和输入最低有效或“低”4位半字节(bl)。S盒电路包括乘法逆电路210,用于计算GF(28)中的乘法逆。乘法逆电路的高效实现方式涉及使用GF(24)2的复合域的计算,该复合域涉及四个如带圆圈“X”所示的乘法器、两个如带圆圈“+”所示的加法器(例如,逻辑异或(XOR)电路)、X2*β单元、以及GF(24)X-1单元。这些电路元件都如图示所示地耦合。乘法逆电路可以生成乘法逆并将其输出到仿射变换电路211。这可以被提供为乘法逆输出最高有效或“高”4位半字节(ah)和乘法逆输出最低有效或“低”4位半字节(al)。两个乘法逆输出4位半字节(ah、al)可以被提供给仿射变换电路。仿射变换可以输出被标记为S-boxout[7:0]的、有限域或伽罗瓦域中的一个8位字节的输出数据。应当理解,这仅仅是合适的S盒电路的一种说明性示例。也可以可选地使用本领域已知的各种其它S盒电路。X*α、X2*β模块计算对于计算GF(24)2中的X-1所需的中间项,其中,α和β是形式x2+αx+β的扩展域多项式的系数。其它复合域表示(诸如GF((22)2)2)也是用于计算GF(28)中的X-1的有效公式,并且可以产生用于实现S盒模块的其他电路。
S盒电路是可能引起错误(例如,由电压毛刺或其它故障注入攻击引起)或以其它方式发生错误的一个地方。而且,由于S盒操作在AES中往往是相对高计算密集的操作,因此S盒电路可对应地表示用于一轮AES的整个电路和可能发生错误的更多电路的重要部分。进一步地,AES的S盒操作是非线性的,并且使用基于奇偶校验(parity)的方法不容易保护S盒电路的完整性,这些方法对于保护用于AES中的线性操作的电路的完整性是有用的。具体地,S盒操作的非线性性质倾向于阻碍预期奇偶校验位根据S盒操作的输入的表达。因此,检测S盒电路中的错误的新方法将是有用的,并且可以提供某些优点。
图3是S盒电路303和错误检测电路301的第一实施例的框图。S盒电路用于处理被标记为S-boxin[7:0]的、有限域或伽罗瓦域中的一个8位字节的输入数据。S盒电路包括乘法逆电路310。在一些实施例中,乘法逆电路可以可选地与针对图2示出和描述的乘法逆电路相同或相似。替代地,可以可选地使用本领域已知的其他类型的乘法逆电路。乘法逆电路可以输出乘法逆输出320。S盒电路还包括仿射变换电路311。仿射变换可以接收乘法逆输出,并且生成并输出被标记为S-boxout[7:0]的、有限域或伽罗瓦域中的一个8位字节的输出数据。
错误检测电路301与S盒电路303耦合。错误检测电路可以检测用于计算乘法逆320的乘法逆电路310和/或S盒操作中的错误。这些错误可以在实时操作中和/或在运行时间期间被检测。错误检测电路可以被耦合为接收8位字节的输入数据S-boxin[7:0]。S-boxin[7:0]可以表示S盒操作的输入(X)。错误检测电路还可以被耦合为接收从乘法逆电路输出的8位乘法逆输出320(X-1)。
现在,S盒操作的特性被称为乘法逆特性。S盒操作的一部分是将S盒操作的输入(X)映射到其在伽罗瓦域或有限域中的乘法逆。X的乘法逆是X-1,其是当乘以X时产生乘法恒等式或一(即,1)的数字。因此,当在生成乘法逆中不存在错误时,S盒操作满足乘法逆特性,其中,对于除了零之外的任何输入(X),所生成的乘法逆(X-1)是输入(X)的真乘法逆,并且S盒操作的输入(X)与从S盒操作的乘法逆部分输出的逆输出(X-1)的乘积具有值一(例如,8位二进制值00000001)。也就是说,对于零以外的任何输入(X),(X*X-1)=1。然而,该乘法逆特性仅在用于计算乘法逆输出320(X-1)的S盒电路和/或S盒操作中没有错误时才适用。如果在用于计算逆的S盒电路和/或S盒操作中引起(例如,由电压毛刺或其他故障注入攻击)或以其他方式发生一个或多个错误,则乘法逆特性很可能将不会保持为真或被维持。
在一些实施例中,错误检测电路301可以操作为使用乘法逆特性作为检测用于计算乘法逆320的乘法逆电路310和/或S盒操作中的错误的基础。在一些实施例中,错误检测电路可操作为至少部分基于乘法逆320是否是输入S-boxin[7:0]的乘法逆(例如,具有其属性或特性)来检测在乘法逆电路310中和/或在乘法逆320的生成中是否已经出现错误。这可以以各种方式完成。首先,错误检测电路可以使用从乘法逆特性导出或数学地重新排列的各种方程或关系中的任何方程或关系来实现对乘法逆特性的检查。其次,错误检测电路可以使用由乘法逆特性产生的属性、结果或特性(例如,最高和最低有效半字节的异或为0001,如将在下面进一步讨论的)来实现对乘法逆特性的检查。因此,如将对受益于本公开及其若干不同示例实施例的本领域技术人员将显而易见的,检查可以以各种方式基于乘法逆特性。错误检测可以操作为输出表明是否已经检测到错误的错误信号。
图4是S盒电路403和错误检测电路401的第二实施例的框图。S盒电路用于处理被标记为S-boxin[7:0]的、有限域或伽罗瓦域中的一个8位字节的输入数据。S盒电路包括乘法逆电路410。在一些实施例中,乘法逆电路可以可选地与针对图2示出和描述的乘法逆电路相同或相似。替代地,可以可选地使用本领域已知的其他类型的乘法逆电路。乘法逆电路可以输出乘法逆输出420。S盒电路还包括仿射变换电路411。仿射变换可以接收乘法逆输出,并且生成并输出被标记为S-boxout[7:0]的、有限域或伽罗瓦域中的一个8位字节的输出数据。
错误检测电路401与S盒电路403耦合。错误检测电路可以检测用于计算乘法逆的乘法逆电路410和/或S盒操作中的错误。这些错误可以在实时操作中和/或在运行时间期间被检测。错误检测电路可以被耦合为接收被标记为S-boxin[7:0]的一个8位字节的输入(X)。错误检测电路还可以被耦合为接收来自乘法逆电路的乘法逆输出420(X-1)。
AES操作在有限域或伽罗瓦域GF(28)中被定义。在一些实施例中,错误检测电路可以包括有限域或伽罗瓦域乘法器421,用于计算或生成S盒操作的8位输入(X)与来自乘法逆电路410的8位乘法逆输出420(X-1)的乘积。在一些实施例中,伽罗瓦域乘法器421可以是一项8位(one-term8-bit)伽罗瓦域乘法器。
在其它实施例中,AES的复合域实现方式可以将8位操作转换为一对4位操作。在这样的实施例中,伽罗瓦域乘法器420可以是复合域两项4位(two-term 4-bit)伽罗瓦域乘法器,用于计算S盒操作的输入X(bh,bl)与来自乘法逆电路的乘法逆输出X-1(ah,al)的乘积。在该表达式中,bh和bl分别表示S盒操作的输入(X)的最高有效4位半字节和最低有效4位半字节,ah和al分别表示来自乘法逆电路的乘法逆输出(X-1)的最高有效4位半字节和最低有效4位半字节。
在另一些实施例中,AES的复合域实现方式可以将8位操作转换为四个2位操作。在这样的实施例中,伽罗瓦域乘法器421可以是复合域四项2位(four-term 2-bit)伽罗瓦域乘法器,用于计算S盒操作的输入X(b3,b2,b1,b0)与来自乘法逆电路的逆输出X-1(a3,a2,a1,a0)的乘积。在该表达式中,b3、b2、b1和b0分别表示S盒操作的输入(X)的连续2位值,a3、a2、a1、a0分别表示来自乘法逆电路的乘法逆输出(X-1)的连续2位值。
如上所述,乘法逆特性仅对于除了零之外的任何输入(X)保持为真。如果期望,可以可选地在错误检测电路中包括零值检查器电路(未示出),以检查当S盒的输入为零时的边角情况条件。例如,在4位实施例中,零值检查器电路可以在输入半字节bh、bl为0时检查是否(8ah+al==0且al==0)以捕获输出错误。
再次参考图4,错误检测电路401还可以包括比较电路422。比较电路可以将乘积(X*X-1)与预期值进行比较,以确定乘法逆特性是否已经被维持和/或错误是否已经发生。例如,比较电路可以将乘积与值一(例如,8位二进制值00000001)进行比较。如果乘积匹配值一(例如,00000001),则比较电路可确定未发生错误,或者当乘积不等于一(例如,所计算的乘积为00000000、00000010、00100000或除00000001以外的任何其它值)时确定在生成乘积时已发生错误。错误检测电路可以输出表明乘法逆特性是被维持(例如,未检测到错误)还是未被维持(例如,已检测到错误)的错误信号412。以示例的方式,错误信号可以表示单个位或单个导线上的信号,其具有用于表明乘法逆特性已被维持(例如,未检测到错误)的第一值(例如,被清零到二进制零或设置为低)或具有用于表明乘法逆特性未被维持(例如,已检测到错误)的第二值(例如,被设置为二进制一或设置为高)。相反的约定也是可能的。
在非限制性的情况下,在一些实施例中,可以至少部分地基于表明已经检测到错误的错误信号来可选地采取保护动作。在一些实施例中,这可以基于所表明的单个错误或者在特定时段内表明的多个错误或错误阈值水平。保护动作可涉及生成机器检查异常、将良性数(例如,随机数、全零或一些其它固定数)写入到输出中、或者禁用AES单元。这又可以帮助避免在故障注入攻击的情况下泄露秘密(例如,密钥)。
现在,如上所述,在不同实施例中,可以以不同方式实现使用乘法逆特性的检查。例如,错误检测电路可以使用由乘法逆特性产生的属性、结果或特性来实现对乘法逆特性的检查。为了进一步说明,考虑以下实施例。
图5是S盒电路503和错误检测电路501的第三实施例的框图。S盒电路用于处理被标记为S-boxin[7:0]的、伽罗瓦域中的一个8位字节的输入数据。S盒电路包括乘法逆电路510。在一些实施例中,乘法逆电路可以可选地与针对图2示出和描述的乘法逆电路相同或相似。替代地,可以可选地使用本领域已知的其他类型的乘法逆电路。S盒电路还包括仿射变换电路511。仿射变换可以输出被标记为S-boxout[7:0]的、伽罗瓦域中的一个8位字节的输出数据。
错误检测电路501与S盒电路503耦合。错误检测电路可以检测用于计算乘法逆520的乘法逆电路510和/或S盒操作中的错误。这些错误可以在实时操作中和/或在运行时间期间检测。错误检测电路可以被耦合为接收S盒操作的输入(X)的最高有效4位半字节(bh)和最低有效4位半字节(bl)。错误检测电路还可以被耦合为接收来自乘法逆电路510的乘法逆输出(X-1)的最高有效4位半字节(ah)和最低有效4位半字节(al)。
回想乘法逆特性是S盒操作的输入(X)与从S盒操作的乘法逆部分输出的逆输出(X-1)的乘积对于除了零之外的任何输入(X)具有值一(例如,8位二进制值00000001)的特性。也就是说,对于零以外的任何输入(X),X*X-1=1。作为其属性、结果或特性,如果S盒操作的输入(X)与来自S盒操作的逆输出(X-1)的乘积为一(例如,8位二进制值00000001),则该乘积的最高有效半字节应为零(例如,4位二进制值0000)且最低有效半字节应为一(例如,4位二进制值0001)。在一些实施例中,由于乘法逆特性而产生的该属性、结果或特性可以用作检测错误的基础。例如,在一些实施例中,错误检测电路可以生成S盒操作的输入(X)与从S盒操作的乘法逆部分输出的逆输出(X-1)的乘积的最高有效半字节和最低有效半字节在有限域中的异或、求和或组合。然后,错误检测电路可以将结果值与一的4位值(例如,4位二进制值0001)进行比较,以确定在用于生成乘积的S盒电路和/或S盒操作中是否发生了错误。
下面的方程1示出了乘积的最高有效半字节(msb)和乘积的最低有效半字节(lsb)的异或可以用四个4位半字节bh、bl、ah和al来表达。具体地,复合域中的乘积X*X-1可以用乘法和简化后的ah、al、bh、bl和x表达为多项式,如以下方程所示:
X*X-1=(albh+ahbl+ahbh)x+(albl+8ahbh)方程1
在方程1中,最左项乘以x表示最高有效半字节(msb),而最右项表示最低有效半字节(lsb)。上述方程可以被数学地重新排列,以用ah、al、bh、bl表达乘积的最高有效半字节(msb)和乘积的最低有效半字节(lsb)的异或,如以下方程2所示:
msb XOR lsb=ah(bl+9bh)+al(bl+bh)方程2
方程2涉及较少的乘法,这通常意味着较少的电路,因为乘法电路往往相对较大。在一些实施例中,以上方程2可以在硬件中被实施为基于乘法逆特性的测试。如图所示,错误检测电路包括乘法逆检查器电路523,其包括示出为带圆圈的“X”的三个乘法器和示出为带圆圈的“+”的三个加法器(例如,异或电路)。有利地,与图4的伽罗瓦域乘法器421相比,该乘法逆检查器电路通常可以减少成本、大小和功耗。例如,本实施例消除了伽罗瓦域乘法器(例如,计算来自检查器数据路径的乘积al*bh的两个GF(24)2乘法器)。
如上所述,乘法逆特性仅对于除了零之外的任何输入(X)保持为真。如果期望,可以可选地在错误检测电路中包括零值检查器电路,以检查当S盒的输入为零时的边角情况条件。例如,在4位实施例中,零值检查器电路可以在输入半字节bh、bl为0时检查是否(8ah+al==0且al==0)以捕获输出错误。
再次参考图5,错误检测电路还可以包括比较电路522。比较电路可以将半字节的异或或者其他组合与预期值进行比较,以确定是否已经维持乘法逆特性和/或在生成乘法逆中是否已经出现错误。例如,比较电路可以将半字节的异或或其他组合与值一(例如,4位二进制值0001)进行比较。如果半字节的异或或者其他组合等于值一,则比较电路可以确定没有错误发生,或者如果它不等于值一(例如,它是0000、0010、1000或者除0001之外的任何其他值),则比较电路可以确定错误已发生。错误检测电路可以输出表明是否已经检测到错误的错误信号512。错误信号可以可选地与先前描述的错误信号相同或相似。
在非限制性的情况下,在一些实施例中,可以至少部分地基于表明已经检测到错误的错误信号来可选地采取保护动作。这可以可选地与先前已经描述的相同或相似。
图6是例示了各自具有对应的S盒电路603和错误检测电路601的十六个S盒切片或部分630-1至630-16以及将从十六个错误检测电路输出的十六个错误信号组合成组合错误信号632的错误信号组合电路631的框图。S盒电路可以与本文其它地方描述的S盒电路相同或相似,或者可以可选地使用本领域已知的其它类型的S盒电路。在一些实施例中,错误检测电路可以与图3、图4或图5的错误检测电路相同或相似。替代地,可以可选地使用以一些其它方式基于乘法逆特性来检测错误的其它类型的错误检测电路。十六个S盒部分可共同处理构成AES的128位状态的十六个字节。可以可选地是逻辑或电路(例如,或树电路)或其他组合电路的错误信号组合电路631可以将针对十六个字节生成的十六个对应的错误信号组合为组合错误信号,该组合错误信号可以表明十六个S盒部分中的任何一个或多个是否已经检测到错误。
有利地,可以包括用于S盒电路的错误检测电路,而不需要在空间或时间上的双冗余设计。另一种可能的方法是包括一对复制的AES单元并比较该对复制的AES单元的两个输出以检测错误。然而,AES单元的这种复制往往增加制造成本、管芯大小和功耗。又一种可能的方法是对相同的AES单元重复相同的计算两次并比较两个输出以检测错误。然而,这往往降低AES吞吐量并增加功耗。进一步地,所描述的方法不依赖于基于奇偶校验的方法来检测用于生成逆乘积的S盒电路和/或S盒操作内的错误。
图7是乘法逆后AES电路735和用于检测在乘法逆后AES电路中引入的错误的对应的错误检测电路736的框图。乘法逆后AES电路可以被耦合为从S盒电路的乘法逆电路(未示出)接收被标记为Invout(bh,bl)的乘法逆输出的高半字节和低半字节。乘法逆后AES电路包括仿射变换电路(AX)711A、缩放仿射变换电路(2*AX)711B、混合列电路705和密钥添加电路702。仿射变换电路711A可计算仿射变换。缩放仿射变换电路711B可计算缩放0×2的缩放仿射变换。这不是必需的,但是可以允许通过来自仿射变换电路和缩放仿射变换电路的输出的简单异或或组合来实现混合列电路705中的0×3缩放。密钥添加电路702可以添加用于轮的轮密钥。AES轮输出709可以是来自乘法逆后AES电路的输出。
在一些实施例中,错误检测电路736可以使用奇偶校验来检测乘法逆后AES操作中的错误。错误检测电路包括预测奇偶校验电路737A、计算奇偶校验电路738和比较电路739。预测奇偶校验电路737A的更详细的示例实施例在图示的右侧被示出为预测奇偶校验电路737B。在一些实施例中,可以可选地使用字节级奇偶校验方案。这可以帮助增加故障检测覆盖,但不是必需的。错误检测电路可以根据乘法逆输出(例如,Invout(bh,bl))来计算仿射和缩放仿射变换的奇偶校验。在一些实施例中,通过根据乘法逆输出(例如,Invout(bh,bl))来表达轮输出的预期奇偶校验,可以使用单个奇偶校验计算来检查混合列和密钥添加操作的错误。这种方法可以帮助检测仿射变换操作中的错误,但这不是必需的。这种方法还可以帮助减少区域开销。
如针对预测奇偶校验电路737B例示的,可针对仿射变换(AX)电路711A来计算被标记为第一组垂直线3、2、1、0的第一组奇偶校验,并且可针对缩放仿射变换(2*AX)电路711B来计算被标记为第二组垂直线3、2、1、0的第二组奇偶校验。如由与线交叉的黑点所示,混合列奇偶校验可通过选择或选取仿射变换(AX)和缩放仿射变换(2*AX)的这些奇偶校验的子集来计算。这些奇偶校验可以被异或或者以其他方式如表示异或电路的最左侧的一组四个垂直带圆圈“+”所示地组合。虽然轮中的上游奇偶校验计算包含在单个字节中,但混合列奇偶校验预测可取决于四个相邻字节的预测仿射和缩放仿射奇偶校验。密钥扩展电路可以在每个时钟周期生成轮密钥以及相关联的奇偶校验位。然后,可以将轮密钥奇偶校验位与混合列奇偶校验位进行异或或者以其他方式进行组合,以反映轮密钥添加,如由表示异或电路的最右侧的一组的四个垂直带圆圈“+”所示,以生成轮预测奇偶校验位740。仿射和缩放仿射预测的奇偶校验可以与轮密钥奇偶校验组合以生成用于AES轮的十六个输出字节粒度奇偶校验。比较电路739可以将来自预测奇偶校验电路737A的轮预测奇偶校验位740与由计算奇偶校验电路738针对实际AES数据路径计算的计算奇偶校验位进行比较。比较电路可以输出表明检测到任何错误的错误信号712。
现在,应当理解,这仅仅是用于乘法逆后AES电路的适当错误检测电路736的一种说明性示例实施例。在其它实施例中,可以仅针对仿射变换、混合列和密钥添加操作的子集计算奇偶校验。通常,任何这样的奇偶校验可以帮助检测错误并且是有用的。存在错误检测能力与错误检测电路复杂性的折衷,且不同等级可用于不同设计。
电压毛刺或欠压攻击可能试图通过使电源电压劣化以故意违反最大延迟约束或导致时序违反来引起时序错误或故障。一个挑战是这些攻击可能在实际AES电路或错误检测电路中引起错误。如果这些错误首先在错误检测电路中引起,则即使在实际的AES电路中没有错误,也可以发信号通知错误,这可以表示“错误警报”并且通常是不期望的。在一些实施例中,与实际AES电路相比,错误检测电路可被设计为具有更多的时序裕量(slack)和/或较不严格的时序约束。这可以帮助鼓励或增加实际AES电路在低电压下(例如,在欠压毛刺的情况下)在错误检测电路之前经历错误或故障的可能性。这也可以帮助提高在这样的低电压下错误检测电路的错误信号生成的完整性。
图8是具有比AES轮电路更多的时间裕量的错误检测电路的实施例的框图。详细示出了第一S盒部分830-1。第一S盒部分830-1包括S盒电路803,其包括乘法逆电路810和仿射变换电路811。S盒电路可以与本文其它地方描述的S盒电路相同或相似,或者可以可选地使用本领域已知的其它类型的S盒电路。第一S盒部分还包括与S盒电路803耦合的错误检测电路801。在一些实施例中,错误检测电路可以与图3、图4或图5的错误检测电路相同或相似。替代地,可以可选地使用基于乘法逆特性来检测错误的其它类型的错误检测电路。错误检测电路801可输出错误信号812。可以存在可选地类似于第一S盒部分的十五个其他的S盒部分。其它十五个S盒部分中的每一个可以类似地输出错误信号,为了简化说明,未示出该错误信号。十五个附加的错误信号可以从类似于错误检测电路801的十五个附加的错误检测电路同时输出,但是每个错误信号对应于要输入到对应的S盒部分的十五个附加的8位输入中的不同的一个。这些错误信号847可以被存储在一个或多个寄存器或其他存储装置845中。
还示出了混合列电路805和用于添加轮密钥的密钥添加电路802。密钥添加电路可以输出用于轮的128位轮输出数据809,其可以被存储在(一个或多个)寄存器或其他存储装置845中。还示出了错误检测电路,其包括预测奇偶校验电路837、计算奇偶校验电路838、比较电路839和错误信号组合电路831。预测奇偶校验电路可以可选地与图7的预测奇偶校验电路737B相同或相似。预测奇偶校验电路可以计算用于一个或多个乘法逆后AES操作(例如仿射变换、混合列、添加轮密钥或其任意组合)的预测奇偶校验位840。预测奇偶校验位840可以被存储在(一个或多个)寄存器或其它存储装置845中。
计算奇偶校验电路可以从(一个或多个)寄存器或其他存储装置845接收128位轮输出数据809并且可以根据该数据计算奇偶校验位。所计算的奇偶校验可以以字节粒度来计算,使得可以有十六个计算的奇偶校验位。比较电路839可以从计算奇偶校验电路接收十六个计算奇偶校验位,可以从(一个或多个)寄存器或其他存储装置845接收十六个预测奇偶校验位840,可以比较十六个计算奇偶校验位和十六个预测奇偶校验位,并且可以向错误信号组合电路831提供十六个对应的奇偶校验错误信号846(例如,十六个1位错误信号)。错误信号组合电路831可以对来自十六个S盒部分的十六个奇偶校验错误信号846和十六个错误信号847进行逻辑或(例如,使用或树)或以其它方式进行组合,以生成每个AES操作轮的组合轮错误信号832(例如,1位错误信号)。在多轮上执行错误报告的情况下,后续可以将组合轮错误信号832与AES的一个或多个或所有后续轮的组合轮错误信号进行或或者以其他方式组合。
现在,在一些实施例中,用于错误检测电路的可用时序裕量可大于用于AES轮电路的可用时序裕量。在一些实施例中,错误信号组合电路831可以在生成128位轮数据809时的后续时钟周期中组合十六个奇偶校验错误信号846和十六个错误信号847以生成组合轮错误信号832。如所例示的实施例所示,在一些实施例中,除此之外,比较电路839可以在生成128位轮数据809时的后续时钟周期中将来自计算奇偶校验位电路838的十六个计算奇偶校验位和十六个预测奇偶校验位840进行比较。如所例示的实施例所示,在一些实施例中,除了这两者之外,计算奇偶校验电路838可以从(一个或多个)寄存器或其他存储装置845接收128位轮输出数据809,并且可以在生成128位轮数据809时的后续时钟周期中根据128位轮输出数据809计算奇偶校验位。在一些实施例中,在同一时钟周期期间,相比于错误生成电路的任何时延,AES轮电路(例如,S盒电路、混合列电路、密钥添加电路等)从接收包括S-boxin[7:0]的128位输入数据到输出128位输出数据809可以具有更大的时延。
AES和其它密码单元可以以不同的方式和在不同的环境中使用。图9至图11例示了几个代表性的示例,但本公开的范围并不限于此。
图9是使用AES密码单元900来提供存储器加密的系统985的框图。该系统包括处理器986、AES密码单元900和存储器988。AES密码单元可以可选地被包括在存储器控制器987内或以其他方式与其相关联。AES密码单元可以用于加密从处理器接收的未加密数据990,并将对应的加密数据991存储在存储器中。AES密码单元还可以用于解密从存储器接收的加密数据991,并将对应的解密数据990提供给处理器。设想了类似的系统,其中,使用AES加密单元来与输入/输出设备(未示出)而不是存储器交换加密数据。在一些实施例中,系统可包括与AES密码单元相关联的错误检测电路901(例如,本文公开的任何错误检测电路),用于检测错误(例如,由电压毛刺或其它故障注入攻击引起)并提供表明该错误的错误信号912。
图10是具有用于加密和解密数据的AES密码单元1000的处理器1086的框图。处理器可以是通用处理器(例如,中央处理单元(CPU)核心)或专用处理器(例如,图形处理单元(GPU)、密码处理器、网络处理器、通信处理器等)。处理器包括解码单元1088,用于解码AES指令1087。AES指令可以指定要执行一个或多个加密或解密轮或者仅执行加密或解密轮的一部分(例如,S盒或逆S盒操作)。例如,该指令可以指定执行如下项(仅举几个示例)中的任何一项:单个加密轮、单个解密轮、单个加密最后轮、单个解密最后轮、除了混合列操作之外的单个加密轮的所有操作、仅混合列操作、除了逆混合列操作之外的单个解密轮的所有操作、仅逆混合列操作、仅替换盒(S盒)操作、仅逆S盒操作、10、12或14个加密轮、或者10、12或14个解密轮。AES指令可以表示宏指令、机器代码指令、或处理器的指令集的其它指令。
处理器还包括AES密码单元1000,用于执行由指令指定的加密或解密操作。对于加密,AES密码单元可加密输入的未加密数据1090,以生成对应的输出加密数据1091。对于解密,AES密码单元可用于对输入加密数据1091进行解密,以生成对应的输出解密数据1090。如图所示,未加密数据和加密数据可以可选地被存储在处理器的寄存器1089中。替代地,未加密数据和加密数据中的一个或多个可以可选地被存储在存储器(未示出)中。在一些实施例中,系统可包括与AES密码单元相关联的错误检测电路1001(例如,本文公开的任何错误检测电路),用于检测错误(例如,由电压毛刺或其它故障注入攻击引起)并提供表明该错误的错误信号1012。
图11是具有用于加密和解密数据的S盒单元1103的处理器1186的框图。处理器可以是如上所述的通用处理器或专用处理器。处理器包括解码单元1188,用于解码S盒指令1187。S盒指令可指定要执行S盒操作或逆S盒操作。S盒单元可执行如指令所指定的S盒或逆S盒操作。对于加密,S盒单元可用于对输入的未加密数据1190进行加密以生成对应的输出加密数据1191(例如,通过S盒操作加密)。对于解密,S盒单元可用于解密输入的加密数据1191以生成对应的输出解密数据1190(例如,通过逆S盒操作来解密)。未加密数据和加密数据可以可选地被存储在处理器的寄存器1189中,或者它们中的一个或多个可以可选地被存储在存储器(未示出)中。在一些实施例中,系统可以包括与S盒单元相关联的错误检测电路1101(例如,图3至图6中的任何一个的错误检测电路),用于检测S盒单元中的错误(例如,由电压毛刺或其他故障注入攻击引起),并且提供表明错误的错误信号1112。
本公开的范围不限于针对所有AES操作提供错误检测能力。在一些实施例中,可以仅针对S盒操作提供保护。S盒操作通常表示整个AES逻辑的重要部分,并且针对S盒操作提供错误检测是有用的,无论是否针对其它AES操作提供错误检测。另外,如上所述,一些指令集可包括S盒指令和作为执行单元的相关联的S盒单元,并且在这种情况下,错误检测可以可选地被选择性地应用于这种S盒单元,而不被应用于其它AES电路。
尽管本文已经在AES的上下文中描述了实施例,但是本公开的范围并不仅限于AES。其它现有的或未来的密码算法可以具有允许本文描述的方法被用于或适用于这些其它密码算法的类似特征。例如,SMS4是由中国政府推广的用于无线网络的密码算法,其也具有带乘法逆特性的S盒。类似于本文公开的实施例的实施例可类似于AES那样应用于SMS4。如本文公开的实施例的另一些实施例可以应用于Camellia块加密算法。
示例计算机架构。
以下详细描述了示例计算机架构。在本领域中已知的用于膝上型、台式和手持式个人计算机(PC)、个人数字助理、工程工作站、服务器、分解式服务器、网络设备、网络集线器、交换机、路由器、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持式设备和各种其它电子设备的其它系统设计和配置也是合适的。通常,能够并入有本文所公开的处理器和/或其他执行逻辑的各种系统或电子设备通常是合适的。
图12例示了示例计算系统。多处理器系统1200是接口系统,并且包括多个处理器或核心,其包括经由诸如点对点(P-P)互连、结构和/或总线的接口1250耦合的第一处理器1270和第二处理器1280。在一些示例中,第一处理器1270和第二处理器1280是同构的。在一些示例中,第一处理器1270和第二处理器1280是异构的。尽管示例系统1200被示出为具有两个处理器,但是该系统可以具有三个或更多个处理器,或者可以是单处理器系统。在一些示例中,计算系统是片上系统(SoC)。
处理器1270和1280被示出为分别包括集成存储器控制器(IMC)电路1272和1282。处理器1270还包括接口电路1276和1278;类似地,第二处理器1280包括接口电路1286和1288。处理器1270、1280可以使用接口电路1278、1288经由接口1250交换信息。IMC 1272和1282将处理器1270、1280耦合到相应的存储器,即存储器1232和存储器1234,它们可以是本地附接到相应处理器的主存储器的部分。
处理器1270、1280可以各自使用接口电路1276、1294、1286、1298经由单独接口1252、1254与网络接口(NW I/F)1290交换信息。网络接口1290(例如,互连、总线和/或结构中的一个或多个,并且在一些示例中是芯片组)可以可选地经由接口电路1292与协处理器1238交换信息。在一些示例中,协处理器1238是专用处理器,诸如例如高吞吐量处理器、网络或通信处理器、压缩引擎、图形处理器、通用图形处理单元(GPGPU)、神经网络处理单元(NPU)、嵌入式处理器等。
共享高速缓存(未示出)可被包括在任一处理器1270、1280中或这两个处理器外部,但经由诸如P-P互连的接口与处理器连接,使得如果处理器被置于低功率模式,则这两个处理器中的任一个或两个的本地高速缓存信息可被存储在共享高速缓存中。
网络接口1290可经由接口电路1296耦合到第一接口1216。在一些示例中,第一接口1216可以是诸如外围部件互连(PCI)、PCI高速互连或另一I/O互连的接口。在一些示例中,第一接口1216耦合到功率控制单元(PCU)1217,其可包括执行关于处理器1270、1280和/或协处理器1238的功率管理操作的电路、软件和/或固件。PCU 1217向电压调节器(未示出)提供控制信息,以使电压调节器生成适当的调节电压。PCU 1217还提供控制所生成的操作电压的控制信息。在各种示例中,PCU 1217可以包括执行基于硬件的功率管理的各种功率管理逻辑单元(电路)。这种功率管理可以是完全处理器控制的(例如,通过各种处理器硬件,并且其可以由工作负荷和/或功率、热或其他处理器约束来触发)和/或功率管理可以响应于外部源(诸如平台或功率管理源或系统软件)来执行。
PCU 1217被例示为作为与处理器1270和/或处理器1280分开的逻辑存在。在其他情况下,PCU 1217可以在处理器1270或1280的核心(未示出)中给定的一个或多个上执行。在一些情况下,PCU 1217可以实施为微控制器(专用或通用)或其他控制逻辑,其被配置为执行其自己的专用功率管理代码,有时称为P代码。在另一些示例中,PCU 1217要执行的功率管理操作可以在处理器外部实施,诸如通过单独的功率管理集成电路(PMIC)或处理器外部的另一部件。在另一些示例中,PCU 1217要执行的功率管理操作可以在BIOS或其他系统软件中实施。
各种I/O设备1214可以连同将第一接口1216耦合到第二接口1220的总线桥1218一起耦合到第一接口1216。在一些示例中,诸如协处理器、高吞吐量集成众核(MIC)处理器、GPGPU、加速器(诸如图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列(FPGA)或任何其他处理器的一个或多个附加处理器1215耦合到第一接口1216。在一些示例中,第二接口1220可以是低引脚数(LPC)接口。各种设备可以耦合到第二接口1220,包括例如键盘和/或鼠标1222、通信设备1227和存储电路1228。存储电路1228可以是如下所述的一个或多个非瞬态机器可读存储介质,诸如盘驱动器或其他大容量存储设备,其可以包括指令/代码和数据1230并且在一些示例中可以实现存储装置845。进一步地,音频I/O 1224可耦合到第二接口1220。应注意,除了上述点对点架构之外的其他架构也是可能的。例如,代替点对点架构,诸如多处理器系统1200的系统可以实施多点接口或其他这样的架构。
示例核心架构、处理器和计算机架构。
处理器核心可以以不同的方式、出于不同的目的以及在不同的处理器中实施。例如,这样的核心的实施方式可以包括:1)旨在用于通用计算的通用有序核心;2)旨在用于通用计算的高性能通用无序核心;3)主要旨在用于图形和/或科学(吞吐量)计算的专用核心。不同处理器的实施方式可以包括:1)CPU,其包括旨在用于通用计算的一个或多个通用有序核心和/或旨在用于通用计算的一个或多个通用无序核心;以及2)协处理器,其包括一个或多个主要旨在用于图形和/或科学(吞吐量)计算的专用核心。这样的不同处理器导致不同的计算机系统架构,其可以包括:1)在与CPU分离的芯片上的协处理器;2)在与CPU相同的封装中的单独管芯上的协处理器;3)在与CPU相同的管芯上的协处理器(在这种情况下,这样的协处理器有时被称为专用逻辑,诸如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统(SoC),其可以被包括在与所述CPU(有时被称为(一个或多个)应用核心或(一个或多个)应用处理器)、上述协处理器和附加功能相同的管芯上。接下来描述示例核心架构,随后是示例处理器和计算机架构的描述。
图13例示了可以具有一个或多个核心和集成存储器控制器的示例处理器和/或SoC 1300的框图。实线框例示了具有单个核心1302(A)、系统代理单元电路1310以及一组一个或多个接口控制器单元电路1316的处理器1300,而虚线框的可选添加例示了具有多个核心1302(A)-(N)、系统代理单元电路1310中的一组一个或多个集成存储器控制器单元电路1314和专用逻辑1308以及一组一个或多个接口控制器单元电路1316的替代处理器1300。应注意,处理器1300可以是处理器1270或1280中的一个,或者是图12的协处理器1238或1215。
由此,处理器1300的不同实施方式可以包括:1)CPU,其具有:专用逻辑1308,该专用逻辑是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核心,未示出);和核心1302(A)-(N),这些核心是一个或多个通用核心(例如,通用有序核心、通用无序核心或两者的组合);2)具有核心1302(A)-(N)的协处理器,这些核心是主要旨在用于图形和/或科学(吞吐量)的大量专用核心;以及3)具有核心1302(A)-(N)的协处理器,这些核心是大量通用有序核心。由此,处理器1300可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量集成众核(MIC)协处理器(包括30个或更多个核心)、嵌入式处理器等。处理器可以在一个或多个芯片上实施。处理器1300可以是一个或多个衬底的一部分和/或可以使用多种工艺技术中的任何一种在一个或多个衬底上实施,工艺技术诸如例如互补金属氧化物半导体(CMOS)、双极CMOS(BiCMOS)、P型金属氧化物半导体(PMOS)或N型金属氧化物半导体(NMOS)。
存储器层次结构包括核心1302(A)-(N)内的一级或多级高速缓存单元电路1304(A)-(N)、一组一个或多个共享高速缓存单元电路1306以及耦合到该组(一个或多个)集成存储器控制器单元电路1314的外部存储器(未示出)。该组一个或多个共享高速缓存单元电路1306可包括一个或多个中级高速缓存,诸如2级(L2)、3级(L3)、4级(L4)或其他级的高速缓存(诸如末级高速缓存(LLC))和/或其组合。虽然在一些示例中,接口网络电路1312(例如,环形互连)与专用逻辑1308(例如,集成图形逻辑)、该组(一个或多个)共享高速缓存单元电路1306以及系统代理单元电路1310接口连接,但是替代示例使用任何数量的公知技术来与这样的单元接口连接。在一些示例中,在(一个或多个)共享高速缓存单元电路1306与核心1302(A)-(N)中的一个或多个之间维持一致性。在一些示例中,接口控制器单元电路1316将核心1302耦合到一个或多个其他设备1318,诸如一个或多个I/O设备、存储装置、一个或多个通信设备(例如,无线联网、有线联网等)等。
在一些示例中,核心1302(A)-(N)中的一个或多个能够多线程。系统代理单元电路1310包括协调和操作核心1302(A)-(N)的那些部件。系统代理单元电路1310可以包括例如功率控制单元(PCU)电路和/或显示单元电路(未示出)。PCU可以是或者可以包括调节核心1302(A)-(N)和/或专用逻辑1308(例如,集成图形逻辑)的功率状态所需的逻辑和部件。显示单元电路用于驱动一个或多个外部连接的显示器。
核心1302(A)-(N)在指令集架构(ISA)方面可以是同构的。替代地,核心1302(A)-(N)在ISA方面可以是异构的;即,核心1302(A)-(N)的子集可能能够执行ISA,而其他核心可能能够仅执行该ISA或另一ISA的子集。
示例核心架构-有序和无序核心框图。
图14(A)是例示了根据示例的示例有序流水线和示例寄存器重命名、无序发布/执行流水线两者的框图。图14(B)是例示了根据示例的要被包括在处理器中的示例有序架构核心和示例寄存器重命名、无序发布/执行架构核心两者的框图。图14(A)至图14(B)中的实线框例示了有序流水线和有序核心,而虚线框的可选添加例示了寄存器重命名、无序发布/执行流水线和核心。考虑到有序方面是无序方面的子集,将描述无序方面。
在图14(A)中,处理器流水线1400包括获取级1402、可选长度解码级1404、解码级1406、可选分配(Alloc)级1408、可选重命名级1410、调度(也称为分派或发布)级1412、可选寄存器读取/存储器读取级1414、执行级1416、回写/存储器写入级1418、可选异常处理级1422和可选提交级1424。在这些处理器流水线级的每一个中可以执行一个或多个操作。例如,在获取级1402期间,从指令存储器获取一个或多个指令,且在解码级1406期间,可解码一个或多个所获取的指令,可生成使用转发的寄存器端口的地址(例如,加载存储单元(LSU)地址),且可执行分支转发(例如,立即数偏移或链路寄存器(LR))。在一个示例中,解码级1406和寄存器读取/存储器读取级1414可以被组合成一个流水线级。在一个示例中,在执行级1416期间,可执行经解码指令,可执行到高级微控制器总线(AMB)接口的LSU地址/数据流水线化,可执行乘法和加法运算,可执行具有分支结果的算术运算等。
以示例的方式,图14(B)的示例寄存器重命名、无序发布/执行架构核心可以如下实施流水线1400:1)指令获取电路1438执行获取和长度解码级1402和1404;2)解码电路1440执行解码级1406;3)重命名/分配器单元电路1452执行分配级1408和重命名级1410;4)(一个或多个)调度器电路1456执行调度级1412;5)(一个或多个)物理寄存器堆电路1458和存储器单元电路1470执行寄存器读取/存储器读取级1414;(一个或多个)执行集群1460执行级1416;6)存储器单元电路1470和(一个或多个)物理寄存器堆电路1458执行回写/存储器写入级1418;7)异常处理级1422中可涉及各种电路;以及8)引退单元电路1454和(一个或多个)物理寄存器堆电路1458执行提交级1424。
图14(B)示出了处理器核心1490,其包括耦合至执行引擎单元电路1450的前端单元电路1430,且两者均耦合至存储器单元电路1470。核心1490可以是精简指令集架构计算(RISC)核心、复杂指令集架构计算(CISC)核心、超长指令字(VLIW)核心或者混合或替代核心类型。作为又一选项,核心1490可以是专用核心,诸如例如网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(GPGPU)核心、图形核心等。
前端单元电路1430可以包括耦合到指令高速缓存电路1434的分支预测电路1432,该指令高速缓存电路耦合到指令转译后备缓冲区(TLB)1436,该指令转译后备缓冲区耦合到指令获取电路1438,该指令获取电路耦合到解码电路1440。在一个示例中,指令高速缓存电路1434包括在存储器单元电路1470中而不是前端电路1430中。解码电路1440(或解码器)可以解码指令,并且作为输出生成一个或多个微操作、微代码入口点、微指令、其他指令或其他控制信号,其从原始指令解码或以其他方式反映原始指令或从原始指令导出。解码电路1440还可以包括地址生成单元(AGU,未示出)电路。在一个示例中,AGU使用转发的寄存器端口生成LSU地址,且可进一步执行分支转发(例如,立即数偏移分支转发、LR寄存器分支转发等)。解码电路1440可以使用各种不同的机制来实施。合适机制的示例包括但不限于查找表、硬件实施方式、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个示例中,核心1490包括微代码ROM(未示出)或存储用于某些宏指令的微代码的其他介质(例如,在解码电路1440中或以其他方式在前端电路1430内)。在一个示例中,解码电路1440包括微操作(micro-op)或操作高速缓存(未示出),以保持/缓存在处理器流水线1400的解码或其他级期间生成的解码操作、微标签或微操作。解码电路1440可以耦合到执行引擎电路1450中的重命名/分配器单元电路1452。
执行引擎电路1450包括耦合到引退单元电路1454和一组一个或多个调度器电路1456的重命名/分配器单元电路1452。(一个或多个)调度器电路1456表示任意数量的不同调度器,包括保留站、中央指令窗口等。在一些示例中,(一个或多个)调度器电路1456可以包括算术逻辑单元(ALU)调度器/调度电路、ALU队列、地址生成单元(AGU)调度器/调度电路、AGU队列等。(一个或多个)调度器电路1456耦合到(一个或多个)物理寄存器堆电路1458。(一个或多个)物理寄存器堆电路1458中的每一个表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一个或多个不同的数据类型,诸如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个示例中,(一个或多个)物理寄存器堆电路1458包括向量寄存器单元电路、写掩码寄存器单元电路和标量寄存器单元电路。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器、通用寄存器等。(一个或多个)物理寄存器堆电路1458耦合到引退单元电路1454(也称为引退队列),以说明可实施寄存器重命名和无序执行的各种方式(例如,使用(一个或多个)重排序缓冲区(ROB)和(一个或多个)引退寄存器堆;使用(一个或多个)未来堆、(一个或多个)历史缓冲区和(一个或多个)引退寄存器堆;使用寄存器图和寄存器池等)。引退单元电路1454和(一个或多个)物理寄存器堆电路1458耦合到(一个或多个)执行集群1460。(一个或多个)执行集群1460包括一组一个或多个执行单元电路1462以及一组一个或多个存储器访问电路1464。(一个或多个)执行单元电路1462可以对各种类型的数据(例如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种算术、逻辑、浮点或其他类型的运算(例如,移位、加法、减法、乘法)。虽然一些示例可以包括专用于特定功能或功能集合的多个执行单元或执行单元电路,但是其他示例可以包括仅一个执行单元电路或全部执行所有功能的多个执行单元/执行单元电路。(一个或多个)调度器电路1456、(一个或多个)物理寄存器堆电路1458和(一个或多个)执行集群1460被示出为可能是多个,因为某些示例为某些类型的数据/操作创建单独的流水线(例如,各自具有其自己的调度器电路、(一个或多个)物理寄存器堆电路和/或执行集群的标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线和/或存储器访问流水线—并且在单独的存储器访问流水线的情况下,实施其中仅该流水线的执行集群具有(一个或多个)存储器访问单元电路1464的某些示例)。还应当理解,在使用单独的流水线的情况下,这些流水线中的一个或多个可以是无序的发布/执行,而其余的是有序的。
在一些示例中,执行引擎单元电路1450可执行对高级微控制器总线(AMB)接口(未示出)的加载存储单元(LSU)地址/数据流水线化、以及地址阶段和回写、数据阶段加载、存储和分支。
该组存储器访问电路1464耦合到存储器单元电路1470,其包括耦合到数据高速缓存电路1474的数据TLB电路1472,该数据高速缓存电路耦合到2级(L2)高速缓存电路1476。在一个示例中,存储器访问电路1464可包括加载单元电路、存储地址单元电路以及存储数据单元电路,各个电路耦合到存储器单元电路1470中的数据TLB电路1472。指令高速缓存电路1434还耦合到存储器单元电路1470中的2级(L2)高速缓存电路1476。在一个示例中,指令高速缓存1434和数据高速缓存1474在L2高速缓存电路1476、3级(L3)高速缓存电路(未示出)和/或主存储器中组合成单个指令和数据高速缓存(未示出)。L2高速缓存电路1476耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。
核心1490可以支持一个或多个指令集(例如x86指令集架构(可选地具有一些已经添加了较新版本的扩展);MIPS指令集架构;ARM指令集架构(可选地具有诸如NEON的可选附加扩展)),包括本文所述的(一个或多个)指令。在一个示例中,核心1490包括支持紧缩数据指令集架构扩展(例如,AVX1、AVX2)的逻辑,从而允许由许多多媒体应用使用的操作使用紧缩数据来执行。
(一个或多个)示例执行单元电路。
图15例示了诸如图14(B)的(一个或多个)执行单元电路1462的(一个或多个)执行单元电路的示例。如图例示,(一个或多个)执行单元电路1462可以包括一个或多个ALU电路1501、可选的向量/单指令多数据(SIMD)电路1503、加载/存储电路1505、分支/跳转电路1507和/或浮点单元(FPU)电路1509。ALU电路1501执行整数运算和/或布尔运算。向量/SIMD电路1503对紧缩数据(诸如SIMD/向量寄存器)执行向量/SIMD运算。加载/存储电路1505执行加载和存储指令,以将数据从存储器加载到寄存器中或从寄存器存储到存储器。加载/存储电路1505也可以生成地址。分支/跳转电路1507根据指令引起到存储器地址的分支或跳转。FPU电路1509执行浮点运算。(一个或多个)执行单元电路1462的宽度根据示例而变化,并且可以在例如16位到1024位的范围内。在一些示例中,两个或更多个较小执行单元被逻辑地组合以形成较大执行单元(例如,两个128位执行单元被逻辑地组合以形成256位执行单元)。
示例寄存器架构。
图16是根据一些示例的寄存器架构1600的框图。如图例示,寄存器架构1600包括从128位宽度变化到1024位宽度的向量/SIMD寄存器1610。在一些示例中,向量/SIMD寄存器1610在物理上是512位,并且根据映射,仅使用一些较低位。例如,在一些示例中,向量/SIMD寄存器1610是512位的ZMM寄存器:较低的256位用于YMM寄存器,而较低的128位用于XMM寄存器。由此可见,存在寄存器的覆盖。在一些示例中,向量长度字段在最大长度与一个或多个其他较短长度之间选择,其中,各个这种较短长度是先前长度的一半。标量运算是对ZMM/YMM/XMM寄存器中的最低位数据元素位置执行的运算;根据示例,较高位数据元素位置或者与它们在指令之前相同,或者被归零。
在一些示例中,寄存器架构1600包括写掩码/谓词(predicate)寄存器1615。例如,在一些示例中,存在8个写掩码/谓词寄存器(有时称为k0至k7),其各自大小为16位、32位、64位或128位。写掩码/谓词寄存器1615可允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间被保护以免更新)和/或归零(例如,将向量掩码归零允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些示例中,给定写掩码/谓词寄存器1615中的各个数据元素位置对应于目的地的数据元素位置。在其它示例中,写掩码/谓词寄存器1615是可缩放的,并且由给定向量元素的设定数量的启用位(例如,每个64位向量元素8个启用位)构成。
寄存器架构1600包括多个通用寄存器1625。这些寄存器可以是16位、32位、64位等,并且可以用于标量运算。在一些示例中,这些寄存器由名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP和R8到R15引用。
在一些示例中,寄存器架构1600包括标量浮点(FP)寄存器堆1645,其用于使用x87指令集架构扩展对32/64/80位浮点数据进行标量浮点运算,或者用作MMX寄存器以对64位紧缩整数数据执行运算,以及保持用于在MMX和XMM寄存器之间执行的一些运算的操作数。
一个或多个旗标寄存器1640(例如EFLAGS、RFLAGS等)存储用于算术、比较和系统操作的状态和控制信息。例如,一个或多个旗标寄存器1640可以存储条件码信息,诸如进位、奇偶校验、辅助进位、零、符号和溢出。在一些示例中,一个或多个旗标寄存器1640被称为程序状态和控制寄存器。
段寄存器1620包含用于访问存储器的段点。在一些示例中,这些寄存器由名称CS、DS、SS、ES、FS和GS来引用。
机器特定寄存器(MSR)1635控制和报告处理器性能。大多数MSR1635处理系统相关的功能,并且不能被应用程序访问。机器校验寄存器1660包括用于检测和报告硬件错误的控制、状态和错误报告MSR。
一个或多个指令指针寄存器1630存储指令指针值。(一个或多个)控制寄存器1655(例如,CR0-CR4)确定处理器(例如,处理器1270、1280、1238、1215和/或1300)的操作模式和当前执行任务的特性。调试寄存器1650控制并允许监测处理器或核心的调试操作。
存储器(mem)管理寄存器1665指定在保护模式存储器管理中使用的数据结构的位置。这些寄存器可以包括全局描述符表寄存器(GDTR)、中断描述符表寄存器(IDTR)、任务寄存器和局部描述符表寄存器(LDTR)。
替代示例可以使用更宽或更窄的寄存器。另外,替代示例可使用更多、更少或不同的寄存器堆和寄存器。寄存器架构1600可以例如用在寄存器堆/存储器或(一个或多个)物理寄存器堆电路1458中。
指令集架构。
指令集架构(ISA)可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如,位的数量、位的位置)以指定要执行的操作(例如,操作码)和要对其执行该操作的(一个或多个)操作数和/或(一个或多个)其它数据字段(例如,掩码)等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定指令格式的指令模板可以被定义为具有指令格式的字段的不同子集(所包括的字段通常处于相同的顺序,但是至少一些字段具有不同的位位置,因为包括较少的字段)和/或被定义为具有不同地解释的给定字段。由此,ISA的各个指令使用给定的指令格式(并且如果定义,则在该指令格式的指令模板中的给定的一个中)来表达,并且包括用于指定操作和操作数的字段。例如,示例ADD指令具有特定操作码和指令格式,该指令格式包括指定该操作码的操作码字段和选择操作数(源1/目的地和源2)的操作数字段;并且在指令流中出现这个ADD指令将在选择特定操作数的操作数字段中具有特定内容。另外,尽管以下描述是在x86 ISA的上下文中进行的,但是在另一ISA中应用本公开的示教在本领域技术人员的知识范围内。
示例指令格式。
本文所述的(一个或多个)指令的示例可以以不同格式来具体实施。另外,下面详细描述示例系统、架构和流水线。(一个或多个)指令的示例可以在这样的系统、架构和流水线上执行,但不限于详细描述的这些。
图17例示了指令格式的示例。如图例示,指令可以包括多个成分,包括但不限于一个或多个字段,用于:一个或多个前缀1701、操作码1703、寻址信息1705(例如,寄存器标识符、存储器寻址信息等)、位移值1707和/或立即值1709。应注意,一些指令利用该格式的一些或所有字段,而其它指令可以仅使用操作码1703的字段。在一些示例中,所例示的顺序是这些字段要被编码的顺序,然而,应当理解,在其他示例中,这些字段可以以不同的顺序被编码、被组合等。
(一个或多个)前缀字段1701在使用时修改指令。在一些示例中,一个或多个前缀用于重复字符串指令(例如,0xF0、0xF2、0xF3等),以提供部分覆盖(例如,0x2E、0x36、0x3E、0x26、0x64、0x65、0x2E、0x3E等),执行总线锁定操作,和/或改变操作数(例如,0x66)和地址大小(例如,0x67)。某些指令需要强制前缀(例如,0x66、0xF2、0xF3等)。这些前缀中的某些可被认为是“传统”前缀。其它前缀(本文详述其一个或多个示例)指示和/或提供进一步的能力,诸如指定特定寄存器等。其它前缀通常遵循“传统”前缀。
操作码字段1703用于至少部分地定义在解码指令时要执行的操作。在一些示例中,在操作码字段1703中编码的主操作码的长度是一、二或三字节。在其他示例中,主操作码可以是不同的长度。有时在另一字段中编码附加的3位操作码字段。
寻址信息字段1705用于寻址指令的一个或多个操作数,诸如存储器中的位置或一个或多个寄存器。图18例示了寻址信息字段1705的示例。在该图示中,示出了可选的MOD R/M字节1802和可选的缩放、索引、基址(SIB)字节1804。MOD R/M字节1802和SIB字节1804用于对指令的多达两个操作数进行编码,各个操作数是直接寄存器或有效存储器地址。应注意,这两个字段都是可选的,因为不是所有指令都包括这些字段中的一个或多个。MOD R/M字节1802包括MOD字段1842、寄存器(reg)字段1844和R/M字段1846。
MOD字段1842的内容区分存储器访问和非存储器访问模式。在一些示例中,当MOD字段1842具有二进制值11(11b)时,使用寄存器直接寻址模式,否则使用寄存器间接寻址模式。
寄存器字段1844可编码目的地寄存器操作数或源寄存器操作数,或者可编码操作码扩展并且不用于编码任何指令操作数。寄存器字段1844的内容直接地或通过地址生成来指定源或目的地操作数的位置(在寄存器中或在存储器中)。在一些示例中,寄存器字段1844被补充了来自前缀(例如,前缀1701)的附加位以允许更大的寻址。
R/M字段1846可以用于对引用存储器地址的指令操作数进行编码,或者可以用于对目的地寄存器操作数或源寄存器操作数进行编码。应注意,在一些示例中,R/M字段1846可以与MOD字段1842组合以指示寻址模式。
SIB字节1804包括在地址的生成中使用的缩放字段1852、索引字段1854和基址字段1856。缩放字段1852指示缩放因子。索引字段1854指定要使用的索引寄存器。在一些示例中,索引字段1854被补充了来自前缀(例如,前缀1701)的附加位以允许更大的寻址。基址字段1856指定要使用的基址寄存器。在一些示例中,基址字段1856被补充了来自前缀(例如,前缀1701)的附加位以允许更大的寻址。实际上,缩放字段1852的内容允许对索引字段1854的内容进行缩放以用于存储器地址生成(例如,用于使用2缩放*索引+基址的地址生成)。
一些寻址形式利用位移值来生成存储器地址。例如,可以根据2缩放*索引+基址+位移、索引*缩放+位移、r/m+位移、指令指针(RIP/EIP)+位移、寄存器+位移等来生成存储器地址。位移可以是1字节、2字节、4字节等的值。在一些示例中,位移字段1707提供该值。另外,在一些示例中,位移因子使用被编码在寻址信息字段1705的MOD字段中,其指示压缩的位移方案,针对该压缩的位移方案,位移值被计算并被存储在位移字段1707中。
在一些示例中,立即值字段1709指定指令的立即值。立即值可以被编码为1字节值、2字节值、4字节值等。
图19例示了第一前缀1701(A)的示例。在一些示例中,第一前缀1701(A)是REX前缀的示例。使用该前缀的指令可以指定通用寄存器、64位紧缩数据寄存器(例如,单指令多数据(SIMD)寄存器或向量寄存器)和/或控制寄存器和调试寄存器(例如,CR8-CR15和DR8-DR15)。
使用第一前缀1701(A)的指令可以根据格式指定多达三个使用3位字段的寄存器:1)使用MOD R/M字节1802的寄存器字段1844和R/M字段1846;2)使用具有SIB字节1804的MODR/M字节1802,包括使用寄存器字段1844以及基址字段1856和索引字段1854;或3)使用操作码的寄存器字段。
在第一前缀1701(A)中,位位置7:4被设置为0100。位位置3(W)可用于确定操作数大小,但可不仅仅确定操作数宽度。由此可见,当W=0时,操作数大小由代码段描述符(CS.D)确定,而当W=1时,操作数大小是64位。
应注意,另一位的添加允许寻址16(24)个寄存器,而MOD R/M寄存器字段1844和MOD R/M R/M字段1846单独可以各自仅寻址8个寄存器。
在第一前缀1701(A)中,位位置2(R)可以是MOD R/M寄存器字段1844的扩展,并且当该字段编码通用寄存器、64位紧缩数据寄存器(例如SSE寄存器)或者控制或调试寄存器时,可以用于修改MOD R/M寄存器字段1844。当MOD R/M字节1802指定其它寄存器或定义扩展操作码时,R被忽略。
位位置1(X)可以修改SIB字节索引字段1854。
位位置0(B)可以修改MOD R/M R/M字段1846或SIB字节基址字段1856中的基址;或者它可修改用于访问通用寄存器(例如,通用寄存器1625)的操作码寄存器字段。
图20(A)至图20(D)例示了如何使用第一前缀1701(A)的R、X和B字段的示例。图20(A)例示了当SIB字节1804不用于存储器寻址时使用来自第一前缀1701(A)中的R和B来扩展MOD R/M字节1802的寄存器字段1844和R/M字段1846。图20(B)例示了当不使用SIB字节1804(寄存器-寄存器寻址)时使用来自第一前缀1701(A)中的R和B来扩展MOD R/M字节1802的寄存器字段1844和R/M字段1846。图20(C)例示了当SIB字节1804用于存储器寻址时使用来自第一前缀1701(A)中的R、X和B来扩展MOD R/M字节1802的寄存器字段1844以及索引字段1854和基址字段1856。图20(D)例示了当在操作码1703中编码寄存器时使用来自第一前缀1701(A)的B来扩展MOD R/M字节1802的寄存器字段1844。
图21(A)至图21(B)例示了第二前缀1701(B)的示例。在一些示例中,第二前缀1701(B)是VEX前缀的示例。第二前缀1701(B)编码允许指令具有多于两个操作数,并且允许SIMD向量寄存器(例如,向量/SIMD寄存器1610)长于64位(例如,128位和256位)。第二前缀1701(B)的使用提供了三操作数(或更多)语法。例如,先前的两个操作数指令执行诸如A=A+B的操作,其覆盖源操作数。第二前缀1701(B)的使用使得操作数能够执行诸如A=B+C的非破坏性操作。
在一些示例中,第二前缀1701(B)以两种形式出现-二字节形式和三字节形式。二字节第二前缀1701(B)主要用于128位、标量和一些256位指令;而三字节的第二前缀1701(B)提供第一前缀1701(A)与3字节操作码指令的紧凑取代。
图21(A)例示了第二前缀1701(B)的二字节形式的示例。在一个示例中,格式字段2101(字节0 2103)包含值C5H。在一个示例中,字节1 2105在位[7]中包括“R”值。该值是第一前缀1701(A)的“R”值的补数(complement)。位[2]用于指示向量的长度(L)(其中值0是标量或128位向量且值1是256位向量)。位[1:0]提供了等同于一些传统前缀的操作码扩展(例如,00=没有前缀,01=66H,10=F3H,以及11=F2H)。示出为vvvv的位[6:3]可以用于:1)对以反向(反码(1s complement))形式指定并且对具有2个或更多个源操作数的指令有效的第一源寄存器操作数进行编码;2)对以反码形式针对某些向量移位指定的目的地寄存器操作数进行编码;或者3)不对任何操作数进行编码,该字段被保留并且应当包含某个值,诸如1111b。
使用该前缀的指令可使用MOD R/M R/M字段1846来编码引用存储器地址的指令操作数或编码目的地寄存器操作数或源寄存器操作数。
使用该前缀的指令可以使用MOD R/M寄存器字段1844来编码目的地寄存器操作数或源寄存器操作数,或者被视为操作码扩展而不用于编码任何指令操作数。
对于支持四个操作数的指令语法,vvvv、MOD R/M R/M字段1846和MOD R/M寄存器字段1844编码四个操作数中的三个。立即值字段1709的位[7:4]然后用于编码第三源寄存器操作数。
图21(B)例示了第二前缀1701(B)的三字节形式的示例。在一个示例中,格式字段2111(字节0 2113)包含值C4H。字节1 2115在位[7:5]中包括“R”、“X”和“B”,它们是第一前缀1701(A)的相同值的补数。字节1 2115(示出为mmmmm)的位[4:0]包括根据需要编码一个或多个隐含的前导操作码字节的内容。例如,00001意指0FH前导操作码,00010意指0F38H前导操作码,00011意指0F3AH前导操作码,等等。
字节2 2117的位[7]与第一前缀1701(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字段1846来编码引用存储器地址的指令操作数或编码目的地寄存器操作数或源寄存器操作数。
使用该前缀的指令可以使用MOD R/M寄存器字段1844来编码目的地寄存器操作数或源寄存器操作数,或者被视为操作码扩展而不用于编码任何指令操作数。
对于支持四个操作数的指令语法,vvvv、MOD R/M R/M字段1846和MOD R/M寄存器字段1844编码四个操作数中的三个。立即值字段1709的位[7:4]然后用于编码第三源寄存器操作数。
图22例示了第三前缀1701(C)的示例。在一些示例中,第三前缀1701(C)是EVEX前缀的示例。第三前缀1701(C)是四字节前缀。
第三前缀1701(C)可以以64位模式编码32个向量寄存器(例如,128位、256位和512位寄存器)。在一些示例中,利用写掩码/操作掩码(参见诸如图16的前面图中的寄存器的讨论)或预测的指令利用该前缀。操作掩码寄存器允许条件处理或选择控制。使用第二前缀1701(B)编码操作掩码指令,该操作掩码指令的源/目的地操作数是操作掩码寄存器,并且将操作掩码寄存器的内容视为单个值。
第三前缀1701(C)可以编码特定于指令类的功能(例如,具有“负荷+操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能等)。
第三前缀1701(C)的第一字节是格式字段2211,在一个示例中,其值为62H。随后的字节被称为有效负荷字节2215-2219并且共同形成24位值P[23:0],其以一个或多个字段的形式提供特定能力(本文详细描述)。。
在一些示例中,有效负荷字节2219的P[1:0]与低的两个mm位相同。在一些示例中,P[3:2]被保留。位P[4](R’)允许在与P[7]和MOD R/M寄存器字段1844组合时对高16向量寄存器组的访问。当不需要SIB类型寻址时,P[6]还可以提供对高16向量寄存器的访问。P[7:5]包括R、X和B,它们是用于向量寄存器、通用寄存器、存储器寻址的操作数说明符修饰符位,并且当与MOD R/M寄存器字段1844和MOD R/M R/M字段1846组合时允许访问低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]类似于第一前缀1701(A)和第二前缀1711(B)的W,并且可以用作操作码扩展位或操作数大小提升。
P[18:16]指定操作掩码(写掩码)寄存器(例如,写掩码/谓词寄存器1615)中的寄存器的索引。在一个示例中,特定值aaa=000具有暗示没有操作掩码用于特定指令的特殊行为(这可以以各种方式实施,包括使用硬接线到所有操作掩码的操作掩码或绕过掩蔽硬件的硬件)。当合并时,向量掩码允许目的地中的任何元素集合在任何操作(由基础操作和扩充操作指定)的执行期间被保护不被更新;在另一个示例中,在对应的掩码位具有0的情况下,保留目的地的各个元素的旧值。相反,当将向量掩码归零允许目的地中的任何元素集合在任何操作(由基础操作和扩充操作指定)的执行期间归零;在一个示例中,当对应的掩码位具有0值时,目的地的元素被设置为0。这个功能的子集是控制被执行的操作的向量长度(即,从第一个到最后一个被修改的元素的跨度)的能力;然而,修改的元素不必是连续的。由此,操作掩码字段允许部分向量操作,包括加载、存储、算术、逻辑等。尽管描述了其中操作掩码字段的内容选择包含要使用的操作掩码的多个操作掩码寄存器中的一个(并且由此操作掩码字段的内容间接地识别要执行的掩蔽)的示例,但是替代的示例相反或另外允许掩码写入字段的内容直接指定要执行的掩蔽。
P[19]可以与P[14:11]组合以按照非破坏性源语法来编码第二源向量寄存器,该非破坏性源语法可以使用P[19]来访问上16向量寄存器。P[20]编码多个功能,其跨不同指令类不同,并且可以影响向量长度/舍入控制说明符字段(P[22:21])的含义。P[23]指示支持合并写掩蔽(例如,当设置为0时)或支持归零和合并写掩蔽(例如,当设置为1时)。
下表中详细描述了使用第三前缀1701(C)对指令中的寄存器进行编码的示例。
表1:64位模式中的32寄存器支持
表2:32位模式中的编码寄存器说明符
表3:操作掩码寄存器说明符编码
程序代码可以应用于输入信息以执行本文所述的功能并生成输出信息。输出信息可以以已知的方式应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器的任何系统,处理器诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)、现场可编程门阵列(FPGA)、微处理器或其任何组合。
程序代码可以用高级程序或面向对象的编程语言来实施以与处理系统通信。如果期望,程序代码也可以以汇编或机器语言实施。实际上,本文所述的机制在范围上不限于任何特定编程语言。在任何情况下,语言可以是编译或解释语言。
本文公开的机制的示例可以以硬件、软件、固件或这些实施方法的组合来实施。示例可以被实施为在可编程系统上执行的计算机程序或程序代码,可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备。
至少一个示例的一个或多个方面可以由存储在机器可读介质上的代表性指令来实施,该代表性指令表示处理器内的各种逻辑,当由机器读取时,该代表性指令使机器制造逻辑以执行本文所述的技术。被称为“智能特性(IP)核心”的这种表示可以存储在有形的机器可读介质上,并且提供给各种客户或制造设施以加载到制造逻辑或处理器的制造机器中。
这种机器可读存储介质可以包括但不限于由机器或设备制造或形成的物品的非瞬态有形布置,包括存储介质,诸如硬盘、任何其他类型的盘,包括软盘、光盘、光盘只读存储器(CD-ROM)、可重写光盘(CD-RW)和磁光盘;半导体设备,诸如只读存储器(ROM)、随机存取存储器(RAM),诸如动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、可擦可编程只读存储器(EPROM)、闪存、电可擦可编程只读存储器(EEPROM)、相变存储器(PCM)、磁卡或光卡、或适合于存储电子指令的任何其他类型的介质。
因此,示例还包括非瞬态有形机器可读介质,其包含指令或包含设计数据,诸如硬件描述语言(HDL),其定义本文所述的结构、电路、装置、处理器和/或系统特征。这样的示例也可以称为程序产品。
仿真(包括二进制转译、代码变形等)。
在一些情况下,指令转换器可以用于将指令从源指令集架构转换为目标指令集架构。例如,指令转换器可以将指令转译(例如,使用静态二进制转译、包括动态编译的动态二进制转译)、变形、仿真或以其他方式转换为要由核心处理的一个或多个其他指令。指令转换器可以以软件、硬件、固件或其组合来实施。指令转换器可以在处理器上、在处理器外、或部分在处理器上且部分在处理器外。
图23是例示了根据示例的使用软件指令转换器将源ISA中的二进制指令转换为目标ISA中的二进制指令的框图。在所例示的示例中,指令转换器是软件指令转换器,但是替代地,指令转换器可以以软件、固件、硬件或其各种组合来实施。图23示出了可以使用第一ISA编译器2304来编译高级语言2302的程序,以生成可以由具有至少一个第一ISA核心2316的处理器原生执行的第一ISA二进制代码2306。具有至少一个第一ISA核心2316的处理器表示任何处理器,其可以通过以下方式来执行与具有至少一个第一ISA核心的英特尔处理器大致相同的功能:兼容地执行或以其他方式处理(1)第一ISA的相当一部分或(2)目标为在具有至少一个第一ISA核心的英特尔处理器上运行的应用或其他软件的对象代码版本,以便实现与具有至少一个第一ISA核心的处理器大致相同的结果。第一ISA编译器2304表示可操作为生成第一ISA二进制代码2306(例如对象代码)的编译器,该第一ISA二进制代码可以在具有或不具有附加链接处理的情况下在具有至少一个第一ISA核心2316的处理器上执行。类似地,图23示出了可以使用替代ISA编译器2308来编译高级语言2302的程序,以生成可以由不具有第一ISA核心2314的处理器原生执行的替代ISA二进制代码2310。指令转换器2312用于将第一ISA二进制代码2306转换成可以由不具有第一ISA核心2314的处理器原生执行的代码。该转换后的代码不必与替换的ISA二进制代码2310相同;然而,转换后的代码将完成一般操作,并且由来自替换ISA的指令组成。由此,指令转换器2312表示通过仿真、模拟或任何其他过程来允许不具有第一ISA处理器或核心的处理器或其他电子设备执行第一ISA二进制代码2306的软件、固件、硬件或其组合。
针对本文公开的任何装置和电路描述的部件、特征和细节可以可选地应用于本文公开的任何方法,其在实施例中可以可选地由这样的装置和电路执行和/或利用这样的装置和电路执行。在实施例中的本文描述的任何装置和电路可以可选地包括在本文公开的任何系统中。
本文公开的部件和电路可以被认为和/或要求保护为操作、可操作、能够、被配置为适于或以其他方式“执行”操作。如本文所用的,这些表达涉及部件在处于断电状态时的特性、性质或属性,并且不暗示部件或包括它们的设备或装置当前被通电或操作。为了清楚起见,应当理解,本文要求保护的装置不要求被通电或运行。
在说明书和权利要求书中,可以使用术语“耦合”和/或“连接”及其派生词。这些术语不旨在作为彼此的同义词。相反,在实施例中,“连接”可以用于指示两个或更多个元件彼此直接物理和/或电接触。“耦合”可以意指两个或更多个元件直接物理和/或彼此电接触。然而,“耦合”也可以意指两个或更多个元件不彼此直接接触,但是仍然彼此协作或交互。在图中,箭头用于示出连接和耦合。
而且,在上述各种实施例中,除非另外特别指出,否则诸如短语“A、B或C中的至少一个”的析取语言旨在被理解为意指A、B或C或其任意组合(即,A、B和/或C)。由此可见,析取语言并不旨在也不应当被理解为暗示给定实施例要求至少一个A、至少一个B、或至少一个C各自存在。
在以上描述中,阐述了具体细节以提供对实施例的透彻理解。然而,可以在没有这些具体细节中的一些的情况下实践其它实施例。本公开的范围不是由上面提供的具体示例确定的,而是仅由下面的权利要求确定的。在其它情况下,以框图形式和/或没有详细地示出公知的电路、结构、设备和操作,以避免模糊对本说明书的理解。在认为适当的情况下,附图标记或附图标记的末尾部分在附图中重复,以指示对应或类似的元件,除非另外指定或清楚地显而易见,否则这些元件可以可选地具有相似或相同的特性。
在整个说明书中,例如,对“一个实施例”、“实施例”、“一个或多个实施例”、“一些实施例”的引用指示特定特征可以包括在本公开的实践中,但不一定需要这样。类似地,在说明书中,为了使本公开流畅并帮助理解各个发明方面,有时将各个特征一起分组在单个实施例、附图或其描述中。然而,这种公开方法不应被解释为反映了本公开需要比各个权利要求中明确记载的特征更多的特征的意图。相反,如以下权利要求所反映的,发明方面在于少于单个公开的实施例的所有特征。由此,详细描述之后的权利要求书在此明确地并入到该详细描述中,其中各个权利要求独立地作为本公开的单独实施例。
示例实施例
以下示例涉及另外的实施例。在一个或多个实施例中,可以在任何地方使用示例中的细节。
示例1是一种包括替换盒(S盒)电路的装置。S盒电路包括乘法逆电路,其接收伽罗瓦域的8位输入,并生成伽罗瓦域的对应8位输出。8位输出使得当在生成8位输出时没有错误时,8位输出是8位输入的乘法逆。装置还包括错误检测电路,其接收8位输入并与S盒电路耦合以接收8位输出。错误检测电路至少部分地基于8位输出是否是8位输入的乘法逆来检测在生成8位输出时是否已经发生错误。
示例2包括示例1的装置,其中,错误检测电路包括将8位输入和8位输出相乘以生成乘积的伽罗瓦域乘法器以及可选地将乘积与8位值一进行比较的比较电路。错误检测电路可选地在乘积不等于8位值一时确定在生成8位输出时已经发生错误。
示例3包括示例2的装置,其中,伽罗瓦域乘法器是一项8位伽罗瓦域乘法器、两项4位伽罗瓦域乘法器、和四项2位伽罗瓦域乘法器中的一个。
示例4包括示例1的装置,其中,错误检测电路包括生成等于以下各项的和的值的电路:(1)8位输入与8位输出的乘积的最高有效4位半字节;以及(2)乘积的最低有效4位半字节。错误检测电路还可选地包括比较电路,其将值与4位值一进行比较。错误检测电路可选地在等于和的值不等于4位值一时确定在生成8位输出时已经发生错误。
示例5包括示例1至4中任一项的装置,其中,错误检测电路输出指示在生成8位输出时是否已经发生错误的错误信号。
示例6包括示例5的装置,还包括存储装置,其存储错误信号和从十五个附加错误检测电路同时输出的十五个附加错误信号,各个附加错误检测电路与十五个附加8位输入中的不同一个相对应,输入与8位输入一起表示针对密码轮的128位输入数据。还可选地进一步包括与存储装置耦合的错误信号组合电路,其组合错误信号和十五个附加错误信号。可选地,其中,错误信号组合电路在针对密码轮生成128位输出数据的时钟周期的后续时钟周期中组合错误信号和十五个附加错误信号。
示例7包括示例1至6中任一项的装置,还包括密码轮电路,其包括S盒电路,密码轮电路接收用于密码轮的128位输入数据并且输出用于密码轮的128位输出数据。可选地,在同一时钟周期期间,相比于错误检测电路的任何时延,密码轮电路从接收128位输入数据到输出128位输出数据可以具有更大的时延。
示例8包括示例1至7中任一项的装置,还包括检查8位输入是否为零的电路。
示例9包括示例1至8中任一项的装置,还包括高级加密标准(AES)电路,其包括S盒电路。
示例10包括示例1至8中任一项的装置,还包括SMS4电路,其包括S盒电路。
示例11是一种方法,包括对伽罗瓦域中的8位输入执行替换盒(S盒)操作以生成伽罗瓦域中的对应8位输出。当在生成8位输出时没有错误时,8位输出是8位输入的乘法逆。方法还包括:至少部分地基于8位输出是否是8位输入的乘法逆来检测在生成8位输出时是否发生错误。
示例12包括示例11的方法,其中,检测是否发生错误包括通过将8位输入与8位输出相乘来生成乘积,并且将乘积与8位值一进行比较。还可选地在乘积不等于8位值一时确定在生成8位输出时发生错误。
示例13包括示例11的方法,其中,检测是否发生错误包括生成等于以下各项的和的值:(1)8位输入与8位输出的乘积的最高有效4位半字节;以及(2)乘积的最低有效4位半字节,并且将值与4位值一进行比较。还可选地在等于和的值不等于4位值一时确定在生成8位输出时发生错误。
示例14包括示例11至13中任一项的方法,还包括:输出指示在生成8位输出时是否发生错误的错误信号。
示例15包括示例14的方法,还包括:存储错误信号和十五个附加错误信号,十五个附加错误信号对应于分别对十五个附加8位输入中的不同输入执行的十五个附加组的S盒操作,附加8位输入与8位输入一起表示针对密码轮的128位输入数据。还可选地进一步包括:在针对密码轮从128位输入数据生成128位输出数据的时钟周期的后续时钟周期中组合错误信号和十五个附加错误信号。
示例16是一种系统,包括处理器、存储器以及与处理器耦合并且与存储器耦合的密码单元。密码单元对从处理器发送到存储器的数据进行加密。密码单元包括替换盒(S盒)电路,其包括乘法逆电路,其接收伽罗瓦域的8位输入,并生成伽罗瓦域的对应8位输出。当在生成8位输出时没有错误时,8位输出是8位输入的乘法逆。密码单元还包括错误检测电路,其接收8位输入并与S盒电路耦合以接收8位输出。错误检测电路至少部分地基于8位输出是否是8位输入的乘法逆来检测在生成8位输出时是否已经发生错误。
示例17包括示例16的系统,其中,错误检测电路包括将8位输入和8位输出相乘以生成乘积的伽罗瓦域乘法器以及将乘积与8位值一进行比较的比较电路。可选地其中,错误检测电路在乘积不等于8位值一时确定在生成8位输出时已经发生错误。
示例18包括示例16的系统,其中,错误检测电路包括生成等于以下各项的和的值的电路:(1)8位输入与8位输出的乘积的最高有效4位半字节;以及(2)乘积的最低有效4位半字节;以及比较电路,其将值与4位值一进行比较。可选地,其中,错误检测电路在值不等于4位值一时确定在生成8位输出时已经发生错误。
示例19包括示例16至18中任一项的系统,其中,错误检测电路输出指示在生成8位输出时是否已经发生错误的错误信号。
示例20包括示例16至19中任一项的系统,其中,密码单元还包括密码轮电路,其包括S盒电路。密码轮电路接收用于密码轮的128位输入数据并输出用于密码轮的128位输出数据。可选地,其中,在同一时钟周期期间,相比于错误检测电路的任何时延,密码轮电路从接收128位输入数据到输出128位输出数据具有更大的时延。
示例21是一种可操作以执行示例11至15中任一项的方法的处理器或其他装置。
示例22是一种处理器或其他装置,包括用于执行示例11至15中任一项的方法的装置。
示例23是一种处理器或其他装置,包括执行示例11至15中任一项的方法的电路。

Claims (24)

1.一种装置,包括:
替换盒(S盒)电路,所述S盒电路包括乘法逆电路,所述乘法逆电路用于接收伽罗瓦域的8位输入并且生成伽罗瓦域的对应8位输出,其中,当在生成所述8位输出时没有错误时,所述8位输出是所述8位输入的乘法逆;以及
错误检测电路,所述错误检测电路用于接收所述8位输入,并且所述错误检测电路与所述S盒电路耦合以接收所述8位输出,所述错误检测电路用于至少部分地基于所述8位输出是否是所述8位输入的乘法逆来检测在生成所述8位输出时是否已经发生错误。
2.根据权利要求1所述的装置,其中,所述错误检测电路包括:
伽罗瓦域乘法器,用于将所述8位输入和所述8位输出相乘以生成乘积;以及
比较电路,用于将所述乘积与8位值一进行比较,其中,所述错误检测电路用于在所述乘积不等于所述8位值一时确定在生成所述8位输出时已经发生错误。
3.根据权利要求2所述的装置,其中,所述伽罗瓦域乘法器是如下项中的一者:一项8位伽罗瓦域乘法器、两项4位伽罗瓦域乘法器、以及四项2位伽罗瓦域乘法器。
4.根据权利要求1所述的装置,其中,所述错误检测电路包括:
用于生成值的电路,所述值等于以下各项的和:(1)所述8位输入与所述8位输出的乘积的最高有效4位半字节;以及(2)所述乘积的最低有效4位半字节;以及
比较电路,用于将所述值与4位值一进行比较,其中,所述错误检测电路用于在等于所述和的值不等于所述4位值一时确定在生成所述8位输出时已经发生错误。
5.根据权利要求1至4中任一项所述的装置,其中,所述错误检测电路用于输出表明在生成所述8位输出时是否已经发生错误的错误信号。
6.根据权利要求5所述的装置,还包括:
存储装置,用于存储所述错误信号和从十五个附加错误检测电路同时输出的十五个附加错误信号,每个附加错误检测电路与十五个附加8位输入中的不同一个相对应,所述十五个附加8位输入与所述8位输入一起表示针对密码轮的128位输入数据;以及
与存储装置耦合的错误信号组合电路,用于组合所述错误信号和所述十五个附加错误信号,其中,所述错误信号组合电路用于在针对所述密码轮生成128位输出数据的时钟周期的后续时钟周期中组合所述错误信号和所述十五个附加错误信号。
7.根据权利要求1至4中任一项所述的装置,还包括:密码轮电路,所述密码轮电路包括所述S盒电路,所述密码轮电路用于接收针对密码轮的128位输入数据并且输出针对所述密码轮的128位输出数据,其中,在同一时钟周期期间,相比于所述错误检测电路的任何时延,所述密码轮电路从接收所述128位输入数据到输出所述128位输出数据具有更大的时延。
8.根据权利要求1至4中任一项所述的装置,还包括:用于检查所述8位输入是否为零的电路。
9.根据权利要求1至4中任一项所述的装置,还包括:高级加密标准(AES)电路,该AES电路包括所述S盒电路。
10.根据权利要求1至4中任一项所述的装置,还包括:SMS4电路,该SMS4电路包括所述S盒电路。
11.一种方法,包括:
对伽罗瓦域的8位输入执行替换盒(S盒)操作以生成伽罗瓦域的对应8位输出,其中,当在生成所述8位输出时没有错误时,所述8位输出是所述8位输入的乘法逆;以及
至少部分地基于所述8位输出是否是所述8位输入的乘法逆来检测在生成所述8位输出时是否发生了错误。
12.根据权利要求11所述的方法,其中,检测是否发生了错误包括:
通过将所述8位输入与所述8位输出相乘来生成乘积;以及
将所述乘积与8位值一进行比较;以及
在所述乘积不等于所述8位值一时确定在生成所述8位输出时发生了错误。
13.根据权利要求11所述的方法,其中,检测是否发生了错误包括:
生成等于以下各项的和的值:(1)所述8位输入与所述8位输出的乘积的最高有效4位半字节;以及(2)所述乘积的最低有效4位半字节;以及
将所述值与4位值一进行比较;以及
在等于所述和的值不等于所述4位值一时,确定在生成所述8位输出时发生了错误。
14.根据权利要求11所述的方法,还包括:输出表明在生成所述8位输出时是否发生了错误的错误信号。
15.根据权利要求14所述的方法,还包括:
存储所述错误信号和十五个附加错误信号,所述十五个附加错误信号对应于十五个附加S盒操作集合,所述十五个附加S盒操作集合是分别针对十五个附加8位输入中不同的8位输入来执行的,所述十五个附加8位输入与所述8位输入一起表示针对密码轮的128位输入数据;以及
在针对所述密码轮从所述128位输入数据生成128位输出数据的时钟周期的后续时钟周期中组合所述错误信号和所述十五个附加错误信号。
16.一种系统,包括:
处理器;
存储器;以及
密码单元,所述密码单元与所述处理器耦合并且与所述存储器耦合,所述密码单元用于对从所述处理器发送到所述存储器的数据进行加密,所述密码单元包括替换盒(S盒)电路,所述S盒电路包括乘法逆电路,所述乘法逆电路用于接收伽罗瓦域的8位输入并且生成伽罗瓦域的对应8位输出,其中,当在生成所述8位输出时没有错误时,所述8位输出是所述8位输入的乘法逆;以及
错误检测电路,所述错误检测电路用于接收所述8位输入,并且所述错误检测电路与所述S盒电路耦合以接收所述8位输出,所述错误检测电路用于至少部分地基于所述8位输出是否是所述8位输入的乘法逆来检测在生成所述8位输出时是否已经发生错误。
17.根据权利要求16所述的系统,其中,所述错误检测电路包括:
伽罗瓦域乘法器,用于将所述8位输入和所述8位输出相乘以生成乘积;以及
比较电路,用于将所述乘积与8位值一进行比较,其中,所述错误检测电路用于在所述乘积不等于所述8位值一时确定在生成所述8位输出时已经发生错误。
18.根据权利要求16所述的系统,其中,所述错误检测电路包括:
用于生成值的电路,所述值等于以下各项的和:(1)所述8位输入与所述8位输出的乘积的最高有效4位半字节;以及(2)所述乘积的最低有效4位半字节;以及
比较电路,用于将所述值与4位值一进行比较,其中,所述错误检测电路用于在所述值不等于所述4位值一时确定在生成所述8位输出时已经发生错误。
19.根据权利要求16至18中任一项所述的系统,其中,所述错误检测电路用于输出表明在生成所述8位输出时是否已经发生错误的错误信号。
20.根据权利要求16至18中任一项所述的系统,其中,所述密码单元还包括密码轮电路,所述密码轮电路包括所述S盒电路,所述密码轮电路用于接收针对密码轮的128位输入数据并且输出针对所述密码轮的128位输出数据,其中,在同一时钟周期期间,相比于所述错误检测电路的任何时延,所述密码轮电路从接收所述128位输入数据到输出所述128位输出数据具有更大的时延。
21.一种装置,包括:
替换盒(S盒)组件,所述S盒组件包括乘法逆组件,所述乘法逆组件用于接收伽罗瓦域的8位输入并且生成伽罗瓦域的对应8位输出,其中,当在生成所述8位输出时没有错误时,所述8位输出是所述8位输入的乘法逆;以及
错误检测组件,所述错误检测组件用于接收所述8位输入,并且所述错误检测组件与所述S盒组件耦合以接收所述8位输出,所述错误检测组件用于至少部分地基于所述8位输出是否是所述8位输入的乘法逆来检测在生成所述8位输出时是否已经发生错误。
22.一种处理器,包括用于执行如权利要求11至15中任一项所述的方法的组件。
23.一种机器可读介质,所述机器可读介质包括机器可读指令,所述机器可读指令当被执行时使得机器执行如权利要求11至15中任一项所述的方法。
24.一种计算机程序产品,所述计算机程序产品包括指令,所述指令当被处理器执行时使得所述处理器执行如权利要求11至15中任一项所述的方法。
CN202311805241.9A 2023-03-31 2023-12-26 密码替换盒操作中的错误检测 Pending CN118740368A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US18/194,270 US20240333472A1 (en) 2023-03-31 2023-03-31 Error detection in cryptographic substitution box operations
US18/194,270 2023-03-31

Publications (1)

Publication Number Publication Date
CN118740368A true CN118740368A (zh) 2024-10-01

Family

ID=89072974

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311805241.9A Pending CN118740368A (zh) 2023-03-31 2023-12-26 密码替换盒操作中的错误检测

Country Status (3)

Country Link
US (1) US20240333472A1 (zh)
EP (1) EP4439532A1 (zh)
CN (1) CN118740368A (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12476786B2 (en) * 2023-12-05 2025-11-18 Nxp B.V. Statistical ineffective fault analysis protection of Sbox
US12407491B1 (en) * 2024-12-20 2025-09-02 Zimperium, Inc. Standard encryption using pre- and post-transformations

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3818263B2 (ja) * 2003-01-28 2006-09-06 日本電気株式会社 Aes暗号処理装置、aes復号処理装置、aes暗号・復号処理装置、aes暗号処理方法、aes復号処理方法、および、aes暗号・復号処理方法
DE102015209120A1 (de) * 2015-05-19 2016-11-24 Robert Bosch Gmbh Recheneinrichtung und Betriebsverfahren hierfür

Also Published As

Publication number Publication date
US20240333472A1 (en) 2024-10-03
EP4439532A1 (en) 2024-10-02

Similar Documents

Publication Publication Date Title
EP3958160B1 (en) Encoded inline capabilities
CN107667499B (zh) 带密钥散列消息认证码处理器、方法、系统和指令
CN110233720B (zh) Sm4加速处理器、方法和系统
EP3550764B1 (en) Hardware accelerators and methods for high-performance authenticated encryption
US12238217B2 (en) Apparatuses, methods, and systems for instructions for usage restrictions cryptographically tied with data
CN108702286B (zh) 抗功率侧信道攻击的高级加密标准加速器处理器
US10797858B2 (en) Unified hardware accelerator for symmetric-key ciphers
CN103975302B (zh) 矩阵乘法累加指令
US11121856B2 (en) Unified AES-SMS4—Camellia symmetric key block cipher acceleration
CN107133018B (zh) 执行groestl散列的指令
EP3716049B1 (en) Apparatuses, methods, and systems for hashing instructions
EP4020288A1 (en) Low overhead memory integrity with error correction capabilities
EP4439532A1 (en) Error detection in cryptographic substitution box operations
EP4156594A1 (en) Memory assisted incline encryption/decryption
US20250211435A1 (en) Configurable variable-word size xorshift random number generator
Singh et al. Performance evaluation of low power MIPS crypto processor based on cryptography algorithms
US20250202695A1 (en) Apparatus and method for data manipulation detection or replay protection
US20250148089A1 (en) Instruction prefix encoding for cryptographic computing capability data types
US20250112781A1 (en) Multi-scheme hash-based digital signature verification processors, methods, and systems
US20240259182A1 (en) Quantum Attack Resistant Advanced Encryption Standard (AES) Encryption
US20240054080A1 (en) Speculating object-granular key identifiers for memory safety
US20250219816A1 (en) Method and apparatus to reduce rejection rate of integers generated by a random number generator
US20250112772A1 (en) On-die key generator for fully-homomorphic encryption relinearization public keys
CN119377999A (zh) x86处理器及其指令层级加解密方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication