SM3算法设计原理

版权声明: https://blog.csdn.net/Soul_Programmer_Swh/article/details/80263693

 SM3密码杂凑算法的描述

SM3密码杂凑算法采用Merkle-Damgard结构,消息分组长度为512b,摘要长度256b。压缩函数状态256b,共64步操作步骤。

SM3密码杂凑算法的初始值:

SM3密码杂凑算法的初始值共256b,由832b串联构成,具体值如下:

IV=7380166f  4914b2b9  1724422d7  da8a0600

   a96f30bc  163138aa   e38dee4d   b0fb0e4e

SM3密码杂凑算法的常量:

SM3密码杂凑算法的常量定义如下:


SM3密码杂凑算法的布尔函数:    

SM3密码杂凑算法的布尔函数定义如下:

SM3密码杂凑算法的置换函数:

SM3密码杂凑算法的置换函数定义如下:

SM3密码杂凑算法的消息填充:

对于长度为l(l<264)比特的消息mSM3密码杂凑算法首先将比特“1”添加到消息的末尾,再添加k0”,k是满足l+k+1=448 mod 512的最小非负整数。然后再添加一个64位比特串,该比特串是长度l的二进制表示。填充后的消息m的比特长度我512的倍数。例如:对消息01100001 01100010 01100011,其长度l=24,经填充得到的比特串如下:01100001 0100010 011000111 0···00···011000

SM3密码杂凑算法的迭代压缩过程:

将填充后的消息m512b进行分组:m=B(0)B(1)···B(n-1),其中n=(l+k+65)/512。对m按如下方式迭代:

FOR i=0 TO (n-1)

    V(i+1)=CF(V(i),B(i));

ENDFOR

其中,CF是压缩函数,V(0)256b初始值IVB(i)为填充后的消息分组,迭代压缩的结果为V(n)

SM3密码杂凑算法的压缩函数:

SM3密码杂凑算法的压缩函数由消息扩展过程和状态更新过程组成,具体描述如下。

1、过程1消息扩展过程:

将消息分组B(i)按一下方式扩展生成132个字W0W1···W67W0W1···W63用于压缩函数CF

(1)将消息分组B(i)划分为16个字W0W1···W15

(2)FOR j=16 TO 67

             Wj=P1(Wj-16 XOR Wj-9 XOR (Wj-3<<<15)) XOR (Wj-1<<<7) XOR Wj-6

          ENDFOR

    3FOR j=0 TO 63

              Wj=Wj XOR Wj+4

          ENDFOR

 2、过程2 状态更新过程:

假定A,B,C,D,E,F,G,H为寄存器,SS1SS2TT1TT2为中间变量,压缩函数V(i+1)=CF(V(i),B(i)),0in-1,状态更新过程描述如下:

ABCDEFGHV(i)

FOR j=0 TO 63

SS1SS1+(A<<<12)

TT1FFj(A,B,C)+D+SS2+Wj

TT2GGj(A,B,C)+H+SS1+ Wj

DC

CB<<<9

BA

ATT1

HG

GF<<<19

FE

EP0(TT2)

ENDFOR

V(i+1)ABCDEFGH XOR V(i)

 3、过程3 杂凑值:

ABCDEFGHXOR V(n)

输出256b的杂凑值y=ABCDEFGH

SM3密码杂凑算法的特点:

SM3密码杂凑算法压缩函数整体结构与SHA-256相似,但是增加了多种新的设计技术,包括增加16步全异或操作、消息双字介入、增加快速雪崩效应的P置换等。能够有效地避免高概率的局部碰撞,有效的抵抗强碰撞性的差分分析、若碰撞性的线性分析和比特追踪法等密码分析。

SM3密码杂凑算法合理使用字加运算,构成进位加4级流水,在不显著增加硬件开销的情况下,采用P置换,加速了算法的雪崩效应,提高了运算效率。同时,SM3密码杂凑算法采用了适合32b微处理器和8b智能卡实现的基本运算,具有跨平台实现的高效性和广泛的适用性。

阅读更多

扫码向博主提问

Walter·Sun

非学,无以致疑;非问,无以广识
  • 擅长领域:
  • Java
  • Spring
  • Database
  • 编程思想
去开通我的Chat快问

没有更多推荐了,返回首页