SHA384是SHA512的截断版本。但为什么有人会使用它?而且,如果SHA384和SHA512一样好,是否有理由使用512位的版本?
我打算使用其中一个算法来验证文件完整性,因此我主要关心碰撞安全性。
我很乐意听到任何人在实践中如何使用SHA2摘要以及为什么会选择其中一个版本。
SHA512、SHA256、SHA1和MD5易受长度扩展攻击的影响,而SHA224和SHA384则不易受该攻击的影响,因为其输出被缩减为内部状态,SHA3也不易受攻击。因此,在选择密码学抗碰撞哈希函数时,SHA512是一个不错的选择。
就实际目的和可预见的未来而言,SHA384和SHA512都足够用于几乎任何可以想象到需要碰撞抗性的应用程序。一般来说,当我们超过256位且碰撞防范对于实际目的来说是无限的时候,决定使用哪种哈希算法的主要因素只是您需要多少输出位数。例如,如果您需要哈希生成一个256位的HMAC密钥和一个128位的加密密钥,则SHA384是一个自然的选择。如果您需要尽可能多的输出,以换取计算成本,比如PRNG的输出或者随机填充,则使用SHA512是有意义的。
在Windows上,使用SHA512签名的证书似乎不能与TLS 1.2一起使用(请参见此处)。
因此,我将会重新创建证书链,使用SHA-384(或者我可以使用SHA-256)。
值得庆幸的是,我尚未发布任何证书,但链接页面中的帖子为那些被困在SHA-512中的人提供了解决方法/修复方法。
希望对您有所帮助!
我能想到使用SHA-384而不是SHA-512的唯一原因是因为数字签名需要。例如,如果您采用ECDSA-384签名,则需要384位哈希摘要,而不是512位。理想情况下,您可以从512位中丢弃任何128位。但接收端需要知道您丢弃了哪个128位。因此,SHA384和SHA512之间的唯一区别是定义您需要丢弃哪个128位。