專利名稱:一種sm3密碼雜湊算法及確定其中的變量字的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及信息安全領(lǐng)域,特別是涉及一種SM3密碼雜湊算法及確定其中的變量字的方法。
背景技術(shù):
為了保證數(shù)據(jù)的安全,人們通常會將數(shù)據(jù)加密為密文,只有利用相應(yīng)的密鑰才能解密密文,得到原始數(shù)據(jù)明文。在該加解密的過程中,常常要用到密碼雜湊算法,將任一不超過(264-1)比特的二進制比特串轉(zhuǎn)換為固定長度,如256比特的二進制雜湊值輸出。在密碼學中,密碼雜湊算法所用到的密碼雜湊函數(shù)具有兩個基本特性一是輸入值與輸出值一一對應(yīng),即兩個不同的輸入不可能生成同一個雜湊值;二是運算不可逆,即對于一已知的雜湊輸出值y,要找到一個可以計算其輸入值X的雜湊逆算法X = h(y)也是不可行的。因此,密碼雜湊算法可以有效保證數(shù)據(jù)的安全,廣泛應(yīng)用于數(shù)字簽名和驗證、消息·認證碼的生成和驗證中,在保護信息完整性方面起著重要的作用。國家密碼管理局發(fā)布的SM3密碼雜湊算法具有良好的安全性,可滿足多種密碼應(yīng)用的安全需求。該算法中,最核心的運算是在計算壓縮函數(shù)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為相應(yīng)變量字的第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進行循環(huán)左移i比特的運算,如計算Cn的S9 (Blri)為對變量字Blri進行循環(huán)左移9比特的運算,F(xiàn)Fn(An^1, Bn+ Clri)和GGn(En_i,F(xiàn)n+ Glri)均為表達式已知的布爾函數(shù),P0(TT2n)為表達式已知的置換函數(shù), 為常見的異或邏輯運算符。上述的迭代過程涉及循環(huán)左移、異或等邏輯運算以及加法運算,其中,循環(huán)左移、異或等邏輯運算的延時很小,可以忽略不計,而加法運算由于需要進位,延時較大,因此,一次迭代過程中串行的加法運算的最大數(shù)量決定了該迭代過程的延時,串行加法運算數(shù)量最多的計算路徑稱為該迭代過程的關(guān)鍵路徑。根據(jù)上述迭代公式可以看出,在一次迭代過程中,確定An和En所需要串行的加法運算數(shù)量最多,因而在該迭代過程中,確定An和En這兩個變量字的計算路徑就是決定該迭代過程的延時的關(guān)鍵路徑。圖I為現(xiàn)有的確定SM3密碼雜湊算法中的變量字的電路圖。如圖I所示,一次迭代過程中的關(guān)鍵路徑,即確定An和En這兩個變量字的計算路徑用粗線表示,要得到An需要經(jīng)過al、a2、a3、a4、a5這五次加法運算才能完成,同樣,要得到En需要經(jīng)過al、a2、a6、a7、a8五次加法運算才能完成,因而各變量字的一次迭代運算總延時約為五次加法運算的延時之和。由于對V每迭代運算一次,就需要對A-H這8個變量字迭代64次,因而在SM3密碼雜湊算法中對8個變量字進行的迭代運算的總數(shù)是很大的,現(xiàn)有技術(shù)中一次迭代過程的總延時約為五次加法運算的延時之和,嚴重影響了 SM3密碼雜湊算法的運算速度
發(fā)明內(nèi)容
本發(fā)明所要解決的技術(shù)問題是提供一種SM3密碼雜湊算法及確定其中的變量字的方法,能減少變量字的迭代過程中關(guān)鍵路徑的串行加法運算的數(shù)量。本發(fā)明解決上述技術(shù)問題的技術(shù)方案如下一種確定SM3密碼雜湊算法中的變量字的方法,所述變量字為32比特長的八、8、(、03、?、6、11;該方法包括步驟a :設(shè)置迭代次數(shù)n為0 ;確定32比特長度的常量Tn和132個32比特長度的消息擴展字Wtl-W6P Wtl’ -w63’ ;進行初始化過程,所述初始化過程包括設(shè)置各變量字的初始迭代值A(chǔ)_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,F(xiàn)lri,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為相應(yīng)變量字的第n_l次迭代值、Qlri分別為P和Q的第n-1次迭代值PFn(A1^BMClri)和GGn(En-PF1^Glri)均為布爾函數(shù),其函數(shù)表達式分別為
權(quán)利要求
1.一種確定SM3密碼雜湊算法中的變量字的方法,所述變量字為32比特長的A、B、C、D、E、F、G、H ;其特征在于,該方法包括 步驟a :設(shè)置迭代次數(shù)n為O ;確定32比特長度的常量Tn和132個32比特長度的消息擴展字Wci-W67' Wtl’ -W63’ ;進行初始化過程,所述初始化過程包括設(shè)置各變量字的初始迭代值 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為相應(yīng)變量字的第n-1次迭代值Tn+ Qlri分別為P和Q的第n-1次迭代值PFn(A1^BMClri)和GGn(En-PF1^Glri)均為布爾函數(shù),其函數(shù)表達式分別為/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)為置換函數(shù),其函數(shù)表達式為P0(7T2 ) = 7T2 [f (TT2 )] [y7(TT2 )];上述的S7⑴、S12⑴、Sn(X)、S9⑴、S17⑴、S19⑴分別為對字X進行循環(huán)左移7比特、12比特、n比特、9比特、17比特、19比特的運算; 、n、U、_分別為異或、邏輯與、邏輯或、邏輯非運算符; 步驟c :n的值增加I ;判斷n是否超過63,是則執(zhí)行步驟d,否則,執(zhí)行步驟b ; 步驟d :將所述各變量字的第63次迭代值A(chǔ)63、B63、C63> D63、E63> F63> G63、H63輸出。
2.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述步驟a中確定32比特長度的常量Tn的方法為設(shè)置Tn為16進制表示的79cc4519 ; 在所述步驟b按照迭代公式進行一次迭代運算之前,該方法進一步包括確定本次迭代運算中的Tn,其方法為根據(jù)Tn與n的對應(yīng)關(guān)系來確定Tn,所述對應(yīng)關(guān)系為 Tn,其中的 79cc4519 和 7a879d8a 均為 16 進制數(shù)。
3.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,所述步驟a中確定132個32比特長度的消息擴展字Wtl-W6P Wtl’ -W6/的方法為 步驟al :將Wtl-W15分別置為所述SM3密碼雜湊算法中長度為512比特的消息分組從最高比特位開始的第1-16個字的值,其中,每個字的字長為32比特; 步驟a2 :循環(huán)變量r從16起至67為止,根據(jù) Wr =PlWr-I6 K-9 ^15(Ks)] s\wr_u) rr_6if# W16-W67 的值,其中,S15(X)、S7(X)分別為對消息擴展字X進行循環(huán)左移15比特和7比特的運算; 步驟a3 :循環(huán)變量!■從O起至63為止,根據(jù)< =R十%+4計算%,-W6/的值。
4.根據(jù)權(quán)利要求I或2所述的方法,其特征在于,所述步驟a的初始化過程中設(shè)置各變量字的初始迭代值L1、B^1、CL1、D^1、E^1、F^1、G^1、H^1的方法為將各變量字的初始迭代值L1、Bf Cf D_p Ef Ff Gfl1依次置為所述SM3密碼雜湊算法中長度為256比特的壓縮函數(shù)值從最高位開始的第1-8個字的值,其中,每個字的字長為32比特。
5.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述P、Q以及各變量字均用32比特長度的字寄存器進行存儲; 和/或,所述步驟a中確定P、Q的初始值的加法運算由加法器實現(xiàn);所述步驟b迭代公式中的任一循環(huán)左移、異或、邏輯與、邏輯或、邏輯非、加法運算分別由相應(yīng)的移位寄存器、異或門電路、與門電路、或門電路、非門電路、加法器實現(xiàn)。
6.一種SM3密碼雜湊算法,其特征在于,該算法包括 步驟I :接收長度不超過(264_1)比特的消息m,并對其進行填充,得到長度為512比特的k倍的填充消息m’,其中的k為不超過(255+1)的正整數(shù); 步驟2:從m’的最高比特位開始,以512比特為一個消息分組,將m’劃分為k組,各消息分組按其在m’中的比特位由高到低的順序依次記為BO-B(k-l); 步驟3 :設(shè)置循環(huán)變量i為0 ;設(shè)置壓縮函數(shù)V的第0次迭代值VO為用16進制表示的7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e ; 步驟4 :根據(jù)Bi確定出132個32比特長度的消息擴展字Wi0-Wi67> Wi0,-Wi63’,其中,Bi為第i個消息分組,i為0與(k-1)之間的正整數(shù); 步驟5 :確定32比特長度的變量字Ai,Bi,Ci^Di,Ei,Fi,Gi,Hi的第63次迭代值A(chǔ)i63、Bi63、Ci63、Di63> Ei63、Fi63、Gi63、Hi63,其方法包括 步驟51 :設(shè)置迭代次數(shù)n為0 ;確定32比特長度的常量Tn ;進行初始化過程,所述初始化過程包括設(shè)置各變量字的初始迭代值A(chǔ)i 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) 為相應(yīng)變量字的第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,F(xiàn)i(Iri),Gi(Iri))均為布爾函數(shù),其函數(shù)表達式分別為
7.根據(jù)權(quán)利要求6所述的算法,其特征在于,所述步驟I中對m進行填充,得到長度為512比特的k倍的填充消息m’的方法為 將二進制數(shù)I填充到長度為I的m的最低比特位之后,得到填充消息ml ; 向ml的最低比特位之后填充z個二進制數(shù)0,得到填充消息m2,其中,z是滿足關(guān)系式(y+l+z)mod 512 = 448的最小的非負整數(shù),mod為求模運算符; 向m2的最低比特位之后填充長度為64比特的比特串,得到m’,其中的比特串為y的二進制表示。
8.根據(jù)權(quán)利要求6所述的算法,其特征在于,所述步驟51中確定32比特長度的常量Tn的方法為設(shè)置Tn為16進制表示的79cc4519 ; 在所述步驟52中按照迭代公式進行一次迭代運算之前,該算法進一步包括確定本次迭代運算中的Tn,其方法為根據(jù)Tn與n的對應(yīng)關(guān)系來確定Tn,所述對應(yīng)關(guān)系為,其中的—4519和7a879d8a均為16進制數(shù)。
9.根據(jù)權(quán)利要求6、7或8所述的算法,其特征在于,所述步驟4中根據(jù)Bi確定出132個32比特長度的消息擴展字Wi(l-Wi67、Wi(l’ -Wi63’的方法為 步驟41 :將Witl-Wil5分別置為Bi從最高比特位開始的第1-16個字的值,其中,每個字的字長為32比特; 步驟42 :循環(huán)變量r從16起至67為止,根據(jù) Wir=Pl[Wl(r_l6) Wl(r_9) ^15(Wl(r_3))] (Wl(r_l3)) wl(r_6)計算 Wii6-Wi67 的值,其中,S15⑴、S7⑴分別為對消息擴展字X進行循環(huán)左移15比特和7比特的運算;步驟43 :循環(huán)變量!■從O起至63為止,根據(jù)< =I 計算Witl’ -Wi63’的值。
10.根據(jù)權(quán)利要求6、7或8所述的算法,其特征在于,所述步驟51的初始化過程中設(shè)置各變量字的初始迭代值A(chǔ)i H)、Bi H)、Ci H)、Di H)、Ei H)、Fi H)、Gi H)、Hi H)的方法為將各變量字的初始迭代值A(chǔ) i (-1)、Bi (-1)、Ci (-D、Di (-D、Ei (_!)、Fi (_!)、Gi (_!)、Hi (_!) 依次置為V的第i次迭代值Vi從最高位開始的第1-8個字的值,其中,每個字的字長為32比特。
全文摘要
本發(fā)明涉及一種SM3密碼雜湊算法及確定其中的變量字的方法。變量字為A-H;該方法包括步驟a設(shè)置n=0;確定常量Tn和消息擴展字W0-W67、W0’-W63’;進行設(shè)置A-H及P和Q的初始化值A(chǔ)-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,F(xiàn)n-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,是則執(zhí)行輸出A-H的迭代終值,否則繼續(xù)迭代。本發(fā)明能減少變量字的迭代過程中關(guān)鍵路徑的串行加法運算的數(shù)量。
文檔編號H04L9/32GK102761414SQ201110105198
公開日2012年10月31日 申請日期2011年4月26日 優(yōu)先權(quán)日2011年4月26日
發(fā)明者劉建巍, 劉振, 屈善新, 徐樹民, 王紹麟, 田心 申請人:航天信息股份有限公司