實現sm3密碼雜湊算法中的迭代壓縮的方法
【專利摘要】本發明涉及一種實現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算法的軟硬件實現成本。
【專利說明】實現SM3密碼雜湊算法中的迭代壓縮的方法
【技術領域】
[0001] 本發明涉及密碼學領域,尤其涉及一種實現SM3密碼雜湊算法中的迭代壓縮的方 法。
【背景技術】
[0002] 國產密碼算法是我國自主研制完成的一種密碼算法,具有較高安全性,由國家密 碼管理局任何和推廣,用以保障我國信息安全,在國家主導的行業中大多采用國家密碼管 理局的密碼算法,已逐漸成為趨勢。
[0003] SM3密碼雜湊算法是國家密碼管理局于2010年12月公布的一種國產密碼算法。 SM3密碼雜湊算法適用于商用密碼應用中的數字簽名和認證、消息認證碼的生成與驗證以 及隨機數的生成,可以滿足多種密碼應用的安全需求,同時還可為安全產品生產商提供產 品和技術的標準定位以及標準化的參考,提高安全產品的可信性與互操作性。
[0004] 國家密碼管理局公布的SM3密碼雜湊算法中,規定了 SM3的計算方法和計算步驟。 SM3密碼雜湊算法分為消息填充、迭代壓縮和雜湊值三步。其中,消息填充是將長度小于 264_bit的消息m,填充為長度為512-bit的整倍數的消息塊m';迭代壓縮是SM3算法的核心, 把填充后的消息m'按照固定的512-bit進行分組,得到消息分組B (tl)B(1)-B(Iri),然后對每 個512-bit分組B (1)逐次壓縮,最終得到整個消息m'的256-bit的雜湊值(hash value), 其中,η =消息m'的長度/512。迭代壓縮過程包括迭代過程、消息擴展和壓縮函數,其中, 消息擴展和壓縮函數的具體算法如下:
[0005] 1、消息擴展
[0006] 將消息分組B⑴按以下方法擴展生成132個字WQ % …W67 ;W' Q ;W' i ;…評' 63, 用于壓縮函數CF。其中,68個W和64個W',均是32-bit的字。
[0007] a)將消息分組B(i)劃分為16個字% % ; ",5。
[0008] b)F0R j = 16T067
[0009] ffj = ? ffj_9 ? (1^3?<15)) ? (Ι^<?7) ? ffj_6
[0010] ENDFOR
[0011] c) FOR j = 0T063
[0012] W,j = % θ WJ+4
[0013] ENDFOR
[0014] 2、壓縮函數
[0015] 令 A, B, C, D, E, F, G, H 為 32-bit 字寄存器,SSI, SS2, TT1, TT2 為 32-bit 中間變量, 壓縮函數,+1 = CF(V(i),B(i)),0彡i彡n-1。計算消息分組B(i)的雜湊值V (i+1)過程描述如 下:
[0016] ABCDEFGH = V⑴
[0017] FOR j = 0T063
[0018] SSI = ((A?<12)+E+(TJ?<j))?<7
[0019] SS2 = SSI ? (A?<12)
[0020] TT1 = FFj(A, B, C)+D+SS2+ff, j
[0021] TT2 = GGj (E, F, G) +H+SSl+ffj
[0022] D = C
[0023] C = B?<9
[0024] B = A
[0025] A = TT1
[0026] H = G
[0027] G = F?<19
[0028] F = E
[0029] E = P〇(TT2)
[0030] ENDFOR
[0031] V(i+1) = ABCDEFGH θ V⑴
[0032] 其中,
【權利要求】
1. 一種實現SM3密碼雜湊算法中的迭代壓縮的方法,其特征在于,包括: 步驟1、設置迭代次數i = 0 ;設置壓縮函數V的第0次迭代值V?為用16進制表示的 7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e ; 步驟2、根據消息分組B(i)確定16個32比特長度的消息擴展字l-Wu ;確定32比特長 度的各變量字A_i、C-丨、D_p E_p F_p G_p 1的初始值; 步驟3、設置迭代次數j = Ο ; 步驟4、確定32比特長度的常量按照迭代公式,確定中間變量字SS1、SS2、TT1、TT2、 消息擴展字ww和各變量字A、B、C、D、E、F、G、Η的第j次迭代值SSI」、SS2」、TT1」、TT2」、wwj、 A』、?_、Gp %、以及消息擴展字Wu m()dl6),其中,所述迭代公式包括: SSlj = ((AJ_1?<12)+EJ_1+(T J?<j))?<7 ; SS2j = SSlj ? (Α^<?12); WWj = Wj θ Wj+4 ; TTlj = FF^A^, B^, CJ_1)+DJ_1+SS2J+ww J ; TT2j = GG^E^.F^.G^^+H^+SSlj+ffj ; W(j m〇dl6) - Pi (W((j-16)modl6) ? ^((j-9)modl6) ? (j-3) modl6) ^ ) ? (^ ((j-l)modl6) ?^((j-6) modl6) ? Dj = Cj-i ; Cj = Β^<?9 ; Bj = Aj-i ; Aj = TTlj ; Hj = GjM ; Gj = Ρ^<?19 ; fj = Ej-i ; Ej = P0(TT2j); 步驟5 ;判斷j是否等于63,如果j等于63,執行步驟6,如果j小于63, j的值增加1, 執行步驟4; 步驟6、將?、Bp Cp Dp Ep卜Gp %的先后順序作為比特位由高到低的排列順序組合 得到的256比特長度的變量Α」Β」Cj Dj Ε」Fj Gj Η」與V的第i次迭代值進行異或運算,得 至丨J V的第i+Ι次迭代值V(i+1): V(i+1) = A』Bj Cj Dj Ej Fj Gj Η』θ V⑴; 步驟7、判斷i是否等于N-l,如果i等于N-l,輸出V(N),如果i小于N-l,i的值加1,執 行步驟2 ; 其中,N為消息分組的數量; FFj (A",Bp Cj和GGj (Ej-丨,Fp Gj為布爾函數,函數表達式為:
Pi(W((j-16)m〇dl6) ? W((j-9)m〇d!6) ? 0^((j-3)modl6) 〈〈〈15))和PQ(TT2j)為置換函數,所述置換函 數的函數表達式為:
其中,〈〈〈12、〈〈〈j、〈〈〈7、〈〈〈15、〈〈〈9、〈〈〈19 分別為循環左移 12、j、7、15、9、19 比特運 算,θ為32比特異或運算,Λ為32比特與運算,V為32比特或運算,mod為模運算,1為32 比特非運算。
2. 根據權利要求1所述的方法,其特征在于,所述確定32比特長度的常量L具體為:
其中,79cc4519和7a879d8a為16進制數。
3. 根據權利要求1所述的方法,其特征在于,所述確定32比特長度的各變量字 q、D_i、E_i、F_i、G_i、I的初始值具體為: 將各變量字A_p q、D_p E_p F_p G_p I的初始值依次設置為V(i)從最高比特位開 始的第1-8個字的值,其中,每個字的字長為32比特。
4. 根據權利要求1所述的方法,其特征在于,所述根據消息分組B(i)確定16個32比特 長度的消息擴展字Ι-Wu具體為 : 將消息擴展字l-Wu分別設置為從512比特長度的消息分組Βω的最高比特位開始的 第1-16個字的值,其中,每個字的字長為32比特。
5. 根據權利要求1所述的方法,其特征在于,所述消息擴展字和中間變量字SS1、 SS2、ww、TTl、TT2采用32比特長度的字寄存器進行存儲; 所述步驟4-步驟7中的任一加法、減法、循環左移、異或、與、或、模、非運算分別由加法 器、減法器、移位寄存器、異或門電路、與門電路、或門電路、模運算電路、非門電路實現。
6. -種實現SM3密碼雜湊算法中的迭代壓縮的方法,其特征在于,包括: 步驟1、設置迭代次數i = 0 ;設置壓縮函數V的第0次迭代值V?為用16進制表示的 7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e ; 步驟2、根據消息分組B(i)確定16個32比特長度的消息擴展字l-Wu ;確定32比特長 度的各變量字A_i、C-丨、D_p E_p F_p G_p 1的初始值; 步驟3、設置迭代次數j = 0 ; 步驟4、確定32比特長度的常量按照迭代公式,確定中間變量字TT1、TT2和各變量 字A、B、C、D、E、F、G、Η的第j次迭代值ΤΤΙ』、ΤΤ2』、Α』、Β』、Cj、Dj、Ε』、Fj、Gj、Η』、以及消息擴展 字W (>dl6),其中,所述迭代公式包括: TTlj = ((AJ_1?<12)+EJ_1+(T J?<j))?<7 ; TT2j = GG^E^, F^, G^^+H^+TTlj+ffj ; TTlj = FF^A^, (TTlj ? (Α^<?12))+ffj ? ffJ+4 ; ^(j modl6) - Pi (W((j-16)modl6) ? W"j_9)nrodl6) ? (W"j_3)nrodl6)〈〈〈15) ) ? (W"j_1)m()dl6)〈〈〈7) ? W"j_6) modl6) ? Dj = Cj-i ; Cj = Β^<?9 ; Bj = Aj-i ; Aj = TTlj ; Hj = GjM ; Gj = Ρ^<?19 ; fj = Ej-i ; Ej = P0(TT2j); 步驟5 ;判斷j是否等于63,如果j等于63,執行步驟6,如果j小于63, j的值增加1, 執行步驟4; 步驟6、將?、Bp Cp Dp Ep卜Gp %的先后順序作為比特位由高到底的排列順序組合 得到的256比特長度的變量Α」Β」Cj Dj Ε」Fj Gj Η」與V的第i次迭代值進行異或運算,得 到V的第i+Ι次迭代值V(i+1): V(i+1) = A』Bj Cj Dj Ej Fj Gj Η』θ V⑴; 步驟7、判斷i是否等于N-l,如果i等于N-l,輸出V(N),如果i小于N-l,i的值加1,執 行步驟2 ; 其中,N為消息分組的數量; FFj (A",Bp Cj和GGj (Ej-丨,Fp Gj為布爾函數,函數表達式為:
PjWw ? 1_9 ? (1_3〈〈〈15))和Ρ〇(ΤΤ2ρ為置換函數,函數表達式為:
其中,〈〈〈12、〈〈〈j、〈〈〈7、〈〈〈15、〈〈〈9、〈〈〈19 分別為循環左移 12、j、7、15、9、19 比特運 算,θ為32比特異或運算,Λ為32比特與運算,V為32比特或運算,mod為模運算,-!:為32 比特非運算。
7. 根據權利要求6所述的方法,其特征在于,所述確定32比特長度的常量L具體為:
其中,79cc4519和7a879d8a為16進制數。
8. 根據權利要求6所述的方法,其特征在于,所述確定32比特長度的各變量字 q、D_i、E_i、F_i、G_i、I的初始值具體為: 將各變量字A_p q、D_p E_p F_p G_p I的初始值依次設置為V(i)從最高比特位開 始的第1-8個字的值,其中,每個字的字長為32比特。
9. 根據權利要求6所述的方法,其特征在于,所述根據消息分組B(i)確定16個32比特 長度的消息擴展字Ι-Wu為 : 將消息擴展字l-Wu分別設置為從512比特長度的消息分組Βω的最高比特位開始的 第1-16個字的值,其中,每個字的字長為32比特。
10. 根據權利要求6所述的方法,其特征在于,所述消息擴展字VWu和中間變量字 TT1、TT2采用32比特長度的字寄存器進行存儲; 所述步驟4-步驟7中的任一加法、減法、循環左移、異或、與、或、模、非運算分別由加法 器、減法器、移位寄存器、異或門電路、與門電路、或門電路、模運算電路、非門電路實現。
【文檔編號】H04L9/06GK104092534SQ201410325899
【公開日】2014年10月8日 申請日期:2014年7月9日 優先權日:2014年7月9日
【發明者】劉忠志 申請人:昆騰微電子股份有限公司