共计 1752 个字符,预计需要花费 5 分钟才能阅读完成。
简介
SHA 算法大家应该都很相熟了,它是一个用来计算 hash 的算法,目前的 SHA 算法有 SHA1,SHA2 和 SHA3 种。这三种算法都是由美国 NIST 制订的。
NIST 的全称是美国国家标准与技术研究所,次要来制订各种规范。
本文将会解说下 NIST 和 SHA 各种算法的关系。
SHA1
在密码学中,SHA-1(Secure Hash Algorithm 1)是一种加密哈希函数,它承受一个输出,并产生一个 160 位(20 字节)的哈希值,称为信息摘要。
咱们先看下 SHA1 的加密流程图:
<img src=”https://img-blog.csdnimg.cn/20210403200253300.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_0,text_aHR0cDovL3d3dy5mbHlkZWFuLmNvbQ==,size_25,color_8F8F8F,t_70″ style=”zoom:67%;” />
下面的 A,B,C,D,E 都是 32bits 的 state。
F 是一个非线性函数。
<<< 示意额是左移操作,红色的加号示意的是加法而后对 2 32取模。
SHA1 算法很简略,在 2005 年之后,SHA1 被认为是不平安的,截至 2010 年,许多组织都倡议更换 SHA-1。
NIST 在 2011 年正式废止了 SHA- 1 的应用,并在 2013 年不容许将其用于数字签名。
所有次要的网络浏览器厂商在 2017 年都进行承受 SHA-1 SSL 证书。
SHA2
SHA-2(Secure Hash Algorithm 2)也是由美国国家安全局 (NSA) 设计的一组加密哈希函数,于 2001 年首次颁布,它们采纳 Merkle-Damgård 构造。
SHA- 2 和 SHA- 1 相比,包含了重大的变动。SHA- 2 系列蕴含六个哈希函数,别离是 SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512/256。
咱们看下 SHA2 的算法流程:
<img src=”https://img-blog.csdnimg.cn/20210403220300178.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_0,text_aHR0cDovL3d3dy5mbHlkZWFuLmNvbQ==,size_25,color_8F8F8F,t_70″ style=”zoom:67%;” />
咱们看下这几个函数示意什么意思:
SHA3
2006 年,NIST 组织了 NIST 哈希函数比赛,以创立一个新的哈希规范 SHA-3。SHA- 3 并不是要取代 SHA-2,因为目前还没有证实对 SHA- 2 的重大攻打。然而因为 MD5、SHA- 0 和 SHA- 1 的胜利攻打,NIST 认为须要一种可代替的、不同的加密哈希,这就是 SHA-3。
在这个较量中,最终 Keccak 算法胜出,被选为 SHA3 的规范。
SHA3 算法是基于海绵构造的,咱们看下海绵构造的工作原理:
这个函数被分成了两局部,右边局部叫做排汇局部,左边局部叫做输入局部,一吸一出,像是海绵一样,所以叫做海绵函数。
P 示意的是输出的字符串,Z 示意的时候输入字符串。
一个海绵函数由三局部组成,别离是 state, 函数 f 和填充函数 pad。
state 就是上图的 r + c 局部,r 被称为Bitrate,c 被称为Capacity。
P 被分成 n 份,每一份都会跟 Bitrate 进行异或操作,如果 P 的长度不是 Bitrate 的整数倍,那么须要应用 Pad 函数进行填充。
每一轮,Bitrate 跟 P 进行异或操作的后果作为最新的 Bitrate, 而后生成新的 state,而后这个 state 又被 f(state)来替换。
其中函数 f 是 从 n 个 {0,1} 到 n 个{0,1} 的映射。
就这样一轮一轮进行上来,直到所有的 P 都参加了运算。
输入局部是将最终生成的 state 进行 f 运算,每次运算都取 Bitrate 局部作为输入,从而失去最终的输入。
本文已收录于 http://www.flydean.com/sha1-2-3/
> 最艰深的解读,最粗浅的干货,最简洁的教程,泛滥你不晓得的小技巧等你来发现!
> 欢送关注我的公众号:「程序那些事」, 懂技术,更懂你!