盐值加密的SHA1相对于盐值加密的SHA512有多不安全?

8

SHA1已经完全不安全,应该被替换。

这个问题已经有8年之久,时代已经变化:https://arstechnica.com/information-technology/2017/02/at-deaths-door-for-years-widely-used-sha1-function-is-now-dead/

对于密码: https://en.wikipedia.org/wiki/PBKDF2

对于数据:SHA3


SHA512比SHA1更复杂,但是如果我使用带盐的SHA1哈希一个密码,相比使用512哈希,我会失去多少安全性? 就某个拥有数据库的人破解单个密码所需的时间而言。我正在使用一个框架,它不方便让我使用SHA512,我需要覆盖一些东西才能使其工作,所以我想只使用SHA1,尽管过去我总是使用SHA512。


这是所有可以想象的差异。你真正需要关心的唯一事情是盐。 - Your Common Sense
SHA512和SHA1之间的区别是可以想象的。在我看来,没有人能够破解它们,甚至包括MD5。因此,在现实生活中,这些算法都可以忽略不计。但是,如果没有盐值,所有的哈希值都同样容易受到预先计算的“彩虹”表(字符串=哈希值)查找攻击。因此,懒惰的密码将在几秒钟内被恢复,无论使用什么哈希算法。因此,盐值比特定的哈希算法更重要。 - Your Common Sense
4个回答

13
目前已知的SHA-1弱点不会影响您正在尝试做的安全性。从哈希值中无法恢复密码依赖于“预镜像抗性”,就我们所知,SHA-1的预镜像抗性仍然完全不可行。甚至MD4或MD5也是完全不可行的,同样适用于SHA-512和SHA-256。一颗科幻迷的头脑可能会设想计算机在2050年左右达到了发现MD4或MD5预映象的能力;而对于SHA-1则需要更长时间。
现在有一个事实,即虽然没有已知的计算SHA-1预映象的捷径,但其安全性证明也很少。以数学的话来说,如果SHA-1中使用的压缩函数与“随机预言机”无法区分,则针对预映象的安全性是可以保证的。 但是, SHA-1已知的弱点(理论上)导致碰撞,也表明其压缩功能不是随机预言机。因此,SHA-1针对预映像的安全性不再属于“有充分的数学原因为什么它不能被破解”的说法。它更像是“嗯,还没找到如何破解它”的类型。
换句话说,如果您使用SHA-1,则可能必须为自己辩护。即使您没有做错任何事情,您选择SHA-1也会受到质疑。而即使它意味着一些开发开销,也没有人会质疑使用SHA-256或SHA-512。简而言之,使用SHA-1会对公共关系产生不良影响。

请注意,盐值完全与此问题无关。盐值旨在防止攻击不同密码实例的成本共享。预先计算的表格(包括所谓的“彩虹表”)是一种共享(建立表格很昂贵,但可以用于攻击2、10、10000个密码,每攻击一个密码的额外成本很小)。盐值能够破坏共享,因此盐值是有益的。破坏共享很重要,因为攻击一个密码是可能的:这并不是由于哈希函数,而是因为密码是适合人类大脑记忆的东西,因此可以使用暴力破解(“字典攻击”)。对于任何密码相关的事情,您将不会因为哈希函数的弱点而遇到问题,而是因为您首先使用了密码。


5
有证据证明SHA1算法存在安全漏洞,可能会导致攻击。我建议使用SHA2的变体(SHA 256或SHA 512)。
至于破解存储在不同哈希中的密码需要多长时间,很难说,因为不知道攻击者的处理能力、密码长度、是否使用彩虹表、盐值有多随机等等。然而,如果算法存在问题,可能会导致更容易找到散列值或等效于同一散列的不同值(称为碰撞),这就是MD5的情况。
(来源和更多信息:http://en.wikipedia.org/wiki/SHA-1

2
如果你必须覆盖某些内容才能使用除SHA1之外的其他算法,那么你需要权衡覆盖内容的复杂性(以及错误增加的可能性)与算法强度。如果你决定采用另一种哈希算法,你应该考虑使用BCrypt。它是一种可调节成本的哈希算法,旨在“尽可能慢”。这将比SHA512提供更大的破解时间。SHA512被设计为通用的加密哈希函数,其中速度是设计目标之一。虽然SHA1存在已知漏洞,但尚未发现预像攻击。因此,如果覆盖内容很困难,你最好生成高熵的随机盐。当然,使用最佳可用算法肯定是更好的选择。

BCrypt哈希已经包含在PHP核心中,版本大于等于5.3.0,您可以通过使用正确的盐格式,通过PHP的crypt();函数来使用它。 - Jacco

1
SHA1和SH512是消息摘要,它们从未被设计为密码哈希(或密钥派生)函数。(尽管消息摘要可以用作KDF的构建块,例如在使用HMAC-SHA1的PBKDF2中。)
密码哈希函数应该防止字典攻击和彩虹表攻击。
目前,唯一的标准(即NIST认可的)密码哈希或密钥派生函数是PBKDF2。如果不需要使用标准,则更好的选择是bcrypt和较新的scrypt。维基百科有这三个函数的页面:

这个页面https://crackstation.net/hashing-security.htm详细讨论了密码安全问题。


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