CN117032801A - 可用于sha256的指令执行方法、设备、数据处理系统及芯片 - Google Patents
可用于sha256的指令执行方法、设备、数据处理系统及芯片 Download PDFInfo
- Publication number
- CN117032801A CN117032801A CN202311044756.1A CN202311044756A CN117032801A CN 117032801 A CN117032801 A CN 117032801A CN 202311044756 A CN202311044756 A CN 202311044756A CN 117032801 A CN117032801 A CN 117032801A
- Authority
- CN
- China
- Prior art keywords
- instruction
- register
- source
- operand
- dst
- 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
Links
- 238000000034 method Methods 0.000 title claims abstract description 31
- 238000012545 processing Methods 0.000 title claims abstract description 12
- 238000007906 compression Methods 0.000 claims description 71
- 230000006835 compression Effects 0.000 claims description 66
- 238000004422 calculation algorithm Methods 0.000 claims description 32
- 230000004044 response Effects 0.000 claims description 16
- 239000013589 supplement Substances 0.000 claims description 4
- 238000004378 air conditioning Methods 0.000 claims description 3
- 101100534231 Xenopus laevis src-b gene Proteins 0.000 description 35
- 230000006870 function Effects 0.000 description 14
- 238000004364 calculation method Methods 0.000 description 7
- 238000010586 diagram Methods 0.000 description 7
- 230000008569 process Effects 0.000 description 6
- 238000013144 data compression Methods 0.000 description 5
- 101100534223 Caenorhabditis elegans src-1 gene Proteins 0.000 description 3
- 238000004891 communication Methods 0.000 description 3
- 101100534229 Caenorhabditis elegans src-2 gene Proteins 0.000 description 2
- 238000004590 computer program Methods 0.000 description 2
- 125000004122 cyclic group Chemical group 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000000694 effects Effects 0.000 description 2
- PCHJSUWPFVWCPO-UHFFFAOYSA-N gold Chemical compound [Au] PCHJSUWPFVWCPO-UHFFFAOYSA-N 0.000 description 2
- 239000010931 gold Substances 0.000 description 2
- 229910052737 gold Inorganic materials 0.000 description 2
- 238000013507 mapping Methods 0.000 description 2
- 238000003491 array Methods 0.000 description 1
- 238000010009 beating Methods 0.000 description 1
- 230000002427 irreversible effect Effects 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30098—Register arrangements
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Abstract
一种可用于SHA256的指令执行方法、设备、数据处理系统及芯片,在消息字扩展时,基于3个至少256位的寄存器分别存储的包含8个32位消息字的第一源操作数、第二源操作数和目标操作数进行消息扩展,得到一个或两个新生成消息字。本公开实施例的指令数少,执行速度快。
Description
技术领域
本公开实施例涉及但不限于安全散列算法的实现,更具体地,涉及一种可用于SHA256的指令执行方法、设备、数据处理系统及芯片。
背景技术
SHA-2(Security Hash Algorithm-2)安全散列算法一种密码散列算法,用于实现数据间的单向映射,它可以将任意长度的消息映射成固定长度的消息摘要,并且映射过程不可逆。根据不同的输出消息摘要的长度,SHA-2分为SHA-224、SHA-256、SHA-384、SHA-512等算法,主要用于数字签名、指纹验证以及网络安全协议等领域。其中,SHA-256是一种单向哈希算法,能够将任意长度小于264位的输入消息转换为长度为256位的消息摘要,安全性高,在芯片中应用SHA-256算法时,其性能还有待提高。
发明内容
以下是对本文详细描述的主题的概述。本概述并非是为了限制权利要求的保护范围。
本公开实施例提供了一种可用于安全散列算法SHA256的指令执行设备,包括:
多个至少256位的寄存器;
指令解码器,被设置为接收SHA256计算的指令并解码,所述指令包括消息字扩展指令,所述消息字扩展指令包括3个字段,用于分别指示存储有第一源操作数的第一源寄存器、存储有第二源操作数的第二源寄存器,及用于存储目标操作数的目标寄存器;
执行单元,耦合到所述指令解码器,被设置为响应所述消息字扩展指令的解码结果,基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行消息字扩展操作,得到包括新生成消息字的目标操作数并存储在目标寄存器中;
其中,第一源寄存器、第二源寄存器和目标寄存器均为至少256位的寄存器;
所述第一源操作数包括8个32位的已生成消息字Wj-9,Wj-10,…,Wj-16;
所述第二源操作数包括8个32位的已生成消息字Wj-1,Wj-2,…,Wj-8;
所述目标操作数包括N个32位的新生成消息字和(8-N)个32位的已生成消息字Wj-1,Wj-2,…,Wj+N-8,j=16,17,…,63;N=1或2,N=1的情况下,新生成消息字为Wj,N=2的情况下,新生成消息字为Wj+1,Wj。
本公开实施例还提供了一种可用于安全散列算法SHA256的数据处理系统,包括:
总线;
本公开任一实施例所述的指令执行设备,耦合至所述总线;及
动态随机存取存储器DRAM,耦合至所述总线。
本公开实施例还提供了一种芯片,包括处理器,其中,所述处理器能够作为本公开任一实施例所述的指令执行设备执行安全散列算法SHA256。
本公开实施例还提供了一种可用于SHA256的指令执行方法,包括:
指令解码器接收SHA256计算的指令并解码,所述指令包括消息字扩展指令,所述消息字扩展指令包括3个字段,用于分别指示存储有第一源操作数的第一源寄存器、存储有第二源操作数的第二源寄存器,及用于存储目标操作数的目标寄存器;
耦合到所述指令解码器的执行单元响应所述消息字扩展指令的解码结果,基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行消息字扩展操作,得到包括新生成消息字的目标操作数并存储在目标寄存器中;
其中,第一源寄存器、第二源寄存器和目标寄存器均为至少256位的寄存器;
所述第一源操作数包括8个32位的已生成消息字Wj-9,Wj-10,…,Wj-16;
所述第二源操作数包括8个32位的已生成消息字Wj-1,Wj-2,…,Wj-8;
所述目标操作数包括N个32位的新生成消息字和(8-N)个32位的已生成消息字Wj-1,Wj-2,…,Wj+N-8,j=16,17,…,63;N=1或2,N=1的情况下,新生成消息字为Wj,N=2的情况下,新生成消息字为Wj+1,Wj。
本公开实施例还提供了一种非瞬态计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,其中,所述计算机指令时被机器执行时,使得所述机器执行本公开任一实施例所述的指令执行方法。
本公开上述实施例可用于SHA256的指令执行方法、设备、数据处理系统及芯片,优化了SHA256的消息扩展及压缩相关的指令和执行过程,可以减少指令执行时间。
在阅读并理解了附图和详细描述后,可以明白其他方面。
附图说明
附图用来提供对本公开实施例的理解,并且构成说明书的一部分,与本公开实施例一起用于解释本公开的技术方案,并不构成对本公开技术方案的限制。
图1是SHA-256中消息填充的示意图;
图2是本公开实施例可用于SHA-256的指令执行设备的示意图;
图3是本公开一实施例执行一次消息扩展操作得到一个新生成消息字的示意图;
图4是本公开另一实施例执行一次消息扩展操作得到二个新生成消息字的示意图;
图5是本公开实施例执行迭代压缩操作的示意图;
图6是本公开一实施例数据处理系统的示意图;
图7是本公开一实施例可用于SHA-256的指令执行方法的流程图。
具体实施方式
本公开描述了多个实施例,但是该描述是示例性的,而不是限制性的,并且对于本邻域的普通技术人员来说显而易见的是,在本公开所描述的实施例包含的范围内可以有更多的实施例和实现方案。
本公开的描述中,“示例性的”或者“例如”等词用于表示作例子、例证或说明。本公开中被描述为“示例性的”或者“例如”的任何实施例不应被解释为比其他实施例更优选或更具优势。本文中的“和/或”是对关联对象的关联关系的一种描述,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。“多个”是指两个或多于两个。另外,为了便于清楚描述本公开实施例的技术方案,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本邻域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
本申请的描述中,“包括以下任意一种或多种:选项一,选项二,……”或者“包括选项一、选项二、……中的任意一种或多种”,是指包括所列选项中的任意一项,或者包括所列选项中多项之间的任意组合。例如:“包括以下任意一种或多种:A、B”或者“包括A、B中的任意一种或多种”,是指仅包括A,或者仅包括B,或者包括A和B;又如:“包括以下任意一种或多种:A、B、C”或者“包括A、B、C中的任意一种或多种”时,是指仅包括A,或者仅包括B,或者仅包括C,或者包括A和B,或者包括A和C,或者包括B和C,或者包括A、B和C。选项数更多者依此类推。
在描述具有代表性的示例性实施例时,说明书可能已经将方法和/或过程呈现为特定的步骤序列。然而,在该方法或过程不依赖于本文所述步骤的特定顺序的程度上,该方法或过程不应限于所述的特定顺序的步骤。如本邻域普通技术人员将理解的,其它的步骤顺序也是可能的。因此,说明书中阐述的步骤的特定顺序不应被解释为对权利要求的限制。此外,针对该方法和/或过程的权利要求不应限于按照所写顺序执行它们的步骤,本邻域技术人员可以容易地理解,这些顺序可以变化,并且仍然保持在本公开实施例的精神和范围内。
SHA-256算法能将长度小于264比特的输入消息(也可称为输入数据)转换为256比特的消息摘要,消息分组长度为512比特,迭代压缩过程的消息字长度为32比特。
SHA-256算法在数据压缩时使用函数Ch(x,y,z)、Maj(x,y,z)、∑0(x)和∑1(x),数据扩展时使用函数σ0(x)和σ1(x),这些函数定义如下:
上述函数中的符号含义如下:
∧ 按位与操作
V 按位或操作
按位异或操作
按位取反操作
ROTRn(x)循环右移操作,将x循环右移n个比特位
SHRn(x)右移操作,将x右移n个比特位,左边补0
SHA-256算法主要包括消息填充、数据扩展和数据压缩三部分。
■消息填充
首先在长度为L的输入消息末尾添加一个比特1,之后添加K个比特0到整长度能被512模后余448,最后附加64比特的长度信息。如图1的所示。例如,对输入的十六进制的明文消息“616263”填充时,按照填充规则,第一步在消息末尾添加一个比特1,第二步添加比特0,数量为:512-24-1-64=423比特。第三步添加64比特的长度信息。输入消息的长度为6x4=24比特,十进制的24用十六进制表示为18。因此64比特的长度信息为“0000 0000 00000018”。
■数据扩展
填充后的消息可以划分为多个512比特的消息块。SHA-256算法迭代压缩时使用两种消息字,一种是规定的32比特的固定常数(Fixed Constant),文中称为固定消息字K,共64个,表示为K0,K1…,K63。另一种是根据消息块生成的消息字。先将消息块分割为16个消息字W0,W1…,W15;根据round函数取出当前轮次中的第1,2,9,15个消息字(即W0,W1,W8,W14)进行计算得到第17个消息字W16,第18个字W17则是通过W1,W2,W9,W15计算得到,以此类推得到后续的所有消息字。文中将每个消息块分割或扩展得到的64个32比特的消息字W0,W1…,W63统为扩展消息字W,也可以称为变化常数(Changing Constants)或消息调度常数(MessageSchedule Constants)。
文中使用W或带下标的W表示的消息字为扩展消息字,使用K或带下标的K表示的消息字为固定消息字。在描述消息扩展时,涉及的消息字均为扩展消息字,如用已生成消息字表示已生成的扩展消息字,用新生成消息字表示新生成的扩展消息字。
消息块扩展的规则如下:先将消息块分割为16个消息字W0,W1…,W15;再按以下消息字扩展公式得到余下的48个消息字W16,W17…,W63:
Wj=σ1(Wj-2)+Wi-7+σ0(Wj-15)+Wj-16 j=16,17,…,63
其中使用的函数σ0,σ1如上文所述,不再赘述。
■数据压缩
SHA-256算法的数据压缩是一个迭代压缩的过程,一个消息块进行64轮的迭代压缩,输出一个256比特的杂凑值。迭代压缩过程使用8个变量a,b,c,d,e,f,g,h、64个固定消息字Kn,及该消息块扩展生成的64个消息字Wn,n=0,1,…,63。
SHA-256算法中,每一轮迭代压缩执行的运算相同,单轮迭代函数表示如下:
hn+1=gn
gn+1=fn
fn+1=en
en+1=dn+hn+∑1en+Ch(en,fn,gn)+Kn+Wn
dn+1=cn
cn+1=bn
bn+1=an
an+1=∑0an+Maj(an,bn,cn)+hn+∑1en+Ch(en,fn,gn)+Kn+Wn
文中,a和a,b和b,c和c,d和d,e和e,f和f,g和g,h和h,i和i,j和j,n和n等,同一符号的不同字体表示的是同一变量。变量和消息字均为32比特。
将输入消息划分为多个消息块后,对第一个消息块进行压缩时,8个变量的初始值a0,b0,c0,d0,e0,f0,g0,h0是固定设置的,分别为:a=0x6a09e667;b=0xbb67ae85;c=0x3c6ef372;d=0xa54ff53a;e=0x510e527f;f=0x9b05688c;g=0x1f83d9ab;h=0x5be0cd19。经64轮迭代压缩后,将8个变量的输出值a63,b63,c63,d63,e63,f63,g63,h63与各自的初始值做模232加法后拼接,得到第一个消息块经压缩后的输出,该输出是一个256比特的杂凑值。从第二个消息块开始,对每一个消息块压缩时,将前一消息块的输出作为8个变量的初始值,按相同方式进行压缩,直到所有消息块压缩完成,输出该输入消息转换成的256比特的消息摘要。
在一些实施方案中,实现了基于SIMD的SHA指令——拓展指令集来完成SHA-256算法的处理步骤。为了执行SHA-256的256位数据的迭代压缩,至少256位的寄存器用于存储SHA-256的变量(例如,A,B,C,D,E,F,G和H)和迭代压缩所需的消息字,一轮或多轮SHA-256的迭代压缩可由处理器响应于复杂指令集的SIMD指令而执行。这些实施方案中使用128位的寄存器进行消息字扩展,为了得到扩展消息字,这些实施方案需要先后执行两种消息字扩展指令:sha256msg1、sha256msg2),通过执行sha256msg1先得到一个中间结果,再在sha256msg1中使用该中间结果计算出新扩展的消息字,此外还需要执行相应的加载操作、加法操作,指令数量较多,且执行指令的时间消耗较大。
为此,本公开一实施例提供了一种可用于安全散列算法SHA256的指令执行设备,以包括:
多个至少256位的寄存器;
指令解码器,被设置为接收SHA256计算的指令并解码,所述指令包括消息字扩展指令,所述消息字扩展指令包括3个字段,用于分别指示存储有第一源操作数的第一源寄存器、存储有第二源操作数的第二源寄存器,及用于存储目标操作数的目标寄存器;
执行单元,耦合到所述指令解码器,被设置为响应所述消息字扩展指令的解码结果,基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行消息字扩展操作,得到包括新生成消息字的目标操作数并存储在目标寄存器中;
其中,第一源寄存器、第二源寄存器和目标寄存器均为至少256位的寄存器;
所述第一源操作数包括8个32位的已生成消息字Wj-9,Wj-10,…,Wj-16;
所述第二源操作数包括8个32位的已生成消息字Wj-1,Wj-2,…,Wj-8;
所述目标操作数包括N个32位的新生成消息字和(8-N)个32位的已生成消息字Wj-1,Wj-2,…,Wj+N-8,j=16,17,…,63;N=1或2,N=1的情况下,新生成消息字为Wj,N=2的情况下,新生成消息字为Wj+1,Wj。
本公开实施例设计了更为适配256位寄存器的消息字扩展指令sha256Msg,基于多个至少256位的寄存器存储操作数,通过一个消息字扩展指令的解码和执行,即可扩展得到新的消息字W16,W17,…,W63,使用的指令数量少,消息扩展所需的指令执行时间少,效率高。
图2是根据本公开实施例指令执行设备的示意图,该指令执行设备可以用处理器实现。该处理器可以是通用处理器。各种复杂指令集计算(CISC)处理器、各种精简指令集计算(RISC)处理器和各种超长指令字(VLIW)处理器中的任何一种,或者混合上述一种或多种类型的处理器,或者其他类型的处理器。该处理器还可以是一个或多个处理器核。如预期用于通用计算的通用有序核、预期用于通用计算的高性能通用无序核、主要用于图形和/或科学(吞吐量)计算的专用核。例如,该处理器可以是包括一个或多个通用有序核和/或一个或多个通用无序核的中央处理器单元(CPU),或者包括一个或多个专用核的协处理器,如在与CPU分开的芯片上的协处理器、在与CPU相同的封装中但分开的管芯上的协处理器、与CPU在相同管芯上的协处理器,等等。
在图2所示的示例中,指令执行设备包括指令解码器11和一个或多个执行单元13(图中仅示出一个)。指令解码器11用于接收和解码来自指令获取单元(未示出)的指令。指令解码器11可生成并输出指令的解码结果,处理器采用RISC(Reduced Instruction SetComputing,精简指令集计算机)架构时,指令的解码结果可以是基于指令生成的控制信号,以控制执行单元中的硬件完成指令定义的逻辑运算,实现消息字扩展、变量的迭代压缩等操作。处理器采用CISC(Complex Instruction Set Computing,复杂指令集计算机)架构时,指令的解码结果可以是反映指令或来源于指令的一个或多个微操作、微代码、入口点、微指令或其他指令,指令解码器11可以使用各种不同的机制来实现,包括但不限于:微代码只读存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)等等。执行单元13可包括算术逻辑单元或能够基于指令执行操作的任一其他类型的逻辑单元。作为指令解码器11解码指令的结果,执行单元13可以通过寻址系统与256位寄存器组连接,接收反映指令或来源于指令的控制信号或者一个或多个微操作、微代码、入口点、微指令、其他指令,基于指令中指示的一个或多个源寄存器中的源操作数执行相应操作,将得到的目标操作数存储在目标寄存器中。执行单元13包括可操作以执行指令的电路(如SHA256中消息字扩展和迭代压缩所使用的各种算子)或其他执行逻辑(例如,与硬件和/或固件结合的软件),并相应地执行操作。执行单元13可以表示诸如逻辑单元、算术逻辑单元(ALL)、算术单元、整数单元之类的任何类型的执行单元。
执行指令时的源操作数和目标操作数的部分或全部可以存储在寄存器集合和/或存储器中,寄存器集合可以是256位寄存器组15的一部分,还可以是状态寄存器、标志寄存器等其他寄存器。寄存器是可以存储数据的存储设备。寄存器集合在物理上可以位于带有执行单元13的管芯(chip)中。指令可以指定存储在寄存器中的数据,各种不同类型的寄存器均是可用的,只要它们能够存储和提供本实施例所需的数据。合适的寄存器的示例包括但不限于专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、专用寄存器和动态分配的物理寄存器的组合,等等。
图2所示的示例中,执行单元13包括一个或多个SHA256单元,SHA256单元可以响应于由指令解码器11提供的指令解码结果,利用256位寄存器组15中存储的已生成消息字执行消息字扩展运算,也可利用256位寄存器组15中存储SHA256变量及相应的消息字之和执行SHA256迭代压缩。
本实施例消息扩展相关的指令解码和执行,可以在对SHA256变量的迭代压缩需要生成新的扩展消息字参与之前启动,在执行第一个消息扩展指令之前,先将512位消息块划分得到的前8个消息字W7至W0加载到第一源寄存器src1中,后8个消息字W15至W8加载到src2中。执行单元基于消息字扩展指令的解码结果执行消息字扩展操作,能直接让相应的硬件逻辑产生新的32位消息字。
本公开一示例性的实施例中,通过执行一次消息字扩展指令得到一个新生成的扩展消息字。即在N=1的情况下,所述基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行消息字扩展操作,得到包括新生成消息字的目标操作数并存储在目标寄存器中,包括:
基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行以下扩展运算,得到新生成消息字Wj并存储在dst[255:224]:
Wj=σ1(Wj-2)+Wi-7+σ0(Wj-15)+Wj-16;
将所述第二源操作数中的已生成消息字Wj-1,Wj-2,…,Wj-7分别存储到dst[223:192],dst[192:160],dst[159:128],dst[127:96],dst[95:64],dst[63:32]和dst[31:00];
其中,dst[n:m]表示用于存储目标操作数的目标寄存器的第n位至第m位;
其中,第二源寄存器和目标寄存器相同或不同,第一源寄存器与第二源寄存器、目标寄存器均不同。
在一示例中,第二源寄存器和目标寄存器相同,即scr2和dst相等。在另一示例中,第二源寄存器和目标寄存器不同,即scr2和dst不相等,而该2个示例中,第一源寄存器与第二源寄存器、目标寄存器均不相同。
本实施例包括3个字段的消息字扩展指令可表示为:
sha256Msg dst,src1,src2//RF-type
其中,sha256Msg表示256位的消息字扩展指令的操作码,scr1表示第一源寄存器,scr2表示第二源寄存器,dst表示目标寄存器,scr1,scr2,dst均为256位或大于256位的寄存器,scr1,scr2,dst通常是寄存器编号,也即scr1是第一源寄存器的寄存器编号,src2是第二源寄存器的寄存器编号,dst是目标寄存器的寄存器编号。上式中的RF-type(Register-Register/Immediate-Format)表示指令中需要对寄存器进行读取和写入的操作,以及对立即数进行读取和操作的一种指令格式。
上述src1[n:m]表示第一源寄存器的第n位至第m位,src2[n:m]表示第二源寄存器的第n位至第m位。i表示当前消息扩展运算所要生成的w[i]的序号。在一个示例中,dst第一源操作数Wj-9,Wj-10,…,Wj-16在第一源寄存器src1中的存储情况可表示为:
src1[255:224]=w[i-9];
src1[223:192]=w[i-10];
src1[192:160]=w[i-11];
src1[159:128]=w[i-12];
src1[127:96]=w[i-13];
src1[95:64]=w[i-14];
src1[63:32]=w[i-15];
src1[31:00]=w[i-16];
相应地,第二源操作数Wj-1,Wj-2,…,Wj-8在第二源寄存器src2中的存储情况可表示为:
src2[255:224]=w[i-1];
src2[223:192]=w[i-2];
src2[192:160]=w[i-3];
src2[159:128]=w[i-4];
src2[127:96]=w[i-5];
src2[95:64]=w[i-6];
src2[63:32]=w[i-7];
src2[31:00]=w[i-8];
基于指令sha256Msg运算后得到的目标操作数Wj,Wj-1,…,Wj-7在目标寄存器dst中的存储情况可表示为:
dst[255:224]=w[i]=w[i-2]+σ1(w[i-7])+σ0(w[i-15])+w[i-16];;
dst[223:192]=w[i-1];
dst[192:160]=w[i-2];
dst[159:128]=w[i-3];
dst[127:96]=w[i-4];
dst[95:64]=w[i-5];
dst[63:32]=w[i-6];
dst[31:00]=w[i-7]。
上述w[i-7]即Wj-7,w[i-6]即Wj-6,……,w[i]即Wj,依此类推。
图3的示例示出的是对执行消息扩展操作涉及的操作数和相应算子,如σ0和σ1、加法器(用标有“+”的矩形框表示)等。其中,σ0用于实现函数σ0(x)的运算,σ1用于实现函数σ1(x)的运算。各个算子之间连接基于上文中的消息字扩展公式确定,一起构成执行单元中用于消息字扩展的硬件电路。需要说明的是,上述算子与寄存器之间的连接仅仅是为了表示方便。在硬件实现上,第一源寄存器、第二源寄存器和目标寄存器可以从寄存器集合中选择,而这些算子构成的电路的输入端和输出端可以连接到设定的端口上,执行单元基于指令中给出的寄存器编号,通过寻址确定该端口实际访问的寄存器。因此在消息扩展指令中,通过为scr1、scr2设置不同的寄存器编号,以访问相应的寄存器读取到本次消息字扩展所需的操作数。在先后执行的消息扩展指令中,通过为scr1、scr2、dst设置不同的编号可以使scr1、scr2、dst对应不同的寄存器。
图3所示的示例是将一个消息块划分为16个32位消息字,将其中的W7,W6…,W0加载到第一源寄存器,将W15,W14…,W8加载到第二源寄存器后。执行第一次消息扩展操作时的情况。此时的消息扩展指令及相关寄存器中的操作数可表示为:
sha256Msg dst,src1,src2//RF-type
src1:[w7 w6 w5 w4 w3 w2 w1 w0] [high->low]
src2:[w15 w14 w13 w12 w11 w10 w9 w8] [high->low]
dst:[w16 w15 w14 w13 w12 w11 w10 w9] [high->low]
如图所示,执行sha256Msg得到的目标操作数中,从dst的高位开始,第一个是由执行单元中的各个算子运算生成的新生成消息字w16(即W16),其他均为已生成消息字,可以从第二源寄存器src2的对应位复制或移动得到。
参见图3,图示示例的目标寄存器不同于第一源寄存器和第二源寄存器。执行扩展操作时,可以将生成的消息字Wj保存到dst最高的32位,将Wj-1,…,Wj-7复制到dst的余下位置,得到存储在dst中的目标操作数,也即下一次消息字扩展所需的第二源操作数。在另一实施例中,目标寄存器dst与第二源寄存器scr2相同,消息字扩展指令中的dst和src2使用相同的寄存器编号。执行扩展操作时,先将计算出的w16暂存到一寄存器中,将src2中的消息字右移32位,再将w16复制到src2最高的32位,同样可以得到目标操作数但存储在src2,该实施例的第二源寄存器src2即目标寄存器dst。消息扩展的具体操作可以有多种变例,本公开不做局限。例如,还可以将目标操作数暂存在一中间寄存器再复制回src2。
本公开另一示例性的实施例中,通过执行一次消息字扩展指令而得到两个新生成的消息字。即在N=2的情况下,所述基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行消息字扩展操作,得到包括新生成消息字的目标操作数并存储在目标寄存器中,包括:
基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行以下扩展运算,得到新生成消息字Wj+1并存储在dst[255:224]:
Wj+1=σ1(Wj-1)+Wi-6+σ0(Wj-14)+Wj-15;
基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行以下扩展运算,得到新生成消息字Wj并存储在dst[223:192]:
Wj=σ1(Wj-2)+Wi-7+σ0(Wj-15)+Wj-16;
将所述第二源操作数中的已生成消息字Wj-1,Wj-2,…,Wj-6分别存储到dst[192:160],dst[159:128],dst[127:96],dst[95:64],dst[63:32]和dst[31:00];
其中,dst[n:m]表示用于存储目标操作数的目标寄存器的第n位至第m位;
其中,第二源寄存器与目标寄存器相同或不同,第一源寄存器与第二源寄存器、目标寄存器均不同。
参见图4,本实施例相对于图3所示的实施例,基于第一源操作数Wj-9,Wj-10,…,Wj-16和第二源操作数Wj-1,Wj-2,…,Wj-8,使用消息字扩展相关的一套算子分时计算(或使用两套算子同时计算),扩展得到2个新生成消息字。
本实施例执行一个消息字扩展指令后,得到的目标操作数及其在目标寄存器中的存储情况可表示为:
dst[255:224]=w[i+1]=w[i-1]+σ1(w[i-6])+σ0(w[i-14])+w[i-15];
dst[223:192]=w[i]=w[i-2]+σ1(w[i-7])+σ0(w[i-15])+w[i-16];
dst[192:160]=w[i-1];
dst[159:128]=w[i-2];
dst[127:96]=w[i-3];
dst[95:64]=w[i-4];
dst[63:32]=w[i-5];
dst[31:00]=w[i-6]。
与上一实施例不同的是,本实施例通过执行一次消息字扩展指令而得到两个新生成消息字w[i+1]和w[i],节约了指令数量,提高了运算效率。本实施例的一个示例中,目标寄存器与第二源寄存器不同,dst不等于src2,新生成消息字w[i+1]保存在256位目标寄存器最高的32位即dst[255:224],新生成消息字w[i]则保存在256位目标寄存器次高的32位即dst[223:192]。目标寄存器中其他的消息字是已生成消息字,可以从第二源寄存器的对应位复制得到,且该目标寄存器中的目标操作数可以直接作为下一次扩展操作的第二源操作数,在另一示例例中,目标寄存器与第二源寄存器相同,消息字扩展指令中的dst和src2相等。执行扩展操作时,可以先将计算出的w[i+1]和w[i]暂存到一寄存器中,将src2中的消息字右移64位,再将w[i+1]和w[i]复制到src2最高的64位,得到存储在src2中的目标操作数,作为下一次消息字扩展所需的第二源操作数。
在图4的示例中,是以第一次消息扩展指令的执行为例,因此第一源寄存器中的第一操作数和第二源寄存器中的第二源操作数与图3所示的示例相同,但目标操作数不同,此时的消息扩展指令及相关寄存器中的操作数可表示为:
sha256Msg dst,src1,src2//RF-type
src1:[w7 w6 w5 w4 w3 w2 w1 w0] [high->low]
src2:[w15 w14 w13 w12 w11 w10 w9 w8] [high->low]
dst:[w17 w16 w15 w14 w13 w12 w11 w10] [high->low]
如图所示,执行sha256Msg得到的目标操作数中,从高位开始,第一个和第二个消息字是经扩展运算生成的新生成消息字w17(即W17)和w16(即W16),其他均为已生成消息字w15至w10。
在本公开一示例性的实施例中,在执行完扩展运算的,为了在下一次执行消息字扩展指令时继续使用原来的第一源寄存器,需要对其中的第一源操作数进行更新,更新后的第一源操作数的高位来自于原来的第二源操作数,低位来自于原来的第一源操作数,可以通过两个移动指令和一个合并指令实现。
本实施例中,所述指令解码器还被设置为在解码所述消息字扩展指令后,继续解码接收到的以下指令:
左移指令,用于指示将第二源寄存器中的数据左移k位,右边补0;在N=1的情况下,k=224;在N=2的情况下,k=192
右移指令,用于指示将第一源寄存器中的数据右移256-k位,左边补0;
合并指令,用于指示对左移后的第二源寄存器的数据和右移后的第一源寄存器中的数据进行“或”操作,结果存储在第一源寄存器中;
所述执行单元还被设置为在得到包括新生成消息字的目标操作数并存储在目标寄存器后,响应所述左移指令、右移指令和合并指令的解码结果以执行第一源操作数更新操作,将第一源寄存器中的第一源操作数更新为Wj+N-9,Wj+N-10,…,Wj+N-16;
其中,所述消息字扩展指令、左移指令、右移指令和合并指令构成包括一个扩展指令组。
本实施例中,所述SHA256计算的指令为精简指令集的指令,指令解码时不会产生微指令、微代码,执行速度更快。但本公开不局限于此。
本实施例根据N取值的不同,左移和右移的位数也有所差别。在N=1时,响应左移指令的解码结果执行左移操作,将第二源寄存器中的消息字左移224位即7个消息字的长度,使得第二源寄存器中保存的最后一个消息字被移动到第一源寄存器最高的32位。而通过响应右移指令的解码结果执行的右移操作,可以将第一源寄存器中保存的所有消息字右移32位,最后一个消息字被去掉。左移和右移的先后顺序可以相互交换或同时进行。最后响应合并指令的解码结果执行合并操作,就可以得到进行下一次消息字扩展所需的第一源操作数Wj-8,Wj-9,…,Wj-15。在N=2时,响应左移指令的解码结果执行左移操作时,将第二源寄存器中的消息字左移192位即6个消息字的长度,使得第二源寄存器中保存的最后两个消息字被移动到第一源寄存器最高的64位。而通过响应右移指令的解码结果执行右移操作,可以将第一源寄存器中保存的所有消息字右移64位,最后两个消息字被去掉。左移和右移的先后顺序可以相互交换或同时进行。最后响应合并指令的解码结果执行合并操作,可以得到进行下一次消息字扩展所需的第一源操作数Wj-7,Wj-8,…,Wj-14。
在一个示例中,以N=2的情况为例,包括消息字扩展指令、左移指令、右移指令和合并指令的一个扩展指令组可以表示如下:
sha256msg gf32,gf30,gf31##SHA256消息字扩展(sha256_exp)
gfslli gf31,gf31,192##将最低位消息字移动到最高位(leave the lowest ontop)
gfsrli gf30,gf30,64##弹出最低位消息字(pop the lowest)
gfor gf30,gf31,gf30##合并得到新的作为第一源操作数的8个消息字W。
上述sha256msg指令中,gf30是第一源寄存器src1的编号,gf31是第二源寄存器src2的编号,gf32是目标寄存器dst的编号,这些寄存器均为至少256位的寄存器。gfslli指令用于指示执行256位寄存器的立即数左移操作,gf31,gf31表示要移动数据的寄存器src2,“192”表示左移的位数。gfsrli指令用于指示执行256位寄存器的立即数右移操作,gf30,gf30表示要移动数据的寄存器src1,“64”表示右移的位数。gfor指令表示对两个256位寄存器的数据执行“或”操作,gfor gf30,gf31,gf30中的后两个寄存器编号gf31,gf30是要进行“或”操作的源寄存器的编号,第一个寄存器编号gf30是用于保存“或”操作结果的目标寄存器的编号。
在N=1的情况下,可以将上述gfslli指令中的移动位数调整为224,gfsrli指令中的移动位数调整为32,以完成对第一源操作数的更新操作。
对于第一源操作数的更新并不局限于以上方式,在其他实施例中,可以采用其他操作方式来实现第一源操作数的更新。例如,可以将第一源寄存器src1和第二源寄存器src2设置为两个相邻的寄存器,且src2的低位与src1的高位相邻。这样对src1和src2一起执行一次右移32位(N=1时)或64位(N=2时)的操作,即可得到存储在src1中的第一源操作数。
在本公开一示例性的实施例中,所述指令解码器被设置为解码连续接收的p个所述扩展指令组,同一扩展指令组中的第一源寄存器、第二源寄存器和目标寄存器互不相同,且相邻两个扩展指令组中,前一个扩展指令组中的第二源寄存器的编号在后一个扩展指令组中作为目标寄存器,前一个扩展指令组中的目标寄存器在后一个扩展指令组中作为第二源寄存器。前一个扩展指令组和后一个扩展指令组中的第一源寄存器相同;
所述执行单元被设置为响应所述p个扩展指令组的解码结果,执行消息字扩展操作和第一源操作数更新操作,得到包括q个新生成消息字Wj+q-1,Wj+q-2,…,Wj的目标操作数并存储在目标寄存器中;
其中,在N=1的情况下,2≤p≤8,q=p;在N=2的情况下,2≤p≤4,q=2p。
本实施例执行一次消息字扩展指令后,存储在目标寄存器中的目标操作数是下一次消息字扩展所需的第二源操作数,例如,第一个消息扩展指令为:sha256msg gf32,gf30,gf31;第一源寄存器的编号为gf30,第二源寄存器的编号为gf31,目标寄存器的编号为gf32。在该消息扩展指令被解码和执行完成之后,下一个消息扩展指令为:sha256msggf31,gf30,gf32。也即对于连续的两个消息扩展指令,将上一消息扩展指令中目标寄存器(用编号表示)作为下一消息扩展指令中的第二源寄存器(用编号表示),以将上一消息扩展指令执行后得到的目标操作数作为下一消息扩展指令中的第二源操作数;及,将上一消息扩展指令中的第二源寄存器作为下一消息扩展指令中的目标寄存器,以保存下一消息扩展指令执行后得到的目标操作数,通过消息字扩展指令中寄存器编号的改变,就无需在寄存器之间进行数据拷贝操作(无需将dst中数据拷贝到src2),加快指令执行速度。在其他实施例中,目标寄存器和第二源寄存器相同,则不需要对编号进行交换,但在目标寄存器和第二源寄存器相同的情况下执行的消息字扩展操作相对复杂(需要暂存新生成消息字)。
本实施例中,在N=1的情况下,p的取值可以是从2至8的任一数值,即通过执行p次消息字扩展操作得到2至8个新生成消息字。在N=2的情况下,p的取值可以是从2至4的任一数值,通过执行p次消息字扩展操作得到4至8个新生成消息字。得到的多个新生成消息字可以用于多轮的迭代压缩计算。在其他实施例中,在N=2的情况下,也可以执行1次消息字扩展操作,得到2个新生成消息字后,即执行迭代压缩指令以对变量进行迭代压缩。本实施例执行消息字扩展操作和第一源操作数更新操作时,在生成消息字W63之前,每执行一次消息字扩展操作后执行一次第一源操作数更新操作,而在执行生成消息字W63的消息字扩展操作后,可以不再执行第一源操作数更新操作。
在本实施例的一示例中,N=2,p=4为例,相应的4个扩展指令组如下:
sha256msg gf32,gf30,gf31##sha256_exp one
gfslli gf31,gf31,192 ##leave the lowest on top
gfsrli gf30,gf30,64 ##pop the lowest
gfor gf30,gf31,gf30##combine to the new low 8w
sha256msg gf31,gf30,gf32##sha256_exp two
gfslli gf32,gf32,192 ##leave the lowest on top
gfsrli gf30,gf30,64 ##pop the lowest
gfor gf30,gf32,gf30##combine to the new low 8w
sha256msg gf32,gf30,gf31##sha256_exp three
gfslli gf31,gf31,192 ##leave the lowest on top
gfsrli gf30,gf30,64 ##pop the lowest
gfor gf30,gf31,gf30##combine to the new low 8w
sha256msg gf31,gf30,gf32##sha256_exp four
gfslli gf32,gf32,192 ##leave the lowest on top
gfsrli gf30,gf30,64 ##pop the lowest
gfor gf30,gf32,gf30##combine to the new low 8w
上述示例中,通过16个指令(其中包括4个消息字扩展指令、4个左移指令、4个右移指令和4个合并指令)即可完成8个扩展消息字的生成,并且该16个指令采用精简指令集中的指令时,没有微指令及其带来的延迟,指令执行速度更快。
本公开一示例性的实施例中,为了加快迭代压缩的速度,可以将迭代压缩所需的固定消息字K和扩展消息字W预先相加。
所述指令解码器还被设置在解码连续接收的p个所述扩展指令组后,继续解码接收到的一加法指令,所述加法指令可为SIMD(Single Instruction Multiple Data,单指令多数据)指令,指令中包括的3个字段用于分别指示存储有Wj+q-1,Wj+q-2,…,Wj的目标寄存器,存储有q个32位常数Kj+q-1,Kj+q-2,…,Kj的常数寄存器,及用于存储q个相加结果Wj+q-1+Kj+q-1,Wj+q-2+Kj+q-2,…,Wj+Kj的结果寄存器;
所述执行单元还被设置为响应所述加法指令的解码结果,基于目标寄存器存储的Wj+q-1,Wj+q-2,…,Wj和常数寄存器存储的Kj+q-1,Kj+q-2,…,Kj执行加法操作,得到相加结果Wj+q-1+Kj+q-1,Wj+q-2+Kj+q-2,…,Wj+Kj并存储在结果寄存器中;
其中,所述常数寄存器和结果寄存器均为256位寄存器。
本实施例上述的加法指令可以表示为:vuadd32 gf10,gf00,gf32;该加法指令可以执行完4个扩展指令组共16个指令后执行。根据SIMD的格式,vuadd32是操作码(该加法指令也可称为vuadd32指令),表示将两个源寄存器gf00,gf32中各自存储的8个32位消息字对应相加,以完成SHA256算法中的w[i]+k[i]的运算,产生8轮迭代压缩需要的参数w+k。其中,目标寄存器gf32保存有通过消息字扩展操作得到的多个新生成消息字,gf00保存有相应的固定消息字,上述vuadd32所执行的加法运算是将两个寄存器中对应位置上的32位数据各自相加,结果保存到gf10寄存器的对应位置。除vuadd32指令外,本公开实施例的其他指令均可以采用256位的整体计算指令。
本公开一示例性的实施例中,在得到多个固定消息字和扩展消息字的相加结果后,就可以对SHA256的变量进行多轮迭代压缩。所述指令解码器还被设置在解码接收的所述加法指令后,继续解码连续接收到的q个压缩指令组,前q-1个压缩指令组均包括一迭代压缩指令和一右移指令,第q个压缩指令组包括一迭代压缩指令,其中:
所述迭代压缩指令包括3个字段,分别用于指示存储有Wj+q-1+Kj+q-1,Wj+q-2+Kj+q-2,…,Wj+Kj的结果寄存器,存储有8个待迭代变量的第一变量寄存器,及用于存储对8个待迭代变量进行一次SHA256迭代压缩的结果的第二变量寄存器,所述右移指令用于指示将结果寄存器中的数据右移32位;
所述执行单元还被设置为响应所述q个压缩指令组的解码结果,执行对变量的迭代压缩和对结果寄存器中数据的右移操作,得到经q次迭代压缩后的8个变量。
在一示例中,相邻两个压缩指令组中,前一个压缩指令组中的第一变量寄存器在后一个压缩指令组中作为第二变量寄存器,前一个压缩指令组中的第二变量寄存器在后一个压缩指令组中作为第一变量寄存器,前一个压缩指令组和后一个压缩指令组中的结果寄存器相同。而在另一示例中,多个压缩指令组中的第一变量寄存器和第二变量寄存器相同。
在一个示例中,以得到8个新生成消息字w16至w23,且与8个固定常数K16至K23对应相加后进行的8次迭代压缩为例,迭代压缩指令表示为sha256rng,格式如下:
sha256rng dst,src1,src2//RF-type
src1:[Hold Gold Fold Eold Dold Cold Bold Aold]
src2:[wk23 wk22 wk21 wk20 wk19 wk18 wk17 wk16]
dst:[Hnew Gnew Fnew Enew Dnew Cnew Bnew Anew]
其中,sha256rng指令包含3个字段,分别指示3个寄存器,src1即存储有8个待迭代变量的第一变量寄存器,在该指令中也可称为第一源寄存器,Hold Gold Fold Eold DoldCold Bold Aold即上文所说的SHA256算法中使用的8个变量h,g,f,e,d,c,b,a。sr2即存储有消息字W和消息字K的加法结果的结果寄存器,在该指令中也可称为第二源寄存器,上文的wk23至wk16仅仅是示例性,随着迭代压缩的执行,sr2可以存储wk31至wk24、wk39至wk32、……等等。其中wk23即W23+K23,wk22即W22+K22,依此类推。dst是用于存储对8个待迭代变量进行一次SHA256迭代压缩的结果的第二变量寄存器,在该指令中也可称为目标寄存器。
两个相邻sha256rng指令中,前一个sha256rng指令中dst存储的迭代压缩的结果是下一次迭代压缩的8个待迭代变量,在第一变量寄存器不同于第二变量寄存器(dst≠src1)的示例中,前一个sha256rng指令中的第一变量寄存器可作为下一个sha256rng指令中的第二变量寄存器,前一个sha256rng指令中的第二变量寄存器可作为下一个sha256rng指令中的第一变量寄存器,从而使用3个寄存器来完成sha256的多轮迭代压缩,也不需要进行寄存器之间的数据倒换。在第一变量寄存器与第二变量寄存器相同(dst=src1)的示例中,可以将变量e,a的迭代结果先暂存在中间寄存器中,将src1中的变量左移32位,再将变量e,a的迭代结果复制回src1中的第4个和第8个变量位置。
本实施例基于sha256rng指令的迭代压缩过程可参见图5,图中示出的Ch,Maj,∑0和∑1分别表示用于实现函数Ch(x,y,z)、Maj(x,y,z)、∑0(x)和∑1(x)的算子,带“+”号的框表示用于实现加法运算的算子(即加法器),这些算子可以设计在处理器中,构成执行单元中用于实现迭代压缩的硬件部分。对于src1中的待迭代变量h,g,f,d,c,b进行迭代压缩时并不需要使用算子运算,将src1中的待迭代变量g,f,e,c,b,a打一拍后保存到dst中分别作为迭代压缩后的变量h,g,f,d,c,b即可。
图5中的算子仅仅是示例性地,这些算子所实现的迭代压缩见上文SHA-256算法的数据压缩部分所记载的单轮迭代函数,这里不再赘述。但SHA256算法的迭代压缩有很多变例,这些算子也可以采用这些变例中所使用的算子,并不局限于标准的公式。虽然图中将这些算子与寄存器相连,但在硬件实现时,可将这些算子构成的迭代压缩电路的输入和输出连接到设定的端口,通过寻址来访问指令中指定的寄存器。
本实施例的sha256rng指令为精简指令集中的指令,通过硬件直接完成一轮迭代压缩过程,由于使用的至少256位的寄存器可以直接容纳计算所需的所有变量和消息字之和,因此不需要多余的操作,用一条指令在处理器上即可实现该功能。
因为相邻的两轮迭代压缩使用的消息字之和不同,因此除用于执行SHA256最后一次迭代压缩的sha256rng指令外,每执行一次sha256rng指令后需要执行一次右移指令,以将结果寄存器中的数据右移32位,将已使用的最后一个消息字之和移出寄存器,右移后结果寄存器保存的最后一个消息字之和即下一次sha256rng指令进行迭代压缩时需要使用的消息字之和。在一个示例中,右移指令表示为gfsrli gf10,gf10,32,其中,gfsrli是右移指令的操作码,gf10表示需要右移的寄存器,32表示需要右移的位数。
在一个示例中,在单次压缩循环中,先通过执行4个扩展指令组得到8个新生成的扩展消息字,且将该8个新生成的扩展消息字与对应的固定消息字相加,得到8个消息字之和,然后执行8个压缩指令组,对SHA256变量进行8轮迭代压缩。该示例的压缩指令组第一变量寄存器与第二变量寄存器不同,8个压缩指令组可表示如下:
sha256rng gf34,gf33,gf10
gfsrli gf10,gf10,32
sha256rng gf33,gf34,gf10
gfsrli gf10,gf10,32
sha256rng gf34,gf33,gf10
gfsrli gf10,gf10,32
sha256rng gf33,gf34,gf10
gfsrli gf10,gf10,32
其中的sha256rng和gfsrli已在上文描述,这里不再赘述。第一变量寄存器的编号和第二变量寄存的编号一个为gf33,另一个为gf34,在相邻的压缩指令组中,第一变量寄存器的编号和第二变量寄存的编号互换。
在另一示例中,压缩指令组第一变量寄存器与第二变量寄存器相同,此时8个压缩指令组可表示如下:
sha256rng gf33,gf33,gf10
gfsrli gf10,gf10,32
sha256rng gf33,gf33,gf10
gfsrli gf10,gf10,32
sha256rng gf33,gf33,gf10
gfsrli gf10,gf10,32
sha256rng gf33,gf33,gf10
gfsrli gf10,gf10,32
其中的第一变量寄存器的编号和第二变量寄存的编号均为gf33。
本公开上述实施例与使用128位寄存器和二种消息字扩展指令进行消息字扩展的前述实施方案相比,更为充分地利用了带有大位宽寄存器的处理器的优势,使得操作数的位宽更加与算法本身的特性贴切,从而使得完成sha256的算法需要的指令数更少,处理器的利用率更高。
前述实施方案中,每执行一个迭代压缩指令指示的轮操作可以完成2轮迭代压缩,但内部并不是直接由硬件一次实现,需要先译码为微指令,指令操作的实际时间大于一个指令的运行时间。本公开上述实施例的每轮迭代压缩都执行一次RND指令(即sha256rng指令),该指令执行设备为采用RISC架构的处理器,执行SHA256计算使用的指令均为精简指令集中的指令,可以直接由硬件实现,无需译码为微指令、微代友,因此指令的实际时间消耗比前述实施方案少。另,在本公开另一实施例中,在得到多个扩展的消息字之后,也可以按照前述实施方案的方式,通过一个迭代压缩指令来实现2轮或更多轮的迭代压缩,本公开对此并不局限。
本公开上述实施例基于至少256位的寄存器完成SHA-256的算法,同时设计了适配256位寄存器的sha256msg(也可表示为SHA356MSG)指令、sha256rng(也可表示为SHA256RNG)指令和vadd32指令来完成相关运算,可以减少运算时间,提高处理器的利用率。
本公开一实施例还提供了一种可用于安全散列算法SHA256的数据处理系统,如图6所示,包括:
总线51;
本公开任一实施例所述的指令执行设备53,耦合至所述总线;及
动态随机存取存储器DRAM55,耦合至总线51。
本公开实施例还提供了一种芯片,包括处理器,其中,所述处理器能够作为本公开任一实施例所述的指令执行设备执行安全散列算法SHA256。该芯片可以集成存储器控制器单元及所述处理器,构成一个片上系统。
本公开一实施例还提供了一种可用于安全散列算法SHA256的指令执行方法,如图7所示,包括:
步骤110,指令解码器接收SHA256计算的指令并解码,所述指令包括消息字扩展指令,所述消息字扩展指令包括3个字段,用于分别指示存储有第一源操作数的第一源寄存器、存储有第二源操作数的第二源寄存器,及用于存储目标操作数的目标寄存器;
步骤120,执行单元响应所述消息字扩展指令的解码结果,基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行消息字扩展操作,得到包括新生成消息字的目标操作数并存储在目标寄存器中;
其中,第一源寄存器、第二源寄存器和目标寄存器均为至少256位的寄存器;
所述第一源操作数包括8个32位的已生成消息字Wj-9,Wj-10,…,Wj-16;
所述第二源操作数包括8个32位的已生成消息字Wj-1,Wj-2,…,Wj-8;
所述目标操作数包括N个32位的新生成消息字和(8-N)个32位的已生成消息字Wj-1,Wj-2,…,Wj+N-8,j=16,17,…,63;N=1或2,N=1的情况下,新生成消息字为Wj,N=2的情况下,新生成消息字为Wj+1,Wj。
本公开一示例性的实施例中,所述基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行消息字扩展操作,得到包括新生成消息字的目标操作数并存储在目标寄存器中,包括:
在N=1的情况下,基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行以下扩展运算,得到新生成消息字Wj并存储在dst[255:224]:
Wj=σ1(Wj-2)+Wi-7+σ0(Wj-15)+Wj-16;
将所述第二源操作数中的已生成消息字Wj-1,Wj-2,…,Wj-7分别存储到dst[223:192],dst[192:160],dst[159:128],dst[127:96],dst[95:64],dst[63:32]和dst[31:00];
或者包括:
在N=2的情况下,基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行以下扩展运算,得到新生成消息字Wj+1并存储在dst[255:224]:
Wj+1=σ1(Wj-1)+Wi-6+σ0(Wj-14)+Wj-15;
基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行以下扩展运算,得到新生成消息字Wj并存储在dst[223:192]:
Wj=σ1(Wj-2)+Wi-7+σ0(Wj-15)+Wj-16;
将所述第二源操作数中的已生成消息字Wj-1,Wj-2,…,Wj-6分别存储到dst[192:160],dst[159:128],dst[127:96],dst[95:64],dst[63:32]和dst[31:00];
其中,dst[n:m]表示用于存储目标操作数的目标寄存器的第n位至第m位,第二源寄存器与目标寄存器相同或不同,第一源寄存器与第二源寄存器、目标寄存器均不同。
本公开一示例性的实施例中,所述指令解码器在解码所述消息字扩展指令后,继续解码接收到的以下256位计算指令:
左移指令,用于指示将第二源寄存器中的数据左移k位,右边补0;在N=1的情况下,k=224;在N=2的情况下,k=192
右移指令,用于指示将第一源寄存器中的数据右移256-k位,左边补0;
合并指令,用于指示对左移后的第二源寄存器的数据和右移后的第一源寄存器中的数据进行“或”操作,结果存储在第一源寄存器中;
所述执行单元在得到包括新生成消息字的目标操作数并存储在目标寄存器后,还响应所述左移指令、右移指令和合并指令的解码结果以执行第一源操作数更新操作,将第一源寄存器中的第一源操作数更新为Wj+N-9,Wj+N-10,…,Wj+N-16;
其中,所述消息字扩展指令、左移指令、右移指令和合并指令构成包括一个扩展指令组,所述SHA256计算的指令为精简指令集的指令。
本公开一示例性的实施例中,所述指令解码器是解码连续接收的p个扩展指令组,同一扩展指令组中的第一源寄存器、第二源寄存器和目标寄存器互不相同,且相邻两个扩展指令组中,前一个扩展指令组中的第二源寄存器在后一个扩展指令组中作为目标寄存器,前一个扩展指令组中的目标寄存器在后一个扩展指令组中作为第二源寄存器,前一个扩展指令组和后一个扩展指令组中的第一源寄存器相同;
所述执行单元响应所述p个扩展指令组的解码结果,执行消息字扩展操作和第一源操作数更新操作,得到包括q个新生成消息字Wj+q-1,Wj+q-2,…,Wj的目标操作数并存储在目标寄存器中;
其中,在N=1的情况下,2≤p≤8,q=p;在N=2的情况下,2≤p≤4,q=2p。
本公开一示例性的实施例中,所述指令解码器在解码连续接收的p个所述扩展指令组后,继续解码接收到的一加法指令,所述加法指令包括的3个字段用于分别指示存储有Wj+q-1,Wj+q-2,…,Wj的目标寄存器,存储有q个32位固定常数Kj+q-1,Kj+q-2,…,Kj的常数寄存器,及用于存储q个相加结果Wj+q-1+Kj+q-1,Wj+q-2+Kj+q-2,…,Wj+Kj的结果寄存器;
所述执行单元还响应所述加法指令的解码结果,基于目标寄存器存储的Wj+q-1,Wj+q-2,…,Wj和常数寄存器存储的Kj+q-1,Kj+q-2,…,Kj执行加法操作,得到相加结果Wj+q-1+Kj+q-1,Wj+q-2+Kj+q-2,…,Wj+Kj并存储在结果寄存器中;
其中,所述常数寄存器和结果寄存器均为256位寄存器。
本公开一示例性的实施例中,所述指令解码器在解码接收的所述加法指令后,继续解码连续接收到的q个压缩指令组,前q-1个压缩指令组均包括一迭代压缩指令和一右移指令,第q个压缩指令组包括一迭代压缩指令,其中:所述迭代压缩指令包括3个字段,分别用于指示存储有Wj+q-1+Kj+q-1,Wj+q-2+Kj+q-2,…,Wj+Kj的结果寄存器,存储有8个待迭代变量的第一变量寄存器,及用于存储对8个待迭代变量进行一次SHA256迭代压缩的结果的第二变量寄存器,所述右移指令用于指示将结果寄存器中的数据右移32位;
所述执行单元还响应所述q个压缩指令组的解码结果,执行对变量的迭代压缩和对结果寄存器中数据的右移操作,得到经q次迭代压缩后的8个变量;
本实施例中,相邻两个压缩指令组中,前一个压缩指令组中的第一变量寄存器在后一个压缩指令组中作为第二变量寄存器,前一个压缩指令组中的第二变量寄存器在后一个压缩指令组中作为第一变量寄存器,相邻两个压缩指令组中的结果寄存器相同。在其他实施例中,多个压缩指令组中的第一变量寄存器和第二变量寄存器相同,不需改变
在以上一个或多个示例性实施例中,所描述的功能可以硬件、软件、固件或其任一组合来实施。如果以软件实施,那么功能可作为一个或多个指令或代码存储在计算机可读介质上或经由计算机可读介质传输,且由基于硬件的处理单元执行。计算机可读介质可包含对应于例如数据存储介质等有形介质的计算机可读存储介质,或包含促进计算机程序例如根据通信协议从一处传送到另一处的任何介质的通信介质。以此方式,计算机可读介质通常可对应于非暂时性的有形计算机可读存储介质或例如信号或载波等通信介质。数据存储介质可为可由一个或多个计算机或者一个或多个处理器存取以检索用于实施本公开中描述的技术的指令、代码和/或数据结构的任何可用介质。计算机程序产品可包含计算机可读介质。
在一些方面中,本文描述的功能性可提供于经配置以用于编码和解码的专用硬件和/或软件模块内,或并入在组合式编解码器中。并且,可将所述技术完全实施于一个或多个电路或逻辑元件中。
本公开实施例的技术方案可在广泛多种装置或设备中实施,包含无线手机、集成电路(IC)或一组IC(例如,芯片组)。本公开实施例中描各种组件、模块或单元以强调经配置以执行所描述的技术的装置的功能方面,但不一定需要通过不同硬件单元来实现。而是,如上所述,各种单元可在编解码器硬件单元中组合或由互操作硬件单元(包含如上所述的一个或多个处理器)的集合结合合适软件和/或固件来提供。
Claims (16)
1.一种可用于安全散列算法SHA256的指令执行设备,其特征在于,包括:
多个至少256位的寄存器;
指令解码器,被设置为接收SHA256计算的指令并解码,所述指令包括消息字扩展指令,所述消息字扩展指令包括3个字段,用于分别指示存储有第一源操作数的第一源寄存器、存储有第二源操作数的第二源寄存器,及用于存储目标操作数的目标寄存器;
执行单元,耦合到所述指令解码器,被设置为响应所述消息字扩展指令的解码结果,基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行消息字扩展操作,得到包括新生成消息字的目标操作数并存储在目标寄存器中;
其中,第一源寄存器、第二源寄存器和目标寄存器均为至少256位的寄存器;
所述第一源操作数包括8个32位的已生成消息字Wj-9,Wj-10,…,Wj-16;
所述第二源操作数包括8个32位的已生成消息字Wj-1,Wj-2,…,Wj-8;
所述目标操作数包括N个32位的新生成消息字和(8-N)个32位的已生成消息字Wj-1,Wj-2,…,Wj+N-8,j=16,17,…,63;N=1或2,N=1的情况下,新生成消息字为Wj,N=2的情况下,新生成消息字为Wj+1,Wj。
2.如权利要求1所述的指令执行设备,其特征在于:
在N=1的情况下,所述基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行消息字扩展操作,得到包括新生成消息字的目标操作数并存储在目标寄存器中,包括:
基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行以下扩展运算,得到新生成消息字Wj并存储在dst[255:224]:
Wj=σ1(Wj-2)+Wi-7+σ0(Wj-15)+Wj-16;
将所述第二源操作数中的已生成消息字Wj-1,Wj-2,…,Wj-7分别存储到dst[223:192],dst[192:160],dst[159:128],dst[127:96],dst[95:64],dst[63:32]和dst[31:00];
其中,dst[n:m]表示用于存储目标操作数的目标寄存器的第n位至第m位,第二源寄存器与目标寄存器相同或不同,第一源寄存器与第二源寄存器、目标寄存器均不同。
3.如权利要求1所述的指令执行设备,其特征在于:
在N=2的情况下,所述基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行消息字扩展操作,得到包括新生成消息字的目标操作数并存储在目标寄存器中,包括:
基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行以下扩展运算,得到新生成消息字Wj+1并存储在dst[255:224]:
Wj+1=σ1(Wj-1)+Wi-6+σ0(Wj-14)+Wj-15;
基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行以下扩展运算,得到新生成消息字Wj并存储在dst[223:192]:
Wj=σ1(Wj-2)+Wi-7+σ0(Wj-15)+Wj-16;
将所述第二源操作数中的已生成消息字Wj-1,Wj-2,…,Wj-6分别存储到dst[192:160],dst[159:128],dst[127:96],dst[95:64],dst[63:32]和dst[31:0];
其中,dst[n:m]表示用于存储目标操作数的目标寄存器的第n位至第m位,第二源寄存器与目标寄存器相同或不同,第一源寄存器与第二源寄存器、目标寄存器均不同。
4.如权利要求1所述的指令执行设备,其特征在于:
所述指令解码器还被设置为在解码所述消息字扩展指令后,继续解码接收到的以下SHA256计算的指令:
左移指令,用于指示将第二源寄存器中的数据左移k位,右边补0;在N=1的情况下,k=224;在N=2的情况下,k=192;
右移指令,用于指示将第一源寄存器中的数据右移256-k位,左边补0;
合并指令,用于指示对左移后的第二源寄存器的数据和右移后的第一源寄存器中的数据进行“或”操作,结果存储在第一源寄存器中;
所述执行单元还被设置为在得到包括新生成消息字的目标操作数并存储在目标寄存器后,响应所述左移指令、右移指令和合并指令的解码结果以执行第一源操作数更新操作,将第一源寄存器中的第一源操作数更新为Wj+N-9,Wj+N-10,…,Wj+N-16;
其中,所述消息字扩展指令、左移指令、右移指令和合并指令构成一个扩展指令组;所述SHA256计算的指令为精简指令集的指令。
5.如权利要求4所述的指令执行设备,其特征在于:
所述指令解码器被设置为解码连续接收的p个所述扩展指令组,同一扩展指令组中的第一源寄存器、第二源寄存器和目标寄存器互不相同,且相邻两个扩展指令组中,前一个扩展指令组中的第二源寄存器在后一个扩展指令组中作为目标寄存器,前一个扩展指令组中的目标寄存器在后一个扩展指令组中作为第二源寄存器,前一个扩展指令组和后一个扩展指令组中的第一源寄存器相同;
所述执行单元被设置为响应所述p个扩展指令组的解码结果,执行消息字扩展操作和第一源操作数更新操作,得到包括q个新生成消息字Wj+q-1,Wj+q-2,…,Wj的目标操作数并存储在目标寄存器中;
其中,在N=1的情况下,2≤p≤8,q=p;在N=2的情况下,2≤p≤4,q=2p。
6.如权利要求5所述的指令执行设备,其特征在于:
所述指令解码器还被设置在解码连续接收的p个所述扩展指令组后,继续解码接收到的一加法指令,所述加法指令包括的3个字段用于分别指示存储有Wj+q-1,Wj+q-2,…,Wj的目标寄存器,存储有q个32位常数Kj+q-1,Kj+q-2,…,Kj的常数寄存器,及用于存储q个相加结果Wj+q-1+Kj+q-1,Wj+q-2+Kj+q-2,…,Wj+Kj的结果寄存器;
所述执行单元还被设置为响应所述加法指令的解码结果,基于目标寄存器存储的Wj+q-1,Wj+q-2,…,Wj和常数寄存器存储的Kj+q-1,Kj+q-2,…,Kj执行加法操作,得到相加结果Wj+q-1+Kj+q-1,Wj+q-2+Kj+q-2,…,Wj+Kj并存储在结果寄存器中;
其中,所述常数寄存器和结果寄存器均为至少256位的寄存器。
7.如权利要求6所述的指令执行设备,其特征在于:
所述指令解码器还被设置在解码接收的所述加法指令后,继续解码连续接收到的q个压缩指令组,前q-1个压缩指令组均包括一迭代压缩指令和一右移指令,第q个压缩指令组包括一迭代压缩指令,其中:所述迭代压缩指令包括3个字段,分别用于指示存储有Wj+q-1+Kj+q-1,Wj+q-2+Kj+q-2,…,Wj+Kj的结果寄存器,存储有8个待迭代变量的第一变量寄存器,及用于存储对8个待迭代变量进行一次SHA256迭代压缩的结果的第二变量寄存器,所述右移指令用于指示将结果寄存器中的数据右移32位;
所述执行单元还被设置为响应所述q个压缩指令组的解码结果,执行对变量的迭代压缩和对结果寄存器中数据的右移操作,得到经q次迭代压缩后的8个变量;
其中,相邻两个压缩指令组中,前一个压缩指令组中的第一变量寄存器在后一个压缩指令组中作为第二变量寄存器,前一个压缩指令组中的第二变量寄存器在后一个压缩指令组中作为第一变量寄存器,相邻两个压缩指令组中的结果寄存器相同。
8.一种可用于安全散列算法SHA256的数据处理系统,其特征在于,包括:
总线;
如权利要求1至7中任一所述的指令执行设备,耦合至所述总线;及
动态随机存取存储器DRAM,耦合至所述总线。
9.一种芯片,包括处理器,其特征在于,所述处理器能够作为如权利要求1至7中任一所述的指令执行设备执行安全散列算法SHA256。
10.一种可用于安全散列算法SHA256的指令执行方法,包括:
指令解码器接收SHA256计算的指令并解码,所述指令包括消息字扩展指令,所述消息字扩展指令包括3个字段,用于分别指示存储有第一源操作数的第一源寄存器、存储有第二源操作数的第二源寄存器,及用于存储目标操作数的目标寄存器;
执行单元响应所述消息字扩展指令的解码结果,基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行消息字扩展操作,得到包括新生成消息字的目标操作数并存储在目标寄存器中;
其中,第一源寄存器、第二源寄存器和目标寄存器均为至少256位的寄存器;
所述第一源操作数包括8个32位的已生成消息字Wj-9,Wj-10,…,Wj-16;
所述第二源操作数包括8个32位的已生成消息字Wj-1,Wj-2,…,Wj-8;
所述目标操作数包括N个32位的新生成消息字和(8-N)个32位的已生成消息字Wj-1,Wj-2,…,Wj+N-8,j=16,17,…,63,N=1或2,N=1的情况下,新生成消息字为Wj,N=2的情况下,新生成消息字为Wj+1,Wj。
11.如权利要求10所述的指令执行方法,其特征在于:
所述基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行消息字扩展操作,得到包括新生成消息字的目标操作数并存储在目标寄存器中,包括:
在N=1的情况下,基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行以下扩展运算,得到新生成消息字Wj并存储在dst[255:224]:
Wj=σ1(Wj-2)+Wi-7+σ0(Wj-15)+Wj-16;
将所述第二源操作数中的已生成消息字Wj-1,Wj-2,…,Wj-7分别存储到dst[223:192],dst[192:160],dst[159:128],dst[127:96],dst[95:64],dst[63:32]和dst[31:00];
或者包括:
在N=2的情况下,基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行以下扩展运算,得到新生成消息字Wj+1并存储在dst[255:224]:
Wj+1=σ1(Wj-1)+Wi-6+σ0(Wj-14)+Wj-15;
基于第一源寄存器存储的所述第一源操作数和第二源寄存器存储的所述第二源操作数执行以下扩展运算,得到新生成消息字Wj并存储在dst[223:192]:
Wj=σ1(Wj-2)+Wi-7+σ0(Wj-15)+Wj-16;
将所述第二源操作数中的已生成消息字Wj-1,Wj-2,…,Wj-6分别存储到dst[192:160],dst[159:128],dst[127:96],dst[95:64],dst[63:32]和dst[31:00];
其中,dst[n:m]表示用于存储目标操作数的目标寄存器的第n位至第m位,第二源寄存器与目标寄存器相同或不同,第一源寄存器与第二源寄存器、目标寄存器均不同。
12.如权利要求11所述的指令执行方法,其特征在于:
所述指令解码器在解码所述消息字扩展指令后,继续解码接收到的以下SHA256计算的指令:
左移指令,用于指示将第二源寄存器中的数据左移k位,右边补0;在N=1的情况下,k=224;在N=2的情况下,k=192;
右移指令,用于指示将第一源寄存器中的数据右移256-k位,左边补0;
合并指令,用于指示对左移后的第二源寄存器的数据和右移后的第一源寄存器中的数据进行“或”操作,结果存储在第一源寄存器中;
所述执行单元在得到包括新生成消息字的目标操作数并存储在目标寄存器后,还响应所述左移指令、右移指令和合并指令的解码结果以执行第一源操作数更新操作,将第一源寄存器中的第一源操作数更新为Wj+N-9,Wj+N-10,…,Wj+N-16;
其中,所述消息字扩展指令、左移指令、右移指令和合并指令构成一个扩展指令组;所述SHA256计算的指令为精简指令集的指令。
13.如权利要求12所述的指令执行方法,其特征在于:
所述指令解码器是解码连续接收的p个所述扩展指令组,同一扩展指令组中的第一源寄存器、第二源寄存器和目标寄存器互不相同,且相邻两个扩展指令组中,前一个扩展指令组中的第二源寄存器在后一个扩展指令组中作为目标寄存器,前一个扩展指令组中的目标寄存器在后一个扩展指令组中作为第二源寄存器,前一个扩展指令组和后一个扩展指令组中的第一源寄存器相同;
所述执行单元响应所述p个扩展指令组的解码结果,执行消息字扩展操作和第一源操作数更新操作,得到包括q个新生成消息字Wj+q-1,Wj+q-2,…,Wj的目标操作数并存储在目标寄存器中;
其中,在N=1的情况下,2≤p≤8,q=p;在N=2的情况下,2≤p≤4,q=2p。
14.如权利要求13所述的指令执行方法,其特征在于:
所述指令解码器在解码连续接收的p个所述扩展指令组后,继续解码接收到的一加法指令,所述加法指令包括的3个字段用于分别指示存储有Wj+q-1,Wj+q-2,…,Wj的目标寄存器,存储有q个32位固定常数Kj+q-1,Kj+q-2,…,Kj的常数寄存器,及用于存储q个相加结果Wj+q-1+Kj+q-1,Wj+q-2+Kj+q-2,…,Wj+Kj的结果寄存器;
所述执行单元还响应所述加法指令的解码结果,基于所述目标寄存器存储的Wj+q-1,Wj+q-2,…,Wj和所述常数寄存器存储的Kj+q-1,Kj+q-2,…,Kj执行加法操作,得到相加结果Wj+q-1+Kj+q-1,Wj+q-2+Kj+q-2,…,Wj+Kj并存储在结果寄存器中;
其中所述常数寄存器和结果寄存器均为至少256位的寄存器。
15.如权利要求14所述的指令执行方法,其特征在于:
所述指令解码器在解码接收的所述加法指令后,继续解码连续接收到的q个压缩指令组,前q-1个压缩指令组均包括一迭代压缩指令和一右移指令,第q个压缩指令组包括一迭代压缩指令,其中:所述迭代压缩指令包括3个字段,分别用于指示存储有Wj+q-1+Kj+q-1,Wj+q-2+Kj+q-2,…,Wj+Kj的结果寄存器,存储有8个待迭代变量的第一变量寄存器,及用于存储对8个待迭代变量进行一次SHA256迭代压缩的结果的第二变量寄存器,所述右移指令用于指示将结果寄存器中的数据右移32位;
所述执行单元还响应所述q个压缩指令组的解码结果,执行对变量的迭代压缩和对结果寄存器中数据的右移操作,得到经q次迭代压缩后的8个变量;
其中,相邻两个压缩指令组中,前一个压缩指令组中的第一变量寄存器在后一个压缩指令组中作为第二变量寄存器,前一个压缩指令组中的第二变量寄存器在后一个压缩指令组中作为第一变量寄存器,相邻两个压缩指令组中的结果寄存器相同。
16.一种非瞬态计算机可读存储介质,所述计算机可读存储介质存储有计算机指令,其特征在于,所述计算机指令被机器执行时,使得所述机器执行如权利要求10至15中任一所述的指令执行方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311044756.1A CN117032801A (zh) | 2023-08-17 | 2023-08-17 | 可用于sha256的指令执行方法、设备、数据处理系统及芯片 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311044756.1A CN117032801A (zh) | 2023-08-17 | 2023-08-17 | 可用于sha256的指令执行方法、设备、数据处理系统及芯片 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117032801A true CN117032801A (zh) | 2023-11-10 |
Family
ID=88638877
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311044756.1A Pending CN117032801A (zh) | 2023-08-17 | 2023-08-17 | 可用于sha256的指令执行方法、设备、数据处理系统及芯片 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117032801A (zh) |
-
2023
- 2023-08-17 CN CN202311044756.1A patent/CN117032801A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US11669330B2 (en) | Method for performing random read access to a block of data using parallel LUT read instruction in vector processors | |
TWI597620B (zh) | 提供通用gf(256)simd密碼算術功能的指令與邏輯 | |
TWI804200B (zh) | 執行複數的熔合乘-加指令的系統與方法 | |
JP6449349B2 (ja) | 複数の128ビットデータパスにおけるsha1ラウンド処理のための命令セット | |
US6952478B2 (en) | Method and system for performing permutations using permutation instructions based on modified omega and flip stages | |
CN110045987B (zh) | 用于sha256算法的消息调度的指令处理器 | |
CN108959123B (zh) | 用于处理sha-2安全散列算法的方法和设备 | |
US8280040B2 (en) | Processor instructions for improved AES encryption and decryption | |
TWI512531B (zh) | 用以處理blake安全雜湊演算法的方法、設備、系統及製品 | |
US20090310775A1 (en) | Using a single instruction multiple data (SIMD) instruction to speed up galois counter mode (GCM) computations | |
TWI489382B (zh) | 改良的萃取指令背景之設備及方法 | |
US8200948B2 (en) | Apparatus and method for performing re-arrangement operations on data | |
CN104012032B (zh) | 处理sha‑1安全散列算法的方法和设备 | |
CN113791820B (zh) | 位矩阵乘法 | |
US20190386815A1 (en) | Unified aes-sms4-camellia symmetric key block cipher acceleration | |
KR101753467B1 (ko) | 범용 gf(256) simd 암호용 산술 기능성을 제공하는 명령어 및 로직 | |
CN105204820B (zh) | 用于提供通用gf(256)simd加密算术功能的指令和逻辑 | |
WO2014004050A2 (en) | Systems, apparatuses, and methods for performing a shuffle and operation (shuffle-op) | |
CN114510272A (zh) | 用于散列指令的装置、方法和系统 | |
EP0932273B1 (en) | Executing permutations | |
CN117032801A (zh) | 可用于sha256的指令执行方法、设备、数据处理系统及芯片 | |
El-Hadedy et al. | Reco-Pi: a reconfigurable cryptoprocessor for π-cipher | |
Tillich | Instruction Set extensions for support of Cryptography on Embedded Systems | |
Chen | A New 8-Bit AES Design for Wireless Network Applications | |
Matusiewicz et al. | Grøstl Implementation Guide |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |