CN104092534A - 实现sm3密码杂凑算法中的迭代压缩的方法 - Google Patents
实现sm3密码杂凑算法中的迭代压缩的方法 Download PDFInfo
- Publication number
- CN104092534A CN104092534A CN201410325899.4A CN201410325899A CN104092534A CN 104092534 A CN104092534 A CN 104092534A CN 201410325899 A CN201410325899 A CN 201410325899A CN 104092534 A CN104092534 A CN 104092534A
- Authority
- CN
- China
- Prior art keywords
- mod16
- word
- bit
- message
- value
- 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
Landscapes
- Mobile Radio Communication Systems (AREA)
Abstract
本发明涉及一种实现SM3密码杂凑算法中的迭代压缩的方法。所述方法包括:步骤1、设置迭代次数i=0;设置压缩函数V的第0次迭代值V(0);步骤2、根据消息分组B(i)确定16个32比特长度的消息扩展字W0-W15;确定32比特长度的各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值;步骤3、设置迭代次数j=0;步骤4、确定32比特长度的常量Tj;步骤5、判断j是否等于63,如果j等于63,执行步骤6,如果j小于63,j的值增加1,执行步骤4;步骤6、得到V的第i+1次迭代值V(i+1);步骤7、判断i是否等于N-1,如果i等于N-1,输出V(N),如果i小于N-1,i的值加1,执行步骤2。本发明可以减少SM3算法在迭代压缩过程中使用的存储单元,降低SM3算法的软硬件实现成本。
Description
技术领域
本发明涉及密码学领域,尤其涉及一种实现SM3密码杂凑算法中的迭代压缩的方法。
背景技术
国产密码算法是我国自主研制完成的一种密码算法,具有较高安全性,由国家密码管理局任何和推广,用以保障我国信息安全,在国家主导的行业中大多采用国家密码管理局的密码算法,已逐渐成为趋势。
SM3密码杂凑算法是国家密码管理局于2010年12月公布的一种国产密码算法。SM3密码杂凑算法适用于商用密码应用中的数字签名和认证、消息认证码的生成与验证以及随机数的生成,可以满足多种密码应用的安全需求,同时还可为安全产品生产商提供产品和技术的标准定位以及标准化的参考,提高安全产品的可信性与互操作性。
国家密码管理局公布的SM3密码杂凑算法中,规定了SM3的计算方法和计算步骤。SM3密码杂凑算法分为消息填充、迭代压缩和杂凑值三步。其中,消息填充是将长度小于264-bit的消息m,填充为长度为512-bit的整倍数的消息块m’;迭代压缩是SM3算法的核心,把填充后的消息m’按照固定的512-bit进行分组,得到消息分组B(0)B(1)…B(n-1),然后对每个512-bit分组B(i)逐次压缩,最终得到整个消息m’的256-bit的杂凑值(hash value),其中,n=消息m’的长度/512。迭代压缩过程包括迭代过程、消息扩展和压缩函数,其中,消息扩展和压缩函数的具体算法如下:
1、消息扩展
将消息分组B(i)按以下方法扩展生成132个字W0;W1;…W67;W’0;W’1;…W’63,用于压缩函数CF。其中,68个W和64个W’,均是32-bit的字。
a)将消息分组B(i)划分为16个字W0;W1;…W15。
b)FOR j=16TO67
Wj=P1(Wj-16⊕Wj-9⊕(Wj-3<<<15))⊕(Wj-1<<<7)⊕Wj-6
ENDFOR
c)FOR j=0TO63
W’j=Wj⊕Wj+4
ENDFOR
2、压缩函数
令A,B,C,D,E,F,G,H为32-bit字寄存器,SS1,SS2,TT1,TT2为32-bit中间变量,压缩函数Vi+1=CF(V(i),B(i)),0≤i≤n-1。计算消息分组B(i)的杂凑值V(i+1)过程描述如下:
ABCDEFGH=V(i)
FOR j=0TO63
SS1=((A<<<12)+E+(Tj<<<j))<<<7
SS2=SS1⊕(A<<<12)
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)
ENDFOR
V(i+1)=ABCDEFGH⊕V(i)
其中,
32比特异或运算
32比特非运算
+:mod232算术加运算
<<<k:循环左移k比特运算
在上述计算步骤中,需要使用大量的存储单元。其中,要用到68个W和64个W’,均是32-bit的字,此外,还有SS1、SS2、TT1、TT2等4个32-bit中间变量,因此,共计136个32-bit的存储器,导致SM3算法的软硬件实现成本高。
发明内容
本发明提供一种实现SM3密码杂凑算法中的迭代压缩的方法,用以实现减少SM3算法在迭代压缩过程中使用的存储单元,降低SM3算法的软硬件实现成本。
本发明提供一种实现SM3密码杂凑算法中的迭代压缩的方法,包括:
步骤1、设置迭代次数i=0;设置压缩函数V的第0次迭代值V(0)为用16进制表示的7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aae38dee4d b0fb0e4e;
步骤2、根据消息分组B(i)确定16个32比特长度的消息扩展字W0-W15;确定32比特长度的各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值;
步骤3、设置迭代次数j=0;
步骤4、确定32比特长度的常量Tj;按照迭代公式,确定中间变量字SS1、SS2、TT1、TT2、消息扩展字ww和各变量字A、B、C、D、E、F、G、H的第j次迭代值SS1j、SS2j、TT1j、TT2j、wwj、Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj、以及消息扩展字W(j mod16),其中,所述迭代公式包括:
SS1j=((Aj-1<<<12)+Ej-1+(Tj<<<j))<<<7;
SS2j=SS1j⊕(Aj-1<<<12);
wwj=Wj⊕Wj+4;
TT1j=FFj(Aj-1,Bj-1,Cj-1)+Dj-1+SS2j+wwj;
TT2j=GGj(Ej-1,Fj-1,Gj-1)+Hj-1+SS1j+Wj;
W(j mod16)=P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))⊕(W((j-1)mod16)<<<7)⊕W((j-6)mod16);
Dj=Cj-1;
Cj=Bj-1<<<9;
Bj=Aj-1;
Aj=TT1j;
Hj=Gj-1;
Gj=Fj-1<<<19;
Fj=Ej-1;
Ej=P0(TT2j);
步骤5;判断j是否等于63,如果j等于63,执行步骤6,如果j小于63,j的值增加1,执行步骤4;
步骤6、将Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj的先后顺序作为比特位由高到低的排列顺序组合得到的256比特长度的变量Aj Bj Cj Dj Ej Fj Gj Hj与V的第i次迭代值进行异或运算,得到V的第i+1次迭代值V(i+1):
V(i+1)=Aj Bj Cj Dj Ej Fj Gj Hj⊕V(i);
步骤7、判断i是否等于N-1,如果i等于N-1,输出V(N),如果i小于N-1,i的值加1,执行步骤2;
其中,N为消息分组的数量;
FFj(Aj-1,Bj-1,Cj-1)和GGj(Ej-1,Fj-1,Gj-1)为布尔函数,函数表达式为:
P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))和P0(TT2j)为置换函数,所述置换函数的函数表达式为:
P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))=
(W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)⊕
((W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)<<<15)⊕
((W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)<<<23)
P0(TT2j)=TT2j⊕(TT2j<<<9)⊕(TT2j<<<17)
其中,<<<12、<<<j、<<<7、<<<15、<<<9、<<<19分别为循环左移12、j、7、15、9、19比特运算,⊕为32比特异或运算,∧为32比特与运算,∨为32比特或运算,mod为模运算,为32比特非运算。
在本发明实施例中,对于每个消息分组B(i)的一次迭代过程只使用了21个32比特长度的存储单元,其中包括17个消息扩展字W0-W15和ww、以及4个中间变量字SS1、SS2、TT1、TT2,而现有技术中的SM3密码杂凑算法的迭代压缩步骤使用136个32比特长度的存储单元,其中包括132个32比特长度的消息扩展字和4个中间变量SS1、SS2、TT1、TT2,本实施例使用的存储单元的数量为现有技术的15.4%,极大地减少了SM3密码杂凑算法的迭代压缩步骤使用的存储单元。此外,本实施例不增加算法的计算量,保证了同样的算法计算效率。
本发明还提供一种实现SM3密码杂凑算法中的迭代压缩的方法,包括:
步骤1、设置迭代次数i=0;设置压缩函数V的第0次迭代值V(0)为用16进制表示的7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aae38dee4d b0fb0e4e;
步骤2、根据消息分组B(i)确定16个32比特长度的消息扩展字W0-W15;确定32比特长度的各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值;
步骤3、设置迭代次数j=0;
步骤4、确定32比特长度的常量Tj;按照迭代公式,确定中间变量字TT1、TT2和各变量字A、B、C、D、E、F、G、H的第j次迭代值TT1j、TT2j、Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj、以及消息扩展字W(j mod16),其中,所述迭代公式包括:
TT1j=((Aj-1<<<12)+Ej-1+(Tj<<<j))<<<7;
TT2j=GGj(Ej-1,Fj-1,Gj-1)+Hj-1+TT1j+Wj;
TT1j=FFj(Aj-1,Bj-1,Cj-1)+Dj-1+(TT1j⊕(Aj-1<<<12))+Wj⊕Wj+4;
W(j mod16)=P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))⊕(W((j-1)mod16)<<<7)⊕W((j-6)mod16);
Dj=Cj-1;
Cj=Bj-1<<<9;
Bj=Aj-1;
Aj=TT1j;
Hj=Gj-1;
Gj=Fj-1<<<19;
Fj=Ej-1;
Ej=P0(TT2j);
步骤5;判断j是否等于63,如果j等于63,执行步骤6,如果j小于63,j的值增加1,执行步骤4;
步骤6、将Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj的先后顺序作为比特位由高到底的排列顺序组合得到的256比特长度的变量Aj Bj Cj Dj Ej Fj Gj Hj与V的第i次迭代值进行异或运算,得到V的第i+1次迭代值V(i+1):
V(i+1)=Aj Bj Cj Dj Ej Fj Gj Hj⊕V(i);
步骤7、判断i是否等于N-1,如果i等于N-1,输出V(N),如果i小于N-1,i的值加1,执行步骤2;
其中,N为消息分组的数量;
FFj(Aj-1,Bj-1,Cj-1)和GGj(Ej-1,Fj-1,Gj-1)为布尔函数,函数表达式为:
P1(Wj-16⊕Wj-9⊕(Wj-3<<<15))和P0(TT2j)为置换函数,函数表达式为:
P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))=
(W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)⊕
((W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)<<<15)⊕
((W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)<<<23)
P0(TT2j)=TT2j⊕(TT2j<<<9)⊕(TT2j<<<17)
其中,<<<12、<<<j、<<<7、<<<15、<<<9、<<<19分别为循环左移12、j、7、15、9、19比特运算,⊕为32比特异或运算,∧为32比特与运算,∨为32比特或运算,mod为模运算,为32比特非运算。
在本发明实施例中,对于每个消息分组B(i)的一次迭代过程只使用了18个32比特长度的存储单元,其中包括16个消息扩展字W0-W15、以及2个中间变量字TT1、TT2,而现有技术中的SM3密码杂凑算法的迭代压缩步骤使用136个32比特长度的存储单元,其中包括132个32比特长度的消息扩展字和4个中间变量SS1、SS2、TT1、TT2,本实施例使用的存储单元的数量为现有技术的13.2%,极大地减少了SM3密码杂凑算法的迭代压缩步骤使用的存储单元。此外,本实施例不增加算法的计算量,保证了同样的算法计算效率。
附图说明
图1为本发明实现SM3密码杂凑算法中的迭代压缩的方法第一实施例的流程示意图;
图2为本发明实现SM3密码杂凑算法中的迭代压缩的方法第二实施例的流程示意图;
图3为本发明SM3密码杂凑算法实施例的流程示意图。
具体实施方式
下面结合说明书附图和具体实施方式对本发明作进一步的描述。
实现SM3密码杂凑算法中的迭代压缩的方法第一实施例
如图1所示,为本发明实现SM3密码杂凑算法中的迭代压缩的方法第一实施例的流程示意图,该方法可以包括如下步骤:
步骤11、设置迭代次数i=0;设置压缩函数V的第0次迭代值V(0);
具体地,V(0)为用16进制表示的7380166f 4914b2b9 172442d7 da8a0600a96f30bc 163138aa e38dee4d b0fb0e4e;本步骤中的迭代次数i=0,意味着这是压缩函数V的第1次迭代,迭代结束后得到的迭代值为V(1),以后每次迭代均在上一次迭代值的基础上进行;
步骤12、根据消息分组B(i)确定16个32比特长度的消息扩展字W0-W15;确定32比特长度的各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值;
在该步骤中,消息分组B(i)先存放在16个字的循环队列W0-W15中;根据消息分组B(i)确定各消息扩展字的方法很多,原则上只要各消息扩展字与消息分组B(i)有关即可;
步骤13、设置迭代次数j=0;
步骤14、确定32比特长度的常量Tj;按照迭代公式,确定中间变量字SS1、SS2、TT1、TT2、消息扩展字ww和各变量字A、B、C、D、E、F、G、H的第j次迭代值SS1j、SS2j、TT1j、TT2j、wwj、Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj、以及消息扩展字W(j mod16);
其中,迭代公式包括:
SS1j=((Aj-1<<<12)+Ej-1+(Tj<<<j))<<<7;
SS2j=SS1j⊕(Aj-1<<<12);
wwj=Wj⊕Wj+4;
TT1j=FFj(Aj-1,Bj-1,Cj-1)+Dj-1+SS2j+wwj;
TT2j=GGj(Ej-1,Fj-1,Gj-1)+Hj-1+SS1j+Wj;
W(j mod16)=P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))⊕(W((j-1)mod16)<<<7)⊕W((j-6)mod16);
Dj=Cj-1;
Cj=Bj-1<<<9;
Bj=Aj-1;
Aj=TT1j;
Hj=Gj-1;
Gj=Fj-1<<<19;
Fj=Ej-1;
Ej=P0(TT2j);
其中,FFj(Aj-1,Bj-1,Cj-1)和GGj(Ej-1,Fj-1,Gj-1)为布尔函数,函数表达式为:
P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))和P0(TT2j)为置换函数,置换函数的函数表达式为:
P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))=
(W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)⊕
((W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)<<<15)⊕
((W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)<<<23)
P0(TT2j)=TT2j⊕(TT2j<<<9)⊕(TT2j<<<17)
其中,<<<12、<<<j、<<<7、<<<15、<<<9、<<<19分别为循环左移12、j、7、15、9、19比特运算,⊕为32比特异或运算,∧为32比特与运算,∨为32比特或运算,mod为模运算,为32比特非运算;
步骤15;判断j是否等于63,如果j等于63,执行步骤17,如果j小于63,执行步骤16;
步骤16、16,执行步骤14;
步骤17、将Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj的先后顺序作为比特位由高到低的排列顺序组合得到的256比特长度的变量Aj Bj Cj Dj Ej Fj Gj Hj与V的第i次迭代值进行异或运算,得到V的第i+1次迭代值V(i+1);
具体地,计算V(i+1)的表达式为:V(i+1)=Aj Bj Cj Dj Ej Fj Gj Hj⊕V(i);
步骤18、判断i是否等于N-1,如果i等于N-1,输出V(N),如果i小于N-1,执行步骤19;
其中,N为消息分组的数量;
步骤19、i的值加1,执行步骤12。
在本实施例中,FFj(Aj-1,Bj-1,Cj-1)和GGj(Ej-1,Fj-1,Gj-1)为SM3密码杂凑算法中的布尔函数,P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))和P0(TT2j)为SM3密码杂凑算法中的置换函数。
步骤14-步骤16为64轮的迭代过程,在每次迭代过程中,首先计算中间变量字SS1、SS2、TT1、TT2和消息扩展字ww的迭代值,然后动态产生消息扩展字W(j mod16),存放在16个字的循环队列W0-W15中,最后计算A-H的迭代值。
本实施例使用循环存储队列动态产生消息扩展字W0-W15,因此只需要16个字,而现有技术中需要68个消息扩展字W。本实施例使用新的迭代压缩步骤产生1个消息扩展字ww,而现有技术中使用64个消息扩展字W’。
在本实施例中,对于每个消息分组B(i)的一次迭代过程只使用了21个32比特长度的存储单元,其中包括17个消息扩展字W0-W15和ww、以及4个中间变量字SS1、SS2、TT1、TT2,而现有技术中的SM3密码杂凑算法的迭代压缩步骤使用136个32比特长度的存储单元,其中包括132个32比特长度的消息扩展字和4个中间变量SS1、SS2、TT1、TT2,本实施例使用的存储单元的数量为现有技术的15.4%,极大地减少了SM3密码杂凑算法的迭代压缩步骤使用的存储单元。此外,本实施例不增加算法的计算量,保证了同样的算法计算效率。
可选地,在步骤12中,根据消息分组B(i)确定16个32比特长度的消息扩展字W0-W15具体为:将消息扩展字W0-W15分别设置为从512比特长度的消息分组B(i)的最高比特位开始的第1-16个字的值,其中,每个字的字长为32比特,消息扩展字W0-W15依次为W0、W1、W2、W3、W4、W5、W6、W7、W8、W9、W10、W11、W12、W13、W14、W15。
可选地,在步骤12中确定32比特长度的各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值具体为:将各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值依次设置为V(i)从最高比特位开始的第1-8个字的值,其中,每个字的字长为32比特。在SM3密码杂凑算法中,V为压缩函数,该函数也是通过循环迭代运算得到的,在V的循环迭代结束之后得到的压缩函数值即为SM3密码杂凑算法所要得到的杂凑值。在每次迭代过程中,将压缩函数值从最高比特位开始的各组的值依次赋给变量字A-H,作为各变量字的初始迭代值。
可选地,在步骤14中,确定32比特长度的常量Tj具体为:
其中,79cc4519和7a879d8a为16进制数。Tj采用分段常量的形式,有利于提高SM3密码杂凑算法的运算不可逆性。
可选地,在本实施例中,消息扩展字W0-W15和中间变量字SS1、SS2、ww、TT1、TT2采用32比特长度的字寄存器进行存储;步骤14-步骤19中的任一加法、减法、循环左移、异或、与、或、模、非运算分别由加法器、减法器、移位寄存器、异或门电路、与门电路、或门电路、模运算电路、非门电路实现。由此可见,本实施例的方法除了可以用软件来实现外,也可以用硬件电路来实现,有利于进一步提高运算速度和算法的安全性。
实现SM3密码杂凑算法中的迭代压缩的方法第二实施例
本实施例对实现SM3密码杂凑算法中的迭代压缩的方法第一实施例的方法进行进一步改进,省掉中间变量字SS1、SS2和消息扩展字ww,将使用的32比特长度的存储单元的数量进一步减少到18个,只有现有技术中的13.2%。
如图2所示,为本发明实现SM3密码杂凑算法中的迭代压缩的方法第二实施例的流程示意图,该方法可以包括如下步骤:
步骤21、设置迭代次数i=0;设置压缩函数V的第0次迭代值V(0)为用16进制表示的7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aae38dee4d b0fb0e4e;
步骤22、根据消息分组B(i)确定16个32比特长度的消息扩展字W0-W15;确定32比特长度的各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值;
步骤23、设置迭代次数j=0;
步骤24、确定32比特长度的常量Tj;按照迭代公式,确定中间变量字TT1、TT2和各变量字A、B、C、D、E、F、G、H的第j次迭代值TT1j、TT2j、Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj、以及消息扩展字W(j mod16);
其中,迭代公式包括:
TT1j=((Aj-1<<<12)+Ej-1+(Tj<<<j))<<<7;
TT2j=GGj(Ej-1,Fj-1,Gj-1)+Hj-1+TT1j+Wj;
TT1j=FFj(Aj-1,Bj-1,Cj-1)+Dj-1+(TT1j⊕(Aj-1<<<12))+Wj⊕Wj+4;
W(j mod16)=P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))⊕(W((j-1)mod16)<<<7)⊕W((j-6)mod16);
Dj=Cj-1;
Cj=Bj-1<<<9;
Bj=Aj-1;
Aj=TT1j;
Hj=Gj-1;
Gj=Fj-1<<<19;
Fj=Ej-1;
Ej=P0(TT2j);
其中,
FFj(Aj-1,Bj-1,Cj-1)和GGj(Ej-1,Fj-1,Gj-1)为布尔函数,函数表达式为:
P1(Wj-16⊕Wj-9⊕(Wj-3<<<15))和P0(TT2j)为置换函数,函数表达式为:
P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))=
(W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)⊕
((W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)<<<15)⊕
((W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)<<<23)
P0(TT2j)=TT2j⊕(TT2j<<<9)⊕(TT2j<<<17)
其中,<<<12、<<<j、<<<7、<<<15、<<<9、<<<19分别为循环左移12、j、7、15、9、19比特运算,⊕为32比特异或运算,∧为32比特与运算,∨为32比特或运算,mod为模运算,为32比特非运算;
步骤25;判断j是否等于63,如果j等于63,执行步骤27,如果j小于63,执行步骤26;
步骤26、j的值增加1,执行步骤24;
步骤27、将Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj的先后顺序作为比特位由高到底的排列顺序组合得到的256比特长度的变量Aj Bj Cj Dj Ej Fj Gj Hj与V的第i次迭代值进行异或运算,得到V的第i+1次迭代值V(i+1):
V(i+1)=Aj Bj Cj Dj Ej Fj Gj Hj⊕V(i);
步骤28、判断i是否等于N-1,如果i等于N-1,输出V(N),如果i小于N-1,执行步骤29;
其中,N为消息分组的数量;
步骤29、i的值加1,执行步骤22。
在本实施例中,FFj(Aj-1,Bj-1,Cj-1)和GGj(Ej-1,Fj-1,Gj-1)为SM3密码杂凑算法中的布尔函数,P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))和P0(TT2j)为SM3密码杂凑算法中的置换函数。
步骤24-步骤26为64轮的迭代过程,在每次迭代过程中,首先计算中间变量字TT1、TT2的迭代值,然后动态产生消息扩展字W(j mod16),存放在16个字的循环队列W0-W15中,最后计算A-H的迭代值。
本实施例使用循环存储队列动态产生消息扩展字W0-W15,因此只需要16个字,而现有技术中需要68个消息扩展字W。本实施例使用新的迭代压缩步骤,只需要两个中间变量字TT1、TT2,不需要中间变量字SS1、SS2和消息扩展字W’。
在本实施例中,对于每个消息分组B(i)的一次迭代过程只使用了18个32比特长度的存储单元,其中包括16个消息扩展字W0-W15、以及2个中间变量字TT1、TT2,而现有技术中的SM3密码杂凑算法的迭代压缩步骤使用136个32比特长度的存储单元,其中包括132个32比特长度的消息扩展字和4个中间变量SS1、SS2、TT1、TT2,本实施例使用的存储单元的数量为现有技术的13.2%,极大地减少了SM3密码杂凑算法的迭代压缩步骤使用的存储单元。此外,本实施例不增加算法的计算量,保证了同样的算法计算效率。
可选地,在步骤22中,根据消息分组B(i)确定16个32比特长度的消息扩展字W0-W15具体为:将消息扩展字W0-W15分别设置为从512比特长度的消息分组B(i)的最高比特位开始的第1-16个字的值,其中,每个字的字长为32比特。
可选地,在步骤22中,确定32比特长度的各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值具体为:将各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值依次设置为V(i)从最高比特位开始的第1-8个字的值,其中,每个字的字长为32比特。
可选地,在步骤24中,确定32比特长度的常量Tj具体为:
其中,79cc4519和7a879d8a为16进制数。
可选地,在本实施例中,消息扩展字W0-W15和中间变量字TT1、TT2采用32比特长度的字寄存器进行存储;步骤24-步骤29中的任一加法、减法、循环左移、异或、与、或、模、非运算分别由加法器、减法器、移位寄存器、异或门电路、与门电路、或门电路、模运算电路、非门电路实现。
SM3密码杂凑算法实施例
上述实现SM3密码杂凑算法中的迭代压缩的方法第一实施例和第二实施例的方法也可以应用于SM3密码杂凑算法中,从而节省大量的存储单元。
如图3所示,为本发明SM3密码杂凑算法实施例的流程示意图,本实施例提供的SM3密码杂凑算法是将输入的长度不等的消息m转换为256比特长度的杂凑值的算法,因此输入值为消息m,输出值为杂凑值,该SM3密码杂凑算法可以包括如下步骤:
步骤31、接收长度为L比特的消息m,对消息m进行填充,得到长度为512比特的N倍的填充消息m’;
其中,L为小于或等于(264-1)的正整数,N为小于或等于(255+1)的正整数;如果消息m的长度超过(264-1)比特,则将消息m拆分为多个组,每组的长度不超过(264-1)比特;
步骤32、从填充消息m’的最高比特位开始,将填充消息m’划分为N个512比特长度的消息分组B(0)-B(N-1);
其中,消息分组B(0)为填充信息m’中比特位最高的512个比特,消息分组B(1)为填充信息m’中比特位次高的512个比特,以此类推,B(N-1)为填充信息m’中比特位最低的512个比特;
步骤33、计算并输出消息m的杂凑值V(N);
步骤33具体可以采用前述实现SM3密码杂凑算法中的迭代压缩的方法第一实施例或第二实施例的方法,在此不再赘述。
最后应说明的是:以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。
Claims (10)
1.一种实现SM3密码杂凑算法中的迭代压缩的方法,其特征在于,包括:
步骤1、设置迭代次数i=0;设置压缩函数V的第0次迭代值V(0)为用16进制表示的7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aae38dee4d b0fb0e4e;
步骤2、根据消息分组B(i)确定16个32比特长度的消息扩展字W0-W15;确定32比特长度的各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值;
步骤3、设置迭代次数j=0;
步骤4、确定32比特长度的常量Tj;按照迭代公式,确定中间变量字SS1、SS2、TT1、TT2、消息扩展字ww和各变量字A、B、C、D、E、F、G、H的第j次迭代值SS1j、SS2j、TT1j、TT2j、wwj、Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj、以及消息扩展字W(j mod16),其中,所述迭代公式包括:
SS1j=((Aj-1<<<12)+Ej-1+(Tj<<<j))<<<7;
SS2j=SS1j⊕(Aj-1<<<12);
wwj=Wj⊕Wj+4;
TT1j=FFj(Aj-1,Bj-1,Cj-1)+Dj-1+SS2j+wwj;
TT2j=GGj(Ej-1,Fj-1,Gj-1)+Hj-1+SS1j+Wj;
W(j mod16)=P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))⊕(W((j-1)mod16)<<<7)⊕W((j-6)mod16);
Dj=Cj-1;
Cj=Bj-1<<<9;
Bj=Aj-1;
Aj=TT1j;
Hj=Gj-1;
Gj=Fj-1<<<19;
Fj=Ej-1;
Ej=P0(TT2j);
步骤5;判断j是否等于63,如果j等于63,执行步骤6,如果j小于63,j的值增加1,执行步骤4;
步骤6、将Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj的先后顺序作为比特位由高到低的排列顺序组合得到的256比特长度的变量Aj Bj Cj Dj Ej Fj Gj Hj与V的第i次迭代值进行异或运算,得到V的第i+1次迭代值V(i+1):
V(i+1)=Aj Bj Cj Dj Ej Fj Gj Hj⊕V(i);
步骤7、判断i是否等于N-1,如果i等于N-1,输出V(N),如果i小于N-1,i的值加1,执行步骤2;
其中,N为消息分组的数量;
FFj(Aj-1,Bj-1,Cj-1)和GGj(Ej-1,Fj-1,Gj-1)为布尔函数,函数表达式为:
P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))和P0(TT2j)为置换函数,所述置换函数的函数表达式为:
P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))=
(W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)⊕
((W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)<<<15)⊕
((W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)<<<23)
P0(TT2j)=TT2j⊕(TT2j<<<9)⊕(TT2j<<<17)
其中,<<<12、<<<j、<<<7、<<<15、<<<9、<<<19分别为循环左移12、j、7、15、9、19比特运算,⊕为32比特异或运算,∧为32比特与运算,∨为32比特或运算,mod为模运算,为32比特非运算。
2.根据权利要求1所述的方法,其特征在于,所述确定32比特长度的常量Tj具体为:
其中,79cc4519和7a879d8a为16进制数。
3.根据权利要求1所述的方法,其特征在于,所述确定32比特长度的各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值具体为:
将各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值依次设置为V(i)从最高比特位开始的第1-8个字的值,其中,每个字的字长为32比特。
4.根据权利要求1所述的方法,其特征在于,所述根据消息分组B(i)确定16个32比特长度的消息扩展字W0-W15具体为:
将消息扩展字W0-W15分别设置为从512比特长度的消息分组B(i)的最高比特位开始的第1-16个字的值,其中,每个字的字长为32比特。
5.根据权利要求1所述的方法,其特征在于,所述消息扩展字W0-W15和中间变量字SS1、SS2、ww、TT1、TT2采用32比特长度的字寄存器进行存储;
所述步骤4-步骤7中的任一加法、减法、循环左移、异或、与、或、模、非运算分别由加法器、减法器、移位寄存器、异或门电路、与门电路、或门电路、模运算电路、非门电路实现。
6.一种实现SM3密码杂凑算法中的迭代压缩的方法,其特征在于,包括:
步骤1、设置迭代次数i=0;设置压缩函数V的第0次迭代值V(0)为用16进制表示的7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aae38dee4d b0fb0e4e;
步骤2、根据消息分组B(i)确定16个32比特长度的消息扩展字W0-W15;确定32比特长度的各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值;
步骤3、设置迭代次数j=0;
步骤4、确定32比特长度的常量Tj;按照迭代公式,确定中间变量字TT1、TT2和各变量字A、B、C、D、E、F、G、H的第j次迭代值TT1j、TT2j、Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj、以及消息扩展字W(j mod16),其中,所述迭代公式包括:
TT1j=((Aj-1<<<12)+Ej-1+(Tj<<<j))<<<7;
TT2j=GGj(Ej-1,Fj-1,Gj-1)+Hj-1+TT1j+Wj;
TT1j=FFj(Aj-1,Bj-1,Cj-1)+Dj-1+(TT1j⊕(Aj-1<<<12))+Wj⊕Wj+4;
W(j mod16)=P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))⊕(W((j-1)mod16)<<<7)⊕W((j-6)mod16);
Dj=Cj-1;
Cj=Bj-1<<<9;
Bj=Aj-1;
Aj=TT1j;
Hj=Gj-1;
Gj=Fj-1<<<19;
Fj=Ej-1;
Ej=P0(TT2j);
步骤5;判断j是否等于63,如果j等于63,执行步骤6,如果j小于63,j的值增加1,执行步骤4;
步骤6、将Aj、Bj、Cj、Dj、Ej、Fj、Gj、Hj的先后顺序作为比特位由高到底的排列顺序组合得到的256比特长度的变量Aj Bj Cj Dj Ej Fj Gj Hj与V的第i次迭代值进行异或运算,得到V的第i+1次迭代值V(i+1):
V(i+1)=Aj Bj Cj Dj Ej Fj Gj Hj⊕V(i);
步骤7、判断i是否等于N-1,如果i等于N-1,输出V(N),如果i小于N-1,i的值加1,执行步骤2;
其中,N为消息分组的数量;
FFj(Aj-1,Bj-1,Cj-1)和GGj(Ej-1,Fj-1,Gj-1)为布尔函数,函数表达式为:
P1(Wj-16⊕Wj-9⊕(Wj-3<<<15))和P0(TT2j)为置换函数,函数表达式为:
P1(W((j-16)mod16)⊕W((j-9)mod16)⊕(W((j-3)mod16)<<<15))=
(W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)⊕
((W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)<<<15)⊕
((W((j-16)mod16)⊕W((j-9)mod16)⊕W((j-3)mod16)<<<15)<<<23)
P0(TT2j)=TT2j⊕(TT2j<<<9)⊕(TT2j<<<17)
其中,<<<12、<<<j、<<<7、<<<15、<<<9、<<<19分别为循环左移12、j、7、15、9、19比特运算,⊕为32比特异或运算,∧为32比特与运算,∨为32比特或运算,mod为模运算,为32比特非运算。
7.根据权利要求6所述的方法,其特征在于,所述确定32比特长度的常量Tj具体为:
其中,79cc4519和7a879d8a为16进制数。
8.根据权利要求6所述的方法,其特征在于,所述确定32比特长度的各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值具体为:
将各变量字A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1的初始值依次设置为V(i)从最高比特位开始的第1-8个字的值,其中,每个字的字长为32比特。
9.根据权利要求6所述的方法,其特征在于,所述根据消息分组B(i)确定16个32比特长度的消息扩展字W0-W15为:
将消息扩展字W0-W15分别设置为从512比特长度的消息分组B(i)的最高比特位开始的第1-16个字的值,其中,每个字的字长为32比特。
10.根据权利要求6所述的方法,其特征在于,所述消息扩展字W0-W15和中间变量字TT1、TT2采用32比特长度的字寄存器进行存储;
所述步骤4-步骤7中的任一加法、减法、循环左移、异或、与、或、模、非运算分别由加法器、减法器、移位寄存器、异或门电路、与门电路、或门电路、模运算电路、非门电路实现。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410325899.4A CN104092534A (zh) | 2014-07-09 | 2014-07-09 | 实现sm3密码杂凑算法中的迭代压缩的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410325899.4A CN104092534A (zh) | 2014-07-09 | 2014-07-09 | 实现sm3密码杂凑算法中的迭代压缩的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN104092534A true CN104092534A (zh) | 2014-10-08 |
Family
ID=51640216
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410325899.4A Pending CN104092534A (zh) | 2014-07-09 | 2014-07-09 | 实现sm3密码杂凑算法中的迭代压缩的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104092534A (zh) |
Cited By (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104579656A (zh) * | 2014-12-31 | 2015-04-29 | 北京时代民芯科技有限公司 | 一种椭圆曲线公钥密码sm2算法的硬件加速协处理器 |
CN105991289A (zh) * | 2015-03-06 | 2016-10-05 | 上海复旦微电子集团股份有限公司 | Sm3密码算法的侧信道能量分析方法及装置 |
CN106301761A (zh) * | 2016-08-09 | 2017-01-04 | 北京智芯微电子科技有限公司 | 一种基于密码杂凑算法的压缩方法及装置 |
CN106533657A (zh) * | 2016-12-22 | 2017-03-22 | 广东工业大学 | 一种sm3杂凑加密系统 |
CN107612681A (zh) * | 2017-09-25 | 2018-01-19 | 郑州云海信息技术有限公司 | 一种基于sm3算法的数据处理方法、装置及系统 |
CN110022203A (zh) * | 2019-03-15 | 2019-07-16 | 深圳市纽创信安科技开发有限公司 | 一种sm3加速方法和装置 |
CN111090599A (zh) * | 2019-12-18 | 2020-05-01 | 安徽省配天重工装备技术有限公司 | 一种变量字长确定方法、系统、设备及计算机存储介质 |
CN113204771A (zh) * | 2021-04-21 | 2021-08-03 | 北京连山科技股份有限公司 | 一种利用国密sm3改进分组密码cbc模式缺点的高效方法 |
CN113300831A (zh) * | 2021-07-26 | 2021-08-24 | 苏州浪潮智能科技有限公司 | 一种安全散列算法的实现方法、系统、介质及设备 |
CN116318660A (zh) * | 2023-01-12 | 2023-06-23 | 成都海泰方圆科技有限公司 | 一种消息扩展与压缩方法及相关装置 |
CN116846543A (zh) * | 2023-07-26 | 2023-10-03 | 百信信息技术有限公司 | 一种sm3密码杂凑算法的数据处理方法及相关设备 |
-
2014
- 2014-07-09 CN CN201410325899.4A patent/CN104092534A/zh active Pending
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104579656A (zh) * | 2014-12-31 | 2015-04-29 | 北京时代民芯科技有限公司 | 一种椭圆曲线公钥密码sm2算法的硬件加速协处理器 |
CN105991289A (zh) * | 2015-03-06 | 2016-10-05 | 上海复旦微电子集团股份有限公司 | Sm3密码算法的侧信道能量分析方法及装置 |
CN105991289B (zh) * | 2015-03-06 | 2018-12-25 | 上海复旦微电子集团股份有限公司 | Sm3密码算法的侧信道能量分析方法及装置 |
CN106301761A (zh) * | 2016-08-09 | 2017-01-04 | 北京智芯微电子科技有限公司 | 一种基于密码杂凑算法的压缩方法及装置 |
CN106301761B (zh) * | 2016-08-09 | 2019-04-09 | 北京智芯微电子科技有限公司 | 一种基于密码杂凑算法的压缩方法及装置 |
CN106533657A (zh) * | 2016-12-22 | 2017-03-22 | 广东工业大学 | 一种sm3杂凑加密系统 |
CN107612681A (zh) * | 2017-09-25 | 2018-01-19 | 郑州云海信息技术有限公司 | 一种基于sm3算法的数据处理方法、装置及系统 |
CN110022203A (zh) * | 2019-03-15 | 2019-07-16 | 深圳市纽创信安科技开发有限公司 | 一种sm3加速方法和装置 |
CN111090599A (zh) * | 2019-12-18 | 2020-05-01 | 安徽省配天重工装备技术有限公司 | 一种变量字长确定方法、系统、设备及计算机存储介质 |
CN111090599B (zh) * | 2019-12-18 | 2021-09-14 | 安徽省配天重工装备技术有限公司 | 一种变量字长确定方法、系统、设备及计算机存储介质 |
CN113204771A (zh) * | 2021-04-21 | 2021-08-03 | 北京连山科技股份有限公司 | 一种利用国密sm3改进分组密码cbc模式缺点的高效方法 |
CN113204771B (zh) * | 2021-04-21 | 2022-02-22 | 北京连山科技股份有限公司 | 一种利用国密sm3改进分组密码cbc模式缺点的高效方法 |
CN113300831A (zh) * | 2021-07-26 | 2021-08-24 | 苏州浪潮智能科技有限公司 | 一种安全散列算法的实现方法、系统、介质及设备 |
CN113300831B (zh) * | 2021-07-26 | 2021-10-29 | 苏州浪潮智能科技有限公司 | 一种安全散列算法的实现方法、系统、介质及设备 |
CN116318660A (zh) * | 2023-01-12 | 2023-06-23 | 成都海泰方圆科技有限公司 | 一种消息扩展与压缩方法及相关装置 |
CN116318660B (zh) * | 2023-01-12 | 2023-12-08 | 成都海泰方圆科技有限公司 | 一种消息扩展与压缩方法及相关装置 |
CN116846543A (zh) * | 2023-07-26 | 2023-10-03 | 百信信息技术有限公司 | 一种sm3密码杂凑算法的数据处理方法及相关设备 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104092534A (zh) | 实现sm3密码杂凑算法中的迭代压缩的方法 | |
CN102761414B (zh) | 一种sm3密码杂凑算法及确定其中的变量字的方法 | |
CN103427997B (zh) | 一种生成数字签名的方法及装置 | |
US10009171B2 (en) | Construction and uses of variable-input-length tweakable ciphers | |
CN111492616B (zh) | 用于基于晶格的密码学的可配置设备 | |
CN102594566B (zh) | 一种面向无线传感器网络的混沌消息认证码实现方法 | |
US20190109715A1 (en) | Methods for constructing secure hash functions from bit-mixers | |
CN102412971A (zh) | 基于sm2密钥交换协议的密钥协商方法及装置 | |
CN105009507A (zh) | 借助于物理不可克隆函数创建从加密密钥中推导的密钥 | |
CN110071794B (zh) | 一种基于aes算法的信息加密方法、系统及相关组件 | |
CN112136134B (zh) | 具有组合的函数的加密asic | |
CN111464308A (zh) | 一种实现多种哈希算法可重构的方法和系统 | |
CN112187461A (zh) | 一种基于加密算法的武器装备数据混合加密方法 | |
CN103973439A (zh) | 一种多变量公钥加密方法 | |
EP3363142A1 (en) | A cryptographic device and an encoding device | |
CN104917608A (zh) | 一种密钥抗功耗攻击的方法 | |
Ren et al. | One-way hash function based on delay-induced hyperchaos | |
CN103780794A (zh) | 一种基于混沌系统的图像加密改进方法 | |
CN103368725A (zh) | 一种g0类s盒构造方法及其电路 | |
CN109981276B (zh) | 一种zk-snark底层双线性对的国密替代实现方法 | |
CN102542070B (zh) | 基于随机函数的单向哈希函数构造方法 | |
CN106301764B (zh) | 基于路径散列的消息摘要方法和系统 | |
CN103378968A (zh) | 一种g1类s盒构造方法及其电路 | |
KR102364047B1 (ko) | 구조화된 행렬들에 기초한 공개키 암호를 위한 방법과 장치 | |
Rastaghi | An efficient CCA2-secure variant of the McEliece cryptosystem in the standard model |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20141008 |
|
WD01 | Invention patent application deemed withdrawn after publication |