盐渍SHA1与盐渍SHA512相比有多不安全

时间:2010-09-18 04:59:02

标签: php security hash sha1 sha512

SHA512比SHA1更复杂,但是使用SHA1对盐渍密码进行散列与使用512散列密码相比,我失去了多少安全性?就拥有数据库的人破解单个密码所需的时间而言。我使用的框架不能让我轻松访问SHA512,我必须覆盖一些东西以使其工作,所以我想只使用SHA1,虽然在过去我总是使用SHA512。

4 个答案:

答案 0 :(得分:13)

SHA-1目前已知的弱点不会影响您尝试执行的操作的安全性。从其散列版本恢复密码的不可能依赖于“原像素抗性”,据我们所知,这仍然是SHA-1完全不可行的。使用SHA-512,SHA-256甚至MD4或MD5也完全不可行。一个以科幻为导向的思想可以设想计算机能够在2050年左右找到MD4或MD5的预成像; SHA-1需要更长的时间。

现在碰巧虽然没有已知的在SHA-1上计算preimages的快捷方式,但也没有什么安全性证明。在数学词汇中,如果SHA-1中使用的压缩函数与“随机预言”无法区分,那么它对于预映像是安全的。但是SHA-1的已知弱点(理论上)导致了碰撞,也表明它的压缩函数不是一个随机的神谕。因此,SHA-1对抗preimages的安全性不再是“为什么它不破坏”说服的“有很好的数学原因”。它更像是“meh,还没有找到如何打破它”。

用更普通的话说,如果你使用SHA-1那么你可能需要证明自己是正确的。即使你没有做错任何事,你对SHA-1的选择也会受到质疑。而没有人会质疑使用SHA-256或SHA-512,即使它意味着一些开发开销。简而言之,使用SHA-1是糟糕的公共关系。

请注意,腌制与该问题完全正交。 Salting旨在防止对不同密码实例的攻击之间的成本共享。预先计算的表(包括所谓的“彩虹表”)是一种共享(表构建很昂贵但可以用来攻击2,10,10000个密码,每个受攻击密码的额外成本较低)。腌制失败分享。腌制很好。击败共享很重要,因为攻击一个密码是可能的:不是因为哈希函数,而是因为密码是适合人类大脑的东西,因此适合暴力(“字典攻击”)。对于与密码相关的任何内容,由于散列函数的弱点,您不会遇到问题,但是因为您首先使用密码。

答案 1 :(得分:5)

SHA1算法中存在安全漏洞的证据,可能会导致攻击。我建议使用SHA2的变体(SHA 256或SHA 512)。

至于需要多长时间才能破解存储在不同哈希值中的密码,很难说不知道攻击者的处理能力,密码有多长,如果他们使用彩虹表,那么随机性如何但是,如果算法有问题,它可能会导致更容易找到散列值的方法或等同于相同散列(称为碰撞)的不同值,就像这样的情况MD5。

(来源和更多信息:http://en.wikipedia.org/wiki/SHA-1

答案 2 :(得分:2)

如果你必须覆盖东西以获得除SHA1以外的任何东西,你必须平衡覆盖内容的复杂性(以及增加的错误机会)与算法强度。

如果您决定使用其他哈希算法,则应该查看BCrypt。它是一种适应性强的成本散列算法,设计为“尽可能慢”。与SHA512相比,这将使所需的开裂时间增加更多。 SHA512被设计为通用加密哈希,速度是设计目标之一。

SHA1中存在已知漏洞,但尚未发现原像攻击。因此,如果最重要的事情是困难的,那么通过生成高熵随机盐可能会更好。

话虽如此,使用最好的算法当然更好。

答案 3 :(得分:1)

SHA1和SH512是消息摘要,它们从不意味着是密码哈希(或密钥派生)功能。 (尽管消息摘要可以用作KDF的构建块,例如在带有HMAC-SHA1的PBKDF2中。)

密码散列函数应该防止字典攻击和彩虹表。

目前,唯一的标准(如NIST批准的)密码散列或密钥派生功能是PBKDF2。如果不需要使用标准,更好的选择是bcrypt和更新的scrypt。维基百科有所有三个功能的页面:

https://crackstation.net/hashing-security.htm页面包含对密码安全性的广泛讨论。