目录
1.消息摘要(Hash)
2.SHA-1
3.SHA-2
4.小结
1.消息摘要(Hash)
Hash函数是一种单向密码体制,把任意长度的输入经过变换得到一个固定长度的输出,同时它还具备单向性,只能从明文到密文,不能逆向,正是由于Hash函数的单向性和输出长度固定的特性,使得其广泛应用在数据完整性验证和数字签名等领域。
常见Hash函数基本采用迭代结构,接收输入消息M,将其拆分为n个固定长度分组,如果最后一个数据块不满足要求,则需进行填充;该算法重复使用压缩函数f,进行计算得到最终输出,如下图所示:
图 1 Hash函数过程
常见的函数包含SHA-1、SHA-2家族、SHA-3家族、MD5、SM3等。
2.SHA-1
SHA全称Secure HASH Algorithm,由NIST开发;SHA-1于1995年进行修订发布,要求输入最大长度2^64 -1位数据,输出固定160位消息摘要,处理过程按照512位数据块进行分组。
SHA1的IV设定方法为十六进制数(0-F),每两个数构成一个字节,其中A(32bit数)顺时针0-7,B顺时针8-F,C逆时针F-8,D逆时针7-0,E取C3\D2\E1\F0,因此固定为:
(0x67452301U), (0xEFCDAB89U), (0x98BADCFEU), (0x10325476U),(0xC3D2E1F0U)
不过,在2017年,研究人员成功实施了对SHA-1算法的碰撞攻击,找到了两个不同的消息,但具有相同的SHA-1散列值。这引发了对SHA-1安全性的担忧,因为碰撞攻击可能导致数字签名和其他安全机制的破坏,因此在应用中不建议使用该算法。
3.SHA-2
SHA-2是一系列Hash函数的统称,其中包括SHA-224\256\384\512等,区别主要在于函数内部结果和生成的摘要值长度,SHA-512还有另外变体为SHA512_224、SHA512_256,主要是基于SHA512产生的摘要值进行截断,与SHA512区别在于IV和输出长度不一致。
其中,SHA-224\256分组大小为512位,SHA-384, SHA-512, SHA-512/224和SHA-512/256分组大小为1024bit。
SHA-224生成224位消息摘要,初始IV为:
(0xC1059ED8U),(0x367CD507U),(0x3070DD17U),(0xF70E5939U),
(0xFFC00B31U),(0x68581511U),(0x64F98FA7U),(0xBEFA4FA4U)
SHA-256生成256位消息摘要,初始IV(取自然界前8个素数平方根小数部分前32位)为:
(0x6A09E667U),(0xBB67AE85U),(0x3C6EF372U),(0xA54FF53AU),
(0x510E527FU),(0x9B05688CU),(0x1F83D9ABU),(0x5BE0CD19U)
SHA384生成384位消息摘要,初始IV为:
(0xCBBB9D5DC1059ED8),(0x629A292A367CD507),
(0x9159015A3070DD17), (0x152FECD8F70E5939),
(0x67332667FFC00B31), (0x8EB44A8768581511),
(0xDB0C2E0D64F98FA7), (0x47B5481DBEFA4FA4)
4.小结
这里我们先就将基础的SHA1\2讲解了,接下来我们继续聊SHA-3、SHA2变体SHA512_224\256等。