首页 > 汽车技术 > 正文

密码学基础: Hash函数SHA1、SHA2、SHA3科普

2024-08-07 08:20:39·  来源:汽车MCU软件设计  
 

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)


SHA512生成512位消息摘要,初始IV为:

(0x6A09E667F3BCC908),(0xBB67AE8584CAA73B),(0x3C6EF372FE94F82B),(0xA54FF53A5F1D36F1),(0x510E527FADE682D1),(0x9B05688C2B3E6C1F),(0x1F83D9ABFB41BD6B), (0x5BE0CD19137E2179)


SHA512_224生成224位消息摘要,初始IV为:

(8C3D37C819544DA2),(73E1996689DCD4D6),(1DFAB7AE32FF9C82),(679DD514582F9FCF),(0F6D2B697BD44DA8),(77E36F7304C48942),(3F9D85A86A1D36C8),(1112E6AD91D692A1)


SHA512_256生成256bit消息摘要,初始IV为:

(22312194FC2BF72C),(9F555FA3C84C64C2),(2393B86B6F53B151),(963877195940EABD),(96283EE2A88EFFE3),(BE5E1E2553863992),(2B0199FC2C85B8AA),(0EB72DDC81C52CA2)


以明文0x112233为例,SHA512、SHA512_224、SHA512_256的hash值分别为:



图片
图 2 基于SHA512 消息摘要



图片

图 3  基于SHA512_224 消息摘要



图片


图 4  基于SHA512_256 消息摘要


从上图可以看到,即使相同的数据,虽然同样是基于SHA512,但由于IV的不同,从而影响到了消息摘的生成。


4. SHA-3


SHA-3是NIST在2015年新发布的Hash函数标准,目标是为了从设计原理上与SHA2进行区分,从而提升安全性。该算法是有Keccak团队提出,具备与MD、SHA-1/2等迭代结构不一样的海绵结构,抵抗传统的碰撞攻击和第二原像攻击,如下:


图片

图 5 碰撞攻击和第二原象攻击


根据NIST.FIPS.202中描述,海绵结构如下所示:


图片

图 6 SHA-3海绵结构


同样的,SHA3也是一系列hash函数的统称,支持的算法包括:SHA3-224\256\384\512。


5. MD5


MD5全称MD5 Message-Digest算法,发布于1992年,作用是将任意长度的消息作为输入,并产生输入的128位“指纹”或“消息摘要”作为输出。与SHA-1类似,它也已经被碰撞攻击攻破,现目前基本已经弃用。


6. SM3


SM3全称ShangMi 3,是我们国家关于Hash函数的标准,可以将任意有限长度的数据,输出为消息摘要长度为256位的比特串,广泛用于数字签名、MAC生成等等。其初始向量为:

(7380166f),(4914b2b9),(1724422d7),(da8a0600),(a96f30bc),(163138aa),(e38dee4d),(b0fb0e4e)


7. 小结


选择哈希算法时,需要根据应用场景的安全需求、计算资源、兼容性和速度等因素进行综合考虑。


一般来说,对于大多数安全性要求较高的场景,SHA-2是一个不错的选择,尤其是SHA-256(例如生成比特币地址、确保交易完整),对于需要最高安全级别,可考虑SHA-3(如以太坊地址生成)。

分享到:
 
反对 0 举报 0 收藏 0 评论 0
沪ICP备11026620号