【本课堂内容全部选编自PlatON武汉大学国家网络安全学院首席密码学家、教授、博士导师何德彪教授的《区块链与密码学》讲义、教材和互联网版权属于原作者。如有侵权行为,请立即联系我们,我们将及时处理。
5.5.1SM3算法简介
SM3.中国商业密码管理局发布的商业密码哈希函数广泛应用于商业密码应用中的辅助数字签名和验证、新闻认证码的生成和验证、随机数的生成等领域。SM哈希函数在结构上属于基本压缩函数迭代型。
5.5.2SM3算法描述
输入数据长度为l比特,1≤l≤264-1;输出哈希值的长度为256比特。
常量与函数
SHA-以下常数和函数用于256算法:
常量
初始值IV=7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e。
函数
布尔函数
置换函数
其中:∧表示按位和;∨表示按位或 ;? 表示按位补;⊕表示按位异或;<<<表示循环左移;
算法描述
填充
由于迭代压缩是对512位数据块进行的,如果数据长度不是512位数据块的整数倍,最后一位数据将是短块,这将无法处理。
设置消息m长度为l比特,先将比特1添加到m的末尾,再添加k个0,k最小非负整数满足下式,l 1 k=448mod512
然后添加一个64位比特串,表示长度为l的二进制。填充消息m的比特长度必须是512倍。
以信息“abc以补位过程为例。a, b, c对应的ASCII码分别是97, 98, 99;因此,原始信息的二进制编码为:0110001 01100010 01100011
①补一个“1” :0110000101100010 01100011 1
②补423个“0”:01100001 01100010 01100011 10000000 00000000 … 00000000
③补比特长度24 (64位表示)获取512比特数据:
消息扩展
将16个字的消息分组B(i)扩展生成以下132个字,供压缩函数CF使用W0,W1,…,W67,W′0,W′1,…,W′63
新闻扩展扰乱了原消息位,隐藏了原消息位之间的关系,增强了安全性
将消息分组B(i)划分为16个字W0,W1,…,W15
-----------
FORj=16 TO 67
Wj←P1(Wj -16⊕Wj?9⊕(Wj?3<<< 15)) ⊕(Wj?13<<< 7) ⊕Wj?6
END FOR
----------
FORj=0 TO 63
Wj′=Wj⊕Wj 4
END FOR
迭代压缩处理
填好的消息m′按512比分组:m′=B(0)B(1)…B(n?1),其中:n= (l k 65)/512
对m′迭代压缩按以下方式进行://外层迭代
FORi= 0 TOn-1
--------
V(i 1)=CF(V(i),B(i))
--------
ENDFOR
其中CF压缩函数,V(0)256比特的初始值IV,B(i)迭代压缩的结果是填充后的消息分组V(n),它是消息m的哈希值.
压缩函数
压缩函数是SM3的核心,令A,B,C,D,E,F,G,H为字寄存器,SS1,SS2,TT1,TT二是中间变量,压缩函数:V(i 1)=CF(V(i),B(i)), 0 ≤i≤n-1
压缩函数CF压缩处理:///内层迭代
FORj=0 TO 63
--------
CF=F(SS1,SS2,TT1,TT2,A,B,C,D,E,F,G,H,Wj,W′j)//基本压缩函数
--------
ENDFOR
SM3算法迭代压缩过程示意图
基本压缩函数F
SS1 ←((A<<< 12) E (Tj<<<j)) <<< 7
--------
SS2 ←SS1 ⊕(A<<< 12)
--------
TT1 ←FFj(A,B,C) D SS2 Wj’
--------
TT2 ←GGj(E,F,G) H SS1 Wj
--------
D←C
--------
C←B<<< 9
--------
B←A
--------
A←TT1
--------
H←G
--------
G←F<<<19
F←EE←P0(TT2 )
SM3算法基本压缩函数示意图
SM3工作全过程
SM算法工作全过程示意图
压缩函数的作用
压缩函数是SM安全的关键。
SM3的压缩函数CF分组每个512位的消息B(i)压缩成256位.数据分组之间的迭代处理后,将l位的消息压缩成256位的哈希值。
在SM3的压缩函数CF布尔函数函数FFj(X,Y,Z)和GGj(X,Y,Z)循环迭代后,是非线性函数提供混淆。
置换函数P0(X)和P1(X)循环迭代后,线性函数提供扩散效果.加压缩函数CF其他操作的共同作用,压缩函数CF具有很高的安全性,从而确保SM安全性高。
安全性
专业机构设计经过充分的测试和论证
安全性满足上述应用的安全要求
学者们做对了SM3的安全分析如缩减轮的分析),尚未发现本质的缺陷
常用的SM3算法就讲到这里啦,下节课我们将学习常用哈希函数在区块链中的应用,敬请期待!