CN109547192A - Sm3密码杂凑算法的并行化优化方法 - Google Patents
Sm3密码杂凑算法的并行化优化方法 Download PDFInfo
- Publication number
- CN109547192A CN109547192A CN201811323148.3A CN201811323148A CN109547192A CN 109547192 A CN109547192 A CN 109547192A CN 201811323148 A CN201811323148 A CN 201811323148A CN 109547192 A CN109547192 A CN 109547192A
- Authority
- CN
- China
- Prior art keywords
- function
- algorithm
- cryptographic hash
- variable
- iteration
- 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
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/06—Cryptographic 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/0643—Hash functions, e.g. MD5, SHA, HMAC or f9 MAC
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/08—Key distribution or management, e.g. generation, sharing or updating, of cryptographic keys or passwords
- H04L9/0861—Generation of secret information including derivation or calculation of cryptographic keys or passwords
- H04L9/0863—Generation of secret information including derivation or calculation of cryptographic keys or passwords involving passwords or one-time passwords
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L9/00—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
- H04L9/32—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
- H04L9/3236—Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials using cryptographic hash functions
Abstract
本发明公布了一种SM3密码杂凑算法的并行化优化方法,SM3密码杂凑算法包括SM3消息扩展函数和SM3消息压缩函数;采用多路并行算法,通过将SM3密码杂凑算法中的循环运算展开,将多轮迭代合并,从而简化SM3密码杂凑算法所需要的运算;将展开的SM3密码杂凑算法中潜在的并行运算向量实现,由此实现在SM3密码杂凑函数的内部并行化;并行化优化方法可在支持同时执行向量指令和非向量指令的计算平台上运行。本发明方法实现在SM3密码杂凑函数的内部并行化,进而提升运算速度;应用在可同时执行向量指令和非向量指令的计算平台上,计算速率更高。
Description
技术领域
本发明属于安全密码应用技术领域,涉及一种SM3密码杂凑函数的并行化优化算法,以及该并行化算法在SIMD(Single Instruction,Multiple Data)指令集上的实现。具体涉及SM3的4路并行和8路并行算法,以及这2种并行算法在ARM/NEON指令集、AVX2指令集上的具体实施例。
背景技术
密码杂凑(Hash)函数是一类用途广泛的基础密码算法,除了用于计算数据杂凑值之外,还是数字签名、消息认证码等众多密码方案、安全协议的基本组成部分。常用的密码杂凑函数包括美国国家标准与技术研究所(NIST)发布的SHA-1算法、SHA-2系列算法、由欧洲研究者设计的RIPEMD-160算法、NIST评选的SHA-3算法等。密码杂凑函数的典型应用经常涉及大量数据处理和高速网络通信,这些应用场景对密码杂凑函数的实现性能有较高的要求。为了提高密码杂凑函数的处理速度,处理器厂商开始在CPU中提供了常用密码杂凑函数的硬件实现,例如Intel在其部分处理器中增加了支持SHA-1和SHA-256计算的CPU指令,这些算法的专用硬件指令实现相对于软件实现有非常大的性能提升。
SM3密码杂凑函数是由中国国家密码管理局公布的中国密码行业标准,用于在商用领域中取代SHA-1、SHA-2等国外算法。SM3也是目前中国商用密码标准体系中唯一的密码杂凑函数,是SM2公钥密码算法、SSL VPN协议等商用密码标准中的关键组成部分。由于目前使用最广泛的Intel/AMD X86处理器和ARM处理器并不提供SM3算法的硬件实现,因此如何在这些通用处理器上提供SM3算法的高性能软件实现对SM3算法的实际应用具有重要的意义。
目前主流的Intel/AMD X86处理器和ARM处理器,都可以同时支持非向量指令集和向量指令集的计算,在ARM/NEON指令集、X86/AVX2指令集的计算平台上,常规的并行算法,往往是通过向量寄存器多路并行,同时执行多个SM3算法,但是这样的算法在执行的时候不能充分利用非向量处理器的计算资源,也无法提高单个SM3密码算法的运算速度。迫切需要一种计算资源利用更加充分,单线程SM3运算速度更快的算法。
发明内容
为了在并行环境中实现更加高效的SM3算法,提出一种SM3密码杂凑函数的并行化算法,以及该并行化算法在SIMD(Single Instruction,Multiple Data)指令集上的实现。本发明可以同时利用处理器内的向量指令运算和非向量指令运算,加快SM3密码杂凑的运算速度。
本发明的核心是:提出了SM3密码杂凑算法的4路并行和8路并行算法,并将这两种并行算法在ARM/NEON指令集、X86/AVX2指令集上具体实施实现。通过分析可以发现,本发明提供的SM3密码杂凑算法的并行优化方法可以同时利用处理器内的向量指令运算和非向量指令运算,且当处理器SIMD指令集支持4路并行和8路并行时,采用8路并行速度更快。
SM3密码杂凑函数采用了典型的构造。算法的核心是一个压缩函数,压缩函数具有256位的内部状态,512位消息经过消息扩展函数变化后,通过压缩函数压入256位的内部状态,通过64轮迭代,输出256位的结果。SM3算法的基本运算单位是32位字。
为方便叙述,下面给出本发明采用的运算符号及相应的含义:
·mod模运算;
·∧:32位比特与运算;
·∨:32位比特或运算;
·32位比特非运算;
·32位比特异或运算;
·+:mod 232比特算术加运算;
·<<<k:32位比特循环左移k比特运算;
·←:向左赋值运算符。
为方便叙述,下面给出原始标准SM3算法的消息扩展函数和压缩函数定义:
SM3消息扩展函数定义:
SM3消息扩展函数将16个字长度的消息转化成67个字长度的变量W0,W1,...,W67和64个字长度的变量W′0,W′1,...,W′63,供SM3的压缩函数使用。
SM3消息扩展算法如下:
1)首先将512位的消息分组分为16个字W0,W1,...,W15
2)令j=16,...,67,
3)令j=0,...,63,
其中,P1()是一个线性函数。
SM3压缩函数定义
输入为64个字长度的W0,W1,...,W63和变量W′0,W′1,...,W′63,SM3压缩函数共64轮;
令j=0,...,63,每轮计算定义如下:
SS1←((A<<<12)+E+(Tj<<<(j mod 32)))<<<7
TT1←FFj(A,B,C)+D+SS2+W′j
TT2←GGj(E,F,G)+H+SS1+Wj
D←C
C←B<<<9
B←A
A←TT1
H←G
G←F<<<19
F←E
E←P0(TT2)
其中,A,B,C,D,E,F,G,H为迭代状态字,循环的第一轮使用固定的常数,SS1,SS2,TT1,TT2为临时变量,Ti为常量,FFj(),GGj(),P0()为线性函数。最后一轮的状态变量A,B,C,D,E,F,G,H,作为压缩函数的输出。
本发明提供的技术方案是:
一种SM3密码杂凑算法的并行化优化方法,SM3密码杂凑算法包括SM3消息扩展函数和SM3消息压缩函数;采用4路并行算法或8路并行算法,通过将SM3密码杂凑算法中的循环运算展开,在多轮(4轮或8轮)迭代做冗余运算和冗余变量的消除,再将变化后的压缩函数和消息扩展函数按照迭代合并,从而简化算法所需要的运算,并将展开的SM3密码杂凑算法中潜在的并行运算通过向量的方法实现,由此实现在SM3密码杂凑函数的内部并行化,进而提升运算速度;4路并行算法和8路并行算法具体是:在4路或8路合并后的函数的并行部分,使用具体向量指令代替并行的伪代码,而在非并行部分,使用通用非向量指令执行;所述并行化优化方法在支持同时执行向量指令和非向量指令的计算平台上运行。
以4轮迭代并行化为例(8轮迭代同理),4路并行算法将SM3密码杂凑算法的展开与并行化过程具体包括如下步骤:
1)SM3压缩函数共包含64轮迭代(循环)运算,将64轮循环运算的执行按照每4轮迭代/循环展开,迭代展开之后再进行计算;在SM3压缩函数迭代展开过程中,可进行状态变量替换和/或输入变量替换;
1.1)进行状态变量替换,由于原始标准SM3算法中,有些变量值没有变化却需要传递给下一个迭代的其他变量,做了多余的赋值操作,如果迭代被展开,则可以将这些不变的变量用统一的变量来表示,从而省去了赋值操作。如在本发明中,每4轮迭代的值不变的状态变量都用该4轮迭代的首轮的状态变量表示,以简化赋值;
1.2)进行输入变量替换,进一步简化压缩函数的计算;原始标准SM3算法中的压缩函数,所需输入变量W0,W1,...,W67和W′0,W′1,...,W′63,通过合并这些变量的一些计算,使得一部分计算可以提前、并行的计算,将合并后变量设为V0,V1,...,V63和V′0,V′1,...,V′63作为变化后的新压缩函数所需要输入变量,即每次迭代需要变量Vj,Vj+1,Vj+2,Vj+3和V′j,V′j+1,V′j+2,V′j+3,其中j是本发明算法当前迭代相对原始标准SM3算法所在的迭代轮数。
2)将消息扩展函数的64轮运算按照同样4轮的循环/迭代展开,则新的消息扩展函数刚好可以在j轮的时候,利用j轮时压缩函数的初始状态,并行地生成新压缩函数在j轮迭代所需要的变量Vj,Vj+1,Vj+2,Vj+3和V′j,V′j+1,V′j+2,V′j+3;
3)迭代展开后的压缩函数和消息扩展函数可以按轮对应合并,表示为4路消息压缩函数;
经过转换,SM3密码杂凑算法等价于每轮执行步骤2)中SM3消息扩展函数迭代展开后的1轮循环和步骤1)SM3压缩函数迭代展开后的1轮循环,即相当于标准算法执行压缩函数和消息扩展函数各4次迭代;
Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3可以通过并行方式进行计算,由此实现利用现代处理器中的SIMD指令集加速计算。
8路消息压缩函数原理类似,按照8轮循环展开,每轮需要计算变量Vj,Vj+1,Vj+2,Vj+3Vj+4,Vj+5,Vj+6,Vj+7和V′j,V′j+1,V′j+2,V′j+3,V′j+4,V′j+5,V′j+6,V′j+7。
针对上述SM3密码杂凑函数的并行化优化方法,进一步地,本发明中采用的SM3消息扩展函数和压缩函数,具体地,SM3消息扩展函数将512位的消息分组分为16个字,再将16个字长度的消息转化(通过线性函数)成67个字长度的变量W0,W1,...,W67和64个字长度的变量W′0,W′1,...,W′63,供SM3压缩函数使用。SM3压缩函数的输入变量为64个字长度的W0,W1,...,W63和变量W′0,W′1,...,W′63,SM3压缩函数共计算64轮;将最后一轮的状态变量A,B,C,D,E,F,G,H作为压缩函数的输出。
目前主流的CPU除了基本的通用指令集之外,还包括SIMD(Single Instruction,Multiple Data)指令集等扩展指令集,例如:AVX/AVX2指令集,NEON指令集。SIMD指令集又称为向量指令集,一般提供一组和通用指令集不共享的寄存器(向量寄存器),SIMD指令集可以在向量寄存器上执行并行计算,一个指令可以对向量寄存器中的一组数据进行并行计算。
Intel AVX-2支持256位的AVX2指令集,AVX2指令集包含16个256位的向量寄存器,可以执行8路32位标量的向量计算。Haswell架构的处理器支持Intel AVX-512指令集。AVX-512指令集包含32个512位的向量寄存器,可以执行16路的32位字向量运算。NEON是ARMCortex-A架构的SIMD指令集,包含16个128位的SIMD寄存器,可以在这些寄存器上执行4路的32位标量的向量计算。
针对上述SM3密码杂凑函数的并行化优化方法,进一步地,给定两个向量A=(a1,a2,...,an),B=(b1,b2,...,bn),其中ai,bi为字,常用向量指令的计算方式包括:A+B、A+B、A<<<k、
针对上述SM3密码杂凑函数的并行化优化方法,进一步地,该并行化优化方法在可同时执行向量指令和非向量指令的计算平台上,能够得到更高的计算速率。
下面将描述如何将标准的SM3算法进行4/8展开和再此基础上的4/8路并行消息压缩算法。
4/8路压缩函数展开算法
针对上述SM3密码杂凑函数的并行化优化方法,进一步地,4路或8路展开压缩函数中,SM3消息压缩函数共包含64轮运算,4路并行算法将每4轮进行循环展开操作,那么,4路并行算法中循环展开的计算过程(SM3压缩函数迭代展开过程)包括如下步骤:
1)SM3消息压缩函数按照4轮顺序执行的方式代替原始标准算法中的4轮迭代执行。
2)将顺序执行中,值相同的变量简化成同一个变量。
3)步骤2)后,将所有对顺序执行没有影响的操作(变量替换后冗余的赋值语句等)删除。
4)压缩函数的8轮迭代展开和变量替代与4轮展开的方法一致,而输入变量的替代使用则如下公式。
4轮展开:
Vj=Dj+Wj
V′j=Hj+W′j
Vj+1=Cj+Wj+1
V′j+1=Gj+W′j+1
Vj+2=(Bj<<<9)+Wj+2
V′j+2=(Fj<<<19)+W′j+2
Vj+3=(Aj<<<9)+Wj+3
V′j+3=(Ej<<<19)+W′j+3
8轮展开:
Vj=Dj+Wj
V′j=Hj+W′j
Vj+1=Cj+Wj+1
V′j+1=Gj+W′j+1
Vj+2=(Bj<<<9)+Wj+2
V′j+2=(Fj<<<19)+W′j+2
Vj+3=(Aj<<<9)+Wj+3
V′j+3=(Ej<<<19)+W′j+3
Vj+4=(Aj+1<<<9)+Wj+4
V′j+4=(Ej+1<<<19)+W′j+4
Vj+5=(Aj+2<<<9)+Wj+5
V′j+5=(Ej+2<<<19)+W′j+5
Vj+6=(Aj+3<<<9)+Wj+6
V′j+6=(Ej+3<<<19)+W′j+6
Vj+7=(Aj+4<<<9)+Wj+7
V′j+7=(Ej+4<<<19)+W′j+7
具体的,4轮展开算法为例,在执行到步骤1)后,展开结果如下:
设T′j=Tj<<<(j mod 32),每4轮展开之后为:
SS0,j←Aj<<<12
SS1,j←(SS0,j+Ej+T′j)<<<7
TT1,j←FFj(Aj,Bj,Cj)+Dj+SS2,j+W′j
TT2,j←GGj(Ej,Vj,Gj)+Hj+SS1,j+Wj
Dj+1←Cj
Cj+1←Bj<<<9
Bj+1←Aj
Aj+1←TT1,j
Hj+1←Gj
Gj+1←Fj<<<19
Fj+1←Ej
Ej+1←P0(TT2,j)
SS0,j+1←Aj+1<<<12
SS1,j+1←(SS0,j+1+Ej+1+T′j+1)<<<7
TT1,j+1←FFj+1(Aj+1,Bj+1,Cj+1)+Dj+1+SS2,j+1+W′j+1
TT2,j+1←GGj+1(Ej+1,Fj+1,Gj+1)+Hj+1+SS1,j+1+Wj+1
Dj+2←Cj+1
Cj+2←Bj+1<<<9
Bj+2←Aj+1
Aj+2←TT1,j+1
Hj+2←Gj+1
Gj+2←Fj+1<<<19
Fj+2←Ej+1
Ej+2←P0(TT2,j+1)
SS0,j+2←Aj+2<<<12
SS1,j+2←(SS0,j+2+Ej+2+T′j+2)<<<7
TT1,j+2←FFj+2(Aj+2,Bj+2,Cj+2)+Dj+2+SS2,j+2+W′j+2
TT2,j←GGj+2(Ej+2,Fj+2,Gj+2)+Hj+2+SS1,j+2+Wj+2
Dj+3←Cj+2
Cj+3←Bj+2<<<9
Bj+3←Aj+2
Aj+3←TT1,j+2
Hj+3←Gj+2
Gj+3←Fj+2<<<19
Fj+3←Ej+2
Ej+3←P0(TT2,j+2)
SS0,j+3←Aj+3<<<12
SS1,j+3←(SS0,j+3+Ej+3+T′j+3)<<<7
TT1,j+3←FFj+3(Aj+3,Bj+3,Cj+3)+Dj+3+SS2,j+3+W′j+3
TT2,j+3←GGj+3(Ej+3,Fj+3,Gj+3)+Hj+3+SS1,j+3+Wj+3
Dj+4←Cj+3
Cj+4←Bj+3<<<9
Bj+4←Aj+3
Aj+4←TT1,j+3
Hj+4←Gj+3
Gj+4←Fj+3<<<19
Fj+4←Ej+3
Ej+4←P0(TT2,j+3)
在原始的64轮迭代中,只有变量A,E是每一轮都需要重新生成的,其余的变量只是简单循环位移和传递,比如变量B实际上是上一轮的变量A,变量C实际上是上一轮的变量B<<<9或者上两轮的变量A<<<9,因此,迭代展开的时候,可以用4轮中第1轮的迭代的变量状态来替换后几轮迭代的状态。
具体的,本发明的4轮展开算法执行到步骤2),经过状态变量替换后结果如下:
SS0,j←Aj<<<12
SS1,j←(SS0,j+Ej+T′j)<<<7
TT1,j←FFj(Aj,Bj,Cj)+Dj+SS2,j+W′j
TT2,j←GGj(Ej,Fj,Gj)+Hj+SS1,j+Wj
Aj+1←TT1,j
Ej+1←P0(TT2,j)
SS0,j+1←Aj+1<<<12
SS1,j+1←(SS0,j+1+Ej+1+T′j+1)<<<7
TT1,j+1←FFj+1(Aj+1,Aj,Bj)+Cj+SS2,j+1+W′j+1
TT2,j+1←GGj+1(Ej+1,Ej,Fj)+Gj+SS1,j+1+Wj+1
Aj+2←TT1,j+1
Ej+2←P0(TT2,j+1)
SS0,j+2←Aj+2<<<12
SS1,j+2←(SS0,j+2+Ej+2+T′j+2)<<<7
TT1,j+2←FFj+2(Aj+2,Aj+1,Aj<<<9)+(Bj<<<9)+SS2,j+2+W′j+2
TT2,j←GGj+2(Ej+2,Ej+1,Ej<<<19)+(Fj<<<19)+SS1,j+2+Wj+2
Aj+3←TT1,j+2
Ej+3←P0(TT2,j+2)
SS0,j+3←Aj+3<<<12
SS1,j+3←(SS0,j+3+Ej+3+T′j+3)<<<7
TT1,j+3←FFj+3(Aj+3,Aj+2,Aj+1<<<9)+(Aj<<<9)+SS2,j+3+W′j+3
TT2,j+3←GGj+3(Ej+3,Ej+2,Ej+1<<<19)+(Ej<<<19)+SS1,j+3+Wj+3
Dj+4←Aj+1<<<9
Cj+4←Aj+2<<<9
Bj+4←Aj+3
Aj+4←TT1,j+3
Hj+4←Ej+1<<<19
Gj+4←Ej+2<<<19
Fj+4←Ej+3
Ej+4←P0(TT2,j+3)
经过变量代替,许多中间变量以及变量的赋值语句都被简化,减少了变量个数和算法运算。
同时,展开后的SM3杂凑算法,可以替换压缩函数的输入变量,使其可以并行生成,步骤4)的输入变量替换后结果如下:
SS0,j←Aj<<<12
SS1,j←(SS0,j+Ej+T′j)<<<7
TT1,j←FFj(Aj,Bj,Cj)与SS2,j+V′j
TT2,j←GGj(Ej,Fj,Gj)+SS1,j+Vj
Aj+1←TT1,j
Ej+1←P0(TT2,j)
SS0,j+1←Aj+1<<<12
SS1,j+1←(SS0,j+1+Ej+1+T′j+1)<<<7
TT1,j+1←FFj+1(Aj+1,Aj,Bj)+SS2,j+1+V′j+1
TT2,j+1←GGj+1(Ej+1,Ej,Fj)+SS1,j+1+Vj+1
Aj+2←TT1,j+1
Ej+2←P0(TT2,j+1)
SS0,j+2←Aj+2<<<12
SS1,j+2←(SS0,j+2+Ej+2+T′j+2)<<<7
TT1,j+2←FFj+2(Aj+2,Aj+1,Aj<<<9)+SS2,j+2+V′j+2
TT2,j←GGj+2(Ej+2,Ej+1,Ej<<<19)+SS1,j+2+Vj+2
Aj+3←TT1,j+2
Ej+3←P0(TT2,j+2)
SS0,j+3←Aj+3<<<12
SS1,j+3←(SS0,j+3+Ej+3+T′j+3)<<<7
TT1,j+3←FFj+3(Aj+3,Aj+2,Aj+1<<<9)+SS2,j+3+V′j+3
TT2,j+3←GGj+3(Ej+3,Ej+2,Ej+1<<<19)+SS1,j+3+Vj+3
Dj+4←Aj+1<<<9
Cj+4←Aj+2<<<9
Bj+4←Aj+3
Aj+4←TT1,j+3
Hj+4←Ej+1<<<19
Gj+4←Ej+2<<<19
Fj+4←Ej+3
Ej+4←P0(TT2,j+3)
经过转换,每轮迭代可以先计算出Vj,Vj+1,Vj+2,Vj+3和V′j,V′j+1,V′j+2,V′j+3,再计算上述步骤4)得到的迭代过程。而Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3可以通过下面的算法以并行的方式计算,因此可以利用现代处理器中的SIMD指令集加速计算。
8轮算法原理和过程与4路一致,仅步骤4)的替换公式不同,每轮所需的输入变量变为Vj,Vj+1,Vj+2,Vj+3Vj+4,Vj+5,Vj+6,Vj+7和V′j,V′j+1,V′j+2,V′j+3,V′j+4,V′j+5,V′j+6,V′j+7。其结果如下:
SS1,j←(SS0,j+Ej+T′j)<<<7
TT1,j←FFj(Aj,Bj,Cj)+SS2,j+V′j
TT2,j←GGj(Ej,Fj,Gj)+SS1,j+Vj
Aj+1←TT1,j
Ej+1←P0(TT2,j)
SS0,j+1←Aj+1<<<12
SS1,j+1←(SS0,j+1+Ej+1+T′j+1)<<<7
TT1,j+1←FFj+1(Aj+1,Aj,Bj)+SS2,j+1+V′j+1
TT2,j+1←GGj+1(Ej+1,Ej,Fj)+SS1,j+1+Vj+1
Aj+2←TT1,j+1
Ej+2←P0(TT2,j+1)
SS0,j+2←Aj+2<<<12
SS1,j+2←(SS0,j+2+Ej+2+T′j+2)<<<7
TT1,j+2←FFj+2(Aj+2,Aj+1,Aj<<<9)+SS2,j+2+V′j+2
TT2,j←GGj+2(Ej+2,Ej+1,Ej<<<19)+SS1,j+2+Vj+2
Aj+3←TT1,j+2
Ej+3←P0(TT2,j+2)
SS0,j+3←Aj+3<<<12
SS1,j+3←(SS0,j+3+Ej+3+T′j+3)<<<7
TT1,j+3←FFj+3(Aj+3,Aj+2,Aj+1<<<9)+SS2,j+3+V′j+3
TT2,j+3←GGj+3(Ej+3,Ej+2,Ej+1<<<19)+SS1,j+3+Vj+3
Aj+4←TT1,j+3
Ej+4←P0(TT2,j+3)
SS0,j+4←Aj+4<<<12
SS1,j+4←(SS0,j+4+Ej+4+T′j+4)<<<7
TT1,j+4←FFj+4(Aj+4,Aj+3,Aj+2<<<9)+SS2,j+4+V′j+4
TT2,j+4←GGj+4(Ej+4,Ej+3,Ej+2<<<19)+SS1,j+4+Vj+4
Aj+5←TT1,j+4
Ej+5←P0(TT2,j+4)
SS0,j+5←Aj+5<<<12
SS1,j+5←(SS0,j+5+Ej+5+T′j+5)<<<7
TT1,j+5←FFj+5(Aj+5,Aj+4,Aj+3<<<9)+SS2,j+5+V′j+5
TT2,j+5←GGj+5(Ej+5,Ej+4,Ej+3<<<19)+SS1,j+5+Vj+5
Aj+6←TT1,j+5
Ej+6←P0(TT2,j+5)
SS0,j+6←Aj+6<<<12
SS1,j+6←(SS0,j+6+Ej+6+T′j+6)<<<7
TT1,j+6←FFj+6(Aj+6,Aj+5,Aj+4<<<9)+SS2,j+6+V′j+6
TT2,j+6←GGj+6(Ej+6,Ej+5,Ej+4<<<19)+SS1,j+6+Vj+6
Aj+7←TT1,j+6
Ej+7←P0(TT2,j+6)
SS0,j+7←Aj+7<<<12
SS1,j+7←(SS0,j+7+Ej+7+T′j+7)<<<8
TT1,j+7←FFj+7(Aj+7,Aj+6,Aj+5<<<9)+SS2,j+7+V′j+7
TT2,j+7←GGj+7(Ej+7,Ej+6,Ej+5<<<19)+SS1,j+7+Vj+7
Dj+8←Aj+5<<<9
Cj+8←Aj+6<<<9
Bj+8←Aj+7
Aj+8←TT1,j+7
Hj+8←Ej+5<<<19
Gj+8←Ej+6<<<19
Fj+8←Ej+7
Ej+8←P0(TT2,j+7)
4-路并行的消息扩展算法构造及与4-路压缩函数展开算法合并:
根据4路展开SM3消息压缩函数,第j轮迭代(j=0,4,8,...,60)的时候,需要先计算变量Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3,将消息扩展函数同样按照4轮展开,和压缩函数同步计算,在第j轮迭代(j=0,4,8,...,60)的时候,能够并行计算得到Vj,Vj+1,Vj+2,Vj+3和V′j,V′j+1,V′j+2,V′j+3,计算过程如下:
1)将消息扩展函数按照4路展开,用顺序执行4轮来代替4次迭代。
2)根据压缩函数当前迭代的变量值,计算Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3。
3)将步骤1)和步骤2)可以并行的部分按照并行算法的方法实现。
4)和压缩函数同步执行,即将消息扩展函数和压缩函数合并成一个函数执行。
具体算法如下,
令压缩函数的当前轮数为j=12,16,20,...,60,Wj-12,Wj-15,...,Wj+3为当前消息分组已经生成的扩展,压缩函数的当前状态为A,B,C,D,E,F,G,H,4路并行算法生成Wj+4,Wj+5,Wj+6,Wj+7和Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3。首先将消息扩展函数以4轮展开,并生成Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3
Vj=D+Wj
Vj+1=C+Wj+1
Vj+2=(B<<<9)+Wj+2
Vj+3=(A<<<9)+Wj+3
V′j=H+W′j
V′j+1=G+W′j+1
V′j+2=(F<<<19)+W′j+2
V′j+3=(E<<<19)+W′j+3
由于等价于如下的运算:
令A′j=Aj<<<9,B′j=Bj<<<9,E′j=Ej<<<19,F′j=Fj<<<19,可以将上述计算以4路向量并行实现。
下面是消息扩展函数的4路并行算法,设Ti都是包含4个32位值的向量,<<<计算均为向量运算,线性函数P1()也由相应的向量运算构成。
T0←(Wj+1,Wj+2,Wj+3,0)
T0←T0<<<15
T1←(Wj-5,Wj-4,Wj-3,Wj-2)
T1←(Wj-12,Wj-11,Wj-10,Wj-9)
T0←P1(T0)
T1←(Wj-9,Wj-8,Wj-7,Wj-6)
T1←T1<<<7
T1←(Wj-6,Wj-5,Wj-4,Wj-3)
T1←(0,0,0,T0[0])
T1←T1<<<15
T1←P1(T1)
(Wj+4,Wj+5,Wj+6,Wj+7)←T0
T1←(D,C,B′,A′)
T2←(Wj,Wj+1,Wj+2,Wj+3)
T1←T1+T2
(Vj,Vj+1,Vj+2,Vj+3)←T1
T3←(F,G,F′,E′)
T2←T3+T2
(V′j,V′j+1,V′j+2,V′j+3)←T2
按照向量的方法实现后,计算量降低,同时将消息扩展函数合并到压缩函数中,第j轮迭代(j=12,16,...,60)的时候,仅在Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3变量需要时,相应的变量Wj-12,Wj-15,...,Wj+3才需要生成,而变量W′j,W′j+1,W′j+2,W′j+3仅作为中间变量,无需保存。
对于第j轮迭代(j=0,4,8),由于参与计算的变量W直接来源于消息分组,所以无需使用向量化算法计算变量W,计算Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3直接使用以下向量算法。
T0←(Wj+4,Wj+5,Wj+6,Wj+7)
T1←(D,C,B′,A′)
T2←(Wj,Wj+1,Wj+2,Wj+3)
T1←T1+T2
(Vj,Vj+1,Vj+2,Vj+3)←T1
T3←(F,G,F′,E′)
T2←T3+T2
(V′j,V′j+1,V′j+2,V′j+3)←T2
可以看到,本发明的4路并行消息扩展算法将标准算法的的消息扩展函数的64轮迭代变为16轮迭代,16轮中的每一轮的输出刚好是4路压缩函数扩展函数对应轮的输入。其每一轮输入又刚好是上一轮4路压缩函数扩展函数输出、或需要压缩消息和系统初始状态。因此可以跟4路压缩函数展开算法合并,根据轮数交替执行。合并后的算法就是本发明的SM3的4路并行优化算法。
8-路并行的消息扩展算法构造及与8-路压缩函数展开算法合并:
根据8路展开压缩函数,第j轮迭代(j=0,8,...,56)的时候,需要先计算变量Vj,Vj+1,Vj+2,Vj+3Vj+4,Vj+5,Vj+6,Vj+7和V′j,V′j+1,V′j+2,V′j+3,V′j+4,V′j+5,V′j+6,V′j+7,将消息扩展函数同样按照8轮展开,和压缩函数同步计算,在第j轮迭代(j=0,8,...,56)的时候,能够得到并行计算得到8路展开压缩函数需要的变量,计算过程如下,
1)将消息扩展函数按照8路展开,用顺序执行8轮来代替8次迭代。
2)根据压缩函数当前状态变量,计算Vj,Vj+1,Vj+2,Vj+3Vj+4,Vj+5,Vj+6,Vj+7和V′j,V′j+1,V′j+2,V′j+3,V′j+4,V′j+5,V′j+6,V′j+7。
3)将步骤1)和步骤2)可以并行部分按照并行算法的方法实现。
4)和压缩函数同步执行。
同样使用向量算法计算变量V,V′,令压缩函数的当前轮数为j=16,24,...,56,Wj-16,Wj-15,...,Wj+3为当前消息分组已经生成的扩展,压缩函数的当前状态为A,B,C,D,E,F,G,H。首先将消息扩展函数以8轮展开,并生成V,V′,算法如下:
Vj=Dj+Wj
Vj+1=Cj+Wj+1
Vj+2=(Bj<<<9)+Wj+2
Vj+3=(Aj<<<9)+Wj+3
V′j=Hj+W′j
V′j+1=Gj+W′j+1
V′j+2=(Fj<<<19)+W′j+2
V′j+3=(Ej<<<19)+W′j+3
Vj+4=(Aj+1<<<9)+Wj+4
Vj+5=(Aj+2<<<9)+Wj+5
Vj+6=(Aj+3<<<9)+Wj+6
Vj+7=(Aj+4<<<9)+Wj+7
V′j+4=(Ej+1<<<19)+W′j+4
V′j+5=(Ej+2<<<19)+W′j+5
V′j+6=(Ej+3<<<19)+W′j+6
V′j+7=(Ej+4<<<19)+W′j+7
和4路并行一样,给出并行写法,注意到,Vj+4,Vj+4′只能在Aj,Ej生成后才能生成,而Aj,Ej的计算需要Vj,Vj′,所以Vj,Vj′必须先于Hj+4,Vj+4′生成,V,V′的计算并行度只有4。
令A′j=Aj<<<9,B′j=Bj<<<9,E′j=Ej<<<19,F′j=Fj<<<19,可以将上述计算以4路向量并行实现。可以利用8路并行算法生成W和4路并行生成V,V′:
T0←(Wj+1,Wj+2,Wj+3,0,0,0,0,0)
T0←T0<<<15
T1←(Wj-5,Wj-4,Wj-3,Wj-2,Wj-1,Wj,Wj+1,Wj+2)
T1←(Wj-12,Wj-11,Wj-10,Wj-9,Wj-8,Wj-7,Wj-6,Wj-5)
T0←P1(T0)
T1←(Wj-9,Wj-8,Wj-7,Wj-6,Wj-5,Wj-4,Wj-3,Wj-2)
T1←T1<<<7
T1←(Wj-2,Wj-1,Wj,Wj+1,Wj+2,Wj+3,0,0)
T1←(0,0,0,T0[0],T0[1],T0[2],0,0)
T1←T1<<<15
T1←P1(T1)
T1←(0,0,0,0,0,0,T0[0],T0[1])
T1←T1<<<15
T1←(0,0,0,0,0,0,T0[3],T0[4])
T1←T1<<<15
T1←P1(T1)
(Wj+4,Wj+5,Wj+6,Wj+7,Wj+8,Wj+9,Wj+10,Wj+11)←T0
T1←(D,C,B′,A′)
T2←(Wj,Wj+1,Wj+2,Wj+3)
T1←T1+T2
(Vj,Vj+1,Vj+2,Vj+3)←T1
T1←(Aj,Aj+1,Aj+2,Aj+3)
T1←T1<<<19
T2←(Wj+4,Wj+5,Wj+6,Wj+7)
T1←T1+T2
(Vj+4,Vj+5,Vj+6,Vj+7)←T1
T1←(Wj,Wj+1,Wj+2,Wj+3)
T3←(F,G,F′,E′)
T1←T3+T1
(V′j,V′j+1,V′j+2,V′j+3)←T1
T1←(Wj+8,Wj+9,Wj+10,Wj+11)
T3←(Ej,Ej+1,Ej+2,Ej+3)
T3←T3<<<19
T1←T1+T3
(V′j+4,V′j+5,V′j+6,V′j+7)←T1
对于第j轮迭代(j=0,8),所需变量Wj(j=0,1,2,...,19),前16个来源于消息分组,后4个使用4路并行算法计算,所以无需使用8路的向量化算法计算变量W,W得到后,直接使用以下向量算法计算V,V′。流程如下:
T1←(D,C,B′,A′)
T2←(Wj,Wj+1,Wj+2,Wj+3)
T1←T1+T2
(Vj,Vj+1,Vj+2,Vj+3)←T1
T1←(Aj,Aj+1,Aj+2,Aj+3)
T1←T1<<<19
T2←(Wj+4,Wj+5,Wj+6,Wj+7)
T1←T1+T2
(Vj+4,Vj+5,Vj+6,Vj+7)←T1
T1←(Wj,Wj+1,Wj+2,Wj+3)
T3←(F,G,F′,E′)
T1←T3+T1
(V′j,V′j+1,V′j+2,V′j+3)←T1
T1←(Wj+8,Wj+9,Wj+10,Wj+11)
T3←(Ej,Ej+1,Ej+2,Ej+3)
T3←T3<<<19
T1←T1+T3
(V′j+4,V′j+5,V′j+6,V′j+7)←T1
可以看到,本发明的8路并行消息扩展算法将标准算法的的消息扩展函数的64轮迭代变为8轮迭代,8轮中的每一轮的输出刚好是8路压缩函数扩展函数对应轮的输入。其每一轮输入又刚好是上一轮8路压缩函数扩展函数输出(或消息和系统初始状态)。因此可以跟8路压缩函数展开算法合并,根据轮数交替执行。合并后的算法就是本发明的SM3的8路并行优化算法。在8路算法中,若出现变量的相互制约和要求的变量个数不是8的倍数等,不能全部按照8路来并行的部分,可使用4路并行。
以非向量指令集实现时,原始标准SM3压缩函数执行64轮;包括SM3扩展函数在内,共需2360次通用指令计算和对512位信息的16条内存读写指令。
在采用4路并行算法,同时使用向量指令集合非向量指令集时,包括4路展开的压缩函数,总计需要572次向量指令计算,143次向量指令内存读写,1624次通用指令计算,16次通用指令内存读写。
在采用8路并行算法,同时使用向量指令集合非向量指令集时,包括8路展开的压缩函数,总计需要200次向量计算,126次向量内存读写操作,1767次通用指令,16次通用指令内存读写。
与现有技术相比,本发明的有益效果是:
本发明提供一种SM3密码杂凑算法的并行化方法,通过将算法中的循环运算展开,将多轮迭代合并,从而简化算法所需要的运算,并将展开的算法中潜在的并行运算向量实现,由此实现在SM3密码杂凑函数的内部并行化,进而提升运算速度;该并行化方法在可同时执行向量指令和非向量指令的计算平台上,计算速率更高.
本发明通过深度挖掘SM3算法内部的并行性,结合SIMD指令集,充分利用了处理器的计算资源,大大提高了SM3算法的执行速度。
附图说明
图1为本发明采用4路并行方式执行SM3消息压缩函数的方法流程框图。
图2为本发明采用8路并行方式执行SM3消息压缩函数的方法流程框图。
具体实施方式
下面结合附图,通过实施例进一步描述本发明,但不以任何方式限制本发明的范围。
本发明提供一种SM3密码杂凑算法的并行化方法,通过将算法中的循环运算展开,将多轮迭代合并,从而简化算法所需要的运算,并将展开的算法中潜在的并行运算向量实现,由此实现在SM3密码杂凑函数的内部并行化,进而提升运算速度。
SIMD指令集
目前主流的CPU除了基本的通用指令集之外,还包括SIMD(Single Instruction,Multiple Data)指令集等扩展指令集,例如目前主流的Intel和AMD的X86处理器支持AVX/AVX2指令集,ARM Cortex-A系列架构的移动处理器支持NEON指令集。SIMD指令集又称为向量指令集,一般提供一组和通用指令集不共享的寄存器,SIMD指令集可以在向量寄存器上执行并行计算,一个指令可以对向量寄存器中的一组数据做并行计算。
Intel AVX-2支持256位的指令集,AVX2指令集包含16个256位的向量寄存器,可以执行8路32位标量的向量计算。目前Intel和AMD的主流笔记本、桌面处理器中均支持AVX2指令集。Intel已经公布了AVX-512指令集,Haswell架构的处理器中支持AVX-512指令集。AVX-512指令集包含32个512位的向量寄存器,可以执行16路的32位字向量运算。Intel的Atom支持什么指令集。NEON是ARM Cortex-A架构的SIMD指令集。NEON架构包含16个128位的SIMD寄存器,可以这些寄存器上执行4路的32位标量的向量计算。
给定两个向量A=(a1,a2,...,an),B=(b1,b2,...,bn),其中ai,bi为字,下面给出常用向量指令的计算方式:
A+B=(a1+b1,a2+b2,,..,an+bn)
A·B=(a1·b1,a2·b2,...,an·bn)
A<<<k=(a1<<<k,a2<<<k,...,an<<<k)
结合具体的指令集,将SM3的4路并行算法和8路并行算法具体实施,方式就是在算法的并行部分,使用具体的向量指令代替并行的伪代码,而在其余算法部分,使用4路展开优化算法或者8路展开优化算法。
根据图1流程,SM3压缩函数4路并行根据以下方法实现:
1).首先将512位的消息分组分为16个字W0,W1,...,W15
2).根据以下算法完成前12轮迭代。j=0,4,8
向量指令生成V,V′:
T0←(Wj+4,Wj+5,Wj+6,Wj+7)
T1←(D,C,B′,A′)
T2←(Wj,Wj+1,Wj+2,Wj+3)
T1←T1+T2
(Vj,Vj+1,Vj+2,Vj+s)←T1
T3←(F,G,F′,E′)
T2←T3+T2
(V′j,V′j+1,V′j+2,V′j+3)←T2
非向量指令完成迭代:
SS0,j←Aj<<<12
SS1,j←(SS0,j+Ej+T′j)<<<7
TT1,j←FFj(Aj,Bj,Cj)+SS2,j+V′j
TT2,j←GGj(Ej,Fj,Gj)+SS1,j+Vj
Aj+1←TT1,j
Ej+1←P0(TT2,j)
SS0,j+1←Aj+1<<<12
SS1,j+1←(SS0,j+1+Ej+1+T′j+1)<<<7
TT1,j+1←FFj+1(Aj+1,Aj,Bj)+SS2,j+1+V′j+1
TT2,j+1←GGj+1(Ej+1,Ej,Fj)+SS1,j+1+Vj+1
Aj+2←TT1,j+1
Ej+2←P0(TT2,j+1)
SS0,j+2←Aj+2<<<12
SS1,j+2←(SS0,j+2+Ej+2+T′j+2)<<<7
TT1,j+2←FFj+2(Aj+2,Aj+1,Aj<<<9)+SS2,j+2+V′j+2
TT2,j←GGj+2(Ej+2,Ej+1,Ej<<<19)+SS1,j+2+Vj+2
Aj+3←TT1,j+2
Ej+3←P0(TT2,j+2)
SS0,j+3←Aj+3<<<12
SS1,j+3←(SS0,j+3+Ej+3+T′j+3)<<<7
TT1,j+3←FFj+3(Aj+3,Aj+2,Aj+1<<<9)+SS2,j+3+V′j+3
TT2,j+3←GGj+3(Ej+3,Ej+2,Ej+1<<<19)+SS1,j+3+Vj+3
Dj+4←Aj+1<<<9
Cj+4←Aj+2<<<9
Bj+4←Aj+3
Aj+4←TT1,j+3
Hj+4←Ej+1<<<19
Gj+4←Ej+2<<<19
Fj+4←Ej+3
Ej+4←P0(TT2,j+3)
3).令j=12,16,20,...,60,Wj-12,Wj-15,...,Wj+3已经生成,使用向量指令集下的4路并行算法生成Wj+4,Wj+5,Wj+6,Wj+7和Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3,并执行4路展开算法。
向量指令生成V,V′:
T0←(Wj+1,Wj+2,Wj+3,0)
T0←T0<<<15
T1←(Wj-5,Wj-4,Wj-3,Wj-2)
T1←(Wj-12,Wj-11,Wj-10,Wj-9)
T0←P1(T0)
T1←(Wj-9,Wj-8,Wj-7,Wj-6)
T1←T1<<<7
T1←(Wj-6,Wj-5,Wj-4,Wj-3)
T1←(0,0,0,T0[0])
T1←T1<<<15
T1←P1(T1)
(Wj+4,Wj+5,Wj+6,Wj+7)←T0
T1←(D,C,B′,A′)
T2←(Wj,Wj+1,Wj+2,Wj+3)
T1←T1+T2
(Vj,Vj+1,Vj+2,Vj+3)←T1
T3←(F,G,F′,E′)
T2←T3+T2
(V′j,V′j+1,V′j+2,V′j+3)←T2
非向量指令完成迭代:
SS0,j←Aj<<<12
SS1,j←(SS0,j+Ej+T′j)<<<7
TT1,j←FFj(Aj,Bj,Cj)+SS2,j+V′j
TT2,j←GGj(Ej,Fj,Gj)+SS1,j+Vj
Aj+1←TT1,j
Ej+1←P0(TTT2,j)
SS0,j+1←Aj+1<<<12
SS1,j+1←(SS0,j+1+Ej+1+T′j+1)<<<7
TT1,j+1←FFj+1(Aj+1,Aj,Bj)+SS2,j+1+V′j+1
TT2,j+1←GGj+1(Ej+1,Ej,Fj)+SS1,j+1+Vj+1
Aj+2←TT1,j+1
Ej+2←P0(TT2,j+1)
SS0,j+2←Aj+2<<<12
SS1,j+2←(SS0,j+2+Ej+2+T′j+2)<<<7
TT1,j+2←FFj+2(Aj+2,Aj+1,Aj<<<9)+SS2,j+2+V′j+2
TT2,j←GGj+2(Ej+2,Ej+1,Ej<<<19)+SS1,j+2+Vj+2
Aj+3←TT1,j+2
Ej+3←P0(TT2,j+2)
SS0,j+3←Aj+3<<<12
SS1,j+3←(SS0,j+3+Ej+3+T′j+3)<<<7
TT1,j+3←FFj+3(Aj+3,Aj+2,Aj+1<<<9)+SS2,j+3+V′j+3
TT2,j+3←GGj+3(Ej+3,Ej+2,Ej+1<<<19)+SS1,j+3+Vj+3
Dj+4←Aj+1<<<9
Cj+4←Aj+2<<<9
Bj+4←Aj+3
Aj+4←TT1,j+3
Hj+4←Ej+1<<<19
Gj+4←Ej+2<<<19
Fj+4←Ej+3
Ej+4←P0(TT2,j+3)
4).将最后一轮的状态变量A,B,C,D,E,F,G,H,作为压缩函数的输出
根据图2流程,SM3压缩函数8路并行根据以下方法实现:
1).首先将512位的消息分组分为16个字W0,W1,...,W15
2).向量操作生成W16,W17,W18,W19
T0←(W13,W14,W15,0)
T0←T0<<<15
T1←(W7,W8,W9,W10)
T1←(W0,W1,W2,W3)
T0←P1(T0)
T1←(W3,W4,W5,W6)
T1←T1<<<7
T1←(W6,W7,W8,W9)
T1←(0,0,0,T0[0])
T1←T1<<<15
T1←P1(T1)
(W16,W17,W18,W19)←T0
3).根据以下算法完成前16轮迭代。j=0,8
向量操作:
T1←(D,C,B′,A′)
T2←(Wj,Wj+1,Wj+2,Wj+3)
T1←T1+T2
(Vj,Vj+1,Vj+2,Vj+3)←T1
T2←(Wj+4,Wj+5,Wj+6,Wj+7)
T1←(Wj,Wj+1,Wj+2,Wj+3)
T3←(F,G,F′,E′)
T1←T3+T1
(V′j,V′j+1,V′j+2,V′j+3)←T1
非向量操作:
SS1,j←(SS0,j+Ej+T′j)<<<7
TT1,j←FFj(Aj,Bj,Cj)+SS2,j+V′j
TT2,j←GGj(Ej,Fj,Gj)+SS1,j+Vj
Aj+1←TT1,j
Ej+1←P0(TT2,j)
SS0,j+1←Aj+1<<<12
SS1,j+1←(SS0,j+1+Ej+1+T′j+1)<<<7
TT1,j+1←FFj+1(Aj+1,Aj,Bj)+SS2,j+1+V′j+1
TT2,j+1←GGj+1(Ej+1,Ej,Fj)+SS1,j+1+Vj+1
Aj+2←TT1,j+1
Ej+2←P0(TT2,j+1)
SS0,j+2←Aj+2<<<12
SS1,j+2←(SS0,j+2+Ej+2+T′j+2)<<<7
TT1,j+2←FFj+2(Aj+2,Aj+1,Aj<<<9)+SS2,j+2+V′j+2
TT2,j←GGj+2(Ej+2,Ej+1,Ej<<<19)+SS1,j+2+Vj+2
Aj+3←TT1,j+2
Ej+3←P0(TT2,j+2)
SS0,j+3←Aj+3<<<12
SS1,j+3←(SS0,j+3+Ej+3+T′j+3)<<<7
TT1,j+3←FFj+3(Aj+3,Aj+2,Aj+1<<<9)+SS2,j+3+V′j+3
TT2,j+3←GGj+3(Ej+3,Ej+2,Ej+1<<<19)+SS1,j+3+Vj+3
Aj+4←TT1,j+3
Ej+4←P0(TT2,j+3)
向量操作:
T1←(Aj,Aj+1,Aj+2,Aj+3)
T1←T1<<<19
T1←T1+T2
(Vj+4,Vj+5,Vj+6,Vj+7)←T1
T1←(Wj+8,Wj+9,Wj+10,Wj+11)
T3←(Ej,Ej+1,Ej+2,Ej+3)
T3←T3<<<19
T1←T1+T3
(V′j+4,V′j+5,V′j+6,V′j+7)←T1
非向量操作:
SS0,j+4←Aj+4<<<12
SS1,j+4←(SS0,j+4+Ej+4+T′j+4)<<<7
TT1,j+4←FFj+4(Aj+4,Aj+3,Aj+2<<<9)+SS2,j+4+V′j+4
TT2,j+4←GGj+4(Ej+4,Ej+3,Ej+2<<<19)+SS1,j+4+Vj+4
Aj+5←TT1,j+4
Ej+5←P0(TT2,j+4)
SS0,j+5←Aj+5<<<12
SS1,j+5←(SS0,j+5+Ej+5+T′j+5)<<<7
TT1,j+5←FFj+5(Aj+5,Aj+4,Aj+3<<<9)+SS2,j+5+V′j+5
TT2,j+5←GGj+5(Ej+5,Ej+4,Ej+3<<<19)+SS1,j+5+Vj+5
Aj+6←TT1,j+5
Ej+6←P0(TT2,j+5)
SS0,j+6←Aj+6<<<12
SS1,j+6←(SS0,j+6+Ej+6+T′j+6)<<<7
TT1,j+6←FFj+6(Aj+6,Aj+5,Aj+4<<<9)+SS2,j+6+V′j+6
TT2,j+6←GGj+6(Ej+6,Ej+5,Ej+4<<<19)+SS1,j+6+Vj+6
Aj+7←TT1,j+6
Ej+7←P0(TT2,j+6)
SS0,j+7←Aj+7<<<12
SS1,j+7←(SS0,j+7+Ej+7+T′j+7)<<<8
TT1,j+7←FFj+7(Aj+7,Aj+6,Aj+5<<<9)+SS2,j+7+V′j+7
TT2,j+7←GGj+7(Ej+7,Ej+6,Ej+5<<<19)+SS1,j+7+Vj+7
Dj+8←Aj+5<<<9
Cj+8←Aj+6<<<9
Bj+8←Aj+7
Aj+8←TT1,j+7
Hj+8←Ej+5<<<19
Gj+8←Ej+6<<<19
Fj+8←Ej+7
Ej+8←P0(TT2,j+7)
4).令j=16,24,...,56,Wj-12,Wj-15,...,Wj+3已经生成,使用向量指令集下的8路并行算法生成Wj+4,Wj+5,Wj+6,Wj+7,Wj+8,Wj+9,Wj+10,Wj+11和Vj,Vj+1,Vj+2,Vj+3,Vj+4,Vj+5,Vj+6,Vj+7,V′j,V′j+1,V′j+2,V′j+3,V′j+4,V′j+5,V′j+6,V′j+7,并执行8路展开算法,代码顺序如下
向量操作:
T0←(Wj+1,Wj+2,Wj+3,0,0,0,0,0)
T0←T0<<<15
T1←(Wj-5,Wj-4,Wj-3,Wj-2,Wj-1,Wj,Wj+1,Wj+2)
T1←(Wj-12,Wj-11,Wj-10,Wj-9,Wj-8,Wj-7,Wj-6,Wj-5)
T0←P1(T0)
T1←(Wj-9,Wj-8,Wj-7,Wj-6,Wj-5,Wj-4,Wj-3,Wj-2)
T1←T1<<<7
T1←(Wj-2,Wj-1,Wj,Wj+1,Wj+2,Wj+3,0,0)
T1←(0,0,0,T0[0],T0[1],T0[2],0,0)
T1←T1<<<15
T1←P1(T1)
T1←(0,0,0,0,0,0,T0[0],T0[1])
T1←T1<<<15
T1←(0,0,0,0,0,0,T0[3],T0[4])
T1←T1<<<15
T1←P1(T1)
(Wj+4,Wj+5,Wj+6,Wj+7,Wj+8,Wj+9,Wj+10,Wj+11)←T0
T1←(D,C,B′,A′)
T2←(Wj,Wj+1,Wj+2,Wj+3)
T1←T1+T2
(Vj,Vj+1,Vj+2,Vj+3)←T1
T2←(Wj+4,Wj+5,Wj+6,Wj+7)
T1←(Wj,Wj+1,Wj+2,Wj+3)
T3←(F,G,F′,E′)
T1←T3+T1
(V′j,V′j+1,V′j+2,V′j+3)←T1
非向量操作:
SS1,j←(SS0,j+Ej+T′j)<<<7
TT1,j←FFj(Aj,Bj,Cj)+SS2,j+V′j
TT2,j←GGj(Ej,Fj,Gj)+SS1,j+Vj
Aj+1←TT1,j
Ej+1←P0(TT2,j)
SS0,j+1←Aj+1<<<12
SS1,j+1←(SS0,j+1+Ej+1+T′j+1)<<<7
TT1,j+1←FFj+1(Aj+1,Aj,Bj)+SS2,j+1+V′j+1
TT2,j+1←GGj+1(Ej+1,Ej,Fj)+SS1,j+1+Vj+1
Aj+2←TT1,j+1
Ej+2←P0(TT2,j+1)
SS0,j+2←Aj+2<<<12
SS1,j+2←(SS0,j+2+Ej+2+T′j+2)<<<7
TT1,j+2←FFj+2(Aj+2,Aj+1,Aj<<<9)+SS2,j+2+V′j+2
TT2,j←GGj+2(Ej+2,Ej+1,Ej<<<19)+SS1,j+2+Vj+2
Aj+3←TT1,j+2
Ej+3←P0(TT2,j+2)
SS0,j+3←Aj+3<<<12
SS1,j+3←(SS0,j+3+Ej+3+T′j+3)<<<7
TT1,j+3←FFj+3(Aj+3,Aj+2,Aj+1<<<9)+SS2,j+3+V′j+3
TT2,j+3←GGj+3(Ej+3,Ej+2,Ej+1<<<19)+SS1,j+3+Vj+3
Aj+4←TT1,j+3
Ej+4←P0(TT2,j+3)
向量操作:
T1←(Aj,Aj+1,Aj+2,Aj+3)
T1←T1<<<19
T1←T1+T2
(Vj+4,Vj+5,Vj+6,Vj+7)←T1
T1←(Wj+8,Wj+9,Wj+10,Wj+11)
T3←(Ej,Ej+1,Ej+2,Ej+3)
T3←T3<<<19
T1←T1+T3
(V′j+4,V′j+5,V′j+6,V′j+7)←T1
非向量操作:
SS0,j+4←Aj+4<<<12
SS1,j+4←(SS0,j+4+Ej+4+T′j+4)<<<7
TTj,j+4←FFj+4(Aj+4,Aj+3,Aj+2<<<9)+SS2,j+4+V′j+4
TT2,j+4←GGj+4(Ej+4,Ej+3,Ej+2<<<19)+SS1,j+4+Vj+4
Aj+5←TT1,j+4
Ej+5←P0(TT2,j+4)
SS0,j+5←Aj+5<<<12
SS1,j+5←(SS0,j+5+Ej+5+T′j+5)<<<7
TT1,j+5←FFj+5(Aj+5,Aj+4,Aj+3<<<9)+SS2,j+5+V′j+5
TT2,j+5←GGj+5(Ej+5,Ej+4,Ej+3<<<19)+SS1,j+5+Vj+5
Aj+6←TT1,j+5
Ej+6←P0(TT2,j+5)
SS0,j+6←Aj+6<<<12
SS1,j+6←(SS0,j+6+Ej+6+T′j+6)<<<7
TT1,j+6←FFj+6(Aj+6,Aj+5,Aj+4<<<9)+SS2,j+6+V′j+6
TT2,j+6←GGj+6(Ej+6,Ej+5,Ej+4<<<19)+SS1,j+6+Vj+6
Aj+7←TT1,j+6
Ej+7←P0(TT2,j+6)
SS0,j+7←Aj+7<<<12
SS1,j+7←(SS0,j+7+Ej+7+T′j+7)<<<8
TT1,j+7←FFj+7(Aj+7,Aj+6,Aj+5<<<9)+SS2,j+7+V′j+7
TT2,j+7←GGj+7(Ej+7,Ej+6,Ej+5<<<19)+SS1,j+7+Vj+7
Dj+8←Aj+5<<<9
Cj+8←Aj+6<<<9
Bj+8←Aj+7
Aj+8←TT1,j+7
Hj+8←Ej+5<<<19
Gj+8←Ej+6<<<19
Fj+8←Ej+7
Ej+8←P0(TT2,j+7)
5).将最后一轮的状态变量A,B,C,D,E,F,G,H,作为压缩函数的输出
实施例1:ARM/NEON指令集实现
ARM处理器是目前手机等智能移动设备采用的主流处理器,其中部署最广泛的Cortex-A系列ARM处理器架构除了包含ARM通用指令集(ARMv7指令集),还包含NEON SIMD指令集。NEON指令集包含16个128位的SIMD寄存器,可以做4路32位字的并行计算,因此可以将本文的SM3压缩函数4路并行算法中的向量计算以NEON指令实现,其他指令以常规的ARM通用指令实现,可以使用高级语言编写并通过编译实现。
下面给出用到的NEON指令,这些指令以伪函数(Intrinsics)的方式给出,其中int32x4_t为128位的NEON向量寄存器:
使用指令int32x4_t c=veorq_s32(int32x4_t a,int32x4_t b)
c←a<<<k:使用指令int32x4_t c=vrshlq_s32(int32x4_t a,int32x4_t k)
c←a+b:使用指令int32x4_t c=vaddq_s32(int32x4_t a,int32x4_t b)
c←b:使用指令int32x4_t c=vldlq_s32(int32_t const*ptr_of_b)
实施例2:X86/AVX2指令集实现
非向量代码可以使用高级语言编写并通过编译实现,向量算法使用AVX2指令实现
使用指令_m256i c=_mm256_xor_si256(_m256i a,_m256i b)
c←a<<<k:AVX2不支持循环位移,需要三个操作实现
向量左移_mm256_sllv_epi32(_m256i a,_m256i count)
向量右移_mm256_srlv_epi32(_m256i a,_m256i count)
向量或_mm256_or_si256(_m256i a,_m256i b)
总的执行语句如下:
_mm256i c=mm256_or_si256(_mm256_sllv_epi32(a,k),_mm256_srlv_epi32(a,32-k))
c←a+b:使用指令_m256i c=_mm256_xor_si256(_m256ia,_m256i b)
c←b:_m256ic=_mm256_stream_load_si256(_m256i const*mem_addr_of_b)
需要注意的是,公布实施例的目的在于帮助进一步理解本发明,但是本领域的技术人员可以理解:在不脱离本发明及所附权利要求的精神和范围内,各种替换和修改都是可能的。因此,本发明不应局限于实施例所公开的内容,本发明要求保护的范围以权利要求书界定的范围为准。
Claims (7)
1.一种SM3密码杂凑算法的并行化优化方法,所述SM3密码杂凑算法包括SM3消息扩展函数和SM3消息压缩函数;所述SM3消息扩展函数将512位的消息分组分为16个字,再将16个字长度的消息转化成67个字长度的变量W0,W1,…,W67和64个字长度的变量W′0,W′1,…,W′63,供SM3压缩函数使用;所述SM3压缩函数的输入变量为64个字长度的W0,W1,…,W63和变量W′0,W′1,…,W′63,共计算64轮,将最后一轮的状态变量A,B,C,D,E,F,G,H作为压缩函数的输出;所述SM3密码杂凑并行优化算法将512位的消息分组作为输入,通过16轮或8轮迭代,将最后一轮的状态变量A,B,C,D,E,F,G,H作为压缩函数的输出;其特征是:
采用多路并行算法,通过将原始标准SM3密码杂凑算法中的循环运算展开,将多轮迭代展开进行变量替换和冗余消除,从而简化SM3密码杂凑算法所需要的运算;
将展开后的SM3密码杂凑算法中潜在的并行运算通过向量的方法实现,由此实现在SM3密码杂凑函数的内部并行化,进而提升运算速度;
多路并行算法是:在多路SM3消息压缩函数的并行部分,使用向量指令代替并行的伪代码,而在非并行部分,使用通用非向量指令执行。
2.如权利要求1所述SM3密码杂凑算法的并行化优化方法,其特征是,所述多路包括采用4路和/或8路;通过将SM3密码杂凑算法中的循环运算展开,4路并行算法或8路并行算法分别对应于将循环运算展开后的4轮或8轮迭代进行变量替换和冗余消除,再将变化后的压缩函数和消息扩展函数按照迭代合并;具体是:在4路或8路合并后的函数的并行部分,使用具体向量指令代替并行的伪代码;而在非并行部分,使用通用非向量指令执行。
3.如权利要求2所述SM3密码杂凑算法的并行化优化方法,其特征是,4路并行算法中压缩函数循环展开的计算过程包括如下步骤:
B1)SM3消息扩展函数和压缩函数按照4轮顺序执行的方式代替4轮迭代执行的方式;
B2)将顺序执行中,值相同的变量简化成同一个变量;
B3)步骤B2)后,将所有对顺序执行没有影响的冗余操作删除;
B4)步骤B3)后,替换算法中的变量W0,W1,…,W67和W′0,W′1,…,W′63为Vj,Vj+1,Vj+2,Vj+3和V′j,V′j+1,V′j+2,V′j+3;替换后的变量对于消息扩展函数是输出变量,对于压缩函数函数是输入变量;
所述替换具体是:令
Vj=Dj+Wj
V′j=Hj+W′j
Vj+1=Cj+Wj+1
V′j+1=Gj+W′j+1
Vj+2=(Bj<<<9)+Wj+2
V′j+2=(Fj<<<19)+W′j+2
Vj+3=(Aj<<<9)+Wj+3
V′j+3=(Ej<<<19)+W′j+3
经过转换即计算得到Vj,Vj+1,Vj+2,Vj+3和V′j,V′j+1,V′j+2,V′j+3。
4.如权利要求2所述SM3密码杂凑算法的并行化优化方法,其特征是,4路并行算法将SM3密码杂凑算法的展开与并行化过程具体包括如下步骤:
1)SM3压缩函数共包含64轮循环运算,将64轮循环运算的执行按照每4轮循环展开,展开之后再进行计算;在SM3压缩函数循环展开过程中,可进行状态变量替换和/或输入变量替换;
11)进行状态变量替换,即用一轮迭代的状态变量来替换后几轮迭代的状态变量,使得迭代过程中的中间状态变量及状态变量的赋值语句都被简化;
12)进行输入变量替换,所需输入变量由W0,W1,…,W67和W′0,W′1,…,W′63变成V0,V1,…,V63和V′0,V′1,…,V′63,每次迭代需要变量Vj,Vj+1,Vj+2,Vj+3和V′j,V′j+1,V′j+2,V′j+3,其中j是当前算法相对标准算法的迭代轮数;由此进一步简化压缩函数的计算;
2)将消息扩展函数的64轮运算按照同样4轮的循环/迭代展开,则新的消息扩展函数刚好可以在j轮的时候,利用j轮时压缩函数的初始状态,并行地生成新压缩函数在j轮迭代所需要的变量Vj,Vj+1,Vj+2,Vj+3和V′j,V′j+1,V′j+2,V′j+3;
3)迭代展开后的压缩函数和消息扩展函数按轮对应合并,表示为4路消息压缩函数;
经过转换,SM3密码杂凑算法等价于每轮执行步骤2)中SM3消息扩展函数迭代展开后的1轮循环和步骤1)SM3压缩函数迭代展开后的1轮循环,即相当于标准算法执行压缩函数和消息扩展函数各4次迭代;
Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3可通过并行方式进行计算,由此实现利用处理器中的SIMD指令集进行加速计算。
5.如权利要求4所述SM3密码杂凑算法的并行化优化方法,其特征是,Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3可通过并行方式进行计算,具体地,根据4路展开SM3消息压缩函数,在第j轮迭代时,先计算变量Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3,j=0,4,8,...,60;
再将消息扩展函数同样按照4轮展开,和压缩函数同步计算,在第j轮迭代时,并行计算得到Vj,Vj+1,Vj+2,Vj+3和V′j,V′j+1,V′j+2,V′j+3;
同步计算过程如下:
A1)将消息扩展函数按照4路展开,用顺序执行4轮来代替4次迭代;
A2)根据压缩函数当前迭代的变量值,计算Vj,Vj+1,Vj+2,Vj+3,V′j,V′j+1,V′j+2,V′j+3;
A3)将步骤A1)和步骤A2)可并行的部分按照并行算法的方法实现;
A4)和压缩函数同步执行;即将消息扩展函数和压缩函数通过并行化合并成一个函数执行。
6.如权利要求1所述SM3密码杂凑算法的并行化优化方法,其特征是,所述SM3密码杂凑算法的并行化优化方法以通用指令集和/或SIMD指令集实现;给定两个向量A=(a1,a2,…,an),B=(b1,b2,…,bn),其中ai,bi为字,向量指令的计算方式包括:A+B、A+B、A<<<k和/或A⊕B。
7.如权利要求1所述SM3密码杂凑算法的并行化优化方法,其特征是,所述SM3密码杂凑算法的并行化优化方法在支持同时执行向量指令和非向量指令的计算平台上运行,以得到更高的计算速率。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811323148.3A CN109547192B (zh) | 2018-11-08 | 2018-11-08 | Sm3密码杂凑算法的并行化优化方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201811323148.3A CN109547192B (zh) | 2018-11-08 | 2018-11-08 | Sm3密码杂凑算法的并行化优化方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109547192A true CN109547192A (zh) | 2019-03-29 |
CN109547192B CN109547192B (zh) | 2020-11-03 |
Family
ID=65845376
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201811323148.3A Active CN109547192B (zh) | 2018-11-08 | 2018-11-08 | Sm3密码杂凑算法的并行化优化方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN109547192B (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110086602A (zh) * | 2019-04-16 | 2019-08-02 | 上海交通大学 | 基于gpu的sm3密码散列算法的快速实现方法 |
CN113741972A (zh) * | 2021-08-20 | 2021-12-03 | 深圳市风云实业有限公司 | 一种sm3算法的并行处理方法及电子设备 |
CN113794552A (zh) * | 2021-09-14 | 2021-12-14 | 山东省计算中心(国家超级计算济南中心) | 一种基于simd的sm3并行数据加密运算方法及系统 |
CN114422110A (zh) * | 2022-03-30 | 2022-04-29 | 北京大学 | 一种面向长指令字的sm3哈希函数消息处理的快速实现方法 |
CN116796361A (zh) * | 2023-03-15 | 2023-09-22 | 深圳优钱信息技术有限公司 | 基于国密散列函数的敏感数据脱敏方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102761414A (zh) * | 2011-04-26 | 2012-10-31 | 航天信息股份有限公司 | 一种sm3密码杂凑算法及确定其中的变量字的方法 |
CN103457719A (zh) * | 2013-07-23 | 2013-12-18 | 国家密码管理局商用密码检测中心 | 一种对sm3密码算法hmac模式的侧信道能量分析方法 |
US20160070931A1 (en) * | 2014-09-04 | 2016-03-10 | Intel Corporation | Sm3 hash algorithm acceleration processors, methods, systems, and instructions |
US20160092688A1 (en) * | 2014-09-26 | 2016-03-31 | Gilbert M. Wolrich | Instructions and logic to provide simd sm3 cryptographic hashing functionality |
CN105991289A (zh) * | 2015-03-06 | 2016-10-05 | 上海复旦微电子集团股份有限公司 | Sm3密码算法的侧信道能量分析方法及装置 |
CN106301761A (zh) * | 2016-08-09 | 2017-01-04 | 北京智芯微电子科技有限公司 | 一种基于密码杂凑算法的压缩方法及装置 |
CN106850189A (zh) * | 2017-02-10 | 2017-06-13 | 广东工业大学 | 一种减少sm3密码杂凑算法中运算量的方法及装置 |
-
2018
- 2018-11-08 CN CN201811323148.3A patent/CN109547192B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102761414A (zh) * | 2011-04-26 | 2012-10-31 | 航天信息股份有限公司 | 一种sm3密码杂凑算法及确定其中的变量字的方法 |
CN103457719A (zh) * | 2013-07-23 | 2013-12-18 | 国家密码管理局商用密码检测中心 | 一种对sm3密码算法hmac模式的侧信道能量分析方法 |
US20160070931A1 (en) * | 2014-09-04 | 2016-03-10 | Intel Corporation | Sm3 hash algorithm acceleration processors, methods, systems, and instructions |
US20160092688A1 (en) * | 2014-09-26 | 2016-03-31 | Gilbert M. Wolrich | Instructions and logic to provide simd sm3 cryptographic hashing functionality |
CN105991289A (zh) * | 2015-03-06 | 2016-10-05 | 上海复旦微电子集团股份有限公司 | Sm3密码算法的侧信道能量分析方法及装置 |
CN106301761A (zh) * | 2016-08-09 | 2017-01-04 | 北京智芯微电子科技有限公司 | 一种基于密码杂凑算法的压缩方法及装置 |
CN106850189A (zh) * | 2017-02-10 | 2017-06-13 | 广东工业大学 | 一种减少sm3密码杂凑算法中运算量的方法及装置 |
Non-Patent Citations (1)
Title |
---|
杨先伟,康红娟: "SM3 杂凑算法的软件快速实现研究", 《智能系统学报》 * |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110086602A (zh) * | 2019-04-16 | 2019-08-02 | 上海交通大学 | 基于gpu的sm3密码散列算法的快速实现方法 |
CN110086602B (zh) * | 2019-04-16 | 2022-02-11 | 上海交通大学 | 基于gpu的sm3密码散列算法的快速实现方法 |
CN113741972A (zh) * | 2021-08-20 | 2021-12-03 | 深圳市风云实业有限公司 | 一种sm3算法的并行处理方法及电子设备 |
CN113741972B (zh) * | 2021-08-20 | 2023-08-25 | 深圳市风云实业有限公司 | 一种sm3算法的并行处理方法及电子设备 |
CN113794552A (zh) * | 2021-09-14 | 2021-12-14 | 山东省计算中心(国家超级计算济南中心) | 一种基于simd的sm3并行数据加密运算方法及系统 |
CN113794552B (zh) * | 2021-09-14 | 2023-07-07 | 山东省计算中心(国家超级计算济南中心) | 一种基于simd的sm3并行数据加密运算方法及系统 |
CN114422110A (zh) * | 2022-03-30 | 2022-04-29 | 北京大学 | 一种面向长指令字的sm3哈希函数消息处理的快速实现方法 |
CN114422110B (zh) * | 2022-03-30 | 2022-08-23 | 北京大学 | 一种面向长指令字的sm3哈希函数消息处理的快速实现方法 |
CN116796361A (zh) * | 2023-03-15 | 2023-09-22 | 深圳优钱信息技术有限公司 | 基于国密散列函数的敏感数据脱敏方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109547192B (zh) | 2020-11-03 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109547192A (zh) | Sm3密码杂凑算法的并行化优化方法 | |
Almeida et al. | The last mile: High-assurance and high-speed cryptographic implementations | |
Bernstein et al. | NEON crypto | |
Wang et al. | XMSS and embedded systems: XMSS hardware accelerators for RISC-v | |
Ren et al. | Optimizing data permutations for SIMD devices | |
CN111427891A (zh) | 区块挖掘装置 | |
Sarkar et al. | New complexity trade-offs for the (multiple) number field sieve algorithm in non-prime fields | |
CN105335331A (zh) | 一种基于大规模粗粒度可重构处理器的sha256实现方法及系统 | |
Yang et al. | Poseidon: Practical homomorphic encryption accelerator | |
CN112367158A (zh) | 一种加速sm3算法的方法、处理器、芯片及电子设备 | |
CN115525342A (zh) | 一种sm3密码杂凑算法的加速方法及指令集处理器 | |
CN105577363A (zh) | 针对sm4密码算法的可扩展流水线电路及其实现方法 | |
Nath et al. | Efficient arithmetic in (pseudo-) Mersenne prime order fields | |
Wang et al. | FPGA-based SHA-3 acceleration on a 32-bit processor via instruction set extension | |
Almeida et al. | Formally verifying Kyber episode IV: implementation correctness | |
CN105574269B (zh) | 一种专用指令处理器的设计验证方法 | |
CN116318660B (zh) | 一种消息扩展与压缩方法及相关装置 | |
Hvass et al. | High-assurance field inversion for curve-based cryptography | |
CN105472602A (zh) | 一种加密装置及加密方法 | |
CN114422110B (zh) | 一种面向长指令字的sm3哈希函数消息处理的快速实现方法 | |
Chattopadhyay et al. | Designing high-throughput hardware accelerator for stream cipher HC-128 | |
Pan et al. | Design and implementation of SM3 algorithm based on a ternary optical computer | |
Wang et al. | Efficient GPU implementations of post-quantum signature XMSS | |
Faz-Hernández et al. | SoK: A performance evaluation of cryptographic instruction sets on modern architectures | |
CN113505383A (zh) | 一种ecdsa算法执行系统及方法 |
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 |