SHA-1对密码存储是否安全?

SHA-1对密码存储是否安全?

 SHA-1和preimage攻击一样安全,但它很容易计算,这意味着更容易安装暴力攻击或字典攻击。(对于像SHA-256这样的后继者也是如此。)根据具体情况,设计成计算成本高的哈希函数(例如bcrypt)可能是更好的选择。


有些人会像“SHA-1被打破”那样发表评论,所以我试图理解究竟是什么意思。假设我有一个SHA-1密码哈希的数据库,一个攻击者使用最先进的SHA-1破解算法和一个拥有100,000台机器的僵尸网络可以访问它。(控制超过10万台家用计算机意味着他们每秒可以完成大约10 ^ 15次操作。)他们需要多长时间

  1. 找出任何一个用户的密码?

  2. 找出给定用户的密码?

  3. 找出所有用户的密码?

  4. 找到一种以用户身份登录的方法?

  5. 找到以特定用户身份登录的方法?

如果密码被腌制,它会如何改变?腌制的方法(前缀,后缀,两者,还是像xor-ing这样复杂的东西)是否重要?

这是我目前的理解,经过一些谷歌搜索。如果我误解了某些内容,请在答案中更正。

  • 如果没有盐,彩虹攻击会立即找到所有密码(超长密码除外)。

  • 如果有足够长的随机盐,找出密码的最有效方法是暴力破解或字典攻击。碰撞和preimage攻击都没有找到实际密码的任何帮助,因此对SHA-1的加密攻击在这里没有帮助。使用什么算法甚至不重要 - 人们甚至可以使用MD5或MD4,密码也同样安全(因为计算SHA-1哈希的速度较慢)。

  • 为了评估“同样安全”的安全性,我们假设单个sha1运行需要1000次操作,密码包含大写,小写和数字(即60个字符)。这意味着攻击者每天可以测试10个15 * 60 * 60 * 24 / 1000~ = 10 17个潜在密码。对于暴力攻击,这意味着在3小时内测试最多9个字符的所有密码,一周最多10个字符,一年最多11个字符。(每增加一个字符需要花费60倍。)字典攻击速度要快得多(即使是一台计算机的攻击者也可以在几小时内完成它),但只能找到弱密码。

  • 要以用户身份登录,攻击者无需找到确切的密码; 它足以找到导致相同哈希的字符串。这被称为第一次原像攻击。据我所知,没有针对SHA-1的preimage攻击。(A暴力破解攻击需要2点160的操作,这意味着我们的理论,攻击者需要10 30年,把它关闭。的理论可能性的限制是大约2个60操作,在该攻击将需要几年的时间。)有原像攻击对抗缩减版本的SHA-1,效果可以忽略不计(对于使用44步而不是80步减少的SHA-1,攻击时间从2 160次操作减少到2 157次)。有针对SHA-1的碰撞攻击,这在理论上是可能的(我发现最好的时间从2 80减少到2 52),但是这些对密码哈希没用,即使没有腌制。

简而言之,使用SHA-1存储密码似乎非常安全。我错过了什么?


江户川乱折腾
浏览 962回答 3
3回答

当年话下

您的描述对于当前的技术水平来说听起来很准确。但是,您不应该使用任何散列函数的单次迭代:至少,您应该多次迭代(散列的1000次迭代会使攻击者的工作量增加1000倍。它会使您的工作量增加相同的数量,但是你做的密码哈希比他们少得多。)但是,理想情况下,您应该使用现有的密码存储原语,例如此处描述的那些。
打开App,查看更多内容
随时随地看视频慕课网APP