实现sm3密码杂凑算法中的迭代压缩的方法

文档序号:7808548阅读:1186来源:国知局
实现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日
【发明者】刘忠志 申请人:昆腾微电子股份有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1