一种sm3密码杂凑算法及确定其中的变量字的方法

文档序号:7735764阅读:625来源:国知局
专利名称:一种sm3密码杂凑算法及确定其中的变量字的方法
技术领域
本发明涉及信息安全领域,特别是涉及一种SM3密码杂凑算法及确定其中的变量字的方法。
背景技术
为了保证数据的安全,人们通常会将数据加密为密文,只有利用相应的密钥才能解密密文,得到原始数据明文。在该加解密的过程中,常常要用到密码杂凑算法,将任一不超过(264-1)比特的二进制比特串转换为固定长度,如256比特的二进制杂凑值输出。在密码学中,密码杂凑算法所用到的密码杂凑函数具有两个基本特性一是输入值与输出值一一对应,即两个不同的输入不可能生成同一个杂凑值;二是运算不可逆,即对于一已知的杂凑输出值y,要找到一个可以计算其输入值X的杂凑逆算法X = h(y)也是不可行的。因此,密码杂凑算法可以有效保证数据的安全,广泛应用于数字签名和验证、消息·认证码的生成和验证中,在保护信息完整性方面起着重要的作用。国家密码管理局发布的SM3密码杂凑算法具有良好的安全性,可满足多种密码应用的安全需求。该算法中,最核心的运算是在计算压缩函数V的各次迭代值的过程中用到的8个变量字A、B、C、D、E、F、G、H的64次迭代运算,第n次迭代运算的迭代公式为SSln-S7 (S12 (An^1)+E^+S" (Tn));SSa = SSla 51 卜丄);TTln = FFn(Alri, Bn^1, Clri)+SS2JDM+W’ n ;TT2n = GGn (Elri, Fn^1, Glri)+SSln+Hn_i+Wn ;Dn = Cn^1 ;Dn = S9(Blri);Bn = An_1;An = TTln ;Hn = Glri ;Gn = S19(Flri);Fn = Elri ;En = F0 (TT2n)这里的Tn为常量,Am、Bn_i、Cn+ En+ Fn+ Glri为相应变量字的第n_l次迭代值,An、Bn、Cn、Dn、En、Fn、Gn、Hn分别为各变量字的第n次迭代值,SSU SS2、TT1、TT2为中间变量字,SSln、SS2n、TTln、TT2n为其第n次迭代值,W1^PW1/均为32比特长的已知的消息扩展字,Si (X)为对字X进行循环左移i比特的运算,如计算Cn的S9 (Blri)为对变量字Blri进行循环左移9比特的运算,FFn(An^1, Bn+ Clri)和GGn(En_i,Fn+ Glri)均为表达式已知的布尔函数,P0(TT2n)为表达式已知的置换函数, 为常见的异或逻辑运算符。上述的迭代过程涉及循环左移、异或等逻辑运算以及加法运算,其中,循环左移、异或等逻辑运算的延时很小,可以忽略不计,而加法运算由于需要进位,延时较大,因此,一次迭代过程中串行的加法运算的最大数量决定了该迭代过程的延时,串行加法运算数量最多的计算路径称为该迭代过程的关键路径。根据上述迭代公式可以看出,在一次迭代过程中,确定An和En所需要串行的加法运算数量最多,因而在该迭代过程中,确定An和En这两个变量字的计算路径就是决定该迭代过程的延时的关键路径。图I为现有的确定SM3密码杂凑算法中的变量字的电路图。如图I所示,一次迭代过程中的关键路径,即确定An和En这两个变量字的计算路径用粗线表示,要得到An需要经过al、a2、a3、a4、a5这五次加法运算才能完成,同样,要得到En需要经过al、a2、a6、a7、a8五次加法运算才能完成,因而各变量字的一次迭代运算总延时约为五次加法运算的延时之和。由于对V每迭代运算一次,就需要对A-H这8个变量字迭代64次,因而在SM3密码杂凑算法中对8个变量字进行的迭代运算的总数是很大的,现有技术中一次迭代过程的总延时约为五次加法运算的延时之和,严重影响了 SM3密码杂凑算法的运算速度
发明内容
本发明所要解决的技术问题是提供一种SM3密码杂凑算法及确定其中的变量字的方法,能减少变量字的迭代过程中关键路径的串行加法运算的数量。本发明解决上述技术问题的技术方案如下一种确定SM3密码杂凑算法中的变量字的方法,所述变量字为32比特长的八、8、(、03、?、6、11;该方法包括步骤a :设置迭代次数n为0 ;确定32比特长度的常量Tn和132个32比特长度的消息扩展字Wtl-W6P Wtl’ -w63’ ;进行初始化过程,所述初始化过程包括设置各变量字的初始迭代值A_p Bf CL1'D-P E-P Ff G-r IL1 ;确定中间变量字P、Q的初始值= D_1+ff> 0, Q^1 =H-i+Wo ;步骤b :按照迭代公式进行一次迭代运算,确定中间变量字SSl、SS2、TTl、TT2、P、Q 和各变量字的第 n 次迭代值 SSln, SS2n、TTln, TT2n、Pn、Qn、An、Bn、Cn、Dn、En、Fn、Gn、Hn ;所述迭代公式包括SSln = S7 [S12 (Alri) +En-^Sn(Tn)];沿;TTln = FFn(Alri, Bn^1, Cn^1)+882^^ ;TT2n = GGn (Elri,Flri,Glri) +SS 1見;Dn = Cn^1 ;Cn = S9(Blri);Bn = An^1 ;An = TTln ;Hn = Glri ;Gn = S19(Flri);Fn = Elri ;En = P0 (TT2n);Pn = Cn-W n+1 ;Qn = Gn^+\+1 ;其中,Alri、Blri、Clri、Elri、Flri、Glri为相应变量字的第n_l次迭代值、Qlri分别为P和Q的第n-1次迭代值PFn(A1^BMClri)和GGn(En-PF1^Glri)均为布尔函数,其函数表达式分别为
权利要求
1.一种确定SM3密码杂凑算法中的变量字的方法,所述变量字为32比特长的A、B、C、D、E、F、G、H ;其特征在于,该方法包括 步骤a :设置迭代次数n为O ;确定32比特长度的常量Tn和132个32比特长度的消息扩展字Wci-W67' Wtl’ -W63’ ;进行初始化过程,所述初始化过程包括设置各变量字的初始迭代值 A_i、B_i、Cf D_p E_p F_i、G_i、H^1 ;确定中间变量字 P、Q 的初始值 P_i = D^1+Wj。,Q^1 =H-i+Wo ; 步骤b :按照迭代公式进行一次迭代运算,确定中间变量字SSI、SS2、TT1、TT2、P、Q和各变量字的第 n 次迭代值 SSln, SS2n、TTln, TT2n、Pn、Qn、An、Bn、Cn、Dn、En、Fn、Gn、Hn ;所述迭代公式包括SSln= S7[S12(Alri)+En-^Sn(Tn)];TTln = FFn(An+ Bn+ Cn-VSSSJPn-I ; TT2n = GGn (En+ Fn+ GnJ+SSlJQlri ; Dn = Clri ;Cn = S9(Blri); Bn = K-i ; An = TTln ; Hn = Glri ;Gn= S19(Flri); Fn = Elri ;En = P0(TT2n); Pn = Ur n+1; Qn = Gn-i+Wn+i ; 其中,Alri、Bn_i、Cm、En_i、Flri、Glri为相应变量字的第n-1次迭代值Tn+ Qlri分别为P和Q的第n-1次迭代值PFn(A1^BMClri)和GGn(En-PF1^Glri)均为布尔函数,其函数表达式分别为/7/7 ( A R C \ — / A-i ^-i Q-i (0^w^15)- \(4-1 n^_!)U(^_!HC^1 )U(4,-1 HC^1 )(16<W<63);GG ( F F Cr 、— f En-\ Fn-\ Gn-l (0^<15) wV 卜1,w-17 _ 1(^-1 ^(^00^)(16^^63);P0(TT2n)为置换函数,其函数表达式为P0(7T2 ) = 7T2 [f (TT2 )] [y7(TT2 )];上述的S7⑴、S12⑴、Sn(X)、S9⑴、S17⑴、S19⑴分别为对字X进行循环左移7比特、12比特、n比特、9比特、17比特、19比特的运算; 、n、U、_分别为异或、逻辑与、逻辑或、逻辑非运算符; 步骤c :n的值增加I ;判断n是否超过63,是则执行步骤d,否则,执行步骤b ; 步骤d :将所述各变量字的第63次迭代值A63、B63、C63> D63、E63> F63> G63、H63输出。
2.根据权利要求I所述的方法,其特征在于,所述步骤a中确定32比特长度的常量Tn的方法为设置Tn为16进制表示的79cc4519 ; 在所述步骤b按照迭代公式进行一次迭代运算之前,该方法进一步包括确定本次迭代运算中的Tn,其方法为根据Tn与n的对应关系来确定Tn,所述对应关系为 Tn,其中的 79cc4519 和 7a879d8a 均为 16 进制数。
3.根据权利要求I或2所述的方法,其特征在于,所述步骤a中确定132个32比特长度的消息扩展字Wtl-W6P Wtl’ -W6/的方法为 步骤al :将Wtl-W15分别置为所述SM3密码杂凑算法中长度为512比特的消息分组从最高比特位开始的第1-16个字的值,其中,每个字的字长为32比特; 步骤a2 :循环变量r从16起至67为止,根据 Wr =PlWr-I6 K-9 ^15(Ks)] s\wr_u) rr_6if# W16-W67 的值,其中,S15(X)、S7(X)分别为对消息扩展字X进行循环左移15比特和7比特的运算; 步骤a3 :循环变量!■从O起至63为止,根据< =R十%+4计算%,-W6/的值。
4.根据权利要求I或2所述的方法,其特征在于,所述步骤a的初始化过程中设置各变量字的初始迭代值L1、B^1、CL1、D^1、E^1、F^1、G^1、H^1的方法为将各变量字的初始迭代值L1、Bf Cf D_p Ef Ff Gfl1依次置为所述SM3密码杂凑算法中长度为256比特的压缩函数值从最高位开始的第1-8个字的值,其中,每个字的字长为32比特。
5.根据权利要求I所述的方法,其特征在于,所述P、Q以及各变量字均用32比特长度的字寄存器进行存储; 和/或,所述步骤a中确定P、Q的初始值的加法运算由加法器实现;所述步骤b迭代公式中的任一循环左移、异或、逻辑与、逻辑或、逻辑非、加法运算分别由相应的移位寄存器、异或门电路、与门电路、或门电路、非门电路、加法器实现。
6.一种SM3密码杂凑算法,其特征在于,该算法包括 步骤I :接收长度不超过(264_1)比特的消息m,并对其进行填充,得到长度为512比特的k倍的填充消息m’,其中的k为不超过(255+1)的正整数; 步骤2:从m’的最高比特位开始,以512比特为一个消息分组,将m’划分为k组,各消息分组按其在m’中的比特位由高到低的顺序依次记为BO-B(k-l); 步骤3 :设置循环变量i为0 ;设置压缩函数V的第0次迭代值VO为用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 H)、Bi H)、Ci H)、Di H)、Ei H)、Fi H)、Gi H)、Hi H);确定中间变量字Pi、Qi的初始迭代值Pi(_D = DiH)+ff/ i0, QiH) = HiH)+ffi0 ; 步骤52 :按照迭代公式进行一次迭代运算,确定中间变量字SSlp SS2p TTli, TOi, Pi,Qi 和各变量字的第 n 次迭代值 SSlin、SS2in、TTlin, TT2in、Pin、Qin、Ain、Bin, Cin、Din、Ein、Fin、Gin、Hin ;所述迭代公式包括 SSlin = S7[S12(Ai(n_1))+Ei(n_1)+Sn(Tn)];TTlin — FFn(AiH), (n-D Ci(n—i))+SS2in+Pi(n—D ;TT2in — GGn(EiH), (n-D Gi ) +SSIin+Qi (n_D ; Din = Ci (n-i); cin = S9U ; Bin = Ai (n-i); Ain = TTlin ; Hin = Gi(n_1}; Gin = S19U ; Fin = Ei(H-I);Ein = P0(TT2in); Pin = Cifn-D+Wr i (n+i); Qin = Gifn-D+Wi (n+l); 其中,A i (n—I)、(n—I)、(n—I)、(n—i)、Fi (n—I)、(n—I) 为相应变量字的第n-1次迭代值;Pi (n-1)、Qifc-D 分别为 Pi、Qi 的第 n-1 次迭代值;FFn(Ai(n_D,Bi(n_D,Ci(n_D)和 GGn(Ei(n_D,Fi(Iri),Gi(Iri))均为布尔函数,其函数表达式分别为
7.根据权利要求6所述的算法,其特征在于,所述步骤I中对m进行填充,得到长度为512比特的k倍的填充消息m’的方法为 将二进制数I填充到长度为I的m的最低比特位之后,得到填充消息ml ; 向ml的最低比特位之后填充z个二进制数0,得到填充消息m2,其中,z是满足关系式(y+l+z)mod 512 = 448的最小的非负整数,mod为求模运算符; 向m2的最低比特位之后填充长度为64比特的比特串,得到m’,其中的比特串为y的二进制表示。
8.根据权利要求6所述的算法,其特征在于,所述步骤51中确定32比特长度的常量Tn的方法为设置Tn为16进制表示的79cc4519 ; 在所述步骤52中按照迭代公式进行一次迭代运算之前,该算法进一步包括确定本次迭代运算中的Tn,其方法为根据Tn与n的对应关系来确定Tn,所述对应关系为,其中的—4519和7a879d8a均为16进制数。
9.根据权利要求6、7或8所述的算法,其特征在于,所述步骤4中根据Bi确定出132个32比特长度的消息扩展字Wi(l-Wi67、Wi(l’ -Wi63’的方法为 步骤41 :将Witl-Wil5分别置为Bi从最高比特位开始的第1-16个字的值,其中,每个字的字长为32比特; 步骤42 :循环变量r从16起至67为止,根据 Wir=Pl[Wl(r_l6) Wl(r_9) ^15(Wl(r_3))] (Wl(r_l3)) wl(r_6)计算 Wii6-Wi67 的值,其中,S15⑴、S7⑴分别为对消息扩展字X进行循环左移15比特和7比特的运算;步骤43 :循环变量!■从O起至63为止,根据< =I 计算Witl’ -Wi63’的值。
10.根据权利要求6、7或8所述的算法,其特征在于,所述步骤51的初始化过程中设置各变量字的初始迭代值Ai H)、Bi H)、Ci H)、Di H)、Ei H)、Fi H)、Gi H)、Hi H)的方法为将各变量字的初始迭代值A i (-1)、Bi (-1)、Ci (-D、Di (-D、Ei (_!)、Fi (_!)、Gi (_!)、Hi (_!) 依次置为V的第i次迭代值Vi从最高位开始的第1-8个字的值,其中,每个字的字长为32比特。
全文摘要
本发明涉及一种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;步骤cn自动加1;判断n是否超过63,是则执行输出A-H的迭代终值,否则继续迭代。本发明能减少变量字的迭代过程中关键路径的串行加法运算的数量。
文档编号H04L9/32GK102761414SQ201110105198
公开日2012年10月31日 申请日期2011年4月26日 优先权日2011年4月26日
发明者刘建巍, 刘振, 屈善新, 徐树民, 王绍麟, 田心 申请人:航天信息股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1