写点什么

密码学系列之:NIST 和 SHA 算法

发布于: 2021 年 05 月 10 日

简介

SHA 算法大家应该都很熟悉了,它是一个用来计算 hash 的算法,目前的 SHA 算法有 SHA1,SHA2 和 SHA3 种。这三种算法都是由美国 NIST 制定的。

NIST 的全称是美国国家标准与技术研究所,主要来制定各种标准。

本文将会讲解下 NIST 和 SHA 各种算法的关系。

SHA1

在密码学中,SHA-1(Secure Hash Algorithm 1)是一种加密哈希函数,它接受一个输入,并产生一个 160 位(20 字节)的哈希值,称为信息摘要。

我们先看下 SHA1 的加密流程图:



上面的 A,B,C,D,E 都是 32bits 的 state。

F 是一个非线性函数。

<<< 表示额是左移操作,红色的加号表示的是加法然后对 232取模。

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 的算法流程:



我们看下这几个函数表示什么意思:






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/

> 最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧等你来发现!

> 欢迎关注我的公众号:「程序那些事」,懂技术,更懂你!

发布于: 2021 年 05 月 10 日阅读数: 31
用户头像

关注公众号:程序那些事,更多精彩等着你! 2020.06.07 加入

最通俗的解读,最深刻的干货,最简洁的教程,众多你不知道的小技巧,尽在公众号:程序那些事!

评论

发布
暂无评论
密码学系列之:NIST和SHA算法