《实现SM3密码杂凑算法中的迭代压缩的方法.pdf》由会员分享,可在线阅读,更多相关《实现SM3密码杂凑算法中的迭代压缩的方法.pdf(19页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104092534A43申请公布日20141008CN104092534A21申请号201410325899422申请日20140709H04L9/0620060171申请人昆腾微电子股份有限公司地址100195北京市海淀区玉泉山路23号4号楼72发明人刘忠志54发明名称实现SM3密码杂凑算法中的迭代压缩的方法57摘要本发明涉及一种实现SM3密码杂凑算法中的迭代压缩的方法。所述方法包括步骤1、设置迭代次数I0;设置压缩函数V的第0次迭代值V0;步骤2、根据消息分组BI确定16个32比特长度的消息扩展字W0W15;确定32比特长度的各变量字A1、B1、C1、D1、E1、F1、G。
2、1、H1的初始值;步骤3、设置迭代次数J0;步骤4、确定32比特长度的常量TJ;步骤5、判断J是否等于63,如果J等于63,执行步骤6,如果J小于63,J的值增加1,执行步骤4;步骤6、得到V的第I1次迭代值VI1;步骤7、判断I是否等于N1,如果I等于N1,输出VN,如果I小于N1,I的值加1,执行步骤2。本发明可以减少SM3算法在迭代压缩过程中使用的存储单元,降低SM3算法的软硬件实现成本。51INTCL权利要求书4页说明书11页附图3页19中华人民共和国国家知识产权局12发明专利申请权利要求书4页说明书11页附图3页10申请公布号CN104092534ACN104092534A1/4页2。
3、1一种实现SM3密码杂凑算法中的迭代压缩的方法,其特征在于,包括步骤1、设置迭代次数I0;设置压缩函数V的第0次迭代值V0为用16进制表示的7380166F4914B2B9172442D7DA8A0600A96F30BC163138AAE38DEE4DB0FB0E4E;步骤2、根据消息分组BI确定16个32比特长度的消息扩展字W0W15;确定32比特长度的各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值;步骤3、设置迭代次数J0;步骤4、确定32比特长度的常量TJ;按照迭代公式,确定中间变量字SS1、SS2、TT1、TT2、消息扩展字WW和各变量字A、B、C、D、E、F、G、H的。
4、第J次迭代值SS1J、SS2J、TT1J、TT2J、WWJ、AJ、BJ、CJ、DJ、EJ、FJ、GJ、HJ、以及消息扩展字WJMOD16,其中,所述迭代公式包括SS1JAJ112EJ1TJJ7;SS2JSS1JAJ112;WWJWJWJ4;TT1JFFJAJ1,BJ1,CJ1DJ1SS2JWWJ;TT2JGGJEJ1,FJ1,GJ1HJ1SS1JWJ;WJMOD16P1WJ16MOD16WJ9MOD16WJ3MOD1615WJ1MOD167WJ6MOD16;DJCJ1;CJBJ19;BJAJ1;AJTT1J;HJGJ1;GJFJ119;FJEJ1;EJP0TT2J;步骤5;判断J是否等于63,。
5、如果J等于63,执行步骤6,如果J小于63,J的值增加1,执行步骤4;步骤6、将AJ、BJ、CJ、DJ、EJ、FJ、GJ、HJ的先后顺序作为比特位由高到低的排列顺序组合得到的256比特长度的变量AJBJCJDJEJFJGJHJ与V的第I次迭代值进行异或运算,得到V的第I1次迭代值VI1VI1AJBJCJDJEJFJGJHJVI;步骤7、判断I是否等于N1,如果I等于N1,输出VN,如果I小于N1,I的值加1,执行步骤2;其中,N为消息分组的数量;FFJAJ1,BJ1,CJ1和GGJEJ1,FJ1,GJ1为布尔函数,函数表达式为权利要求书CN104092534A2/4页3P1WJ16MOD16W。
6、J9MOD16WJ3MOD1615和P0TT2J为置换函数,所述置换函数的函数表达式为P1WJ16MOD16WJ9MOD16WJ3MOD1615WJ16MOD16WJ9MOD16WJ3MOD1615WJ16MOD16WJ9MOD16WJ3MOD161515WJ16MOD16WJ9MOD16WJ3MOD161523P0TT2JTT2JTT2J9TT2J17其中,12、J、7、15、9、19分别为循环左移12、J、7、15、9、19比特运算,为32比特异或运算,为32比特与运算,为32比特或运算,MOD为模运算,为32比特非运算。2根据权利要求1所述的方法,其特征在于,所述确定32比特长度的常量T。
7、J具体为其中,79CC4519和7A879D8A为16进制数。3根据权利要求1所述的方法,其特征在于,所述确定32比特长度的各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值具体为将各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值依次设置为VI从最高比特位开始的第18个字的值,其中,每个字的字长为32比特。4根据权利要求1所述的方法,其特征在于,所述根据消息分组BI确定16个32比特长度的消息扩展字W0W15具体为将消息扩展字W0W15分别设置为从512比特长度的消息分组BI的最高比特位开始的第116个字的值,其中,每个字的字长为32比特。5根据权利要求1所述的方法,。
8、其特征在于,所述消息扩展字W0W15和中间变量字SS1、SS2、WW、TT1、TT2采用32比特长度的字寄存器进行存储;所述步骤4步骤7中的任一加法、减法、循环左移、异或、与、或、模、非运算分别由加法器、减法器、移位寄存器、异或门电路、与门电路、或门电路、模运算电路、非门电路实现。6一种实现SM3密码杂凑算法中的迭代压缩的方法,其特征在于,包括步骤1、设置迭代次数I0;设置压缩函数V的第0次迭代值V0为用16进制表示的7380166F4914B2B9172442D7DA8A0600A96F30BC163138AAE38DEE4DB0FB0E4E;步骤2、根据消息分组BI确定16个32比特长度的。
9、消息扩展字W0W15;确定32比特长度的各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值;步骤3、设置迭代次数J0;步骤4、确定32比特长度的常量TJ;按照迭代公式,确定中间变量字TT1、TT2和各变量字A、B、C、D、E、F、G、H的第J次迭代值TT1J、TT2J、AJ、BJ、CJ、DJ、EJ、FJ、GJ、HJ、以及消息扩展字WJMOD16,其中,所述迭代公式包括TT1JAJ112EJ1TJJ7;TT2JGGJEJ1,FJ1,GJ1HJ1TT1JWJ;TT1JFFJAJ1,BJ1,CJ1DJ1TT1JAJ112WJWJ4;WJMOD16P1WJ16MOD16WJ9MOD16WJ。
10、3MOD1615WJ1MOD167WJ6权利要求书CN104092534A3/4页4MOD16;DJCJ1;CJBJ19;BJAJ1;AJTT1J;HJGJ1;GJFJ119;FJEJ1;EJP0TT2J;步骤5;判断J是否等于63,如果J等于63,执行步骤6,如果J小于63,J的值增加1,执行步骤4;步骤6、将AJ、BJ、CJ、DJ、EJ、FJ、GJ、HJ的先后顺序作为比特位由高到底的排列顺序组合得到的256比特长度的变量AJBJCJDJEJFJGJHJ与V的第I次迭代值进行异或运算,得到V的第I1次迭代值VI1VI1AJBJCJDJEJFJGJHJVI;步骤7、判断I是否等于N1,如果I等。
11、于N1,输出VN,如果I小于N1,I的值加1,执行步骤2;其中,N为消息分组的数量;FFJAJ1,BJ1,CJ1和GGJEJ1,FJ1,GJ1为布尔函数,函数表达式为P1WJ16WJ9WJ315和P0TT2J为置换函数,函数表达式为P1WJ16MOD16WJ9MOD16WJ3MOD1615WJ16MOD16WJ9MOD16WJ3MOD1615WJ16MOD16WJ9MOD16WJ3MOD161515WJ16MOD16WJ9MOD16WJ3MOD161523P0TT2JTT2JTT2J9TT2J17其中,12、J、7、15、9、19分别为循环左移12、J、7、15、9、19比特运算,为32比特异。
12、或运算,为32比特与运算,为32比特或运算,MOD为模运算,为32比特非运算。7根据权利要求6所述的方法,其特征在于,所述确定32比特长度的常量TJ具体为其中,79CC4519和7A879D8A为16进制数。8根据权利要求6所述的方法,其特征在于,所述确定32比特长度的各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值具体为权利要求书CN104092534A4/4页5将各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值依次设置为VI从最高比特位开始的第18个字的值,其中,每个字的字长为32比特。9根据权利要求6所述的方法,其特征在于,所述根据消息分组BI确定16个32比。
13、特长度的消息扩展字W0W15为将消息扩展字W0W15分别设置为从512比特长度的消息分组BI的最高比特位开始的第116个字的值,其中,每个字的字长为32比特。10根据权利要求6所述的方法,其特征在于,所述消息扩展字W0W15和中间变量字TT1、TT2采用32比特长度的字寄存器进行存储;所述步骤4步骤7中的任一加法、减法、循环左移、异或、与、或、模、非运算分别由加法器、减法器、移位寄存器、异或门电路、与门电路、或门电路、模运算电路、非门电路实现。权利要求书CN104092534A1/11页6实现SM3密码杂凑算法中的迭代压缩的方法技术领域0001本发明涉及密码学领域,尤其涉及一种实现SM3密码杂。
14、凑算法中的迭代压缩的方法。背景技术0002国产密码算法是我国自主研制完成的一种密码算法,具有较高安全性,由国家密码管理局任何和推广,用以保障我国信息安全,在国家主导的行业中大多采用国家密码管理局的密码算法,已逐渐成为趋势。0003SM3密码杂凑算法是国家密码管理局于2010年12月公布的一种国产密码算法。SM3密码杂凑算法适用于商用密码应用中的数字签名和认证、消息认证码的生成与验证以及随机数的生成,可以满足多种密码应用的安全需求,同时还可为安全产品生产商提供产品和技术的标准定位以及标准化的参考,提高安全产品的可信性与互操作性。0004国家密码管理局公布的SM3密码杂凑算法中,规定了SM3的计算。
15、方法和计算步骤。SM3密码杂凑算法分为消息填充、迭代压缩和杂凑值三步。其中,消息填充是将长度小于264BIT的消息M,填充为长度为512BIT的整倍数的消息块M;迭代压缩是SM3算法的核心,把填充后的消息M按照固定的512BIT进行分组,得到消息分组B0B1BN1,然后对每个512BIT分组BI逐次压缩,最终得到整个消息M的256BIT的杂凑值HASHVALUE,其中,N消息M的长度/512。迭代压缩过程包括迭代过程、消息扩展和压缩函数,其中,消息扩展和压缩函数的具体算法如下00051、消息扩展0006将消息分组BI按以下方法扩展生成132个字W0;W1;W67;W0;W1;W63,用于压缩函。
16、数CF。其中,68个W和64个W,均是32BIT的字。0007A将消息分组BI划分为16个字W0;W1;W15。0008BFORJ16TO670009WJP1WJ16WJ9WJ315WJ17WJ60010ENDFOR0011CFORJ0TO630012WJWJWJ40013ENDFOR00142、压缩函数0015令A,B,C,D,E,F,G,H为32BIT字寄存器,SS1,SS2,TT1,TT2为32BIT中间变量,压缩函数VI1CFVI,BI,0IN1。计算消息分组BI的杂凑值VI1过程描述如下0016ABCDEFGHVI0017FORJ0TO630018SS1A12ETJJ7说明书CN10。
17、4092534A2/11页70019SS2SS1A120020TT1FFJA,B,CDSS2WJ0021TT2GGJE,F,GHSS1WJ0022DC0023CB90024BA0025ATT10026HG0027GF190028FE0029EP0TT20030ENDFOR0031VI1ABCDEFGHVI0032其中,00330034003500360037003832比特异或运算003932比特非运算0040MOD232算术加运算0041K循环左移K比特运算0042在上述计算步骤中,需要使用大量的存储单元。其中,要用到68个W和64个W,均是32BIT的字,此外,还有SS1、SS2、TT1、。
18、TT2等4个32BIT中间变量,因此,共计136个32BIT的存储器,导致SM3算法的软硬件实现成本高。发明内容0043本发明提供一种实现SM3密码杂凑算法中的迭代压缩的方法,用以实现减少SM3算法在迭代压缩过程中使用的存储单元,降低SM3算法的软硬件实现成本。0044本发明提供一种实现SM3密码杂凑算法中的迭代压缩的方法,包括0045步骤1、设置迭代次数I0;设置压缩函数V的第0次迭代值V0为用16进制表示的7380166F4914B2B9172442D7DA8A0600A96F30BC163138AAE38DEE4DB0FB0E4E;0046步骤2、根据消息分组BI确定16个32比特长度的。
19、消息扩展字W0W15;确定32比特长度的各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值;说明书CN104092534A3/11页80047步骤3、设置迭代次数J0;0048步骤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、以及消息扩展字WJMOD16,其中,所述迭代公式包括0049SS1JAJ112EJ1TJJ7;0050SS2JSS1JAJ112;0051WWJWJWJ。
20、4;0052TT1JFFJAJ1,BJ1,CJ1DJ1SS2JWWJ;0053TT2JGGJEJ1,FJ1,GJ1HJ1SS1JWJ;0054WJMOD16P1WJ16MOD16WJ9MOD16WJ3MOD1615WJ1MOD167WJ6MOD16;0055DJCJ1;0056CJBJ19;0057BJAJ1;0058AJTT1J;0059HJGJ1;0060GJFJ119;0061FJEJ1;0062EJP0TT2J;0063步骤5;判断J是否等于63,如果J等于63,执行步骤6,如果J小于63,J的值增加1,执行步骤4;0064步骤6、将AJ、BJ、CJ、DJ、EJ、FJ、GJ、HJ的先后。
21、顺序作为比特位由高到低的排列顺序组合得到的256比特长度的变量AJBJCJDJEJFJGJHJ与V的第I次迭代值进行异或运算,得到V的第I1次迭代值VI10065VI1AJBJCJDJEJFJGJHJVI;0066步骤7、判断I是否等于N1,如果I等于N1,输出VN,如果I小于N1,I的值加1,执行步骤2;0067其中,N为消息分组的数量;0068FFJAJ1,BJ1,CJ1和GGJEJ1,FJ1,GJ1为布尔函数,函数表达式为006900700071P1WJ16MOD16WJ9MOD16WJ3MOD1615和P0TT2J为置换函数,所述置换函数的函数表达式为0072P1WJ16MOD16WJ。
22、9MOD16WJ3MOD1615说明书CN104092534A4/11页90073WJ16MOD16WJ9MOD16WJ3MOD16150074WJ16MOD16WJ9MOD16WJ3MOD1615150075WJ16MOD16WJ9MOD16WJ3MOD1615230076P0TT2JTT2JTT2J9TT2J170077其中,12、J、7、15、9、19分别为循环左移12、J、7、15、9、19比特运算,为32比特异或运算,为32比特与运算,为32比特或运算,MOD为模运算,为32比特非运算。0078在本发明实施例中,对于每个消息分组BI的一次迭代过程只使用了21个32比特长度的存储单元,。
23、其中包括17个消息扩展字W0W15和WW、以及4个中间变量字SS1、SS2、TT1、TT2,而现有技术中的SM3密码杂凑算法的迭代压缩步骤使用136个32比特长度的存储单元,其中包括132个32比特长度的消息扩展字和4个中间变量SS1、SS2、TT1、TT2,本实施例使用的存储单元的数量为现有技术的154,极大地减少了SM3密码杂凑算法的迭代压缩步骤使用的存储单元。此外,本实施例不增加算法的计算量,保证了同样的算法计算效率。0079本发明还提供一种实现SM3密码杂凑算法中的迭代压缩的方法,包括0080步骤1、设置迭代次数I0;设置压缩函数V的第0次迭代值V0为用16进制表示的7380166F4。
24、914B2B9172442D7DA8A0600A96F30BC163138AAE38DEE4DB0FB0E4E;0081步骤2、根据消息分组BI确定16个32比特长度的消息扩展字W0W15;确定32比特长度的各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值;0082步骤3、设置迭代次数J0;0083步骤4、确定32比特长度的常量TJ;按照迭代公式,确定中间变量字TT1、TT2和各变量字A、B、C、D、E、F、G、H的第J次迭代值TT1J、TT2J、AJ、BJ、CJ、DJ、EJ、FJ、GJ、HJ、以及消息扩展字WJMOD16,其中,所述迭代公式包括0084TT1JAJ112EJ1T。
25、JJ7;0085TT2JGGJEJ1,FJ1,GJ1HJ1TT1JWJ;0086TT1JFFJAJ1,BJ1,CJ1DJ1TT1JAJ112WJWJ4;0087WJMOD16P1WJ16MOD16WJ9MOD16WJ3MOD1615WJ1MOD167WJ6MOD16;0088DJCJ1;0089CJBJ19;0090BJAJ1;0091AJTT1J;0092HJGJ1;0093GJFJ119;0094FJEJ1;0095EJP0TT2J;0096步骤5;判断J是否等于63,如果J等于63,执行步骤6,如果J小于63,J的值增加1,执行步骤4;0097步骤6、将AJ、BJ、CJ、DJ、EJ、FJ。
26、、GJ、HJ的先后顺序作为比特位由高到底的排列顺序说明书CN104092534A5/11页10组合得到的256比特长度的变量AJBJCJDJEJFJGJHJ与V的第I次迭代值进行异或运算,得到V的第I1次迭代值VI10098VI1AJBJCJDJEJFJGJHJVI;0099步骤7、判断I是否等于N1,如果I等于N1,输出VN,如果I小于N1,I的值加1,执行步骤2;0100其中,N为消息分组的数量;0101FFJAJ1,BJ1,CJ1和GGJEJ1,FJ1,GJ1为布尔函数,函数表达式为010201030104P1WJ16WJ9WJ315和P0TT2J为置换函数,函数表达式为0105P1WJ。
27、16MOD16WJ9MOD16WJ3MOD16150106WJ16MOD16WJ9MOD16WJ3MOD16150107WJ16MOD16WJ9MOD16WJ3MOD1615150108WJ16MOD16WJ9MOD16WJ3MOD1615230109P0TT2JTT2JTT2J9TT2J170110其中,12、J、7、15、9、19分别为循环左移12、J、7、15、9、19比特运算,为32比特异或运算,为32比特与运算,为32比特或运算,MOD为模运算,为32比特非运算。0111在本发明实施例中,对于每个消息分组BI的一次迭代过程只使用了18个32比特长度的存储单元,其中包括16个消息扩展字。
28、W0W15、以及2个中间变量字TT1、TT2,而现有技术中的SM3密码杂凑算法的迭代压缩步骤使用136个32比特长度的存储单元,其中包括132个32比特长度的消息扩展字和4个中间变量SS1、SS2、TT1、TT2,本实施例使用的存储单元的数量为现有技术的132,极大地减少了SM3密码杂凑算法的迭代压缩步骤使用的存储单元。此外,本实施例不增加算法的计算量,保证了同样的算法计算效率。附图说明0112图1为本发明实现SM3密码杂凑算法中的迭代压缩的方法第一实施例的流程示意图;0113图2为本发明实现SM3密码杂凑算法中的迭代压缩的方法第二实施例的流程示意图;0114图3为本发明SM3密码杂凑算法实施。
29、例的流程示意图。具体实施方式0115下面结合说明书附图和具体实施方式对本发明作进一步的描述。说明书CN104092534A106/11页110116实现SM3密码杂凑算法中的迭代压缩的方法第一实施例0117如图1所示,为本发明实现SM3密码杂凑算法中的迭代压缩的方法第一实施例的流程示意图,该方法可以包括如下步骤0118步骤11、设置迭代次数I0;设置压缩函数V的第0次迭代值V0;0119具体地,V0为用16进制表示的7380166F4914B2B9172442D7DA8A0600A96F30BC163138AAE38DEE4DB0FB0E4E;本步骤中的迭代次数I0,意味着这是压缩函数V的第1。
30、次迭代,迭代结束后得到的迭代值为V1,以后每次迭代均在上一次迭代值的基础上进行;0120步骤12、根据消息分组BI确定16个32比特长度的消息扩展字W0W15;确定32比特长度的各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值;0121在该步骤中,消息分组BI先存放在16个字的循环队列W0W15中;根据消息分组BI确定各消息扩展字的方法很多,原则上只要各消息扩展字与消息分组BI有关即可;0122步骤13、设置迭代次数J0;0123步骤14、确定32比特长度的常量TJ;按照迭代公式,确定中间变量字SS1、SS2、TT1、TT2、消息扩展字WW和各变量字A、B、C、D、E、F、G、H。
31、的第J次迭代值SS1J、SS2J、TT1J、TT2J、WWJ、AJ、BJ、CJ、DJ、EJ、FJ、GJ、HJ、以及消息扩展字WJMOD16;0124其中,迭代公式包括0125SS1JAJ112EJ1TJJ7;0126SS2JSS1JAJ112;0127WWJWJWJ4;0128TT1JFFJAJ1,BJ1,CJ1DJ1SS2JWWJ;0129TT2JGGJEJ1,FJ1,GJ1HJ1SS1JWJ;0130WJMOD16P1WJ16MOD16WJ9MOD16WJ3MOD1615WJ1MOD167WJ6MOD16;0131DJCJ1;0132CJBJ19;0133BJAJ1;0134AJTT1J;。
32、0135HJGJ1;0136GJFJ119;0137FJEJ1;0138EJP0TT2J;0139其中,FFJAJ1,BJ1,CJ1和GGJEJ1,FJ1,GJ1为布尔函数,函数表达式为01400141说明书CN104092534A117/11页120142P1WJ16MOD16WJ9MOD16WJ3MOD1615和P0TT2J为置换函数,置换函数的函数表达式为0143P1WJ16MOD16WJ9MOD16WJ3MOD16150144WJ16MOD16WJ9MOD16WJ3MOD16150145WJ16MOD16WJ9MOD16WJ3MOD1615150146WJ16MOD16WJ9MOD16。
33、WJ3MOD1615230147P0TT2JTT2JTT2J9TT2J170148其中,12、J、7、15、9、19分别为循环左移12、J、7、15、9、19比特运算,为32比特异或运算,为32比特与运算,为32比特或运算,MOD为模运算,为32比特非运算;0149步骤15;判断J是否等于63,如果J等于63,执行步骤17,如果J小于63,执行步骤16;0150步骤16、16,执行步骤14;0151步骤17、将AJ、BJ、CJ、DJ、EJ、FJ、GJ、HJ的先后顺序作为比特位由高到低的排列顺序组合得到的256比特长度的变量AJBJCJDJEJFJGJHJ与V的第I次迭代值进行异或运算,得到V的。
34、第I1次迭代值VI1;0152具体地,计算VI1的表达式为VI1AJBJCJDJEJFJGJHJVI;0153步骤18、判断I是否等于N1,如果I等于N1,输出VN,如果I小于N1,执行步骤19;0154其中,N为消息分组的数量;0155步骤19、I的值加1,执行步骤12。0156在本实施例中,FFJAJ1,BJ1,CJ1和GGJEJ1,FJ1,GJ1为SM3密码杂凑算法中的布尔函数,P1WJ16MOD16WJ9MOD16WJ3MOD1615和P0TT2J为SM3密码杂凑算法中的置换函数。0157步骤14步骤16为64轮的迭代过程,在每次迭代过程中,首先计算中间变量字SS1、SS2、TT1、T。
35、T2和消息扩展字WW的迭代值,然后动态产生消息扩展字WJMOD16,存放在16个字的循环队列W0W15中,最后计算AH的迭代值。0158本实施例使用循环存储队列动态产生消息扩展字W0W15,因此只需要16个字,而现有技术中需要68个消息扩展字W。本实施例使用新的迭代压缩步骤产生1个消息扩展字WW,而现有技术中使用64个消息扩展字W。0159在本实施例中,对于每个消息分组BI的一次迭代过程只使用了21个32比特长度的存储单元,其中包括17个消息扩展字W0W15和WW、以及4个中间变量字SS1、SS2、TT1、TT2,而现有技术中的SM3密码杂凑算法的迭代压缩步骤使用136个32比特长度的存储单元。
36、,其中包括132个32比特长度的消息扩展字和4个中间变量SS1、SS2、TT1、TT2,本实施例使用的存储单元的数量为现有技术的154,极大地减少了SM3密码杂凑算法的迭代压缩步骤使用的存储单元。此外,本实施例不增加算法的计算量,保证了同样的算法计算效率。0160可选地,在步骤12中,根据消息分组BI确定16个32比特长度的消息扩展字说明书CN104092534A128/11页13W0W15具体为将消息扩展字W0W15分别设置为从512比特长度的消息分组BI的最高比特位开始的第116个字的值,其中,每个字的字长为32比特,消息扩展字W0W15依次为W0、W1、W2、W3、W4、W5、W6、W7。
37、、W8、W9、W10、W11、W12、W13、W14、W15。0161可选地,在步骤12中确定32比特长度的各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值具体为将各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值依次设置为VI从最高比特位开始的第18个字的值,其中,每个字的字长为32比特。在SM3密码杂凑算法中,V为压缩函数,该函数也是通过循环迭代运算得到的,在V的循环迭代结束之后得到的压缩函数值即为SM3密码杂凑算法所要得到的杂凑值。在每次迭代过程中,将压缩函数值从最高比特位开始的各组的值依次赋给变量字AH,作为各变量字的初始迭代值。0162可选地,在步骤14中,。
38、确定32比特长度的常量TJ具体为01630164其中,79CC4519和7A879D8A为16进制数。TJ采用分段常量的形式,有利于提高SM3密码杂凑算法的运算不可逆性。0165可选地,在本实施例中,消息扩展字W0W15和中间变量字SS1、SS2、WW、TT1、TT2采用32比特长度的字寄存器进行存储;步骤14步骤19中的任一加法、减法、循环左移、异或、与、或、模、非运算分别由加法器、减法器、移位寄存器、异或门电路、与门电路、或门电路、模运算电路、非门电路实现。由此可见,本实施例的方法除了可以用软件来实现外,也可以用硬件电路来实现,有利于进一步提高运算速度和算法的安全性。0166实现SM3密码。
39、杂凑算法中的迭代压缩的方法第二实施例0167本实施例对实现SM3密码杂凑算法中的迭代压缩的方法第一实施例的方法进行进一步改进,省掉中间变量字SS1、SS2和消息扩展字WW,将使用的32比特长度的存储单元的数量进一步减少到18个,只有现有技术中的132。0168如图2所示,为本发明实现SM3密码杂凑算法中的迭代压缩的方法第二实施例的流程示意图,该方法可以包括如下步骤0169步骤21、设置迭代次数I0;设置压缩函数V的第0次迭代值V0为用16进制表示的7380166F4914B2B9172442D7DA8A0600A96F30BC163138AAE38DEE4DB0FB0E4E;0170步骤22、。
40、根据消息分组BI确定16个32比特长度的消息扩展字W0W15;确定32比特长度的各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值;0171步骤23、设置迭代次数J0;0172步骤24、确定32比特长度的常量TJ;按照迭代公式,确定中间变量字TT1、TT2和各变量字A、B、C、D、E、F、G、H的第J次迭代值TT1J、TT2J、AJ、BJ、CJ、DJ、EJ、FJ、GJ、HJ、以及消息扩展字WJMOD16;0173其中,迭代公式包括0174TT1JAJ112EJ1TJJ7;0175TT2JGGJEJ1,FJ1,GJ1HJ1TT1JWJ;0176TT1JFFJAJ1,BJ1,CJ1DJ。
41、1TT1JAJ112WJWJ4;0177WJMOD16P1WJ16MOD16WJ9MOD16WJ3MOD1615WJ1MOD167WJ6MOD16;说明书CN104092534A139/11页140178DJCJ1;0179CJBJ19;0180BJAJ1;0181AJTT1J;0182HJGJ1;0183GJFJ119;0184FJEJ1;0185EJP0TT2J;0186其中,0187FFJAJ1,BJ1,CJ1和GGJEJ1,FJ1,GJ1为布尔函数,函数表达式为018801890190P1WJ16WJ9WJ315和P0TT2J为置换函数,函数表达式为0191P1WJ16MOD16WJ9。
42、MOD16WJ3MOD16150192WJ16MOD16WJ9MOD16WJ3MOD16150193WJ16MOD16WJ9MOD16WJ3MOD1615150194WJ16MOD16WJ9MOD16WJ3MOD1615230195P0TT2JTT2JTT2J9TT2J170196其中,12、J、7、15、9、19分别为循环左移12、J、7、15、9、19比特运算,为32比特异或运算,为32比特与运算,为32比特或运算,MOD为模运算,为32比特非运算;0197步骤25;判断J是否等于63,如果J等于63,执行步骤27,如果J小于63,执行步骤26;0198步骤26、J的值增加1,执行步骤24。
43、;0199步骤27、将AJ、BJ、CJ、DJ、EJ、FJ、GJ、HJ的先后顺序作为比特位由高到底的排列顺序组合得到的256比特长度的变量AJBJCJDJEJFJGJHJ与V的第I次迭代值进行异或运算,得到V的第I1次迭代值VI10200VI1AJBJCJDJEJFJGJHJVI;0201步骤28、判断I是否等于N1,如果I等于N1,输出VN,如果I小于N1,执行步骤29;0202其中,N为消息分组的数量;0203步骤29、I的值加1,执行步骤22。0204在本实施例中,FFJAJ1,BJ1,CJ1和GGJEJ1,FJ1,GJ1为SM3密码杂凑算法中的布尔函数,P1WJ16MOD16WJ9MOD。
44、16WJ3MOD1615和P0TT2J为SM3密码杂凑算法说明书CN104092534A1410/11页15中的置换函数。0205步骤24步骤26为64轮的迭代过程,在每次迭代过程中,首先计算中间变量字TT1、TT2的迭代值,然后动态产生消息扩展字WJMOD16,存放在16个字的循环队列W0W15中,最后计算AH的迭代值。0206本实施例使用循环存储队列动态产生消息扩展字W0W15,因此只需要16个字,而现有技术中需要68个消息扩展字W。本实施例使用新的迭代压缩步骤,只需要两个中间变量字TT1、TT2,不需要中间变量字SS1、SS2和消息扩展字W。0207在本实施例中,对于每个消息分组BI的一。
45、次迭代过程只使用了18个32比特长度的存储单元,其中包括16个消息扩展字W0W15、以及2个中间变量字TT1、TT2,而现有技术中的SM3密码杂凑算法的迭代压缩步骤使用136个32比特长度的存储单元,其中包括132个32比特长度的消息扩展字和4个中间变量SS1、SS2、TT1、TT2,本实施例使用的存储单元的数量为现有技术的132,极大地减少了SM3密码杂凑算法的迭代压缩步骤使用的存储单元。此外,本实施例不增加算法的计算量,保证了同样的算法计算效率。0208可选地,在步骤22中,根据消息分组BI确定16个32比特长度的消息扩展字W0W15具体为将消息扩展字W0W15分别设置为从512比特长度的。
46、消息分组BI的最高比特位开始的第116个字的值,其中,每个字的字长为32比特。0209可选地,在步骤22中,确定32比特长度的各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值具体为将各变量字A1、B1、C1、D1、E1、F1、G1、H1的初始值依次设置为VI从最高比特位开始的第18个字的值,其中,每个字的字长为32比特。0210可选地,在步骤24中,确定32比特长度的常量TJ具体为02110212其中,79CC4519和7A879D8A为16进制数。0213可选地,在本实施例中,消息扩展字W0W15和中间变量字TT1、TT2采用32比特长度的字寄存器进行存储;步骤24步骤29中的。
47、任一加法、减法、循环左移、异或、与、或、模、非运算分别由加法器、减法器、移位寄存器、异或门电路、与门电路、或门电路、模运算电路、非门电路实现。0214SM3密码杂凑算法实施例0215上述实现SM3密码杂凑算法中的迭代压缩的方法第一实施例和第二实施例的方法也可以应用于SM3密码杂凑算法中,从而节省大量的存储单元。0216如图3所示,为本发明SM3密码杂凑算法实施例的流程示意图,本实施例提供的SM3密码杂凑算法是将输入的长度不等的消息M转换为256比特长度的杂凑值的算法,因此输入值为消息M,输出值为杂凑值,该SM3密码杂凑算法可以包括如下步骤0217步骤31、接收长度为L比特的消息M,对消息M进行。
48、填充,得到长度为512比特的N倍的填充消息M;0218其中,L为小于或等于2641的正整数,N为小于或等于2551的正整数;如果消息M的长度超过2641比特,则将消息M拆分为多个组,每组的长度不超过2641比特;0219步骤32、从填充消息M的最高比特位开始,将填充消息M划分为N个512比特长说明书CN104092534A1511/11页16度的消息分组B0BN1;0220其中,消息分组B0为填充信息M中比特位最高的512个比特,消息分组B1为填充信息M中比特位次高的512个比特,以此类推,BN1为填充信息M中比特位最低的512个比特;0221步骤33、计算并输出消息M的杂凑值VN;0222步骤33具体可以采用前述实现SM3密码杂凑算法中的迭代压缩的方法第一实施例或第二实施例的方法,在此不再赘述。0223最后应说明的是以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围。说明书CN104092534A161/3页17图1说明书附图CN104092534A172/3页18图2说明书附图CN104092534A183/3页19图3说明书附图CN104092534A19。