CN102761414A - 一种sm3密码杂凑算法及确定其中的变量字的方法 - Google Patents
一种sm3密码杂凑算法及确定其中的变量字的方法 Download PDFInfo
- Publication number
- CN102761414A CN102761414A CN2011101051986A CN201110105198A CN102761414A CN 102761414 A CN102761414 A CN 102761414A CN 2011101051986 A CN2011101051986 A CN 2011101051986A CN 201110105198 A CN201110105198 A CN 201110105198A CN 102761414 A CN102761414 A CN 102761414A
- Authority
- CN
- China
- Prior art keywords
- word
- value
- bits
- variable
- bit
- 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
Images
Abstract
本发明涉及一种SM3密码杂凑算法及确定其中的变量字的方法。变量字为A-H;该方法包括:步骤a:设置n=0;确定常量Tn和消息扩展字W0-W67、W0’-W63’;进行设置A-H及P和Q的初始化值A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1、P-1=D-1+W’0,Q-1=H-1+W0;步骤b:按照迭代公式进行一次迭代运算,确定SS1、SS2、TT1、TT2、P、Q和各变量字的第n次迭代值;迭代公式包括:SS1n=S7[S12(An-1)+En-1+Sn(Tn)];TT1n=FFn(An-1,Bn-1,Cn-1)+SS2n+Pn-1;TT2n=GGn(En-1,Fn-1,Gn-1)+SS1n+Qn-1;Dn=Cn-1;Cn=S9(Bn-1);Bn=An-1;An=TT1n;Hn=Gn-1;Gn=S19(Fn-1);Fn=En-1;En=P0(TT2n);Pn=Cn-1+W′n+1;Qn=Gn-1+Wn+1; 步骤c:n自动加1;判断n是否超过63,是则执行输出A-H的迭代终值,否则继续迭代。本发明能减少变量字的迭代过程中关键路径的串行加法运算的数量。
Description
技术领域
本发明涉及信息安全领域,特别是涉及一种SM3密码杂凑算法及确定其中的变量字的方法。
背景技术
为了保证数据的安全,人们通常会将数据加密为密文,只有利用相应的密钥才能解密密文,得到原始数据明文。在该加解密的过程中,常常要用到密码杂凑算法,将任一不超过(264-1)比特的二进制比特串转换为固定长度,如256比特的二进制杂凑值输出。
在密码学中,密码杂凑算法所用到的密码杂凑函数具有两个基本特性:一是输入值与输出值一一对应,即两个不同的输入不可能生成同一个杂凑值;二是运算不可逆,即对于一已知的杂凑输出值y,要找到一个可以计算其输入值x的杂凑逆算法x=h(y)也是不可行的。因此,密码杂凑算法可以有效保证数据的安全,广泛应用于数字签名和验证、消息认证码的生成和验证中,在保护信息完整性方面起着重要的作用。
国家密码管理局发布的SM3密码杂凑算法具有良好的安全性,可满足多种密码应用的安全需求。该算法中,最核心的运算是在计算压缩函数V的各次迭代值的过程中用到的8个变量字A、B、C、D、E、F、G、H的64次迭代运算,第n次迭代运算的迭代公式为:
SS1n-S7(S12(An-1)+En-1+Sn(Tn));
TT1n=FFn(An-1,Bn-1,Cn-1)+SS2n+Dn-1+W’n;
TT2n=GGn(En-1,Fn-1,Gn-1)+SS1n+Hn-1+Wn;
Dn=Cn-1;
Dn=S9(Bn-1);
Bn=An-1;
An=TT1n;
Hn=Gn-1;
Gn=S19(Fn-1);
Fn=En-1;
En=F0(TT2n)
这里的Tn为常量,An-1、Bn-1、Cn-1、En-1、Fn-1、Gn-1为相应变量字的第n-1次迭代值,An、Bn、Cn、Dn、En、Fn、Gn、Hn分别为各变量字的第n次迭代值,SS1、SS2、TT1、TT2为中间变量字,SS1n、SS2n、TT1n、TT2n为其第n次迭代值,Wn和Wn’均为32比特长的已知的消息扩展字,Si(X)为对字X进行循环左移i比特的运算,如计算Cn的S9(Bn-1)为对变量字Bn-1进行循环左移9比特的运算,FFn(An-1,Bn-1,Cn-1)和GGn(En-1,Fn-1,Gn-1)均为表达式已知的布尔函数,P0(TT2n)为表达式已知的置换函数,为常见的异或逻辑运算符。
上述的迭代过程涉及循环左移、异或等逻辑运算以及加法运算,其中,循环左移、异或等逻辑运算的延时很小,可以忽略不计,而加法运算由于需要进位,延时较大,因此,一次迭代过程中串行的加法运算的最大数量决定了该迭代过程的延时,串行加法运算数量最多的计算路径称为该迭代过程的关键路径。根据上述迭代公式可以看出,在一次迭代过程中,确定An和En所需要串行的加法运算数量最多,因而在该迭代过程中,确定An和En这两个变量字的计算路径就是决定该迭代过程的延时的关键路径。
图1为现有的确定SM3密码杂凑算法中的变量字的电路图。如图1所示,一次迭代过程中的关键路径,即确定An和En这两个变量字的计算路径用粗线表示,要得到An需要经过a1、a2、a3、a4、a5这五次加法运算才能完成,同样,要得到En需要经过a1、a2、a6、a7、a8五次加法运算才能完成,因而各变量字的一次迭代运算总延时约为五次加法运算的延时之和。由于对V每迭代运算一次,就需要对A-H这8个变量字迭代64次,因而在SM3密码杂凑算法中对8个变量字进行的迭代运算的总数是很大的,现有技术中一次迭代过程的总延时约为五次加法运算的延时之和,严重影响了SM3密码杂凑算法的运算速度。
发明内容
本发明所要解决的技术问题是提供一种SM3密码杂凑算法及确定其中的变量字的方法,能减少变量字的迭代过程中关键路径的串行加法运算的数量。
本发明解决上述技术问题的技术方案如下:一种确定SM3密码杂凑算法中的变量字的方法,所述变量字为32比特长的A、B、C、D、E、F、G、H;该方法包括:
步骤a:设置迭代次数n为0;确定32比特长度的常量Tn和132个32比特长度的消息扩展字W0-W67、W0’-W63’;进行初始化过程,所述初始化过程包括:设置各变量字的初始迭代值A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1;确定中间变量字P、Q的初始值P-1=D-1+W’0,Q-1=H-1+W0;
步骤b:按照迭代公式进行一次迭代运算,确定中间变量字SS1、SS2、TT1、TT2、P、Q和各变量字的第n次迭代值SS1n、SS2n、TT1n、TT2n、Pn、Qn、An、Bn、Cn、Dn、En、Fn、Gn、Hn;所述迭代公式包括:
SS1n=S7[S12(An-1)+En-1+Sn(Tn)];
TT1n=FFn(An-1,Bn-1,Cn-1)+SS2n+Pn-1;
TT2n=GGn(En-1,Fn-1,Gn-1)+SS1n+Qn-1;
Dn=Cn-1;
Cn=S9(Bn-1);
Bn=An-1;
An=TT1n;
Hn=Gn-1;
Gn=S19(Fn-1);
Fn=En-1;
En=P0(TT2n);
Pn=Cn-1+W′n+1;
Qn=Gn-1+Wn+1;
其中,An-1、Bn-1、Cn-1、En-1、Fn-1、Gn-1为相应变量字的第n-1次迭代值;Pn-1、Qn-1分别为P和Q的第n-1次迭代值;FFn(An-1,Bn-1,Cn-1)和GGn(En-1,Fn-1,Gn-1)均为布尔函数,其函数表达式分别为:
P0(TT2n)为置换函数,其函数表达式为:
上述的S7(X)、S12(X)、Sn(X)、S9(X)、S17(X)、S19(X)分别为对字X进行循环左移7比特、12比特、n比特、9比特、17比特、19比特的运算;∩、∪、-分别为异或、逻辑与、逻辑或、逻辑非运算符;
步骤c:n的值增加1;判断n是否超过63,是则执行步骤d,否则,执行步骤b;
步骤d:将所述各变量字的第63次迭代值A63、B63、C63、D63、E63、F63、G63、H63输出。
本发明的有益效果是:本发明中,由于引入了中间变量P和Q,确定二者均需要进行一次加法运算,在步骤a中确定出二者的初始值P-1和Q-1作为迭代过程的起始值,在步骤b至步骤c所示的每次变量字迭代过程中,均使用上次迭代过程所计算出的P和Q的迭代值,并在本次迭代过程中计算得到用于进行下次迭代运算的P和Q的迭代值,并且计算P和Q迭代值的加法运算与确定变量字A和E的本次迭代值的计算过程是并行的,这样,本发明通过设置中间变量P和Q,从计算A和E的一次迭代值的五次加法运算中取出一次与其他加法运算并行,从而使一次变量字迭代过程中计算A和E的串行加法运算的数量变为4次,相对于现有技术,本发明减少了变量字的迭代过程中关键路径的串行加法运算的数量,使关键路径中串行加法运算的数量减少了20%,从而大大减少了一次迭代过程的总延时,提高了SM3密码杂凑算法的运算速度。
在上述技术方案的基础上,本发明还可以做如下改进:
进一步,所述步骤a中确定32比特长度的常量Tn的方法为:设置Tn为16进制表示的79cc4519;
在所述步骤b按照迭代公式进行一次迭代运算之前,该方法进一步包括:确定本次迭代运算中的Tn,其方法为:根据Tn与n的对应关系来确定Tn,所述对应关系为:
进一步,所述步骤a中确定132个32比特长度的消息扩展字W0-W67、W0’-W63’的方法为:
步骤a1:将W0-W15分别置为所述SM3密码杂凑算法中长度为512比特的消息分组从最高比特位开始的第1-16个字的值,其中,每个字的字长为32比特;
步骤a2:循环变量r从16起至67为止,根据
计算W16-W67的值,其中,S15(X)、S7(X)分别为对消息扩展字X进行循环左移15比特和7比特的运算;
步骤a3:循环变量r从0起至63为止,根据计算W0’-W63’的值。
进一步,所述步骤a的初始化过程中设置各变量字的初始迭代值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依次置为所述SM3密码杂凑算法中长度为256比特的压缩函数值从最高位开始的第1-8个字的值,其中,每个字的字长为32比特。
进一步,所述P、Q以及各变量字均用32比特长度的字寄存器进行存储;
和/或,所述步骤a中确定P、Q的初始值的加法运算由加法器实现;所述步骤b迭代公式中的任一循环左移、异或、逻辑与、逻辑或、逻辑非、加法运算分别由相应的移位寄存器、异或门电路、与门电路、或门电路、非门电路、加法器实现。
另外,本发明还提供了一种SM3密码杂凑算法,该算法包括:
步骤1:接收长度不超过(264-1)比特的消息m,并对其进行填充,得到长度为512比特的k倍的填充消息m’,其中的k为不超过(255+1)的正整数;
步骤2:从m’的最高比特位开始,以512比特为一个消息分组,将m’划分为k组,各消息分组按其在m’中的比特位由高到低的顺序依次记为B0-B(k-1);
步骤3:设置循环变量i为0;设置压缩函数V的第0次迭代值V0为用16进制表示的7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e;
步骤4:根据Bi确定出132个32比特长度的消息扩展字Wi0-Wi67、Wi0’-Wi63’,其中,Bi为第i个消息分组,i为0与(k-1)之间的正整数;
步骤5:确定32比特长度的变量字Ai、Bi、Ci、Di、Ei、Fi、Gi、Hi的第63次迭代值Ai63、Bi63、Ci63、Di63、Ei63、Fi63、Gi63、Hi63,其方法包括:
步骤51:设置迭代次数n为0;确定32比特长度的常量Tn;进行初始化过程,所述初始化过程包括:设置各变量字的初始迭代值Ai(-1)、Bi(-1)、Ci(-1)、Di(-1)、Ei(-1)、Fi(-1)、Gi(-1)、Hi(-1);确定中间变量字Pi、Qi的初始迭代值Pi(-1)=Di(-1)+W′i0,Qi(-1)=Hi(-1)+Wi0;
步骤52:按照迭代公式进行一次迭代运算,确定中间变量字SS1i、SS2i、TT1i、TT2i、Pi、Qi和各变量字的第n次迭代值SS1in、SS2in、TT1in、TT2in、Pin、Qin、Ain、Bin、Cin、Din、Ein、Fin、Gin、Hin;所述迭代公式包括:
SS1in=S7[S12(Ai(n-1))+Ei(n-1)+Sn(Tn)];
TT1in=FFn(Ai(n-1),Bi(n-1),Ci(n-1))+SS2in+Pi(n-1);
TT2in=GGn(Ei(n-1),Fi(n-1),Gi(n-1))+SS1in+Qi(n-1);
Din=Ci(n-1);
Cin=S9(Bi(n-1));
Bin=Ai(n-1);
Ain=TT1in;
Hin=Gi(n-1);
Gin=S19(Fi(n-1));
Fin=Ei(n-1);
Ein=P0(TT2in);
Pin=Ci(n-1)+W′i(n+1);
Qin=Gi(n-1)+Wi(n+1);
其中,Ai(n-1)、Bi(n-1)、Ci(n-1)、Ei(n-1)、Fi(n-1)、Gi(n-1)为相应变量字的第n-1次迭代值;Pi(n-1)、Qi(n-1)分别为Pi、Qi的第n-1次迭代值;FFn(Ai(n-1),Bi(n-1),Ci(n-1))和GGn(Ei(n-1),Fi(n-1),Gi(n-1))均为布尔函数,其函数表达式分别为:
P0(TT2in)为置换函数,其函数表达式为:
上述的S7(X)、S12(X)、Sn(X)、S9(X)、S17(X)、S19(X)分别为对字X进行循环左移7比特、12比特、n比特、9比特、17比特、19比特的运算;∩、∪、-分别为异或、逻辑与、逻辑或、逻辑非运算符;
步骤53:n的值增加1;判断n是否超过63,是则结束步骤5,并执行步骤6;否则,执行步骤52;
步骤6:将Ai、Bi、Ci、Di、Ei、Fi、Gi、Hi的先后顺序作为比特位由高到低的排列顺序,将Ai63、Bi63、Ci63、Di63、Ei63、Fi63、Gi63、Hi63组合为一个256比特长度的异或变量Ui;利用V的第i次迭代值Vi,根据确定V的第(i+1)次迭代值V(i+1);
步骤7:i的值增加1;判断i是否超过(k-1),是则将Vk作为m的杂凑值输出,否则执行步骤4。
进一步,所述步骤1中对m进行填充,得到长度为512比特的k倍的填充消息m’的方法为:
将二进制数1填充到长度为y的m的最低比特位之后,得到填充消息m1;
向m1的最低比特位之后填充z个二进制数0,得到填充消息m2,其中,z是满足关系式(y+1+z)mod 512=448的最小的非负整数,mod为求模运算符;
向m2的最低比特位之后填充长度为64比特的比特串,得到m’,其中的比特串为y的二进制表示。
进一步,所述步骤51中确定32比特长度的常量Tn的方法为:设置Tn为16进制表示的79cc4519;
在所述步骤52中按照迭代公式进行一次迭代运算之前,该算法进一步包括:确定本次迭代运算中的Tn,其方法为:根据Tn与n的对应关系来确定Tn,所述对应关系为:
进一步,所述步骤4中根据Bi确定出132个32比特长度的消息扩展字Wi0-Wi67、Wi0’-Wi63’的方法为:
步骤41:将Wi0-Wi15分别置为Bi从最高比特位开始的第1-16个字的值,其中,每个字的字长为32比特;
步骤42:循环变量r从16起至67为止,根据
进一步,所述步骤51的初始化过程中设置各变量字的初始迭代值Ai(-1)、Bi(-1)、Ci (-1)、Di(-1)、Ei(-1)、Fi(-1)、Gi(-1)、Hi(-1)的方法为:将各变量字的初始迭代值Ai(-1)、Bi(-1)、Ci(-1)、Di(-1)、Ei(-1)、Fi(-1)、Gi(-1)、Hi(-1)依次置为V的第i次迭代值Vi从最高位开始的第1-8个字的值,其中,每个字的字长为32比特。
附图说明
图1为现有的确定SM3密码杂凑算法中的变量字的电路图;
图2为本发明提供的确定SM3密码杂凑算法中的变量字的方法流程图;
图3为本发明提供的确定SM3密码杂凑算法中的变量字的电路图;
图4为本发明提供的SM3密码杂凑算法的流程图。
具体实施方式
以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。
图2为本发明提供的确定SM3密码杂凑算法中的变量字的方法流程图。该算法中的变量字为32比特长的A、B、C、D、E、F、G、H;该方法包括:
步骤a:设置迭代次数n为0;确定32比特长度的常量Tn和132个32比特长度的消息扩展字W0-W67、W0’-W63’;进行初始化过程。
这里的初始化过程包括:设置各变量字的初始迭代值A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1;确定中间变量字P、Q的初始值P-1=D-1+W’0,Q-1=H-1+W0。
本步骤中,迭代次数n为从0起递增的非负整数,每次递增数量为1。
Tn为本步骤确定的常量,它可以是迭代过程中均保持不变的量,也可以为与n有关的常量,例如,Tn可以为分段常量,即在n取值范围的一个区间内,Tn为一个常量,在n取值范围的另一个区间内,Tn为另一个常量。
在整个迭代过程开始之前,需要确定出132个消息扩展字,包括67个用符号W表示的消息扩展字W0-W67,以及63个用符号W’表示的消息扩展字W0’-W63’。本发明中,这些消息扩展字在步骤b至步骤d中用于计算中间变量P和Q的各次迭代值。
初始化过程是将各变量字的初始迭代值以及中间变量P和Q的初始值确定出来,从而将其作为步骤b至步骤d的循环迭代过程的起始值。
步骤b:按照迭代公式进行一次迭代运算,确定中间变量字SS1、SS2、TT1、TT2、P、Q和各变量字的第n次迭代值SS1n、SS2n、TT1n、TT2n、Pn、Qn、An、Bn、Cn、Dn、En、Fn、Gn、Hn;
其中的迭代公式包括:
SS1n=S7[S12(An-1)+En-1+Sn(Tn)];
TT1n=FFn(An-1,Bn-1,Cn-1)+SS2n+Pn-1;
TT2n=GGn(En-1,Fn-1,Gn-1)+SS1n+Qn-1;
Dn=Cn-1;
Cn=S9(Bn-1);
Bn=An-1;
An=TT1n;
Hn=Gn-1;
Gn=S19(Fn-1);
Fn=En-1;
En=P0(TT2n);
Pn=Cn-1+W′n+1;
Qn=Gn-1+Wn+1;
其中,An-1、Bn-1、Cn-1、En-1、Fn-1、Gn-1为相应变量字的第(n-1)次迭代值;Pn-1、Qn-1分别为P和Q的第(n-1)次迭代值;FFn(An-1,Bn-1,Cn-1)和GGn(En-1,Fn-1,Gn-1)均为布尔函数,其函数表达式分别为:
P0(TT2n)为置换函数,其函数表达式为:
上述的S7(X)、S12(X)、Sn(X)、S9(X)、S17(X)、S19(X)分别为对字X进行循环左移7比特、12比特、n比特、9比特、17比特、19比特的运算;∩、∪、-分别为异或、逻辑与、逻辑或、逻辑非运算符。
本步骤作为循环迭代过程的主体,需要重复进行64次才能结束。本步骤中,确定变量字A和E的第n次迭代值An、En所用到的中间变量P和Q的迭代值均为其第(n-1)次迭代值Pn-1和Qn-1,并在本步骤中与确定An、En并行计算得到P和Q的第n次迭代值Pn和Qn以供确定An+1、En+1使用,而计算P和Q的一次迭代值的过程均为一次加法运算,这样,本发明就将每条关键路径中的计算P和Q的迭代值的一次加法运算分别变为与其他四次加法运算并行,从而减少了关键路径中串行加法运算的数量。
在确定出各变量字的最后一次迭代结果A63、B63、C63、D63、E63、F63、G63、H63之后,n为63,此时,(n+1)的值为64,由于步骤a中仅确定出W63’,而没有确定W64’,因而计算P63的步骤停止,即根据Pn=Cn-1+W′n+1计算Pn的步骤是在n不超过62的情况下执行的,当n递增到63时,计算P63的步骤停止,此时,各变量字的迭代结果A63、B63、C63、D63、E63、F63、G63、H63均已获得,事实上也无需继续计算P和Q的下一次迭代值P63和Q63,否则,如果继续根据Pn=Cn-1+W′n+1计算P63,将出现迭代溢出错误。
FFn(An-1,Bn-1,Cn-1)和GGn(En-1,Fn-1,Gn-1)均为SM3密码杂凑算法中的布尔函数,P0(TT2n)为SM3密码杂凑算法中的置换函数。
Si(X)为对字X进行循环左移i比特的运算,例如,计算SS1n的公式中的Sn(Tn)为对步骤a确定出的常量Tn进行循环左移n比特的运算,其中的n为迭代次数n;计算SS2n的公式中的S12(An-1)为对变量字An-1循环左移12比特的运算。
步骤c:n的值增加1。
步骤d:判断n是否超过63,是则执行步骤e,否则,执行步骤b。
本步骤作为循环迭代与退出迭代的判断步骤,用于控制迭代次数n不超过63,由于n从0起递增,因而各变量字总共进行了64次迭代运算,得到最终的输出值A63、B63、C63、D63、E63、F63、G63、H63。
步骤e:将各变量字的第63次迭代值A63、B63、C63、D63、E63、F63、G63、H63输出。
本步骤为将各变量字的迭代结果输出的步骤。在SM3密码杂凑算法中,各变量字的一次迭代结果可用于计算压缩函数V的下次迭代值,因而SM3密码杂凑算法是一个嵌套迭代算法。
本发明中,各变量字的迭代次数最大为64次,由于迭代次数n是从0开始递增的,因而当n从0增大到63时,得到8个变量字A-H的迭代结果A63、B63、C63、D63、E63、F63、G63、H63,经过步骤c,n递增为64,此时n已超过63,因而步骤d的判断结果为是,需要执行步骤e,停止步骤b至步骤d的循环迭代,并将迭代结果输出。
由此可见,本发明中,由于引入了中间变量P和Q,确定二者均需要进行一次加法运算,在步骤a中确定出二者的初始值P-1和Q-1作为迭代过程的起始值,在步骤b至步骤d所示的每次变量字迭代过程中,均使用上次迭代过程所计算出的P和Q的迭代值,并在本次迭代过程中计算得到用于进行下次迭代运算的P和Q的迭代值,并且计算P和Q迭代值的加法运算与确定变量字A和E的本次迭代值的计算过程是并行的,这样,本发明通过设置中间变量P和Q,从计算A和E的一次迭代值的五次加法运算中取出一次与其他加法运算并行,从而使一次变量字迭代过程中计算A和E的串行加法运算的数量变为4次,相对于现有技术,本发明减少了变量字的迭代过程中关键路径的串行加法运算的数量,使关键路径中串行加法运算的数量减少了20%,从而大大减少了一次迭代过程的总延时,提高了SM3密码杂凑算法的运算速度。
图3为本发明提供的确定SM3密码杂凑算法中的变量字的电路图。如图3所示,计算变量字A和E的关键路径用粗线表示,在变量字的一次迭代运算中,计算An的串行加法运算仅为b1、b2、b3、b4四次,确定En的串行加法运算也仅需要b1、b2、b5、b6这四次即可,因此,本发明大大减少了每次变量字迭代过程中的关键路径的延时,从而极大地提高了SM3密码杂凑算法的效率,由于关键路径中串行加法运算的数量由五次变为四次,减少了20%,因而本发明使SM3密码杂凑算法的效率提高了约20%。
该方法步骤a中确定32比特长度的常量Tn的方法为:设置Tn为16进制表示的79cc4519;这里的Tn为常量,用16进制表示为79cc4519,还可以用其他形式来表示,例如用二进制表示,用十进制表示等。
由于对各变量字的循环迭代运算是步骤b到步骤d之间的三步,因此,在每次开始循环迭代之前,即在步骤b按照迭代公式进行一次迭代运算之前,该方法进一步包括:确定本次迭代运算中的Tn,其方法为:根据Tn与n的对应关系来确定Tn,对应关系为:
这里的Tn为分段常量,根据n在0与63之间的取值范围,Tn有两个取值,当n为0与15之间的整数时,Tn的值用16进制表示为79cc4519,当n为16与63之间的整数时,其值用16进制表示为7a879d8a。Tn采取分段常量的形式,有利于提高SM3密码杂凑算法的运算不可逆性。
步骤a中需要确定132个32比特长度的消息扩展字W0-W67、W0’-W63’,其方法为:
步骤a1:将W0-W15分别置为SM3密码杂凑算法中长度为512比特的消息分组从最高比特位开始的第1-16个字的值,其中,每个字的字长为32比特;
步骤a2:循环变量r从16起至67为止,根据
这里要指出的是,本发明中所说的字的字长均为32比特,如每个变量字、每个消息扩展子、每个中间变量字的字长,均为32比特。
在SM3密码杂凑算法中,会在迭代计算变量字A-H之前确定出若干个512比特的消息分组,这里的步骤a1是对其中的一个消息分组进行从最高比特位开始的分组。由于每个消息分组的长度为512比特,而每个消息扩展字的字长为32比特,因此,可将一个消息分组划分为16个分组。从该消息分组的最高比特位开始,这16个分组依次记为W0、W1、W2、W3、W4、W5、W6、W7、W8、W9、W10、W11、W12、W13、W14、W15。
步骤a2是利用步骤a1计算得到的W0-W15来计算W16-W67,步骤a3则是根据前面两步计算得到的W0-W67来计算得到W0’-W63’。这两个步骤均为循环计算过程。
步骤a的初始化过程中,设置各变量字的初始迭代值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依次置为SM3密码杂凑算法中长度为256比特的压缩函数值从最高位开始的第1-8个字的值,其中,每个字的字长为32比特。
在SM3密码杂凑算法中有一个压缩函数,记为V,该函数也是通过循环迭代运算得到的,在V的循环迭代结束之后得到的压缩函数值即为SM3密码杂凑算法所要得到的杂凑值。该压缩函数值,即V的各迭代值,长度均为256比特,而每个变量字的长度均为32比特,因此,一个压缩函数值的长度等于8个变量字的长度,即每个压缩函数值可以分组为8个变量字。这样,从压缩函数值的最高比特位开始分组,每组的长度为32比特,可以划分为8组,本发明可将压缩函数值从最高比特位开始的各组的值依次赋给变量字A-H,作为各变量字的初始迭代值。
本发明中的中间变量字P、Q以及各变量字A-H的各次迭代值均可以用32比特长度的字寄存器进行存储。如图3所示,最上方的An-1与最下方的An虽然位于上下不同的位置,但可以用同一个字寄存器来实现,即该字寄存器的本次输入值可输出作为下次迭代的初始值。Bn-1-Qn-1与Bn-Qn的情况与此相同。
如图3所示,步骤a中确定P、Q的初始值的加法运算由最右侧的两个未标号的加法器分别实现,步骤b迭代公式中的任一循环左移、异或、逻辑与、逻辑或、逻辑非、加法运算分别由相应的移位寄存器(图3中用圆圈内的Si表示)、异或门电路(图3中用圆圈内的“异或”表示)、与门电路、或门电路、非门电路、加法器(图3中用方框内的加号表示,即标号为b1-b6的加法器)实现,其中,与门电路、或门电路和非门电路均位于计算TT1n和TT2n的布尔函数中,在图3中均位于圆圈内的“FF”和“GG”内。
由此可见,本发明提供的确定SM3密码杂凑算法中的变量字的方法除了可以用软件来实现之外,也可以用硬件来实现,这有利于进一步提高运算速度和算法的安全性。
对比图1和图3可以看出,现有技术和本发明所提供的电路中,加法器的数量均为8个,即本发明提供的电路并没有减少加法器的数量,但是改变了电路的结构,将现有技术计算A和E的各次迭代值的两条关键计算路径中的各一个加法运算由原来与另外四个串行变为并行,从而减少了关键路径中串行加法运算的数量,提高了SM3密码杂凑算法的效率。
以上所述的确定SM3密码杂凑算法中的变量字的方法可以应用于SM3密码杂凑算法中,从而提高其运算速度。图4为本发明提供的SM3密码杂凑算法的流程图,该算法应用了上述的确定SM3密码杂凑算法中的变量字的方法。如图4所示,该算法包括:
步骤1:接收长度不超过(264-1)比特的消息m,并对其进行填充,得到长度为512比特的k倍的填充消息m’,其中的k为不超过(255+1)的正整数。
本发明提供的SM3密码杂凑算法是将输入的长度不等的消息m转换为256比特的杂凑值的算法,因而其输入值为m,输出值为杂凑值。根据杂凑算法的特点,m与其杂凑值之间是一一对应的,且该杂凑运算不可逆,根据m的杂凑值是不可能通过逆运算得到m的,这有利于保证消息m的安全性。
本发明提供的SM3密码杂凑算法对输入消息m的要求为长度不超过(264-1)比特,如果超过,则可将该消息划分为多个组,每组的长度不超过(264-1)比特。
由于m的长度不定,可长可短,为了便于处理,本发明提供的SM3密码杂凑算法对齐进行填充,使其长度变为512比特的k倍,k为不超过(255+1)的正整数,这样,就可以在步骤2中对得到的填充消息m’按512比特为一组进行分组了。填充的方法多种多样,例如,可以在m的最低比特位之后填充若干个二进制数字0或1,也可以在m的最高比特位之前填充若干个二进制数字0或1,当然,也可以在m的各比特位中间填充一定数量的二进制数字0或1,还可以在m的最高比特位之前或最低比特位之后填充满足一定规律的二进制比特0或1。
步骤2:从m’的最高比特位开始,以512比特为一个消息分组,将m’划分为k组,各消息分组按其在m’中的比特位由高到低的顺序依次记为B0-B(k-1)。
本步骤是对m’进行分组的步骤,以512比特为单位,从m’的最高比特位开始,可将填充消息m’分为k组,每一组称为一个消息分组,记为Bi,其中的i为0与k之间的正整数。按消息分组在m’中所在的比特位由高到低的顺序,各消息分组依次记为B0、B1、……、B(k-1),即m’中比特位最高的512个比特所在的消息分组为B0,比特位次高的512比特所在的消息分组为B1,依次类推,比特位最低的512比特位于B(k-1)组。
本发明中每个消息分组的长度为512比特,每个字长为32比特,因而消息分组的长度为字长的16倍。
步骤3:设置循环变量i为0;设置压缩函数V的第0次迭代值V0为用16进制表示的7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e。
SM3密码杂凑算法是一个迭代算法,通过压缩函数V的k次迭代运算来得到输入m的杂凑值,该杂凑值即为V的最后一次迭代值Vk。
本步骤是设置压缩函数V的初始迭代值,即第0次迭代值的步骤,压缩函数的输出,即V的各次迭代值的长度均为256比特,用二进制表示比较长,因而这里将其16进制表示列出。
本步骤中的循环变量i设置为0,意味着这是V的第1次迭代,迭代结束后得到的迭代值记为V1,以后每次迭代均在上一次迭代值的基础上进行。
步骤4:根据Bi确定出132个32比特长度的消息扩展字Wi0-Wi67、Wi0’-Wi63’,其中,Bi为第i个消息分组,i为0与(k-1)之间的正整数。
从本步骤开始,到步骤8为止,是一次完整的迭代过程,SM3密码杂凑算法就是循环进行该迭代过程,最终得到杂凑值的。步骤2得到的消息分组Bi的数量为k个,因而从步骤4至步骤8的迭代过程要循环进行k次,循环变量i也从0递增到(k-1)为止,当i增加到k时,步骤8判断循环迭代过程结束,即本算法结束,将V的最终迭代值Vk作为消息m的杂凑值输出。
本步骤是根据Bi来确定各消息扩展字的,这意味着每个消息扩展字都包含有输入消息m的部分信息,根据Bi确定消息扩展字的方法很多,原则上只要使各消息扩展字与Bi有关即可。
在V的一次迭代运算中只利用一个消息分组,因而V的循环迭代次数与步骤2确定的消息分组的数量相同,为k次,它也与原始输入的消息m的长度正相关,理论上m的长度越大,循环迭代的次数也就越多。
每个消息扩展字的字长也为本发明中所涉及的32比特字长。
步骤5:确定32比特长度的变量字Ai、Bi、Ci、Di、Ei、Fi、Gi、Hi的第63次迭代值Ai63、Bi63、Ci63、Di63、Ei63、Fi63、Gi63、Hi63,确定方法即为图2所示的本发明所提供的确定SM3密码杂凑算法中的变量字的方法。
由于本步骤利用图2所示的确定变量字的方法来确定各变量字Ai、Bi、Ci、Di、Ei、Fi、Gi、Hi的第63次迭代值,因而大大提高了确定变量字的效率,优化了算法。
该方法中,确定各变量字的第63次迭代值的过程也是一个迭代过程,本发明称之为变量字迭代过程,该变量字迭代过程需要经过64次循环迭代才能得到各变量字的迭代终值,该迭代终值只用于V的一次迭代过程中,在V的下一次迭代过程中仍要经过64次变量字迭代过程,重新确定各变量字的新的迭代终值,由此可见,SM3密码杂凑算法是一个嵌套迭代的过程,变量字迭代过程需要进行(64*k)次才能得到最终的杂凑值,因而图2所示的方法使一次变量字迭代过程的耗时减少了约20%,对于整个SM3密码杂凑算法而言,节省的时间是显而易见的。
步骤5确定各变量字的第63次迭代值的方法包括:
步骤51:设置迭代次数n为0;确定32比特长度的常量Tn;进行初始化过程,初始化过程包括:设置各变量字的初始迭代值Ai(-1)、Bi(-1)、Ci(-1)、Di(-1)、Ei(-1)、Fi(-1)、Gi(-1)、Hi(-1);确定中间变量字Pi、Qi的初始迭代值Pi(-1)=Di(-1)+W′i0,Qi(-1)=Hi(-1)+Wi0。
本步骤是设置变量字迭代过程的初始值的步骤,设置的初始值包括迭代次数n、常量Tn、以及各变量字、中间变量字P和Q的初始值。步骤52和步骤53是迭代过程的主体,执行一次即得到各变量字的一次迭代值。
步骤52:按照迭代公式进行一次迭代运算,确定中间变量字SS1i、SS2i、TT1i、TT2i、Pi、Qi和各变量字的第n次迭代值SS1in、SS2in、TT1in、TT2in、Pin、Qin、Ain、Bin、Cin、Din、Ein、Fin、Gin、Hin;迭代公式包括:
SS1in=S7[S12(Ai(n-1))+Ei(n-1)+Sn(Tn)];
TT1in=FFn(Ai(n-1),Bi(n-1),Ci(n-1))+SS2in+Pi(n-1);
TT2in=GGn(Ei(n-1),Fi(n-1),Gi(n-1))+SS1in+Qi(n-1);
Din=Ci(n-1);
Cin=S9(Bi(n-1));
Bin=Ai(n-1);
Ain=TT1in;
Hin=Gi(n-1);
Gin=S19(Fi(n-1));
Fin=Ei(n-1);
Ein=P0(TT2in);
Pin=Ci(n-1)+W′i(n+1);
Qin=Gi(n-1)+Wi(n-1);
其中,Ai(n-1)、Bi(n-1)、Ci(n-1)、Ei(n-1)、Fi(n-1)、Gi(n-1)为相应变量字的第n-1次迭代值;Pi(n-1)、Qi(n-1)分别为Pi、Qi的第n-1次迭代值;FFn(Ai(n-1),Bi(n-1),Ci(n-1))和GGn(Ei(n-1),Fi(n-1),Gi(n-1))均为布尔函数,其函数表达式分别为:
P0(TT2in)为置换函数,其函数表达式为:
上述的S7(X)、S12(X)、Sn(X)、S9(X)、S17(X)、S19(X)分别为对字X进行循环左移7比特、12比特、n比特、9比特、17比特、19比特的运算;∩、∪、-分别为异或、逻辑与、逻辑或、逻辑非运算符;
由于步骤4并未确定出Wi64’,因而步骤52根据Pin=Ci(n-1)+W′i(n+1)来确定Pin,当n增大到63而确定出各变量字的最后一次迭代值Ai63、Bi63、Ci63、Di63、Ei63、Fi63、Gi63、Hi63之后,如果继续计算Pi63,将因Wi64’不存在而变得无法计算,因此,与图2中的步骤b相同,步骤52中计算Pin的运算Pin=Ci(n-1)+W′i(n+1)实际上也是在n不超过62的情况下执行的,当n递增到63时,本运算停止执行。事实上,由于n递增到63时已计算得到各变量字的迭代终值,也无需进一步计算Pi63,因而本运算也无需执行了。
步骤53:n的值增加1;判断n是否超过63,是则结束步骤5,并执行步骤6;否则,执行步骤52。
本步骤为判断变量字迭代过程是否结束的步骤,如果n超过63而到达64,各变量字的迭代终值即已确定,此时就需要停止迭代过程,结束步骤5的执行,而开始执行步骤6,。如果n尚未递增到64,则说明各变量字的迭代终值尚未得到,需要继续进行变量字迭代过程,因而继续执行步骤52。
步骤6:将Ai、Bi、Ci、Di、Ei、Fi、Gi、Hi的先后顺序作为比特位由高到低的排列顺序,将Ai63、Bi63、Ci63、Di63、Ei63、Fi63、Gi63、Hi63组合为一个256比特长度的异或变量Ui;利用V的第i次迭代值Vi,根据确定V的第(i+1)次迭代值V(i+1)。
本步骤为根据步骤5所得到的各变量字的迭代终值来确定V的下一次迭代值的运算步骤,该步骤中,将8个变量字A-H的迭代终值组合为一个256比特的异或变量Ui,用来与V的第i次迭代值Vi进行异或运算,从而得到V的下一次迭代值V(i+1)。将各变量字的迭代终值组合为Ui的规则为:将A-H的先后顺序与比特位由高到低的组合顺序相对应,排在前面的变量字在Ui中的比特位比排在后面的变量字在Ui中的的比特位高,具体来说,Ai63为Ui中比特位最高的32比特,Bi63次之,以此类推,Hi63在Ui中的比特位最低。
步骤7:i的值增加1。
本步骤为V的迭代过程的循环变量i的递增步骤。
步骤8:判断i是否超过(k-1),是则执行步骤9,否则执行步骤4。
本步骤为判断V的迭代过程是否结束,即m的杂凑值是否已得到的步骤,如果步骤7中i递增后的值超过了(k-1),则其值为k,说明步骤6已根据V(k-1)计算得到了Vk,可将其作为杂凑值输出,因而步骤4至本步骤的整个迭代过程已得到可用结果,无需继续进行,故本步骤将其终止,转而执行步骤9。如果i的值尚未达到k,则说明尚未得到Vk,故步骤4至本步骤的迭代过程仍需继续进行,故转而执行步骤4。
步骤9:将Vk作为m的杂凑值输出。
该算法所要计算得到的m的杂凑值,实际上就是压缩函数V的迭代终值Vk,故步骤8判断已迭代得到Vk之后,就将其输出。
该算法中,步骤1对m进行填充,得到长度为512比特的k倍的填充消息m’的方法可以为:
将二进制数1填充到长度为y的m的最低比特位之后,得到填充消息m1;
向m1的最低比特位之后填充z个二进制数0,得到填充消息m2,其中,z是满足关系式(y+1+z)mod 512=448的最小的非负整数,mod为求模运算符;
向m2的最低比特位之后填充长度为64比特的比特串,得到m’,其中的比特串为y的二进制表示。
由此可见,该填充方法是向m的最低比特位之后填充了(z+65)比特的二进制数,从而得到填充信息m’的,由于z是满足y+1+z≡448 mod 512的最小非负整数,因而填充了(z+65)比特的二进制数之后得到的m’的长度就为512比特的正整数k倍,且(z+65)是使k的可能值中的最小填充数量。
该算法中,步骤51中确定32比特长度的常量Tn的方法为:设置Tn为16进制表示的79cc4519;
在步骤52中按照迭代公式进行一次迭代运算之前,该算法进一步包括:确定本次迭代运算中的Tn,其方法为:根据Tn与n的对应关系来确定Tn,对应关系为:
事实上,步骤51中确定Tn的方法也可以为根据Tn与n的上述对应关系来进行,即n在0与15之间时,其值为常量79cc4519,当n在16与63之间时,其值为常量7a879d8a。
步骤4中根据Bi确定出132个32比特长度的消息扩展字Wi0-Wi67、Wi0’-Wi63’的方法很多,只要使各消息扩展字与Bi有关,即在本发明的保护范围之内,其一个实施例为:
步骤41:将Wi0-Wi15分别置为Bi从最高比特位开始的第1-16个字的值,其中,每个字的字长为32比特。
这里,由于Bi的长度为512比特,为本发明中的32比特字长的16倍,因此,可将Bi从最高比特位开始分组,每组的长度为32比特,从而将Bi划分为16个消息扩展字Wi0-Wi15,且各消息扩展字的赋值顺序为:从Bi的最高比特位起,将Bi分成的各组依次赋值给Wi0-Wi15,这样,Bi中比特位最高的32比特赋值给Wi0,次高的32比特赋值给Wi1,以此类推,Bi中比特位最低的32比特赋值给Wi15。
步骤42:循环变量r从16起至67为止,根据
本步骤是根据步骤41得到的Wi0-Wi15来计算Wi16-Wi67,该步骤是一个循环计算的过程,由于步骤41得到的Wi0-Wi15均包含了Bi的部分信息,因此,本步骤所得到的Wi16-Wi67也与Bi有关。
本步骤也是一个循环计算的过程,是利用步骤41和42得到的Wi0-Wi67来计算Wi0’-Wi63’,由于Wi0-Wi67与Bi有关,因而Wi0’-Wi63’也与Bi有关。
步骤51的初始化过程中设置各变量字的初始迭代值Ai(-1)、Bi(-1)、Ci(-1)、Di(-1)、Ei(-1)、Fi(-1)、Gi(-1)、Hi(-1)的方法为:将各变量字的初始迭代值Ai(-1)、Bi(-1)、Ci(-1)、Di(-1)、Ei(-1)、Fi(-1)、Gi(-1)、Hi(-1)依次置为V的第i次迭代值Vi从最高位开始的第1-8个字的值,其中,每个字的字长为32比特。
在本发明提供的SM3密码杂凑算法中,压缩函数V的第i次迭代值Vi已在步骤3中通过赋值得到,或通过上一次的迭代过程在步骤6中得到,长度为256比特,而每个变量字的长度均为32比特,因此,Vi的长度等于8个变量字的长度,即Vi可以分组为8个变量字。这样,从Vi的最高比特位开始分组,每组的长度为32比特,可以划分为8组,本发明可将压缩函数值从最高比特位开始的各组的值依次赋给变量字A-H,作为各变量字的初始迭代值,然后各变量字就可以进行64次迭代运算,从而得到各自的迭代终值,代入步骤6来参与V的下一次迭代值V(i+1)的运算。
本发明提供的SM3密码杂凑算法可以采用软件来实现,也可以采用硬件来实现,例如变量字迭代过程中的加法运算可以用加法器实现,异或运算、循环左移运算、逻辑与、逻辑或、逻辑非以及其他运算,都可以用相应的逻辑运算电路来实现。硬件实现后的运算速度更快,安全性也更高。
由此可见,本发明具有以下优点:
(1)本发明中,由于引入了中间变量P和Q,确定二者均需要进行一次加法运算,在步骤a中确定出二者的初始值P-1和Q-1作为迭代过程的起始值,在每次变量字迭代过程中,均使用上次迭代过程所计算出的P和Q的迭代值,并在本次迭代过程中计算得到用于进行下次迭代运算的P和Q的迭代值,并且计算P和Q迭代值的加法运算与确定变量字A和E的本次迭代值的计算过程是并行的,这样,本发明通过设置中间变量P和Q,从计算A和E的一次迭代值的五次加法运算中取出一次与其他加法运算并行,从而使一次变量字迭代过程中计算A和E的串行加法运算的数量变为4次,相对于现有技术,本发明减少了变量字的迭代过程中关键路径的串行加法运算的数量,使关键路径中串行加法运算的数量减少了20%,从而大大减少了一次迭代过程的总延时,提高了SM3密码杂凑算法的运算速度。
(2)本发明大大减少了每次变量字迭代过程中的关键路径的延时,从而极大地提高了SM3密码杂凑算法的效率,由于关键路径中串行加法运算的数量由五次变为四次,减少了20%,因而本发明使SM3密码杂凑算法的效率提高了约20%。
(3)本发明提供的确定SM3密码杂凑算法中的变量字的方法除了可以用软件来实现之外,也可以用硬件来实现,这有利于进一步提高运算速度和安全性。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种确定SM3密码杂凑算法中的变量字的方法,所述变量字为32比特长的A、B、C、D、E、F、G、H;其特征在于,该方法包括:
步骤a:设置迭代次数n为0;确定32比特长度的常量Tn和132个32比特长度的消息扩展字W0-W67、W0’-W63’;进行初始化过程,所述初始化过程包括:设置各变量字的初始迭代值A-1、B-1、C-1、D-1、E-1、F-1、G-1、H-1;确定中间变量字P、Q的初始值P-1=D-1+W’0,Q-1=H-1+W0;
步骤b:按照迭代公式进行一次迭代运算,确定中间变量字SS1、SS2、TT1、TT2、P、Q和各变量字的第n次迭代值SS1n、SS2n、TT1n、TT2n、Pn、Qn、An、Bn、Cn、Dn、En、Fn、Gn、Hn;所述迭代公式包括:
SS1n=S7[S12(An-1)+En-1+Sn(Tn)];
TT1n=FFn(An-1,Bn-1,Cn-1)+SS2n+Pn-1;
TT2n=GGn(En-1,Fn-1,Gn-1)+SS1n+Qn-1;
Dn=Cn-1;
Cn=S9(Bn-1);
Bn=An-1;
An=TT1n;
Hn=Gn-1;
Gn=S19(Fn-1);
Fn=En-1;
En=P0(TT2n);
Pn=Cn-1+W′n+1;
Qn=Gn-1+Wn+1;
其中,An-1、Bn-1、Cn-1、En-1、Fn-1、Gn-1为相应变量字的第n-1次迭代值;Pn-1、Qn-1分别为P和Q的第n-1次迭代值;FFn(An-1,Bn-1,Cn-1)和GGn(En-1,Fn-1,Gn-1)均为布尔函数,其函数表达式分别为:
P0(TT2n)为置换函数,其函数表达式为:
上述的S7(X)、S12(X)、Sn(X)、S9(X)、S17(X)、S19(X)分别为对字X进行循环左移7比特、12比特、n比特、9比特、17比特、19比特的运算;∩、∪、-分别为异或、逻辑与、逻辑或、逻辑非运算符;
步骤c:n的值增加1;判断n是否超过63,是则执行步骤d,否则,执行步骤b;
步骤d:将所述各变量字的第63次迭代值A63、B63、C63、D63、E63、F63、G63、H63输出。
4.根据权利要求1或2所述的方法,其特征在于,所述步骤a的初始化过程中设置各变量字的初始迭代值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依次置为所述SM3密码杂凑算法中长度为256比特的压缩函数值从最高位开始的第1-8个字的值,其中,每个字的字长为32比特。
5.根据权利要求1所述的方法,其特征在于,所述P、Q以及各变量字均用32比特长度的字寄存器进行存储;
和/或,所述步骤a中确定P、Q的初始值的加法运算由加法器实现;所述步骤b迭代公式中的任一循环左移、异或、逻辑与、逻辑或、逻辑非、加法运算分别由相应的移位寄存器、异或门电路、与门电路、或门电路、非门电路、加法器实现。
6.一种SM3密码杂凑算法,其特征在于,该算法包括:
步骤1:接收长度不超过(264-1)比特的消息m,并对其进行填充,得到长度为512比特的k倍的填充消息m’,其中的k为不超过(255+1)的正整数;
步骤2:从m’的最高比特位开始,以512比特为一个消息分组,将m’划分为k组,各消息分组按其在m’中的比特位由高到低的顺序依次记为B0-B(k-1);
步骤3:设置循环变量i为0;设置压缩函数V的第0次迭代值V0为用16进制表示的7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e;
步骤4:根据Bi确定出132个32比特长度的消息扩展字Wi0-Wi67、Wi0’-Wi63’,其中,Bi为第i个消息分组,i为0与(k-1)之间的正整数;
步骤5:确定32比特长度的变量字Ai、Bi、Ci、Di、Ei、Fi、Gi、Hi的第63次迭代值Ai63、Bi63、Ci63、Di63、Ei63、Fi63、Gi63、Hi63,其方法包括:
步骤51:设置迭代次数n为0;确定32比特长度的常量Tn;进行初始化过程,所述初始化过程包括:设置各变量字的初始迭代值Ai(-1)、Bi(-1)、Ci(-1)、Di(-1)、Ei(-1)、Fi(-1)、Gi(-1)、Hi(-1);确定中间变量字Pi、Qi的初始迭代值Pi(-1)=Di(-1)+W′i0,Qi(-1)=Hi(-1)+Wi0;
步骤52:按照迭代公式进行一次迭代运算,确定中间变量字SS1i、SS2i、TT1i、TT2i、Pi、Qi和各变量字的第n次迭代值SS1in、SS2in、TT1in、TT2in、Pin、Qin、Ain、Bin、Cin、Din、Ein、Fin、Gin、Hin;所述迭代公式包括:
SS1in=S7[S12(Ai(n-1))+Ei(n-1)+Sn(Tn)];
TT1in=FFn(Ai(n-1),Bi(n-1),Ci(n-1))+SS2in+Pi(n-1);
TT2in=GGn(Ei(n-1),Fi(n-1),Gi(n-1))+SS1in+Qi(n-1);
Din=Ci(n-1);
Cin=S9(Bi(n-1));
Bin=Ai(n-1);
Ain=TT1in;
Hin=Gi(n-1);
Gin=S19(Fi(n-1));
Fin=Ei(n-1);
Ein=P0(TT2in);
Pin=Ci(n-1)+W′i(n+1);
Qin=Gi(n-1)+Wi(n+1);
其中,Ai(n-1)、Bi(n-1)、Ci(n-1)、Ei(n-1)、Fi(n-1)、Gi(n-1)为相应变量字的第n-1次迭代值;Pi(n-1)、Qi(n-1)分别为Pi、Qi的第n-1次迭代值;FFn(Ai(n-1),Bi(n-1),Ci(n-1))和GGn(Ei(n-1),Fi(n-1),Gi(n-1))均为布尔函数,其函数表达式分别为:
P0(TT2in)为置换函数,其函数表达式为:
上述的S7(X)、S12(X)、Sn(X)、S9(X)、S17(X)、S19(X)分别为对字X进行循环左移7比特、12比特、n比特、9比特、17比特、19比特的运算;∩、∪、-分别为异或、逻辑与、逻辑或、逻辑非运算符;
步骤53:n的值增加1;判断n是否超过63,是则结束步骤5,并执行步骤6;否则,执行步骤52;
步骤6:将Ai、Bi、Ci、Di、Ei、Fi、Gi、Hi的先后顺序作为比特位由高到低的排列顺序,将Ai63、Bi63、Ci63、Di63、Ei63、Fi63、Gi63、Hi63组合为一个256比特长度的异或变量Ui;利用V的第i次迭代值Vi,根据确定V的第(i+1)次迭代值V(i+1);
步骤7:i的值增加1;判断i是否超过(k-1),是则将Vk作为m的杂凑值输出,否则执行步骤4。
7.根据权利要求6所述的算法,其特征在于,所述步骤1中对m进行填充,得到长度为512比特的k倍的填充消息m’的方法为:
将二进制数1填充到长度为y的m的最低比特位之后,得到填充消息m1;
向m1的最低比特位之后填充z个二进制数0,得到填充消息m2,其中,z是满足关系式(y+1+z)mod 512=448的最小的非负整数,mod为求模运算符;
向m2的最低比特位之后填充长度为64比特的比特串,得到m’,其中的比特串为y的二进制表示。
10.根据权利要求6、7或8所述的算法,其特征在于,所述步骤51的初始化过程中设置各变量字的初始迭代值Ai(-1)、Bi(-1)、Ci(-1)、Di(-1)、Ei(-1)、Fi(-1)、Gi(-1)、Hi (-1)的方法为:将各变量字的初始迭代值Ai(-1)、Bi(-1)、Ci(-1)、Di(-1)、Ei(-1)、Fi(-1)、Gi(-1)、Hi(-1)依次置为V的第i次迭代值Vi从最高位开始的第1-8个字的值,其中,每个字的字长为32比特。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110105198.6A CN102761414B (zh) | 2011-04-26 | 2011-04-26 | 一种sm3密码杂凑算法及确定其中的变量字的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110105198.6A CN102761414B (zh) | 2011-04-26 | 2011-04-26 | 一种sm3密码杂凑算法及确定其中的变量字的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102761414A true CN102761414A (zh) | 2012-10-31 |
CN102761414B CN102761414B (zh) | 2015-06-10 |
Family
ID=47055741
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110105198.6A Active CN102761414B (zh) | 2011-04-26 | 2011-04-26 | 一种sm3密码杂凑算法及确定其中的变量字的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102761414B (zh) |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105281890A (zh) * | 2014-07-22 | 2016-01-27 | 华中科技大学 | 一种折叠结构的sm3杂凑密码压缩运算电路 |
CN106301764A (zh) * | 2016-10-09 | 2017-01-04 | 上海泥娃通信科技有限公司 | 基于路径散列的消息摘要方法和系统 |
CN106301761A (zh) * | 2016-08-09 | 2017-01-04 | 北京智芯微电子科技有限公司 | 一种基于密码杂凑算法的压缩方法及装置 |
CN107579811A (zh) * | 2017-07-28 | 2018-01-12 | 广州星海集成电路基地有限公司 | 一种基于sm3密码杂凑算法的硬件优化方法 |
CN109547192A (zh) * | 2018-11-08 | 2019-03-29 | 北京大学 | Sm3密码杂凑算法的并行化优化方法 |
CN110233727A (zh) * | 2019-06-12 | 2019-09-13 | 湖南国科微电子股份有限公司 | 一种sm2运算方法、系统、设备及计算机存储介质 |
CN111090599A (zh) * | 2019-12-18 | 2020-05-01 | 安徽省配天重工装备技术有限公司 | 一种变量字长确定方法、系统、设备及计算机存储介质 |
CN111274613A (zh) * | 2020-01-20 | 2020-06-12 | 广州安研信息科技有限公司 | 迭代式sm2数字签名生成方法、系统、介质和设备 |
CN112994874A (zh) * | 2021-04-19 | 2021-06-18 | 工业信息安全(四川)创新中心有限公司 | 一种基于消息鉴别码算法的保留格式加密方法及解密方法 |
CN113741972A (zh) * | 2021-08-20 | 2021-12-03 | 深圳市风云实业有限公司 | 一种sm3算法的并行处理方法及电子设备 |
CN113922946A (zh) * | 2021-09-06 | 2022-01-11 | 湖南遥昇通信技术有限公司 | 基于sm3的数据加密方法、系统、设备及介质 |
CN114514569A (zh) * | 2019-10-10 | 2022-05-17 | 日本电信电话株式会社 | 秘密多重迭代计算装置、方法以及程序 |
CN116318660A (zh) * | 2023-01-12 | 2023-06-23 | 成都海泰方圆科技有限公司 | 一种消息扩展与压缩方法及相关装置 |
CN116846543A (zh) * | 2023-07-26 | 2023-10-03 | 百信信息技术有限公司 | 一种sm3密码杂凑算法的数据处理方法及相关设备 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070297601A1 (en) * | 2006-06-27 | 2007-12-27 | Hasenplaugh William C | Modular reduction using folding |
CN101727772A (zh) * | 2008-10-15 | 2010-06-09 | 姚锡根 | 基表变量伪随机序列和杂凑函数 |
CN101753299A (zh) * | 2008-12-09 | 2010-06-23 | 姚锡根 | 动态输入杂凑函数dih |
-
2011
- 2011-04-26 CN CN201110105198.6A patent/CN102761414B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070297601A1 (en) * | 2006-06-27 | 2007-12-27 | Hasenplaugh William C | Modular reduction using folding |
CN101727772A (zh) * | 2008-10-15 | 2010-06-09 | 姚锡根 | 基表变量伪随机序列和杂凑函数 |
CN101753299A (zh) * | 2008-12-09 | 2010-06-23 | 姚锡根 | 动态输入杂凑函数dih |
Cited By (23)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105281890B (zh) * | 2014-07-22 | 2018-04-03 | 华中科技大学 | 一种折叠结构的sm3杂凑密码压缩运算电路 |
CN105281890A (zh) * | 2014-07-22 | 2016-01-27 | 华中科技大学 | 一种折叠结构的sm3杂凑密码压缩运算电路 |
CN106301761A (zh) * | 2016-08-09 | 2017-01-04 | 北京智芯微电子科技有限公司 | 一种基于密码杂凑算法的压缩方法及装置 |
CN106301761B (zh) * | 2016-08-09 | 2019-04-09 | 北京智芯微电子科技有限公司 | 一种基于密码杂凑算法的压缩方法及装置 |
CN106301764B (zh) * | 2016-10-09 | 2020-09-25 | 上海泥娃通信科技有限公司 | 基于路径散列的消息摘要方法和系统 |
CN106301764A (zh) * | 2016-10-09 | 2017-01-04 | 上海泥娃通信科技有限公司 | 基于路径散列的消息摘要方法和系统 |
CN107579811A (zh) * | 2017-07-28 | 2018-01-12 | 广州星海集成电路基地有限公司 | 一种基于sm3密码杂凑算法的硬件优化方法 |
CN109547192A (zh) * | 2018-11-08 | 2019-03-29 | 北京大学 | Sm3密码杂凑算法的并行化优化方法 |
CN110233727A (zh) * | 2019-06-12 | 2019-09-13 | 湖南国科微电子股份有限公司 | 一种sm2运算方法、系统、设备及计算机存储介质 |
CN114514569A (zh) * | 2019-10-10 | 2022-05-17 | 日本电信电话株式会社 | 秘密多重迭代计算装置、方法以及程序 |
CN114514569B (zh) * | 2019-10-10 | 2024-03-01 | 日本电信电话株式会社 | 秘密多重迭代计算装置、方法以及记录介质 |
CN111090599B (zh) * | 2019-12-18 | 2021-09-14 | 安徽省配天重工装备技术有限公司 | 一种变量字长确定方法、系统、设备及计算机存储介质 |
CN111090599A (zh) * | 2019-12-18 | 2020-05-01 | 安徽省配天重工装备技术有限公司 | 一种变量字长确定方法、系统、设备及计算机存储介质 |
CN111274613A (zh) * | 2020-01-20 | 2020-06-12 | 广州安研信息科技有限公司 | 迭代式sm2数字签名生成方法、系统、介质和设备 |
CN112994874A (zh) * | 2021-04-19 | 2021-06-18 | 工业信息安全(四川)创新中心有限公司 | 一种基于消息鉴别码算法的保留格式加密方法及解密方法 |
CN112994874B (zh) * | 2021-04-19 | 2021-07-27 | 工业信息安全(四川)创新中心有限公司 | 一种基于消息鉴别码算法的保留格式加密方法及解密方法 |
CN113741972A (zh) * | 2021-08-20 | 2021-12-03 | 深圳市风云实业有限公司 | 一种sm3算法的并行处理方法及电子设备 |
CN113741972B (zh) * | 2021-08-20 | 2023-08-25 | 深圳市风云实业有限公司 | 一种sm3算法的并行处理方法及电子设备 |
CN113922946B (zh) * | 2021-09-06 | 2024-02-13 | 湖南遥昇通信技术有限公司 | 基于sm3的数据加密方法、系统、设备及介质 |
CN113922946A (zh) * | 2021-09-06 | 2022-01-11 | 湖南遥昇通信技术有限公司 | 基于sm3的数据加密方法、系统、设备及介质 |
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密码杂凑算法的数据处理方法及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
CN102761414B (zh) | 2015-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102761414A (zh) | 一种sm3密码杂凑算法及确定其中的变量字的方法 | |
Daemen et al. | The subterranean 2.0 cipher suite | |
CN101076968B (zh) | 使用拟群的密码原语、差错编码和伪随机数改进方法 | |
KR100723996B1 (ko) | 계산 방법, 계산 장치 및 프로그램을 기록한 컴퓨터 판독 가능한 기록 매체 | |
US20100208885A1 (en) | Cryptographic processing and processors | |
US20120057695A1 (en) | Circuits for modular arithmetic based on the complementation of continued fractions | |
KR100800468B1 (ko) | 저전력 고속 동작을 위한 하드웨어 암호화/복호화 장치 및그 방법 | |
CN104092534A (zh) | 实现sm3密码杂凑算法中的迭代压缩的方法 | |
JPWO2013065241A1 (ja) | インクリメンタルmacタグ生成装置、方法及びプログラム並びにメッセージ認証装置 | |
Xie et al. | Efficient implementation of finite field arithmetic for binary ring-LWE post-quantum cryptography through a novel lookup-table-like method | |
Barenghi et al. | Evaluating the trade-offs in the hardware design of the ledacrypt encryption functions | |
US20030059040A1 (en) | Method and apparatus for increasing the accuracy and speed of correlation attacks | |
Balupala et al. | Galois field arithmetic operations using Xilinx FPGAs in cryptography | |
Marouf et al. | Comparative study of efficient modular exponentiation algorithms | |
Rastaghi | An efficient CCA2-secure variant of the McEliece cryptosystem in the standard model | |
CN1550975A (zh) | 蒙哥马利模数乘法器及其方法 | |
Lu et al. | The research and efficient FPGA implementation of Ghash core for GMAC | |
CN114626537B (zh) | 一种基于x86平台SIMD的不可约多项式及量子安全哈希值计算方法 | |
Hasan et al. | Sequential multiplier with sub-linear gate complexity | |
JP3959076B2 (ja) | 有限体の二乗演算方法及び二乗演算装置 | |
Tynymbayev et al. | Development of Modular Reduction Based on the Divider by Blocking Negative Remainders for Critical Cryptographic Applications | |
Li et al. | Low complexity bit-parallel $ GF (2^ m) $ multiplier for all-one polynomials | |
Andronic et al. | A unified VLSI architecture for addition and multiplication in GF (2 m) | |
Halil et al. | Organization of fast exponentiation on galois fields for cryptographic data protection systems | |
GERVASONI | Secure and efficient post-quantum cryptosystem realizations. Constant weight encoding and vectorization in LEDACrypt |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |