SHA-2
开发
SHA-2的第t个加密循环。图中的深蓝色方块是事先定义好的非线性函数。ABCDEFGH一开始分别是八个初始值,Kt是第t个密钥,Wt是本区块产生第t个word。原消息被切成固定长度的区块,对每一个区块,产生n个word(n视算法而定),通过重复运作循环n次对ABCDEFGH这八个工作区块循环加密。最后一次循环所产生的八段字符串合起来即是此区块对应到的散列字符串。若原消息包含数个区块,则最后还要将这些区块产生的散列字符串加以混合才能产生最后的散列字符串。
NIST发布了三个额外的SHA变体,这三个函数都将消息对应到更长的消息摘要。以它们的摘要长度(以比特计算)加在原名后面来命名:SHA-256,SHA-384和SHA-512。它们发布于2001年的FIPS PUB 180-2草稿中,随即通过审查和评论。包含SHA-1的FIPS PUB 180-2,于2002年以官方标准发布。2004年2月,发布了一次FIPS PUB 180-2的变更通知,加入了一个额外的变种SHA-224,这是为了匹配双密钥3DES所需的密钥长度而定义。
SHA-256和SHA-512是很新的散列函数,前者以定义一个word为32位,后者则定义一个word为64位。它们分别使用了不同的偏移量,或用不同的常数,然而,实际上二者结构是相同的,只在循环运行的次数上有所差异。SHA-224以及SHA-384则是前述二种散列函数的截短版,利用不同的初始值做计算。
这些新的散列函数并没有接受像SHA-1一样的公众密码社区做详细的检验,所以它们的密码安全性还不被大家广泛的信任。Gilbert和Handschuh在2003年曾对这些新变种作过一些研究,声称他们没有找到弱点。
算法
以下是SHA-256算法的伪代码。注意,64个word w[16..63]中的比特比起SHA-1算法,混合的程度大幅提升。
其中ch函数及maj函数可利用前述SHA-1的优化方式改写。
SHA-224和SHA-256基本上是相同的,除了:
h0到h7的初始值不同,以及
SHA-224输出时截掉h7的函数值。
SHA-512和SHA-256的结构相同,但:
SHA-512所有的数字都是64位,
SHA-512运行80次加密循环而非64次,
SHA-512初始值和常数拉长成64位,以及
二者比特的偏移量和循环位移量不同。
SHA-384和SHA-512基本上是相同的,除了:
h0到h7的初始值不同,以及
SHA-384输出时截掉h6和h7的函数值。
免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。
相关资料
展开- 有价值
- 一般般
- 没价值