HASH和HMAC(6):SM3算法原理

协议标准:http://www.sca.gov.cn/sca/xxgk/2010-12/17/1002389/files/302a3ada057c4a73830536d03e683110.pdf

算法处理分如下几步:

  • 消息填充 

消息填充分为两部分:第一部分是附加填充比特,第二部分是附加长度,目的是让整个消息满足指定的结构,从而处理起来可以统一化、格式化。

附加填充比特:指在消息尾部进行填充,使报文长度在对512取模后的余数为448。具体操作是:先被1比特1,然后都被0,直到满足对512取模余448。需要注意的是:即使原始消息长度已经满足对512取模余448,补位也需要进行,这时地填充512比特。所以附加填充时至少补1位,最多补512位。

附加长度:将原始数据的长度信息补到已经进行了填充的消息后面。

  • 消息分组

消息分组指将消息填充后的数据按512bit(16*32bit)进行分组,并扩充为132*32bit,扩充算法如下:

当 0 ≤ t ≤ 15  时,W[t] = M[t],M[t]为512bit原始数据中第t个32bit数据。

当 16 ≤ t ≤ 67时,P1(X) = X ⊕ (X <<< 15) ⊕ (X <<< 23)

            W[t] = P1(W[t-16] ⊕ W[t-9] ⊕ (W[t-3] <<< 15)) ⊕ (W[t-13] <<< 7) ⊕ W[t-6]

当 68 ≤ t ≤ 131时,W'[i] = W[i] ⊕ W[i+4],其中i=0..63

消息填充和消息分组处理图示如下:

  •  迭代运算

SM3算法对输入的消息进行64轮迭代运算,输出256bit的HASH结果。

SM3处理过程中会用到8个哈希初值和2个哈希常量。

SM3的8个哈希初值分别为:

A=0x7380166F,B=0x4914B2B9,C=0x172442D7,D=0xDA8A0600

E=0xA96F30BC,F=0x163138AA,G=0xE38DEE4D,H=0xB0FB0E4E

2个哈希常量:

0𝑗≤15: 𝑇𝑗=0𝑥79𝐶𝐶4519

16≤𝑗≤63: 𝑇𝑗=0𝑥7A879D8A

SM3迭代运算的详细流程为:

1. 哈希初值赋值:

H0=A,H1=B,H2=C,H3=D,H4=E,H5=F,H6=G,H7=H

2. 64轮迭代运算

for (t=0; t≤63; t++)

{

       SS1 = ((A <<< 12) + E + (Tt <<< t)) <<< 7

       SS2 = SS1 ⊕ (A <<< 12)

        TT1 = FFj(A, B, C) + D + SS2 + W‘[t]

        TT2 = GGj(E,F,G) + H + SS1 + W[t]

        D = C;

        C = B <<< 9;

        B = A;

        A = TT1;

        H = G;

        G = F <<< 19;

        F = E;

        E = TT2 ⊕ (TT2 <<<9) ⊕ (TT2 <<< 17);

}

3. 结果输出

H0=H0+A,H1=H1+B,H2=H2+C,H3=H3+D,H4=H4+E,H5=H5+F,H6=H6+G,H7=H7+H

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值