区块链与密码学第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讲:详解常用哈希函数的主要内容,如果未能解决你的问题,请参考以下文章

区块链与密码学第5-3讲:详解常用哈希函数

区块链与密码学第5-1讲:哈希函数简史

区块链与密码学第5-2讲:哈希函数的构造

区块链与密码学第2-3讲:区块链基础技术大剖析之哈希函数

区块链与密码学第5-6讲:哈希哈数在区块链中的应用

区块链与密码学第2-4讲:区块链基础技术大剖析之数字签名