区块链与密码学第5-5讲:详解常用哈希函数
Posted Dig Quant
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链与密码学第5-5讲:详解常用哈希函数相关的知识,希望对你有一定的参考价值。
【本课堂内容全部选编自PlatON首席密码学家、武汉大学国家网络安全学院教授、博士生导师何德彪教授的《区块链与密码学》授课讲义、教材及互联网,版权归属其原作者所有,如有侵权请立即与我们联系,我们将及时处理。】
5.5.1 SM3算法简介
SM3是我国商用密码管理局颁布的商用密码哈希函数,广泛应用于:商用密码应用中的辅助数字签名和验证、消息认证码的生成与验证、随机数的生成等领域。SM3在结构上属于基本压缩函数迭代型的哈希函数。
5.5.2 SM3算法描述
输入数据长度为l比特,1≤l ≤264-1;输出哈希值的长度为256比特。
常量与函数
SHA-256算法使用以下常数与函数:
常量
初始值IV=7380166f 4914b2b9 172442d7 da8a0600 a96f30bc 163138aa e38dee4d b0fb0e4e。
函数
布尔函数
置换函数
其中:∧表示按位“与”;∨表示按位“或” ;¬ 表示按位“补”;⊕表示按位“异或”;<<<表示循环左移;
算法描述
填充
对数据填充的目的是使填充后的数据长度为512的整数倍。因为迭代压缩是对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;于是原始信息的二进制编码为:01100001 01100010 01100011
① 补一个“1” :0110000101100010 01100011 1
② 补423个“0”:01100001 01100010 01100011 10000000 00000000 … 00000000
③ 补比特长度24 (64位表示),得到512比特的数据:
消息扩展
对一个消息分组B(i)迭代压缩之前,首先进行消息扩展:
将16个字的消息分组B(i)扩展生成如下的132个字,供压缩函数CF使用W0,W1,…,W67,W′0,W′1,…,W′63
消息扩展把原消息位打乱,隐蔽原消息位之间的关联,增强了安全性
消息扩展的步骤如下:
将消息分组B(i)划分为16个字W0,W1,…,W15
-----------
FOR j=16 TO 67
Wj←P1(Wj -16 ⊕Wj−9⊕(Wj−3<<< 15)) ⊕(Wj−13<<< 7) ⊕Wj−6
END FOR
----------
FOR j=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′按下列方式迭代压缩://外层迭代
FOR i = 0 TO n-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, TT2为中间变量,压缩函数:V( i+1) = CF(V(i),B(i)), 0 ≤i ≤n -1
压缩函数CF的压缩处理://内层迭代
FOR j=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 ←E E ←P0( TT2 )
SM3算法的基本压缩函数示意图
SM3工作全过程
SM3算法的工作全过程示意图
压缩函数的作用
压缩函数是SM3安全的关键。
第一个作用是数据压缩。SM3的压缩函数CF把每一个512位的消息分组B(i)压缩成256位.经过各数据分组之间的迭代处理后把l位的消息压缩成256位的哈希值。
第二个作用是提供安全性。在SM3的压缩函数CF中,布尔函数FFj(X,Y,Z)和GGj(X,Y,Z)是非线性函数,经过循环迭代后提供混淆作用。
置换函数P0(X)和P1(X)是线性函数,经过循环迭代后提供扩散作用.加上压缩函数CF中的其它运算的共同作用,压缩函数CF具有很高的安全性,从而确保SM3具有很高的安全性。
安全性
专业机构设计,经过充分测试和论证
安全性可满足上述应用的安全需求
学者已开展对SM3的安全分析(如缩减轮的分析),尚未发现本质的缺陷
常用的SM3算法就讲到这里啦,下节课我们将学习常用哈希函数在区块链中的应用,敬请期待!
以上是关于区块链与密码学第5-5讲:详解常用哈希函数的主要内容,如果未能解决你的问题,请参考以下文章