为什么选择SHA512而不是SHA384?

31

SHA384是SHA512的截断版本。但为什么有人会使用它?而且,如果SHA384和SHA512一样好,是否有理由使用512位的版本?

我打算使用其中一个算法来验证文件完整性,因此我主要关心碰撞安全性。

我很乐意听到任何人在实践中如何使用SHA2摘要以及为什么会选择其中一个版本。


3
SHA224是SHA256的截断版本。维基百科将SHA224列为“以匹配双重3DES密钥长度”。我找不到关于SHA384的说明,但我认为类似的情况可能存在。 - Mysticial
5个回答

31

SHA512、SHA256、SHA1和MD5易受长度扩展攻击的影响,而SHA224和SHA384则不易受该攻击的影响,因为其输出被缩减为内部状态,SHA3也不易受攻击。因此,在选择密码学抗碰撞哈希函数时,SHA512是一个不错的选择。


3
SHA512同样容易受到长度扩展攻击,只有SHA224和SHA384是不容易受到此类攻击的SHA-2系列算法。 - Marqin
尝试决定为新功能使用哪个SHA函数,这非常有帮助,谢谢。 - mmitchell

28

就实际目的和可预见的未来而言,SHA384和SHA512都足够用于几乎任何可以想象到需要碰撞抗性的应用程序。一般来说,当我们超过256位且碰撞防范对于实际目的来说是无限的时候,决定使用哪种哈希算法的主要因素只是您需要多少输出位数。例如,如果您需要哈希生成一个256位的HMAC密钥和一个128位的加密密钥,则SHA384是一个自然的选择。如果您需要尽可能多的输出,以换取计算成本,比如PRNG的输出或者随机填充,则使用SHA512是有意义的。


11

11

在Windows上,使用SHA512签名的证书似乎不能与TLS 1.2一起使用(请参见此处)。

因此,我将会重新创建证书链,使用SHA-384(或者我可以使用SHA-256)。

值得庆幸的是,我尚未发布任何证书,但链接页面中的帖子为那些被困在SHA-512中的人提供了解决方法/修复方法。

希望对您有所帮助!


1

我能想到使用SHA-384而不是SHA-512的唯一原因是因为数字签名需要。例如,如果您采用ECDSA-384签名,则需要384位哈希摘要,而不是512位。理想情况下,您可以从512位中丢弃任何128位。但接收端需要知道您丢弃了哪个128位。因此,SHA384和SHA512之间的唯一区别是定义您需要丢弃哪个128位。


1
SHA512容易受到长度扩展攻击,而SHA384则不会。[来源]这并不是公平的评论。此漏洞是由于不正确地使用SHA2而产生的。如果要将SHA2用于MAC功能,请遵循HMAC标准。如果遵循HMAC,所有SHA2算法,包括SHA2-224、256、384和512都可以使用。 - Ting Lu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接