CN112367158A - 一种加速sm3算法的方法、处理器、芯片及电子设备 - Google Patents

一种加速sm3算法的方法、处理器、芯片及电子设备 Download PDF

Info

Publication number
CN112367158A
CN112367158A CN202011228846.2A CN202011228846A CN112367158A CN 112367158 A CN112367158 A CN 112367158A CN 202011228846 A CN202011228846 A CN 202011228846A CN 112367158 A CN112367158 A CN 112367158A
Authority
CN
China
Prior art keywords
message
word
operand
state
words
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.)
Granted
Application number
CN202011228846.2A
Other languages
English (en)
Other versions
CN112367158B (zh
Inventor
姚涛
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.)
Haiguang Information Technology Co Ltd
Original Assignee
Haiguang Information Technology Co Ltd
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 Haiguang Information Technology Co Ltd filed Critical Haiguang Information Technology Co Ltd
Priority to CN202011228846.2A priority Critical patent/CN112367158B/zh
Publication of CN112367158A publication Critical patent/CN112367158A/zh
Application granted granted Critical
Publication of CN112367158B publication Critical patent/CN112367158B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/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

Abstract

本申请实施例提供一种加速SM3算法的方法、处理器、芯片及电子设备,其中方法包括:获取分组消息;基于分组消息划分初始的多个消息字,其中,初始的多个消息字按照消息字的顺序平均划分到多个消息字操作数;在已得到k个消息字操作数的情况下,基于第k‑3个至第k‑1个消息字操作数,计算第k‑3个中间消息字操作数;其中,k≥4,1个消息字操作数包括按序排列的多个消息字,1个中间消息字操作数包括按序排列的多个中间消息字;基于所述第k‑3个中间消息字操作数以及第k个消息字操作数,计算第k+1个消息字操作数。本申请实施例可提高SM3算法的计算速度,进一步的,本申请实施例还可减少硬件实现的复杂度和代价。

Description

一种加速SM3算法的方法、处理器、芯片及电子设备
技术领域
本申请实施例涉及密码学技术领域,具体涉及一种加速SM3算法的方法、处理器、芯片及电子设备。
背景技术
SM3算法是中国采用的一种密码散列函数标准,其本质上是一种密码杂凑算法,适用于商用密码应用中的数字签名和验证、消息认证码的生成与验证,以及随机数生成等,可满足多种密码应用的安全需求。
由于SM3算法具有特殊的操作,如果单纯使用软件模拟来实现SM3算法,将导致SM3算法的计算速度较低、性能欠佳,因此如何提供改进方案,以提高SM3算法的计算速度,成为了本领域技术人员亟需解决的问题。
发明内容
有鉴于此,本申请实施例提供一种加速SM3算法的方法、处理器、芯片及电子设备,以在硬件加速SM3算法的方式中,提高SM3算法的计算速度。
为实现上述目的,本申请实施例提供如下技术方案:
一种加速SM3算法的方法,包括:
获取分组消息;
基于分组消息划分初始的多个消息字,其中,初始的多个消息字按照消息字的顺序平均划分到多个消息字操作数;
在已得到k个消息字操作数的情况下,基于第k-3个至第k-1个消息字操作数,计算第k-3个中间消息字操作数;其中,k≥4,1个消息字操作数包括按序排列的多个消息字,1个中间消息字操作数包括按序排列的多个中间消息字;
基于所述第k-3个中间消息字操作数以及第k个消息字操作数,计算第k+1个消息字操作数。
本申请实施例还提供一种处理器,至少包括:消息扩展单元,所述消息扩展单元配置有可执行的第一消息扩展指令和第二消息扩展指令;
所述处理器通过处理器指令至少执行:获取分组消息,基于分组消息划分初始的多个消息字,其中,初始的多个消息字按照消息字的顺序平均划分到多个消息字操作数;
其中,所述第一消息扩展指令被配置为:在已得到k个消息字操作数的情况下,基于第k-3个至第k-1个消息字操作数,计算第k-3个中间消息字操作数,其中,k≥4,1个消息字操作数包括按序排列的多个消息字,1个中间消息字操作数包括按序排列的多个中间消息字;
所述第二消息扩展指令被配置为:基于所述第k-3个中间消息字操作数以及第k个消息字操作数,计算第k+1个消息字操作数。
本申请实施例还提供一种处理器,所述处理器配置有处理器指令集,所述处理器指令集用于执行如上述所述的加速SM3算法的方法。
本申请实施例还提供一种芯片,包括如上述任一项所述的处理器。
本申请实施例还提供一种电子设备,包括如上述所述的芯片。
本申请实施例提供的加速SM3算法的方法,可获取分组消息,并且分组消息划分为初始的多个消息字,初始的多个消息字按照消息字的顺序平均划分到多个消息字操作数;从而,在已得到k个消息字操作数的情况下,本申请实施例可基于第k-3个至第k-1个消息字操作数,计算第k-3个中间消息字操作数,其中,k≥4,1个消息字操作数包括按序排列的多个消息字,1个中间消息字操作数包括按序排列的多个中间消息字;进而,本申请实施例可基于所述第k-3个中间消息字操作数以及第k个消息字操作数,计算第k+1个消息字操作数,实现迭代的扩展出剩余的消息字。
由于本申请实施例是通过已得到的k个消息字操作数中的第k-3个至第k-1个消息字操作数,先计算第k-3个中间消息字操作数,由中间消息字操作数作为计算下一个消息字操作数的中间数据,且在消息字操作数中的消息字和中间消息字操作数中的中间消息字按序排列的情况下,本申请实施例可基于第k-3个中间消息字操作数中按序排列的多个中间消息字,结合第k个消息字操作数中按序排列的消息字操作数,来依序的计算第k+1个消息字操作数中的各消息字,使得扩展得到下一个消息字操作数的过程能够采用数据对齐的引用,避免了非对齐的访存操作或者不必要的数据重排操作,进而提高了SM3算法的计算速度。
进一步,本申请实施例可在扩展消息参数的过程中采用数据对齐的引用,提高SM3算法的计算速度;进一步,本申请实施例采用两条轮计算指令,配合实现单轮的轮计算操作,可使得硬件实现简单高效,减少了硬件实现的复杂度和代价;进一步,在本申请实施例中,消息扩展和轮计算的第一轮计算指令可以并行执行,然后再执行轮计算的第二轮计算指令,减少了执行时间,同时,消息参数可以通过数据旁路,传递给VSM3RNDB指令进行执行,提高了响应速度;进一步,本申请实施例中的第一消息扩展指令和第二消息扩展指令可通过共享硬件的逻辑设计来执行实现,能够以较小的硬件代价实现两条消息扩展指令的执行;进一步,本申请实施例针对第一轮计算指令,提出了流水线结构的计算逻辑,通过对复杂的第一轮计算指令计算进行流水化操作,提高了计算效率。
附图说明
为了更清楚地说明本申请实施例或现有技术中技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中附图仅仅是本申请的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为目前处理器指令集的构成示意图;
图2为本申请实施例提供的处理器指令集的构成示意图;
图3为本申请实施例提供的加速SM3算法的方法流程图;
图4为本申请实施例提供的第一消息扩展指令的数据流图;
图5为本申请实施例提供的第二消息扩展指令的数据流图;
图6为本申请实施例提供的加速SM3算法的另一方法流程图;
图7为本申请实施例提供的加速SM3算法的再一方法流程图;
图8为本申请实施例提供的第一轮计算指令的数据流图;
图9为本申请实施例提供的第二轮计算指令的数据流图;
图10为本申请实施例提供的处理器的逻辑单元结构图;
图11为本申请实施例提供的消息扩展单元实现消息字扩展的逻辑结构图;
图12为本申请实施例提供的轮计算单元的逻辑结构图;
图13为本申请实施例提供的消息扩展和第一轮计算指令并行执行的示例图。
具体实施方式
下面将结合本申请实施例中附图,对本申请实施例中技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分的实施例,而不是全部的实施例。基于本申请中实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
SM3算法作为中国采用的密码散列函数标准,可将输入长度为l(l<264)比特的消息,经过消息填充、迭代压缩等处理,输出长度为256比特的杂凑值,杂凑值可以理解为是杂凑算法作用于一条消息时输出的消息摘要(比特串);SM3算法可以分为消息填充、迭代压缩、输出杂凑值等过程,其中,迭代压缩涉及消息扩展和轮计算(压缩函数);为进一步了解SM3算法,下面对SM3算法的执行过程进行说明。
1.消息填充:假设消息m的长度为l比特,则首先将比特“1”添加到消息的末尾,再添加s个“0”,s是满足l+1+s≡448(mod 512)的最小的非负整数;然后再添加一个64位比特串,该比特串是长度l的二进制表示,则填充后的消息m’的比特长度为512的倍数;
示例的,长度l为24的消息m(01100001 01100010 01100011),经过填充后可得到m’:
Figure BDA0002764486910000041
2.迭代压缩:将填充后的消息m’按512比特进行分组:m’=B(0)B(1)…B(n-1),其中,n=(l+s+65)/512,为分组消息的个数;在分组后,对m’按下列方式迭代:
FOR i=0 To n-1
V(i+1)=CF(V(i),B(i))
ENDFOR
其中CF是压缩函数,V(0)为256比特初始值,用于确定压缩函数中字寄存器的初态;B(i)为第i个分组消息,迭代压缩结果为V(n)
上述的迭代压缩过程涉及消息扩展和轮计算(压缩函数),具体如下2.1和2.2所示。
2.1消息扩展:将分组消息B(i)扩展生成W0,W1,…W67共68个消息字,以及W0’,W1’…W63’共64个消息参数;标准的消息扩展过程可以如下所示:
第一步,将分组消息B(i)划分为初始的16个消息字W0,W1,…W15
第二步,
FOR j=16 TO 67
Figure BDA0002764486910000051
i∈j ENDFOR
第三步,
FOR j=0 TO 63
Figure BDA0002764486910000052
i∈j
ENDFOR
2.2轮计算(压缩函数):令A,B,C,D,E,F,G,H表示状态字(状态字对应字寄存器),SS1,SS2,TT1,TT2为中间变量,压缩函数V(i+1)=CF(V(i),B(i)),0≤i≤n-1;计算过程描述如下:
ABCDEFGH←V(i)
FOR j=0 TO 63
SS1←((A<<<12)+E+(Ti<<<(jmod32)))<<<7
Figure BDA0002764486910000053
TT1←FFi(A,B,C)+D+SS2+Wi
TT2←GGi(E,F,G)+H+SS1+Wi
D←C
C←B<<<9
B←A
A←TT1
H←G
G←F<<<19
F←E
E←P0(TT2)
ENDFOR
Figure BDA0002764486910000061
ABCDEFGH表示8个状态字的值的串连;
其中,消息字的存储为大端,大端(big-endian)为数据在内存中的一种表示格式,规定左边为高有效位,右边为低有效位,即数的高阶字节放在存储器的低地址,数的低阶字节放在存储器的高地址。
3.输出杂凑值:ABCDEFGH←V(n),输出256比特的杂凑值ABCDEFGH。
上述过程中,P1表示消息扩展中的置换函数,针对消息字X,Y,Z的消息字,P1(X)可以表示为:
Figure BDA0002764486910000062
P0表示轮计算中的置换函数,P0(X)可以表示为:
Figure BDA0002764486910000063
mod表示模运算;n表示分组消息个数;
Figure BDA0002764486910000064
表示32比特异或运算;<<<表示32比特循环左移比特运算;←表示左向赋值运算符;Tj为算法常量,随j的变化取不同的值;FFj和GGj表示布尔函数,随j的变化取不同的表达式;具体的:
Figure BDA0002764486910000065
Figure BDA0002764486910000066
Figure BDA0002764486910000067
∧表示32比特与运算,∨表示32比特或运算,
Figure BDA0002764486910000068
表示32比特非运算。
通过上述SM3算法的介绍可以看出,在消息m填充后,填充后的消息m’按512比特进行分组,分组消息可通过消息扩展和轮计算(压缩函数)实现迭代压缩,从而输出杂凑值;由于SM3算法的上述特殊操作,如果单纯使用软件模拟来实现SM3算法,将导致SM3算法的计算速度较低、性能欠佳,因此SM3算法可基于多条CPU指令和硬件来实现,从而以硬件方式加速SM3算法;
在硬件加速SM3算法的方式中,可基于处理器的指令集实现硬件加速SM3算法,以通过加速消息扩展和轮计算来实现SM3算法的加速为背景,目前处理器指令集的一种构成可如图1所示,图1所示的处理器指令集100中包括用于加速SM3算法的SM3算法加速指令102;SM3算法加速指令102中具体包括SM3两轮至少四个状态字更新指令104,SM3两轮四个剩余的状态字更新指令106,SM3四个消息扩展启动指令108和SM3四个消息扩展完成指令110;其中,SM3两轮四个剩余的状态字更新指令106,SM3四个消息扩展启动指令108和SM3四个消息扩展完成指令110可作为可选指令;
具体的,SM3两轮至少四个状态字更新指令104用于使得处理器对SM3算法的至少四个状态字进行两轮更新;
SM3两轮四个剩余的状态字更新指令106用于使得处理器对八个状态字中剩余的四个状态字进行更新;
SM3四个消息扩展启动指令108用于使得处理器启动和/或部分的地执行对四个消息字的扩展;
SM3四个消息扩展完成指令110用于使得处理器结束或完成对四个消息的扩展。
由图1所示的加速SM3算法的处理器指令集可以看出,处理器指令集主要由四条SM3加速指令构成,其中,两条用于轮计算(即SM3两轮至少四个状态字更新指令104,SM3两轮四个剩余的状态字更新指令106用于轮计算),两条用于消息扩展(即SM3四个消息扩展启动指令108和SM3四个消息扩展完成指令110用于消息扩展);
虽然基于图1所示的四条SM3加速指令,能够使得处理器基于处理器指令集,以硬件加速的方式加快SM3算法的计算速度,但是消息扩展过程采用了非对齐的数据格式,导致访存的效率偏低,限制了SM3算法的计算速度提升;进一步,上述方式采用一次执行两轮的哈希加密计算,导致硬件实现复杂度较高。
基于此,本申请实施例提供改进的加速SM3算法的方案,在硬件加速SM3算法的方式中,使得消息扩展采用数据对齐的引用,避免非对齐的访存操作或者不必要的数据重排操作,提高SM3算法的计算速度。进一步,本申请实施例通过采用单轮的哈希轮计算,提高了硬件上的简洁,减少了硬件实现的复杂度和代价;更进一步的,本申请实施例可根据SM3算法的内部依赖,解耦合消息扩展和轮计算,可以在消息扩展和轮计算之间建立数据旁路,实现消息扩展和轮计算执行上的部分重叠,进一步提高SM3算法的计算速度。
作为一种可选实现,图2示出了本申请实施例提供的用于加速SM3算法的处理器指令集的构成示意图,如图2所示,本申请实施例提供的处理器指令集10包括:第一消息扩展指令11(第一消息扩展指令可称为VSM3MSGA指令),第二消息扩展指令12(第二消息扩展指令可称为VSM3MSGB指令),第三消息扩展指令13(第三消息扩展指令可称为VSM3MSGCL指令),第四消息扩展指令14(第四消息扩展指令可称为VSM3MSGCH指令),第一轮计算指令15(第一轮计算指令可称为VSM3RNDA指令),第二轮计算指令16(第二轮计算指令可称为VSM3RNDB指令);其中,第三消息扩展指令13(VSM3MSGCL指令),第四消息扩展指令14(VSM3MSGCH指令)可作为可选指令。
在本申请实施例中,第一消息扩展指令11(VSM3MSGA指令)和第二消息扩展指令12(VSM3MSGB指令)可用于扩展得到消息字,第三消息扩展指令13(VSM3MSGCL指令)和第四消息扩展指令14(VSM3MSGCH指令)可用于扩展得到消息参数,第一轮计算指令15(VSM3RNDA指令)和第二轮计算指令16(VSM3RNDB指令)可用于实现轮计算,下面将分别进行说明。
在可选实现中,处理器可获取分组消息,例如,处理器可对输入的消息进行填充和分组,得到分组消息;具体过程例如:处理器判断输入的消息的长度是否为512比特的整数倍,若是,对输入的消息以512比特进行分组,得到分组消息,若否,将输入的消息填充至512比特的整数倍后,对填充后的消息以512比特进行分组,得到分组消息;
从而,处理器基于分组消息可划分初始的多个消息字,初始的多个消息字可按照消息字的顺序平均划分到多个消息字操作数中;例如,针对第i个分组消息B(i),可基于分组消息B(i)划分出初始的16个消息字W0,W1,…W15(划分得到初始的16个消息字W0,W1,…W15的方式,可参照现有技术等方式实现,此处不再展开说明),初始的16个消息字可按照消息字的顺序平均划分到4个消息字操作数,则1个消息字操作数包括4个消息字,如初始的16个消息字划分4个消息字操作数后,第1个消息字操作数为(W0,W1,W2,W3),第2个消息字操作数为(W4,W5,W6,W7),第3个消息字操作数为(W8,W9,W10,W11),第4个消息字操作数为(W12,W13,W14,W15);
以上述划分的消息字操作数为基础,处理器可通过配置第一消息扩展指令和第二消息扩展指令,迭代的进行消息扩展,扩展出剩余的消息字,如实现68个消息字W0,W1,…W67的扩展。
以已得到k个消息字操作数,k≥4,且1个消息字操作数包括已得到的多个消息字为例,在可选实现中,剩余消息字的扩展过程可如图3所示,可选的,图3示出了本申请实施例提供的加速SM3算法的方法流程,该方法流程可由处理器通过配置的第一消息扩展指令和第二消息扩展指令执行实现,如图3所示,该方法流程可以包括:
步骤S10、基于第k-3个至第k-1个消息字操作数,计算第k-3个中间消息字操作数,其中,1个消息字操作数包括按序排列的多个消息字,1个中间消息字操作数包括按序排列的多个中间消息字。
在已得到k个消息字操作数的情况下(k≥4),第k-3个至第k-1个消息字操作数属于已得到的消息字操作数;在一种示例中,1个消息字操作数可以具体包括按序排列的4个消息字,则第k个消息字操作数中的消息字可以具体包括:W4k-4,W4k-3,W4k-2,W4k-1;相应的,第k-1个消息字操作数中的消息字可以具体包括:W4(k-1)-4,W4(k-1)-3,W4(k-1)-2,W4(k-1)-1,后续下一扩展的第k+1个消息字操作数中的消息字可以具体包括:W4(k+1)-4,W4(k+1)-3,W4(k+1)-2,W4(k+1)-1,其他消息字操作数中的消息字可同理类推;
在具体示例中,以k为4(即已得到4个消息字操作数)且1个消息字操作数包括4个消息字为例,则第k个消息字操作数可以具体为:第4个消息字操作数(W12,W13,W14,W15);第k-3个至第k-1个消息字操作数具体为:第1个消息字操作数(W0,W1,W2,W3),第2个消息字操作数为(W4,W5,W6,W7),和第3个消息字操作数为(W8,W9,W10,W11);同理类推,以k为5(即已得到5个消息字操作数)且1个消息字操作数包括4个消息字为例,则第k-3个至第k-1个消息字操作数具体为:第2个消息字操作数(W4,W5,W6,W7),第3个消息字操作数为(W8,W9,W10,W11),和第4个消息字操作数为(W12,W13,W14,W15)。
在已得到k个消息字操作数的情况下,处理器可通过配置的第一消息扩展指令,基于k个消息字操作数中第k-3个至第k-1个消息字操作数,计算第k-3个中间消息字操作数;所计算的第k-3个中间消息字操作数,用于后续计算第k+1个消息字操作数。
在可选实现中,1个中间消息字操作数可以包括多个中间消息字,以1个中间消息字操作数包括按序排列的4个中间消息字为例,则第k-3个中间消息字操作数中的中间消息字可以具体为:WT4(k-3)-4,WT4(k-3)-3,WT4(k-3)-2,WT4(k-3)-1;其中,WT用于表示中间消息字,中间消息字可以认为是计算下一个消息字操作数的中间数据;
可选的,以1个消息字操作数包括按序排列的4个消息字为例,处理器通过配置的第一消息扩展指令(VSM3MSGA指令),可具体按照如下方式计算第k-3个中间消息字操作数;
Figure BDA0002764486910000101
Figure BDA0002764486910000102
Figure BDA0002764486910000111
Figure BDA0002764486910000112
示例的,以k为4为例,则计算的第k-3个中间消息字操作数为第1个中间消息字操作数,具体包括中间消息字:WT0,WT1,WT2,WT3;基于上述方式,结合图4所示第一消息扩展指令(VSM3MSGA指令)的数据流图,WT0,WT1,WT2,WT3的计算过程可以如下:
Figure BDA0002764486910000113
Figure BDA0002764486910000114
Figure BDA0002764486910000115
Figure BDA0002764486910000116
可选的,步骤S10可由处理器通过配置的第一消息扩展指令(VSM3MSGA指令)执行实现。
步骤S11、基于所述第k-3个中间消息字操作数以及第k个消息字操作数,计算第k+1个消息字操作数。
可选的,处理器通过第一消息扩展指令,计算第k-3个中间消息字操作数后,可通过第二消息扩展指令,基于所计算的第k-3个中间消息字操作数以及已得到的第k个消息字操作数,计算第k+1个消息字操作数。
在可选实现中,以1个消息字操作数包括按序排列的4个消息字为例,处理器通过配置的第二消息扩展指令(VSM3MSGB指令),可按照如下方式计算第k+1个消息字操作数:
Figure BDA0002764486910000117
Figure BDA0002764486910000118
Figure BDA0002764486910000119
Figure BDA00027644869100001110
示例的,以k为4为例,则计算的第k+1个消息字操作数为第5个消息字操作数,具体包括消息字:W16,W17,W18,W19;基于上述方式,结合图5所示第二消息扩展指令(VSM3MSGB指令)的数据流图,W16,W17,W18,W19的计算过程可以如下:
Figure BDA0002764486910000121
Figure BDA0002764486910000122
Figure BDA0002764486910000123
Figure BDA0002764486910000124
可选的,步骤S11可由处理器通过配置的第二消息扩展指令(VSM3MSGB指令)执行实现。
可选的,由于k≥4,在已得到k个消息字操作数的基础上,下一扩展的第k+1个消息字操作数(W4(k+1)-4,W4(k+1)-3,W4(k+1)-2,W4(k+1)-1)是从序号≥16的消息字进行扩展,即4(k+1)-4≥16,因此在得到初始的16个消息字W0…W15的基础上,处理器可通过循环的执行步骤S10和步骤S11,迭代的扩展出剩余的消息字;例如,在已得到4个(此时,k=4)消息字操作数的基础上,W0…W15已得到,因此下一扩展的第5个消息字操作数是从W16开始扩展,从而循环的执行步骤S10和步骤S11,可扩展得出剩余的消息字W16…W67
在一种示例中,以消息字共68个,且1个消息字操作数中包括4个消息字为例,在已得到k个消息字操作数的情况下(k≥4),基于步骤S10和步骤S11最终迭代扩展得到的消息字操作数的个数为17个,即第k个消息字操作数的下一个消息字操作数应不大于17,也就是说,5≤k+1≤17,即4≤k≤16。
可以理解的是,前文描述中涉及已得到的k个消息字操作数可以分为如下几种情形:k个消息字操作数仅是由初始的多个消息字形成,如仅由初始的消息字W0,W1,…W15,以4个消息字为一个消息字操作数依序形成;k个消息字操作数除由初始的多个消息字形成外,还涉及基于步骤S10和步骤S11扩展的消息字,如在划分得到初始的消息字W0,W1,…W15的基础上,进一步按序扩展出了W16…W63之中的消息字中,而剩余消息字W64…W67在下一步扩展得到。
本申请实施例提供的加速SM3算法的方法,可获取分组消息,并且分组消息划分为初始的多个消息字,初始的多个消息字按照消息字的顺序平均划分到多个消息字操作数;从而,在已得到k个消息字操作数的情况下,本申请实施例可基于第k-3个至第k-1个消息字操作数,计算第k-3个中间消息字操作数,其中,k≥4,1个消息字操作数包括按序排列的多个消息字,1个中间消息字操作数包括按序排列的多个中间消息字;进而,本申请实施例可基于所述第k-3个中间消息字操作数以及第k个消息字操作数,计算第k+1个消息字操作数,实现迭代的扩展出剩余的消息字。
由于本申请实施例是通过已得到的k个消息字操作数中的第k-3个至第k-1个消息字操作数,先计算第k-3个中间消息字操作数,由中间消息字操作数作为计算下一个消息字操作数的中间数据,且在消息字操作数中的消息字和中间消息字操作数中的中间消息字按序排列的情况下,本申请实施例可基于第k-3个中间消息字操作数中按序排列的多个中间消息字,结合第k个消息字操作数中按序排列的消息字操作数,来依序的计算第k+1个消息字操作数中的各消息字,使得扩展得到下一个消息字操作数的过程能够采用数据对齐的引用,避免了非对齐的访存操作或者不必要的数据重排操作,进而提高了SM3算法的计算速度。
通过前文介绍,本申请实施例可迭代的扩展出消息字,如迭代的扩展出消息字W0,W1,…W67。在进一步的可选实现中,由于消息扩展除涉及消息字外,还涉及消息参数(如W0’,W1’…W63’),为扩展消息参数,图6示出了本申请实施例提供的加速SM3算法的另一方法流程,该方法流程可由处理器通过配置的第三消息扩展指令和第四消息扩展指令执行实现,如图6所示,该方法流程可以包括:
步骤S20、从第1个消息字操作数开始,基于相邻两个消息字操作数中第一部分的消息字,依序计算各个消息参数操作数中第一部分的消息参数。
在步骤S20中,本申请实施例可从第1个消息字操作数开始,基于相邻两个消息字中第一部分的消息字,按序计算出各个消息参数操作数中第一部分的消息参数;可选的,以一个消息参数操作数同样包括4个消息参数为例,所计算的消息参数操作数的个数可以为16个。
在可选实现中,一个消息字操作数中的消息字可以分为第一部分的消息字和第二部分的消息字,第一部分的消息字可以是该消息字操作数中排序在前的消息字,第二部分的消息字可以是该消息字操作数中排序在后的消息字;示例的,以第1个消息字操作数(W0,W1,W2,W3)为例,排序在前的2个消息字W0和W1可以视为是,第1个消息字操作数中第一部分的消息字,排序在后的2个消息字W2和W3可以视为是,第1个消息字操作数中第二部分的消息字;
同理,一个消息参数操作数中的消息参数也可以分为第一部分的消息参数和第二部分的消息参数,第一部分的消息参数可以是该消息参数操作数中排序在前的消息参数,第二部分的消息参数可以是该消息参数操作数中排序在后的消息参数;示例的,以消息参数W0’,W1’…W63’按序以4个消息参数划分一个消息参数操作数为例,则第1个消息参数操作数(W0’,W1’,W2’,W3’)中排序在前的2个消息参数W0’和W1’可以视为是,第1个消息参数操作数中第一部分的消息参数,排序在后的2个消息参数W2’和W3’可以视为是,第1个消息参数操作数中第二部分的消息参数;
示例的,以一对相邻两个消息字操作数为(Wj,Wj+1,Wj+2,Wj+3)和(Wj+4,Wj+5,Wj+6,Wj+7)为例,则该相邻两个消息字操作数中第一部分的消息字为Wj,Wj+1,Wj+4,Wj+5,从而本申请实施例可基于该第一部分的消息字,计算与Wj所在的消息字操作数顺序相同的消息参数操作数中第一部分的消息参数,示例的,以与Wj所在的消息字操作数顺序相同的消息参数操作数具体为(Wj’,Wj+1’,Wj+2’,Wj+3’)为例,则本申请实施例可基于Wj,Wj+1,Wj+4,Wj+5计算Wj’,Wj+1’;在可选实现中,本申请实施例可具体按照如下方式计算Wj’,Wj+1’:
Figure BDA0002764486910000141
Figure BDA0002764486910000142
在进一步的示例中,以第1个消息字操作数(W0,W1,W2,W3)和第2个消息字操作数(W4,W5,W6,W7)中第一部分的消息字,计算第1个消息参数操作数(W0’,W1’,W2’,W3’)中第一部分的消息参数为例,则按照上述方式,具体过程可以为:
Figure BDA0002764486910000151
Figure BDA0002764486910000152
可选的,步骤S20可由处理器通过配置的第三消息扩展指令(VSM3MSGCL指令)执行实现。
步骤S21、从第1个消息字操作数开始,基于相邻两个消息字操作数中第二部分的消息字,依序计算各个消息参数操作数中第二部分的消息参数;其中,一个消息参数操作数中第一部分的消息参数和第二部分的消息参数,形成该消息参数操作数中的消息参数。
本申请实施例也可从第1个消息字操作数开始,基于相邻两个消息字操作数中第二部分的消息字,依序计算各个消息参数操作数中第二部分的消息参数;示例的,以相邻两个消息字操作数为(Wj,Wj+1,Wj+2,Wj+3)和(Wj+4,Wj+5,Wj+6,Wj+7)为例,该相邻两个消息字操作数中第二部分的消息字为Wj+2,Wj+3,Wj+6,Wj+7,从而本申请实施例可基于该第二部分的消息字,计算与Wj所在的消息字操作数顺序相同的消息参数操作数中第二部分的消息参数,示例的,以与Wj所在的消息字操作数顺序相同的消息参数操作数具体为(Wj’,Wj+1’,Wj+2’,Wj+3’)为例,则本申请实施例可基于Wj+2,Wj+3,Wj+6,Wj+7计算Wj+2’,Wj+3’;在可选实现中,本申请实施例可具体按照如下方式计算Wj+2’,Wj+3’:
Figure BDA0002764486910000153
Figure BDA0002764486910000154
在进一步的示例中,以第1个消息字操作数(W0,W1,W2,W3)和第2个消息字操作数(W4,W5,W6,W7)中第二部分的消息字,计算第1个消息参数操作数(W0’,W1’,W2’,W3’)中第二部分的消息参数为例,则按照上述方式,具体过程可以为:
Figure BDA0002764486910000155
Figure BDA0002764486910000161
可选的,步骤S21可由处理器通过配置的第四消息扩展指令(VSM3MSGCH指令)执行实现。
本申请实施例提供的加速SM3算法的方法,可在扩展出相邻两个消息字操作数的基础上,从第1个消息字操作数开始,基于相邻两个消息字操作数中第一部分的消息字,依序计算各个消息参数操作数中第一部分的消息参数;并且从第1个消息字操作数开始,基于相邻两个消息字操作数中第二部分的消息字,依序计算各个消息参数操作数中第二部分的消息参数;从而由一个消息参数操作数中第一部分的消息参数和第二部分的消息参数,形成该消息参数操作数中的消息参数,实现消息参数的扩展。
由于本申请实施例是基于相邻两个消息字操作数中第一部分的消息字,依序计算各个消息参数操作数中第一部分的消息参数,且是基于相邻两个消息字操作数中第二部分的消息字,依序计算各个消息参数操作数中第二部分的消息参数,即相邻两个消息字操作数中第一部分的消息字用于计算相应顺序的消息参数操作数中第一部分的消息参数,相邻两个消息字操作数中第二部分的消息字用于计算相应顺序的消息参数操作数中第二部分的消息参数,因此本申请实施例可在扩展消息参数的过程中采用数据对齐的引用,避免了非对齐的访存操作或者不必要的数据重排操作,提高了SM3算法的计算速度。
在基于图3和图6所示流程实现消息字和消息参数的扩展后,本申请实施例可完成SM3算法中迭代压缩的消息扩展过程,如基于图3所示流程扩展得到消息字W0,W1,…W67,和基于图6所示流程扩展得到消息参数W0’,W1’…W63’,完成消息扩展过程。
在可选实现中,本申请实施例可基于第一轮计算指令(VSM3RNDA指令)和第二轮计算指令(VSM3RNDB指令)实现轮计算;可选的,图7示出了本申请实施例提供的加速SM3算法的再一方法流程,该方法流程可由处理器通过配置的第一轮计算指令和第二轮计算指令执行实现,如图7所示,该方法流程可以包括:
步骤S30、根据第一个状态字操作数中状态字的当前状态,第二个状态字操作数中状态字的当前状态,以及轮计算的当前轮数,计算第一个状态字操作数中第一部分的状态字的下一状态,以及多个中间状态字;其中,第一个状态字操作数和第二个状态字操作数中分别包括多个状态字。
可选的,步骤S30可由处理器通过配置第一轮计算指令(VSM3RNDA指令)执行实现。
在一种示例中,本申请实施例可令A,B,C,D,E,F,G,H表示8个状态字,该8个状态字可形成两个状态字操作数,一个状态字操作数中可包括4个状态字,如第一个状态字操作数可以为(A,C,E,G),第二个状态字操作数可以为(B,D,F,H);在轮计算的多轮计算中,处理器需基于第一个状态字操作数和第二个状态字操作数中状态字的当前状态,计算第一个状态字操作数和第二个状态字操作数中状态字的下一状态,例如,设轮计算的当前轮数为j,i∈j,则第一个状态字操作数中状态字的当前状态为(Ai,Ci,Ei,Gi),第二个状态字操作数中状态字的当前状态为(Bi,Di,Fi,Hi),通过轮计算需要计算第一个状态字操作数中状态字的下一状态(Ai+1,Ci+1,Ei+1,Gi+1),第二个状态字操作数中状态字的下一状态(Bi+1,Di+1,Fi+1,Hi+1),直至达到轮计算的轮数。
在步骤S30中,本申请实施例可基于第一个状态字操作数中状态字的当前状态,第二个状态字操作数中状态字的当前状态,以及当前轮数,确定第一个状态字操作数中第一部分的状态字的下一状态,以及多个中间状态字;其中,多个中间状态字可用于计算第一个状态字操作数中第二部分的状态字的下一状态,第一个状态字操作数中第一部分的状态字的下一状态,和第二部分的状态字的下一状态,可形成第一个状态字操作数中状态字的下一状态;
示例的,令第一个状态字操作数(A,C,E,G)中第一部分的状态字为C,G,多个中间状态字为T1,T2,则基于第一个状态字操作数中状态字的当前状态(Ai,Ci,Ei,Gi),第二个状态字操作数中状态字的当前状态为(Bi,Di,Fi,Hi),轮计算的当前轮数j(当前轮数j可存于立即数imm8),本申请实施例可计算第一个状态字操作数中第一部分的状态字的下一状态Ci+1,Gi+1,以及多个中间状态字T1,T2;结合图8所示第一轮计算指令(VSM3RNDA指令)的数据流图,Ci+1,Gi+1,T1,T2的计算过程可以例如:
j=imm8;
SS1=((Ai<<12)+Ei+(Tj<<j))<<7;
Figure BDA0002764486910000181
T1=FFj(Ai,Bi,Ci)+Di+SS2;
T2=GGj(Ei,Fi,Gi)+Hi+SS1;
Ci+1=Bi<<9;
Gi+1=Fi<<19。
步骤S31、基于序号与当前轮数对应的消息字和消息参数,以及所述多个中间状态字,计算第一个状态字操作数中第二部分的状态字的下一状态;其中,第一个状态字操作数中第一部分的状态字的下一状态,和第二部分的状态字的下一状态,形成第一个状态字操作数中状态字的下一状态,第二个状态字操作数中状态字的下一状态由第一个状态字操作数中状态字的当前状态直接确定。
可选的,步骤S31可由处理器通过配置的第二轮计算指令(VSM3RNDB指令)执行实现。
在一种示例中,步骤S30计算第一个状态字操作数中第一部分的状态字C,G的下一状态Ci+1和Gi+1之后,第一个状态字操作数中还剩余第二部分的状态字A和E未计算出下一状态,本申请实施例可通过步骤S31计算第一个状态字操作数中第二部分的状态字A,E的下一状态Ai+1和Ei+1;具体的,本申请实施例可基于消息扩展得出的与当前轮数对应的消息字和消息参数,以及步骤S30确定的多个中间状态字,计算第一个状态字操作数中第二部分的状态字的下一状态Ai+1和Ei+1;若令与当前轮数j对应的消息字为Wj,与当前轮数j对应的消息参数为Wj’,结合图9所示第二轮计算指令(VSM3RNDB指令)的数据流图,计算第一个状态字操作数中第二部分的状态字的下一状态Ai+1和Ei+1的过程可以例如:
TT1=T1+Wj’;
TT2=T2+Wj
Ai+1=TT1;
Ei+1=P0(TT2)。
可选的,本申请实施例可由第一个状态字操作数中状态字的当前状态,直接确定第二个状态字操作数中状态字的下一状态,例如(Bi+1,Di+1,Fi+1,Hi+1)=(Ai,Ci,Ei,Gi)。
可以看出,本申请实施例在实现轮计算的过程中,基于第一轮计算指令和第二轮计算指令,是采用单轮的哈希轮计算来实现,因此提高了硬件上的简洁,减少了硬件实现的复杂度和代价。
本申请实施例采用第一消息扩展指令(VSM3MSGA指令)和第二消息扩展指令(VSM3MSGB),进行消息字的扩展,采用第三消息扩展指令(VSM3MSGCH)和第四消息扩展指令(VSM3MSGCL指令),生成轮计算所需的消息参数(在可选的替代实现中,消息参数扩展也可以使用一般处理器指令来进行),从而实现了SM3算法中迭代压缩的消息扩展过程;
进而,采用第一轮计算指令(VSM3RNDA指令)进行八个状态字中部分状态字的下一状态计算,以及中间状态计算;采用第二轮计算指令(VSM3RNDB指令),根据VSM3RNDA指令计算的中间状态,以及消息扩展得到的消息参数,产生第一个状态字操作数的状态字的下一状态(Ai+1,Ci+1,Ei+1,Gi+1),并且第二个状态字操作数的状态字的下一状态(Bi+1,Di+1,Fi+1,Hi+1)由第一个状态字操作数的状态字的当前状态(Ai,Ci,Ei,Gi)直接获得,从而实现了轮计算过程中状态字的下一状态的确定,实现了SM3算法中迭代压缩的轮计算过程。
本申请实施例在消息扩展过程中,使消息扩展采用数据对齐的引用,避免了非对齐的访存操作或者不必要的数据重排操作,提高SM3算法的计算速度;进一步,轮计算基于第一轮计算指令和第二轮计算指令,采用单轮的哈希轮计算,提高了硬件上的简洁,减少了硬件实现的复杂度和代价。
本申请实施例还提供一种处理器,该处理器可通过配置第一消息扩展指令(VSM3MSGA指令)和第二消息扩展指令(VSM3MSGB指令),扩展得到消息字;通过配置第三消息扩展指令(VSM3MSGCL指令)和第四消息扩展指令(VSM3MSGCH指令)扩展得到消息参数;通过配置第一轮计算指令(VSM3RNDA指令)和第二轮计算指令(VSM3RNDB指令)实现轮计算;各指令的具体功能和执行实现可参照前文相应部分的描述。
在可选实现中,本申请实施例提供的处理器的逻辑单元结构可以如图10所示,如图10所示,该处理器可以包括:指令译码控制器1,数据寄存器2,消息扩展单元3和轮计算单元4;
其中,指令译码控制器1可用于指令译码和计算控制;
数据寄存器2可用于存放源数据和计算结果;
消息扩展单元3可至少基于配置的第一消息扩展指令(VSM3MSGA指令)和第二消息扩展指令(VSM3MSGB指令),扩展得到消息字;可选的,进一步,消息扩展单元3还可基于配置的第三消息扩展指令(VSM3MSGCL指令)和第四消息扩展指令(VSM3MSGCH指令),扩展得到消息参数;
轮计算单元4可基于配置的第一轮计算指令(VSM3RNDA指令)和第二轮计算指令(VSM3RNDB指令),实现轮计算。
可选的,在实现消息扩展的过程中,所述处理器通过处理器指令可至少执行:获取分组消息,基于分组消息划分初始的多个消息字,初始的多个消息字按照消息字的顺序平均划分到多个消息字操作数;
从而,消息扩展单元3可通过配置的第一消息扩展指令和第二消息扩展指令,实现消息字的扩展,如实现W0,W1,…W67共68个消息字的扩展;其中,第一消息扩展指令(VSM3MSGA指令)被配置为:在已得到k个消息字操作数的情况下,基于第k-3个至第k-1个消息字操作数,计算第k-3个中间消息字操作数,其中,k≥4,1个消息字操作数包括按序排列的多个消息字,1个中间消息字操作数包括按序排列的多个中间消息字;
第二消息扩展指令(VSM3MSGB指令)被配置为:基于所述第k-3个中间消息字操作数以及第k个消息字操作数,计算第k+1个消息字操作数。
可选的,1个消息字操作数具体包括按序排列的4个消息字,且4≤k≤16,最终得到的消息字操作数的个数为17;第k个消息字操作数中消息字具体为W4k-4,W4k-3,W4k-2,W4k-1
可选的,1个中间消息字操作数具体包括按序排列的4个中间消息字,其中,第k-3个中间消息字操作数中的中间消息字具体为:WT4(k-3)-4,WT4(k-3)-3,WT4(k-3)-2,WT4(k-3)-1;相应的,第一消息扩展指令(VSM3MSGA指令)被配置为:基于第k-3个至第k-1个消息字操作数,计算第k-3个中间消息字操作数,具体包括:
Figure BDA0002764486910000211
Figure BDA0002764486910000212
Figure BDA0002764486910000213
Figure BDA0002764486910000214
其中,P1为消息扩展中的置换函数,
Figure BDA0002764486910000215
表示32比特异或运算,<<<表示32比特循环左移比特运算。
可选的,k具体为4,则第k-3个中间消息字操作数具体为第1个中间消息字操作数,第1个中间消息字操作数中的中间消息字具体为:WT0,WT1,WT2,WT3;相应的,第一消息扩展指令(VSM3MSGA指令)被配置为计算第1个中间消息字操作数,具体包括:
Figure BDA0002764486910000216
Figure BDA0002764486910000217
Figure BDA0002764486910000218
Figure BDA0002764486910000221
可选的,第k+1个消息字操作数中的消息字具体为:W4(k+1)-4,W4(k+1)-3,W4(k+1)-2,W4(k+1)-1,且k+1≤17;相应的,第二消息扩展指令(VSM3MSGB指令)被配置为:基于所述第k-3个中间消息字操作数以及第k个消息字操作数,计算第k+1个消息字操作数,具体包括:
Figure BDA0002764486910000222
Figure BDA0002764486910000223
Figure BDA0002764486910000224
Figure BDA0002764486910000225
可选的,第k+1个消息字操作数具体为第5个消息字操作数,第5个消息字操作数中的消息字具体为:W16,W17,W18,W19;相应的,第二消息扩展指令(VSM3MSGB指令)被配置为计算第5个消息字操作数,具体包括:
Figure BDA0002764486910000226
Figure BDA0002764486910000227
Figure BDA0002764486910000228
Figure BDA0002764486910000229
在可选实现中,消息扩展单元3中配置的第一消息扩展指令(VSM3MSGA指令)和第二消息扩展指令(VSM3MSGB指令)可以单独执行计算,也可以共享一个逻辑硬件,由于第一消息扩展指令和第二消息扩展指令在逻辑上相似,因此第一消息扩展指令和第二消息扩展指令可以共享一个硬件来执行计算;基于此,在一种示例中,以计算第5个消息字操作数为例,图11示出了消息扩展单元实现消息字扩展的逻辑结构,如图11所示,消息扩展单元3可以包括:第一Xor(异或门)模块,第一向左循环移位模块,第一选择器,第二选择器,第三选择器,第二向左循环移位模块,W13_block(W13_块)模块,Xor_block(异或门_块)模块,第二Xor模块;
其中,针对第一消息扩展指令(VSM3MSGA指令),第一Xor模块,用于对输入第一Xor模块的(W0,W1,W2,W3)和(W7,W8,W9,W10),执行按位异或的操作,操作结果作为第一选择器的一个输入;
第一向左循环移位模块,用于对(W3,W4,W5,W6)中的每个消息字,分别进行向左循环移位7位的操作,操作结果作为第二选择器的一个输入;其中,第二选择器的另一个输入为(WT0,WT1,WT2,WT3);
第三选择器,用于获取(W10,W11)和两个32位宽的0组成的一个128位的数字,作为第三选择器的一个输入;
针对第二消息扩展指令(VSM3MSGB指令),第二向左循环移位模块,用于对(W13,W14,W15,WT0)分别进行向左循环移位15位的操作,操作结果作为第一选择器的另一个输入;
W13_block模块,用于获取消息字W13,执行如下逻辑操作:W13⊕W13<<<12⊕W13<<<28⊕W13<<<30;其中,两个32位宽的0,消息字W12以及W13_block模块的输出形成一个128位的数字,作为第三选择器的另一个输入;
从而,第一选择器、第二选择器、第三选择器根据当前执行的是第一消息扩展指令(VSM3MSGA指令),还是第二消息扩展指令(VSM3MSGB指令)选择输出结果;
其中,第一选择器的输出进入Xor_block模块的X口,第二选择器的输出进入Xor_block模块的W口,Xor_block模块的输出口(T口)通过如下式获得输出结果:
Figure BDA0002764486910000231
需要说明的是,X口为第一选择器的一个输入端口的名字,表示从这个端口输入的变量是X,W口为第一选择器的另一个输入端口的名字,表示从这个端口输入的变量是W;
第二Xor模块,用于对Xor_block模块的输出和第三选择器的输出,进行按位异或的操作,产生计算结果。
可以理解的是,图11所示逻辑结构的消息扩展单元执行的是第一消息扩展指令(VSM3MSGA指令),则计算结果为(WT0,WT1,WT2,WT3),当消息扩展单元执行的是第二消息扩展指令(VSM3MSGB指令),则计算结果为(W16,W17,W18,W19)。
可选的,在实现消息扩展的过程中,消息扩展单元可通过配置的第三消息扩展指令(VSM3MSGCL指令)和第四消息扩展指令(VSM3MSGCH指令),扩展得到消息参数,如实现W0’,W1’…W63’共64个消息参数的扩展;
其中,第三消息扩展指令被配置为:从第1个消息字操作数开始,基于相邻两个消息字操作数中第一部分的消息字,依序计算各个消息参数操作数中第一部分的消息参数;
第四消息扩展指令被配置为:从第1个消息字操作数开始,基于相邻两个消息字操作数中第二部分的消息字,依序计算各个消息参数操作数中第二部分的消息参数;其中,一个消息参数操作数中第一部分的消息参数和第二部分的消息参数,形成该消息参数操作数中的消息参数。
可选的,第一部分的消息字为一个消息字操作数中排序在前的消息字,第二部分的消息字为一个消息字操作数中排序在后的消息字;第一部分的消息参数为一个消息参数操作数中排序在前的消息参数,第二部分的消息参数为一个消息参数操作数中排序在后的消息参数。
可选的,一对相邻两个消息字操作数为(Wj,Wj+1,Wj+2,Wj+3)和(Wj+4,Wj+5,Wj+6,Wj+7);所述相邻两个消息字操作数中第一部分的消息字具体为Wj,Wj+1,Wj+4,Wj+5,所述相邻两个消息字操作数中第二部分的消息字具体为Wj+2,Wj+3,Wj+6,Wj+7;与Wj所在的消息字操作数顺序相同的消息参数操作数具体为:(Wj’,Wj+1’,Wj+2’,Wj+3’),其中,第一部分的消息参数具体为Wj’,Wj+1’,第二部分的消息参数具体为Wj+2’,Wj+3’。
可选的,第三消息扩展指令被配置为:从第1个消息字操作数开始,基于相邻两个消息字操作数中第一部分的消息字,依序计算各个消息参数操作数中第一部分的消息参数,具体包括:
Figure BDA0002764486910000241
Figure BDA0002764486910000242
可选的,所述相邻两个消息字操作数具体为第1个消息字操作数(W0,W1,W2,W3)和第2个消息字操作数(W4,W5,W6,W7);与第1个消息字操作数的顺序相同的消息参数操作数具体为:第1个消息参数操作数(W0’,W1’,W2’,W3’);第三消息扩展指令被配置为计算第1个消息参数操作数中第一部分的消息参数,具体包括:
Figure BDA0002764486910000251
Figure BDA0002764486910000252
可选的,第四消息扩展指令被配置为:从第1个消息字操作数开始,基于相邻两个消息字操作数中第二部分的消息字,依序计算各个消息参数操作数中第二部分的消息参数,具体包括:
Figure BDA0002764486910000253
Figure BDA0002764486910000254
可选的,所述相邻两个消息字操作数具体为第1个消息字操作数(W0,W1,W2,W3)和第2个消息字操作数(W4,W5,W6,W7);与第1个消息字操作数的顺序相同的消息参数操作数具体为:第1个消息参数操作数(W0’,W1’,W2’,W3’);第四消息扩展指令被配置为计算第1个消息参数操作数中第二部分的消息参数,具体包括:
Figure BDA0002764486910000255
Figure BDA0002764486910000256
本申请实施例提供的处理器还可实现迭代压缩中的轮计算,轮计算可由处理器中的轮计算单元通过配置的第一轮计算指令(VSM3RNDA指令)和第二轮计算指令(VSM3RNDB指令)执行实现;
其中,第一轮计算指令(VSM3RNDA指令)被配置为:根据第一个状态字操作数中状态字的当前状态,第二个状态字操作数中状态字的当前状态,以及轮计算的当前轮数,计算第一个状态字操作数中第一部分的状态字的下一状态,以及多个中间状态字;其中,第一个状态字操作数和第二个状态字操作数中分别包括多个状态字;
第二轮计算指令(VSM3RNDB指令)被配置为:基于序号与当前轮数对应的消息字和消息参数,以及所述多个中间状态字,计算第一个状态字操作数中第二部分的状态字的下一状态;其中,第一个状态字操作数中第一部分的状态字的下一状态,和第二部分的状态字的下一状态,形成第一个状态字操作数中状态字的下一状态,第二个状态字操作数中状态字的下一状态由第一个状态字操作数中状态字的当前状态直接确定。
可选的,第一个状态字操作数为(A,C,E,G),第二个状态字操作数为(B,D,F,H),轮计算的当前轮数为j,i∈j,则第一个状态字操作数中状态字的当前状态为(Ai,Ci,Ei,Gi),第二个状态字操作数中状态字的当前状态为(Bi,Di,Fi,Hi),第一个状态字操作数中第一部分的状态字为C和G,所述第一部分的状态字的下一状态为Ci+1和Gi+1,第一个状态字操作数中第二部分的状态字为A和E,所述第二部分的状态字的下一状态为Ai+1和Ei+1
可选的,第一轮计算指令(VSM3RNDA指令)被配置为:根据第一个状态字操作数中状态字的当前状态,第二个状态字操作数中状态字的当前状态,以及轮计算的当前轮数,计算第一个状态字操作数中第一部分的状态字的下一状态,以及多个中间状态字,具体包括:
j=imm8;
SS1=((Ai<<12)+Ei+(Tj<<j))<<7;
Figure BDA0002764486910000261
T1=FFj(Ai,Bi,Ci)+Di+SS2;
T2=GGj(Ei,Fi,Gi)+Hi+SS1;
Ci+1=Bi<<9;
Gi+1=Fi<<19;
其中,当前轮数j存于立即数imm8,FFj和GGj表示布尔函数,所述多个中间状态字为T1和T2。
可选的,第二轮计算指令(VSM3RNDB指令)被配置为:基于序号与当前轮数对应的消息字和消息参数,以及所述多个中间状态字,计算第一个状态字操作数中第二部分的状态字的下一状态,具体包括:
TT1=T1+Wj’;
TT2=T2+Wj
Ai+1=TT1;
Ei+1=P0(TT2);
其中,P0表示轮计算中的置换函数。
需要进一步说明的是,第一轮计算指令(VSM3RNDA指令)的计算逻辑相对复杂,对于大多数处理器而言,第一轮计算指令在一个时钟周期内很难执行完成,往往需要多个时钟周期执行完成;基于此,本申请实施例提供一种三级流水的逻辑硬件单元,来实现执行第一轮计算指令,该逻辑硬件单元可以视为是轮计算单元中的逻辑单元,可选的,图12示出了本申请实施例提供的轮计算单元的逻辑结构,如图12所示,轮计算单元设置有三个流水级,具体如第1个流水级FX1,第2个流水级FX2,第3个流水级FX3;FX1,FX2和FX3的时钟周期相同;
其中,在FX1中,首先根据当前轮数j对Tj进行选择,选择结果循环左移j位,移位结果输入第一CSA(Carry Save Adder,进位保留加法器)单元,作为第一CSA单元的一个输入;第一CSA单元的其他输入为:状态字A循环左移12位的结果,状态字E;CSA单元是一种进位-保留计算器,其可以是32位宽,若CSA单元的输入是a,b,c,输出是sum,car,则它执行的计算为:
Figure BDA0002764486910000271
car=a&b|a&c|b&c。
在本申请实施例中,第一CSA单元的结果暂存在流水线寄存器中;同时,状态字A循环左移12位的结果也暂存在流水线寄存器中;
另外,在第1个流水级中,可根据j对三个状态字A,B,C执行FFj逻辑操作,并对三个状态字E,F,G执行GGj逻辑操作,这两者的结果和状态字D,H存入流水线寄存器中;其中,状态字B执行循环左移9位,移位结果经两级流水线后,输出为状态字C的下一状态Ci+1,状态字E执行循环左移19位,移位结果经两级流水线后,输出为状态字G的下一状态Gi+1
在FX2中,暂存的第一CSA单元的结果输入32位宽的第一加法器中,产生的结果循环左移7位,一方面,移位结果作为第二CSA单元的一个输入,另一方面,移位结果和状态字A循环左移12位的结果进行按位异或,作为第三CSA单元的一个输入;
第二CSA单元为32位宽,另外两个输入为暂存的GGj逻辑操作的输出结果和状态字H,第二CSA单元的两个输出结果暂存在FX3的流水线寄存器,以在FX3流水阶段中,作为32位宽的第二加法器的输入;第三CSA单元为32位宽,另外两个输入是暂存的FFj逻辑操作的输出结果和状态字D,第三CSA单元的两个输出结果暂存在FX3的流水线寄存器中,以在FX3流水阶段中,作为32位的第三加法器的输入。
在FX3中,第二加法器产生32位的加法结果,作为中间状态字T2;第三加法器产生32位的加法结果,作为中间状态字T1。
需要说明的是,上述三级流水的逻辑硬件单元可适用于高速处理器的场景,高速处理器的一个时钟周期非常短或者时钟频率非常快,可使用上述三级流水的逻辑硬件单元来完成处理器指令执行;而在低速处理器的场景下,本申请实施例也可以改变上述中间流水线寄存器位置,从而将三级流水线结构变为1级或者2级流水线的结构。也就是说,上述三级流水的逻辑硬件单元可适用于高速处理器也可适用于低速处理器,而在低速处理器场景下,本申请实施例也可调整三级流水线结构中的中间流水线寄存器的位置,从而将三级流水线结构变为1级或者2级流水线的结构,产生1级流水线或者2级流水线的变种结构,来在低速处理器场景下完成处理器指令执行。
需要进一步说明的是,根据SM3算法的依赖性,消息扩展依赖于前面扩展出的消息字,与状态字无关;而第一轮计算指令(VSM3RNDA指令)的执行主要依赖于上一轮的计算结果,第二轮计算指令(VSM3RNDB指令)的执行依赖于生成的消息参数和VSM3RNDA指令的执行结果;基于此,本申请实施例在计算时,可使消息扩展和第一轮计算指令(VSM3RNDA指令)并行执行,两者计算结束后,将消息参数通过数据旁路传递给第二轮计算指令(VSM3RNDB指令),以提高计算效率;结合图10和图13所示,本申请实施例可在消息扩展单元和轮计算单元间建立数据旁路,从而消息扩展单元与轮计算单元中的第一轮计算指令(VSM3RNDA指令)可并行执行,进而,消息扩展单元得到的消息参数可通过数据旁路,传递给轮计算单元,以便轮计算单元实现第二轮计算指令(VSM3RNDB指令)的执行;
在一种示例中,如果知道前16个消息字Wi~Wi+15,设XMM0=(Wi+3,Wi+2,Wi+1,Wi),XMM1=(Wi+7,Wi+6,Wi+5,Wi+4),XMM2=(Wi+11,Wi+10,Wi+9,Wi+8),XMM3=(Wi+15,Wi+14,Wi+13,Wi+12),则计算下4个消息字的方法为:
VSM3MSGA XMM0,XMM0,XMM1,XMM2;
VSM3MSGB XMM4,XMM0,XMM3;
经过上面的计算,XMM4中存有(Wi+19,Wi+18,Wi+17,Wi+16)四个消息字;
SM3的轮计算为64轮,由于轮计算指令会产生一种寄存器内容乒乓的效果,在可选实现中,可每2轮做为一个循环体,进行32次循环;设当前进行的是i轮和i+1轮,XMM6=(Hi,Fi,Di,Bi),XMM7=(Gi,Ei,Ci,Ai),XMM5=(Wi+1’,Wi+1,Wi’,Wi),则这两轮SM3轮计算的方法为:
VSM3RNDA XMM6,XMM6,XMM7,i;;第i轮计算
VSM3RNDB XMM6,XMM6,XMM5;;xmm6=(ACEG[i+1]);xmm7=ACEG[i]=BDFH[i+1]
pshufd XMM5,XMM5,0x0E;;xmm5>>64
VSM3RNDA XMM7,XMM7,XMM6,i+1;;第i+1轮计算
VSM3RNDB XMM7,XMM7,xmm5;;xmm7=(ACEG[i+2]);xmm6=ACEG[i+1]=BDFH[i+2]
通过上述计算,在2轮计算后,有XMM6=(Hi+2,Fi+2,Di+2,Bi+2),XMM7=(Gi+2,Ei+2,Ci+2,Ai+2),因为寄存器乒乓的效果,中间的计算减少了寄存器的使用,提高了计算效率。
本申请实施例提供的处理器可以通过配置处理器指令集,以执行本申请实施例提供的加速SM3算法的方法。该处理器指令集的构成可结合图2所示,具体内容可参照前文相应部分描述,此处不再赘述。
在进一步的实现中,本申请实施例还提供一种芯片,该芯片可以包括本申请实施例提供的处理器。
本申请实施例还提供一种电子设备,该电子设备可以包括上述所述的芯片。
本申请实施例采用四条消息扩展指令(其中两条可以为可选指令),进行消息扩展,并在处理数据时采用数据对齐的引用(如按照128位对齐),避免了非对齐的访存操作或者不必要的数据重排操作,提高了SM3算法的计算速度;
进一步,本申请实施例采用两条轮计算指令,配合实现单轮的轮计算操作,可使得硬件实现简单高效,减少了硬件实现的复杂度和代价;
进一步,在本申请实施例中,消息扩展和轮计算的第一轮计算指令(VSM3RNDA指令)可以并行执行,然后再执行轮计算的第二轮计算指令(VSM3RNDB操作),减少了执行时间,同时,消息参数可以通过数据旁路,传递给VSM3RNDB指令进行执行,提高了响应速度;
进一步,本申请实施例中的第一消息扩展指令(VSM3MSGA指令)和第二消息扩展指令(VSM3MSGB指令)可通过共享硬件的逻辑设计来执行实现,能够以较小的硬件代价实现两条消息扩展指令的执行;
进一步,本申请实施例针对第一轮计算指令(VSM3RNDA指令),提出了流水线结构的计算逻辑,通过对复杂的VSM3RNDA指令计算进行流水化操作,提高了计算效率。
上文描述了本申请实施例提供的多个实施例方案,各实施例方案介绍的各可选方式可在不冲突的情况下相互结合、交叉引用,从而延伸出多种可能的实施例方案,这些均可认为是本申请实施例披露、公开的实施例方案。
虽然本申请实施例披露如上,但本申请并非限定于此。任何本领域技术人员,在不脱离本申请的精神和范围内,均可作各种更动与修改,因此本申请的保护范围应当以权利要求所限定的范围为准。

Claims (44)

1.一种加速SM3算法的方法,其特征在于,包括:
获取分组消息;
基于分组消息划分初始的多个消息字,其中,初始的多个消息字按照消息字的顺序平均划分到多个消息字操作数;
在已得到k个消息字操作数的情况下,基于第k-3个至第k-1个消息字操作数,计算第k-3个中间消息字操作数;其中,k≥4,1个消息字操作数包括按序排列的多个消息字,1个中间消息字操作数包括按序排列的多个中间消息字;
基于所述第k-3个中间消息字操作数以及第k个消息字操作数,计算第k+1个消息字操作数。
2.根据权利要求1所述的方法,其特征在于,1个消息字操作数具体包括按序排列的4个消息字,且4≤k≤16,最终得到的消息字操作数的个数为17;第k个消息字操作数中的消息字具体为W4k-4,W4k-3,W4k-2,W4k-1
3.根据权利要求2所述的方法,其特征在于,1个中间消息字操作数具体包括按序排列的4个中间消息字,其中,第k-3个中间消息字操作数中的中间消息字具体为:WT4(k-3)-4,WT4(k-3)-3,WT4(k-3)-2,WT4(k-3)-1
所述基于第k-3个至第k-1个消息字操作数,计算第k-3个中间消息字操作数包括:
Figure FDA0002764486900000011
Figure FDA0002764486900000012
Figure FDA0002764486900000013
Figure FDA0002764486900000014
其中,P1为消息扩展中的置换函数,
Figure FDA0002764486900000015
表示32比特异或运算,<<<表示32比特循环左移比特运算。
4.根据权利要求3所述的方法,其特征在于,k具体为4,第k-3个中间消息字操作数具体为第1个中间消息字操作数,第1个中间消息字操作数中的中间消息字具体为:WT0,WT1,WT2,WT3;计算第1个中间消息字操作数具体包括:
Figure FDA0002764486900000021
Figure FDA0002764486900000022
Figure FDA0002764486900000023
Figure FDA0002764486900000024
5.根据权利要求3所述的方法,其特征在于,第k+1个消息字操作数中的消息字具体为:W4(k+1)-4,W4(k+1)-3,W4(k+1)-2,W4(k+1)-1,且k+1≤17;
所述基于所述第k-3个中间消息字操作数,以及第k个消息字操作数,计算第k+1个消息字操作数包括:
Figure FDA0002764486900000025
Figure FDA0002764486900000026
Figure FDA0002764486900000027
Figure FDA0002764486900000028
6.根据权利要求5所述的方法,其特征在于,k+1具体为5,第k+1个消息字操作数具体为第5个消息字操作数,第5个消息字操作数中的消息字具体为:W16,W17,W18,W19;计算第5个消息字操作数具体包括:
Figure FDA0002764486900000029
Figure FDA00027644869000000210
Figure FDA00027644869000000211
Figure FDA00027644869000000212
7.根据权利要求1-6任一项所述的方法,其特征在于,还包括:
从第1个消息字操作数开始,基于相邻两个消息字操作数中第一部分的消息字,依序计算各个消息参数操作数中第一部分的消息参数;
从第1个消息字操作数开始,基于相邻两个消息字操作数中第二部分的消息字,依序计算各个消息参数操作数中第二部分的消息参数;其中,一个消息参数操作数中第一部分的消息参数和第二部分的消息参数,形成该消息参数操作数中的消息参数。
8.根据权利要求7所述的方法,其特征在于,第一部分的消息字为一个消息字操作数中排序在前的消息字,第二部分的消息字为一个消息字操作数中排序在后的消息字;第一部分的消息参数为一个消息参数操作数中排序在前的消息参数,第二部分的消息参数为一个消息参数操作数中排序在后的消息参数。
9.根据权利要求8所述的方法,其特征在于,一对相邻两个消息字操作数为(Wj,Wj+1,Wj+2,Wj+3)和(Wj+4,Wj+5,Wj+6,Wj+7);所述相邻两个消息字操作数中第一部分的消息字具体为Wj,Wj+1,Wj+4,Wj+5,所述相邻两个消息字操作数中第二部分的消息字具体为Wj+2,Wj+3,Wj+6,Wj+7;与Wj所在的消息字操作数顺序相同的消息参数操作数具体为:(Wj’,Wj+1’,Wj+2’,Wj+3’),其中,第一部分的消息参数具体为Wj’,Wj+1’,第二部分的消息参数具体为Wj+2’,Wj+3’。
10.根据权利要求9所述的方法,其特征在于,所述从第1个消息字操作数开始,基于相邻两个消息字操作数中第一部分的消息字,依序计算各个消息参数操作数中第一部分的消息参数包括:
Figure FDA0002764486900000031
Figure FDA0002764486900000032
11.根据权利要求10所述的方法,其特征在于,所述相邻两个消息字操作数具体为第1个消息字操作数(W0,W1,W2,W3)和第2个消息字操作数(W4,W5,W6,W7);与第1个消息字操作数顺序相同的消息参数操作数具体为:第1个消息参数操作数(W0’,W1’,W2’,W3’);计算第1个消息参数操作数中第一部分的消息参数,具体包括:
Figure FDA0002764486900000033
Figure FDA0002764486900000041
12.根据权利要求10所述的方法,其特征在于,所述从第1个消息字操作数开始,基于相邻两个消息字操作数中第二部分的消息字,依序计算各个消息参数操作数中第二部分的消息参数包括:
Figure FDA0002764486900000042
Figure FDA0002764486900000043
13.根据权利要求12所述的方法,其特征在于,所述相邻两个消息字操作数具体为第1个消息字操作数(W0,W1,W2,W3)和第2个消息字操作数(W4,W5,W6,W7);与第1个消息字操作数的顺序相同的消息参数操作数具体为:第1个消息参数操作数(W0’,W1’,W2’,W3’);计算第1个消息参数操作数中第二部分的消息参数,具体包括:
Figure FDA0002764486900000044
Figure FDA0002764486900000045
14.根据权利要求7所述的方法,其特征在于,还包括:
根据第一个状态字操作数中状态字的当前状态,第二个状态字操作数中状态字的当前状态,以及轮计算的当前轮数,计算第一个状态字操作数中第一部分的状态字的下一状态,以及多个中间状态字;其中,第一个状态字操作数和第二个状态字操作数中分别包括多个状态字;
基于序号与当前轮数对应的消息字和消息参数,以及所述多个中间状态字,计算第一个状态字操作数中第二部分的状态字的下一状态;其中,第一个状态字操作数中第一部分的状态字的下一状态,和第二部分的状态字的下一状态,形成第一个状态字操作数中状态字的下一状态,第二个状态字操作数中状态字的下一状态由第一个状态字操作数中状态字的当前状态直接确定。
15.根据权利要求14所述的方法,其特征在于,第一个状态字操作数为(A,C,E,G),第二个状态字操作数为(B,D,F,H),轮计算的当前轮数为j,i∈j,则第一个状态字操作数中状态字的当前状态为(Ai,Ci,Ei,Gi),第二个状态字操作数中状态字的当前状态为(Bi,Di,Fi,Hi),第一个状态字操作数中第一部分的状态字为C和G,所述第一部分的状态字的下一状态为Ci+1和Gi+1,第一个状态字操作数中第二部分的状态字为A和E,所述第二部分的状态字的下一状态为Ai+1和Ei+1
16.根据权利要求15所述的方法,其特征在于,所述根据第一个状态字操作数中状态字的当前状态,第二个状态字操作数中状态字的当前状态,以及轮计算的当前轮数,计算第一个状态字操作数中第一部分的状态字的下一状态,以及多个中间状态字包括:
j=imm8;
SS1=((Ai<<12)+Ei+(Tj<<j))<<7;
Figure FDA0002764486900000051
T1=FFj(Ai,Bi,Ci)+Di+SS2;
T2=GGj(Ei,Fi,Gi)+Hi+SS1;
Ci+1=Bi<<9;
Gi+1=Fi<<19;
其中,当前轮数j存于立即数imm8,FFj和GGj表示布尔函数,所述多个中间状态字为T1和T2。
17.根据权利要求16所述的方法,其特征在于,所述基于序号与当前轮数对应的消息字和消息参数,以及所述多个中间状态字,计算第一个状态字操作数中第二部分的状态字的下一状态包括:
TT1=T1+Wj’;
TT2=T2+Wj
Ai+1=TT1;
Ei+1=P0(TT2);
其中,P0表示轮计算中的置换函数。
18.一种处理器,其特征在于,至少包括:消息扩展单元,所述消息扩展单元配置有可执行的第一消息扩展指令和第二消息扩展指令;
所述处理器通过处理器指令至少执行:获取分组消息,基于分组消息划分初始的多个消息字,其中,初始的多个消息字按照消息字的顺序平均划分到多个消息字操作数;
其中,所述第一消息扩展指令被配置为:在已得到k个消息字操作数的情况下,基于第k-3个至第k-1个消息字操作数,计算第k-3个中间消息字操作数,其中,k≥4,1个消息字操作数包括按序排列的多个消息字,1个中间消息字操作数包括按序排列的多个中间消息字;
所述第二消息扩展指令被配置为:基于所述第k-3个中间消息字操作数以及第k个消息字操作数,计算第k+1个消息字操作数。
19.根据权利要求18所述的处理器,其特征在于,1个消息字操作数具体包括按序排列的4个消息字,且4≤k≤16,最终得到的消息字操作数的个数为17;第k个消息字操作数中的消息字具体为W4k-4,W4k-3,W4k-2,W4k-1
20.根据权利要求19所述的处理器,其特征在于,1个中间消息字操作数具体包括按序排列的4个中间消息字,其中,第k-3个中间消息字操作数中的中间消息字具体为:WT4(k-3)-4,WT4(k-3)-3,WT4(k-3)-2,WT4(k-3)-1;相应的,第一消息扩展指令被配置为:基于第k-3个至第k-1个消息字操作数,计算第k-3个中间消息字操作数,具体包括:
Figure FDA0002764486900000061
Figure FDA0002764486900000062
Figure FDA0002764486900000063
Figure FDA0002764486900000064
其中,P1为消息扩展中的置换函数,
Figure FDA0002764486900000065
表示32比特异或运算,<<<表示32比特循环左移比特运算。
21.根据权利要求20所述的处理器,其特征在于,k具体为4,第k-3个中间消息字操作数具体为第1个中间消息字操作数,第1个中间消息字操作数中的中间消息字具体为:WT0,WT1,WT2,WT3;相应的,第一消息扩展指令被配置为计算第1个中间消息字操作数,具体包括:
Figure FDA0002764486900000071
Figure FDA0002764486900000072
Figure FDA0002764486900000073
Figure FDA0002764486900000074
22.根据权利要求20所述的处理器,其特征在于,第k+1个消息字操作数中的消息字具体为:W4(k+1)-4,W4(k+1)-3,W4(k+1)-2,W4(k+1)-1,且k+1≤17;相应的,第二消息扩展指令被配置为:基于所述第k-3个中间消息字操作数以及第k个消息字操作数,计算第k+1个消息字操作数,具体包括:
Figure FDA0002764486900000075
Figure FDA0002764486900000076
Figure FDA0002764486900000077
Figure FDA0002764486900000078
23.根据权利要求22所述的处理器,其特征在于,k+1具体为5,第k+1个消息字操作数具体为第5个消息字操作数,第5个消息字操作数中的消息字具体为:W16,W17,W18,W19;相应的,第二消息扩展指令被配置为计算第5个消息字操作数,具体包括:
Figure FDA0002764486900000079
Figure FDA00027644869000000710
Figure FDA00027644869000000711
Figure FDA00027644869000000712
24.根据权利要求23所述的处理器,其特征在于,所述第一消息扩展指令和第二消息扩展指令共享所述消息扩展单元中的逻辑单元。
25.根据权利要求24所述的处理器,其特征在于,所述消息扩展单元中的逻辑单元包括:第一异或门模块,第一向左循环移位模块,第一选择器,第二选择器,第三选择器,第二向左循环移位模块,W13_块模块,异或门_块模块,第二异或门模块;
其中,针对第一消息扩展指令,第一异或门模块,用于对输入第一异或门模块的(W0,W1,W2,W3)和(W7,W8,W9,W10),执行按位异或的操作,操作结果作为第一选择器的一个输入;
第一向左循环移位模块,用于对(W3,W4,W5,W6)中的每个消息字,分别进行向左循环移位7位的操作,操作结果作为第二选择器的一个输入;其中,第二选择器的另一个输入为(WT0,WT1,WT2,WT3);
第三选择器,用于获取(W10,W11)和两个32位宽的0组成的一个128位的数字,作为第三选择器的一个输入;
针对第二消息扩展指令,第二向左循环移位模块,用于对(W13,W14,W15,WT0)分别进行向左循环移位15位的操作,操作结果作为第一选择器的另一个输入;
W13_块模块,用于获取消息字W13,执行如下逻辑操作:
Figure FDA0002764486900000081
Figure FDA0002764486900000082
其中,两个32位宽的0,消息字W12以及W13_块模块的输出形成一个128位的数字,作为第三选择器的另一个输入;
其中,第一选择器、第二选择器、第三选择器根据当前执行的是第一消息扩展指令,还是第二消息扩展指令选择输出结果;且第一选择器的输出进入异或门_块模块的X输入口,第二选择器的输出进入异或门_块模块的W输入口,异或门_块模块的输出口通过如下方式获得输出结果:
Figure FDA0002764486900000083
Figure FDA0002764486900000084
第二异或门模块,用于对异或门_块模块的输出和第三选择器的输出,进行按位异或的操作,产生计算结果。
26.根据权利要求25所述的处理器,其特征在于,若所述消息扩展单元执行的是第一消息扩展指令,则计算结果为(WT0,WT1,WT2,WT3),若所述消息扩展单元执行的是第二消息扩展指令,则计算结果为(W16,W17,W18,W19)。
27.根据权利要求18-26任一项所述的处理器,其特征在于,所述消息扩展单元还配置有可执行的第三消息扩展指令和第四消息扩展指令;
其中,所述第三消息扩展指令被配置为:从第1个消息字操作数开始,基于相邻两个消息字操作数中第一部分的消息字,依序计算各个消息参数操作数中第一部分的消息参数;
所述第四消息扩展指令被配置为:从第1个消息字操作数开始,基于相邻两个消息字操作数中第二部分的消息字,依序计算各个消息参数操作数中第二部分的消息参数;其中,一个消息参数操作数中第一部分的消息参数和第二部分的消息参数,形成该消息参数操作数中的消息参数。
28.根据权利要求27所述的处理器,其特征在于,第一部分的消息字为一个消息字操作数中排序在前的消息字,第二部分的消息字为一个消息字操作数中排序在后的消息字;第一部分的消息参数为一个消息参数操作数中排序在前的消息参数,第二部分的消息参数为一个消息参数操作数中排序在后的消息参数。
29.根据权利要求28所述的处理器,其特征在于,一对相邻两个消息字操作数为(Wj,Wj+1,Wj+2,Wj+3)和(Wj+4,Wj+5,Wj+6,Wj+7);所述相邻两个消息字操作数中第一部分的消息字具体为Wj,Wj+1,Wj+4,Wj+5,所述相邻两个消息字操作数中第二部分的消息字具体为Wj+2,Wj+3,Wj+6,Wj+7;与Wj所在的消息字操作数顺序相同的消息参数操作数具体为:(Wj’,Wj+1’,Wj+2’,Wj+3’),其中,第一部分的消息参数具体为Wj’,Wj+1’,第二部分的消息参数具体为Wj+2’,Wj+3’。
30.根据权利要求29所述的处理器,其特征在于,所述第三消息扩展指令被配置为:从第1个消息字操作数开始,基于相邻两个消息字操作数中第一部分的消息字,依序计算各个消息参数操作数中第一部分的消息参数,具体包括:
Figure FDA0002764486900000091
Figure FDA0002764486900000092
31.根据权利要求30所述的处理器,其特征在于,所述相邻两个消息字操作数具体为第1个消息字操作数(W0,W1,W2,W3)和第2个消息字操作数(W4,W5,W6,W7);与第1个消息字操作数的顺序相同的消息参数操作数具体为:第1个消息参数操作数(W0’,W1’,W2’,W3’);所述第三消息扩展指令被配置为计算第1个消息参数操作数中第一部分的消息参数,具体包括:
Figure FDA0002764486900000101
Figure FDA0002764486900000102
32.根据权利要求30所述的处理器,其特征在于,所述第四消息扩展指令被配置为:从第1个消息字操作数开始,基于相邻两个消息字操作数中第二部分的消息字,依序计算各个消息参数操作数中第二部分的消息参数,具体包括:
Figure FDA0002764486900000103
Figure FDA0002764486900000104
33.根据权利要求32所述的处理器,其特征在于,所述相邻两个消息字操作数具体为第1个消息字操作数(W0,W1,W2,W3)和第2个消息字操作数(W4,W5,W6,W7);与第1个消息字操作数的顺序相同的消息参数操作数具体为:第1个消息参数操作数(W0’,W1’,W2’,W3’);所述第四消息扩展指令被配置为计算第1个消息参数操作数中第二部分的消息参数,具体包括:
Figure FDA0002764486900000105
Figure FDA0002764486900000106
34.根据权利要求27所述的处理器,其特征在于,还包括:轮计算单元;所述轮计算单元配置有可执行的第一轮计算指令和第二轮计算指令;
其中,第一轮计算指令被配置为:根据第一个状态字操作数中状态字的当前状态,第二个状态字操作数中状态字的当前状态,以及轮计算的当前轮数,计算第一个状态字操作数中第一部分的状态字的下一状态,以及多个中间状态字;其中,第一个状态字操作数和第二个状态字操作数中分别包括多个状态字;
第二轮计算指令被配置为:基于序号与当前轮数对应的消息字和消息参数,以及所述多个中间状态字,计算第一个状态字操作数中第二部分的状态字的下一状态;其中,第一个状态字操作数中第一部分的状态字的下一状态,和第二部分的状态字的下一状态,形成第一个状态字操作数中状态字的下一状态,第二个状态字操作数中状态字的下一状态由第一个状态字操作数中状态字的当前状态直接确定。
35.根据权利要求34所述的处理器,其特征在于,第一个状态字操作数为(A,C,E,G),第二个状态字操作数为(B,D,F,H),轮计算的当前轮数为j,i∈j,则第一个状态字操作数中状态字的当前状态为(Ai,Ci,Ei,Gi),第二个状态字操作数中状态字的当前状态为(Bi,Di,Fi,Hi),第一个状态字操作数中第一部分的状态字为C和G,所述第一部分的状态字的下一状态为Ci+1和Gi+1,第一个状态字操作数中第二部分的状态字为A和E,所述第二部分的状态字的下一状态为Ai+1和Ei+1
36.根据权利要求35所述的处理器,其特征在于,所述第一轮计算指令被配置为:根据第一个状态字操作数中状态字的当前状态,第二个状态字操作数中状态字的当前状态,以及轮计算的当前轮数,计算第一个状态字操作数中第一部分的状态字的下一状态,以及多个中间状态字,具体包括:
j=imm8;
SS1=((Ai<<12)+Ei+(Tj<<j))<<7;
Figure FDA0002764486900000111
T1=FFj(Ai,Bi,Ci)+Di+SS2;
T2=GGj(Ei,Fi,Gi)+Hi+SS1;
Ci+1=Bi<<9;
Gi+1=Fi<<19;
其中,当前轮数j存于立即数imm8,FFj和GGj表示布尔函数,所述多个中间状态字为T1和T2。
37.根据权利要求36所述的处理器,其特征在于,所述第二轮计算指令被配置为:基于序号与当前轮数对应的消息字和消息参数,以及所述多个中间状态字,计算第一个状态字操作数中第二部分的状态字的下一状态,具体包括:
TT1=T1+Wj’;
TT2=T2+Wj
Ai+1=TT1;
Ei+1=P0(TT2);
其中,P0表示轮计算中的置换函数。
38.根据权利要求36所述的处理器,其特征在于,所述轮计算单元设置有第1个流水级,第2个流水级和第3个流水级;
其中,在第1个流水级中,当前轮数j对Tj进行选择,选择结果循环左移j位,移位结果作为第一CSA单元的一个输入,第一CSA单元的其他输入为:状态字A循环左移12位的结果,状态字E;其中,第一CSA单元的结果,状态字A循环左移12位的结果暂存在流水线寄存器中;
在第1个流水级中,根据当前轮数j对状态字A,B,C执行FFj逻辑操作,并对状态字E,F,G执行GGj逻辑操作,FFj逻辑操作和GGj逻辑操作的结果以及状态字D,H存入流水线寄存器中;并且,在第1个流水级中,状态字B执行循环左移9位,移位结果经两级流水线后,输出为状态字C的下一状态Ci+1,状态字E执行循环左移19位,移位结果经两级流水线后,输出为状态字G的下一状态Gi+1
39.根据权利要求38所述的处理器,其特征在于,在第2个流水级中,暂存的第一进位保留加法器CSA单元的结果输入第一加法器中,产生的结果循环左移7位,移位结果作为第二CSA单元的一个输入,并且移位结果和状态字A循环左移12位的结果进行按位异或,作为第三CSA单元的一个输入;
其中,第二CSA单元的另外两个输入为暂存的GGj逻辑操作的输出结果和状态字H,第二CSA单元的两个输出结果暂存在第3个流水级的流水线寄存器,以在第3个流水级中,作为第二加法器的输入;第三CSA单元的另外两个输入是暂存的FFj逻辑操作的输出结果和状态字D,第三CSA单元的两个输出结果暂存在第3个流水级的流水线寄存器中,以在第3个流水级中,作为第三加法器的输入;
在第3个流水级中,第二加法器产生的加法结果,作为中间状态字T2,第三加法器产生的加法结果,作为中间状态字T1。
40.根据权利要求34所述的处理器,其特征在于,所述消息扩展单元和所述轮计算单元之间具有数据旁路;所述消息扩展单元与轮计算单元中配置的第一轮计算指令并行执行,且所述消息扩展单元得到的消息参数通过所述数据旁路,传递给轮计算单元,以便轮计算单元实现第二轮计算指令的执行。
41.根据权利要求34或40所述的处理器,其特征在于,还包括:用于指令译码和计算控制的指令译码控制器,用于存储源数据和计算结果的数据寄存器。
42.一种处理器,其特征在于,所述处理器配置有处理器指令集,所述处理器指令集用于执行如权利要求1-17任一项所述的加速SM3算法的方法。
43.一种芯片,其特征在于,包括如权利要求18-41任一项所述的处理器,或者如权利要求42所述的处理器。
44.一种电子设备,其特征在于,包括如权利要求43所述的芯片。
CN202011228846.2A 2020-11-06 2020-11-06 一种加速sm3算法的方法、处理器、芯片及电子设备 Active CN112367158B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011228846.2A CN112367158B (zh) 2020-11-06 2020-11-06 一种加速sm3算法的方法、处理器、芯片及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011228846.2A CN112367158B (zh) 2020-11-06 2020-11-06 一种加速sm3算法的方法、处理器、芯片及电子设备

Publications (2)

Publication Number Publication Date
CN112367158A true CN112367158A (zh) 2021-02-12
CN112367158B CN112367158B (zh) 2023-05-16

Family

ID=74508857

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011228846.2A Active CN112367158B (zh) 2020-11-06 2020-11-06 一种加速sm3算法的方法、处理器、芯片及电子设备

Country Status (1)

Country Link
CN (1) CN112367158B (zh)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113300829A (zh) * 2021-05-20 2021-08-24 深圳智微电子科技有限公司 Sm3算法的硬件实现装置
CN113300831A (zh) * 2021-07-26 2021-08-24 苏州浪潮智能科技有限公司 一种安全散列算法的实现方法、系统、介质及设备
CN113721986A (zh) * 2021-07-23 2021-11-30 浪潮电子信息产业股份有限公司 一种数据压缩方法、装置及电子设备和存储介质
CN114978473A (zh) * 2022-05-07 2022-08-30 海光信息技术股份有限公司 一种sm3算法的处理方法、处理器、芯片及电子设备

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160070931A1 (en) * 2014-09-04 2016-03-10 Intel Corporation Sm3 hash algorithm acceleration processors, methods, systems, and instructions
CN106230581A (zh) * 2016-09-09 2016-12-14 杭州华为数字技术有限公司 Sm3消息处理方法和装置
TW201717003A (zh) * 2015-11-12 2017-05-16 英特爾公司 混合sm3及sha之加速處理器
CN107094369A (zh) * 2014-09-26 2017-08-25 英特尔公司 用于提供simd sm3密码散列函数的指令和逻辑
CN110022203A (zh) * 2019-03-15 2019-07-16 深圳市纽创信安科技开发有限公司 一种sm3加速方法和装置

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20160070931A1 (en) * 2014-09-04 2016-03-10 Intel Corporation Sm3 hash algorithm acceleration processors, methods, systems, and instructions
CN106575215A (zh) * 2014-09-04 2017-04-19 英特尔公司 Sm3哈希算法加速处理器、方法、系统和指令
CN107094369A (zh) * 2014-09-26 2017-08-25 英特尔公司 用于提供simd sm3密码散列函数的指令和逻辑
TW201717003A (zh) * 2015-11-12 2017-05-16 英特爾公司 混合sm3及sha之加速處理器
US20170141914A1 (en) * 2015-11-12 2017-05-18 Intel Corporation Hybrid sm3 and sha acceleration processors
CN106230581A (zh) * 2016-09-09 2016-12-14 杭州华为数字技术有限公司 Sm3消息处理方法和装置
CN110022203A (zh) * 2019-03-15 2019-07-16 深圳市纽创信安科技开发有限公司 一种sm3加速方法和装置

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
JIAN ZOU,LE DONG: "Improved preimage and pseudo-collision attacks on SM3 hash function", 《JOURNAL ON COMMUNICATIONS》 *
钟丽、刘彦、余思洋,谢中: "嵌入式系统化芯片中SM2算法软硬件协同设计与实现", 《计算机应用》 *

Cited By (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113300829A (zh) * 2021-05-20 2021-08-24 深圳智微电子科技有限公司 Sm3算法的硬件实现装置
CN113300829B (zh) * 2021-05-20 2023-06-09 深圳智微电子科技有限公司 Sm3算法的硬件实现装置
CN113721986A (zh) * 2021-07-23 2021-11-30 浪潮电子信息产业股份有限公司 一种数据压缩方法、装置及电子设备和存储介质
WO2023000577A1 (zh) * 2021-07-23 2023-01-26 浪潮电子信息产业股份有限公司 一种数据压缩方法、装置及电子设备和存储介质
CN113721986B (zh) * 2021-07-23 2024-02-09 浪潮电子信息产业股份有限公司 一种数据压缩方法、装置及电子设备和存储介质
CN113300831A (zh) * 2021-07-26 2021-08-24 苏州浪潮智能科技有限公司 一种安全散列算法的实现方法、系统、介质及设备
CN113300831B (zh) * 2021-07-26 2021-10-29 苏州浪潮智能科技有限公司 一种安全散列算法的实现方法、系统、介质及设备
CN114978473A (zh) * 2022-05-07 2022-08-30 海光信息技术股份有限公司 一种sm3算法的处理方法、处理器、芯片及电子设备
CN114978473B (zh) * 2022-05-07 2024-03-01 海光信息技术股份有限公司 一种sm3算法的处理方法、处理器、芯片及电子设备

Also Published As

Publication number Publication date
CN112367158B (zh) 2023-05-16

Similar Documents

Publication Publication Date Title
CN112367158A (zh) 一种加速sm3算法的方法、处理器、芯片及电子设备
US7299355B2 (en) Fast SHA1 implementation
CN111464308A (zh) 一种实现多种哈希算法可重构的方法和系统
CN111913749A (zh) 基于流水线的sm3算法fpga实现方法及系统
JP4612680B2 (ja) Md5ダイジェスティングを実行する装置および方法
CN115344237A (zh) 结合Karatsuba和蒙哥马利模乘的数据处理方法
Chaves et al. Secure hashing: Sha-1, sha-2, and sha-3
CN115525342A (zh) 一种sm3密码杂凑算法的加速方法及指令集处理器
O'Melia et al. Enhancing the performance of symmetric-key cryptography via instruction set extensions
CN114063973B (zh) 伽罗华域乘法器及纠删编解码系统
Kahri et al. Efficient FPGA hardware implementation of secure hash function SHA-256/Blake-256
Van Hieu et al. Hardware implementation for fast block generator of Litecoin blockchain system
US20030002666A1 (en) Method and apparatus for creating a message digest using a parallel, one-way hash algorithm
CN116318660B (zh) 一种消息扩展与压缩方法及相关装置
CN114978473B (zh) 一种sm3算法的处理方法、处理器、芯片及电子设备
CN108768615B (zh) 散列算法在同一框架下的asic芯片实现方法
CN114553424B (zh) Zuc-256流密码轻量级硬件系统
CN115525341A (zh) 一种md5信息摘要算法的加速方法及指令集处理器
Kahri et al. An FPGA implementation of the SHA-3: The BLAKE hash function
Parelkar Authenticated encryption in hardware
Kahri et al. An FPGA implementation and comparison of the SHA-256 and Blake-256
US11658807B2 (en) Circuit for performing hash algorithm, computing chip, data processing device and method
CN213482935U (zh) 执行哈希算法的电路、计算芯片和加密货币矿机
CN114626537B (zh) 一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法
Wang et al. Optimized implementations of stream cipher ZUC-256 algorithm

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
GR01 Patent grant
GR01 Patent grant