SHA安全加密标准,是至今世界上使用最广泛且安全的压缩算法之一,随着密码学研究的不断深入和计算机技术的快速发展,SHA-256算法得到全面推广应用。

SHA-256算法使用了一组6个逻辑函数及一组常数KT  ,采用512比特的消息块,每一个消息块Xi 分成16个32比特的字M0,M1,….M15 。下面来看一下SHA-256指的计算过程。

1、初始化:

简述SHA-256算法的安全性

2、准备消息列表

简述SHA-256算法的安全性

3、用每一轮的散列值的中间结果初始化8个工作变量A、B、C、D、E、F、G、H。初始定义由H0(0)-H7(7)给出。

4、对于0≤t≤63,执行(即压缩函数):

T1=H+∑1{256}(e)+Ch(e,f,g)+Kt{256}+Wt

T2=∑0{256}(a)+Maj(a,b,c)

H=g g=h e=d+T1 d=c c=b b=a a=T1+T2

5、每个分组的中间散列值的计算方法:

H0(i)=a+H0(i-j), H1(i)=b+H1(i-j), H2(i)=c+H2(i-j), H3(i)=d+H3(i-j), H4(i)=e+H4(i-j), H5(i)=f+H5(i-j), H6(i)=g+H6(i-j), H7(i)=h+H7(i-j)

这里i是指消息的第i个分组,将所有的分组处理完毕后,最后输出256比特的Hash值:H0(N) | | H1(N) | | H2(N) | | H3(N) | | H4(N) | | H5(N) H6(N) | | H7(N)

算法中使用的6个逻辑函数:

简述SHA-256算法的安全性

SHA-256的安全性

Hash函数的安全性很大程度上取决于抗强碰撞的能力,即攻击者找出两个涓息M和MtM≠Mt,使得H(M)=HMt  ,因此,评价一个Hash函数的安全性,就是看攻击者在现有的条件下,是否可以找到该函数的一对碰撞。目前已有的对Hash函数攻击的方法包括生日攻击、彩虹表攻击、差分攻击等。

生日攻击:生日攻击是一种可用于攻击任何类型函数Hash函数的攻击方法。从攻击原理上看,它没有利用Hash函数的结构和任何代数弱性质,只依赖与Hash值的长度。因此,抵御生日攻击最有效的方法是Hash值必须有足够的长度。

差分攻击:差分攻击是目前破译迭代Hash函数最有效的手法之一,其基本方法是利用明文的输入差值对输出差值的影响,运用差分的高概率的继承或者消除来产生最终的相同输出。

用于消息唯一性和数据完整性验证的Hash函数,其安全性依赖于函数本身的属性和对抗碰撞的抵抗。Hash函数的算法结构特点和Hash值的长度是决定函数碰撞性的而主要因素,Hash值越长,越能抵御生日攻击。SHA-256有256比特Hash值,MD5和SHA-1分别有128和160比特的Hash值。因此,SHA-256比MD5和SHA-1能抵抗生日攻击。通过对Chabaud-Joux攻击SHA-256的分析,找到了SHA-256的一个部分碰撞,其复杂度为266,但无法找到SHA-256的一个整体碰撞,因此SHA-256算法也能抵御现有的差分攻击。由此可见,在抵御生日攻击和抵御已知差分攻击方面,SHA-256算法比现在广泛使用的MD5和SHA-1等更具安全性。