【问题标题】:Can sha512 protect you from an incredibly easy password?sha512 可以保护您免受极其简单的密码的侵害吗?
【发布时间】:2015-05-19 23:28:30
【问题描述】:

我想问一个问题,如果网络用户选择一个非常容易猜到的密码,加盐的效果如何。我已阅读(并重新阅读)以下网页,但我觉得我的理解仍然不是 100% 清楚。

Salt and passwords

How does password salt help against a rainbow table attack?

从上面的第二个 URL 可以找到以下内容(由用户“Ross”提供):

要理解第一个,想象一个包含数百个用户名和密码的密码文件。如果没有盐,我可以计算“md5(attempt[0])”,然后扫描文件以查看该哈希是否出现在任何地方。如果存在盐,那么我必须计算“md5(salt[a] .attempt[0])”,与条目 A 进行比较,然后计算“md5(salt[b] .尝试[0])”,与条目 B 进行比较等。现在我有 n 倍的工作要做,其中 n 是文件中包含的用户名和密码的数量。

现在,我了解到为表中的每条记录引入唯一盐会使黑客破解密码的难度增加 n 倍。但是,如果网络用户天真到将“密码”或“狗”或“猫”作为他的密码怎么办?如果我正确理解 StackOverflow 的答案,则数据库表中每条记录的每个唯一盐都不会保密。设法破坏数据库的黑客可以轻松地单独使用盐。这些盐是为了减慢黑客的速度,因为黑客需要 n 个彩虹表而不是一个彩虹表。但是,如果一个网络用户有密码cat,并且这个网络用户恰好是10000条记录长表中的第一条或第二条或第三条记录,那么

               $hash = sha512($salt.cat)

不会保护天真的网络用户免受黑客攻击,是吗?因为黑客知道salt,他可能会将salt附加或添加到一个简单的密码中,他会知道哈希值。然后他将使用彩虹表,并且网络用户的数据受到损害。我是否正确理解网络用户在表格中的记录的位置,以及网络用户选择密码的简单性,甚至可以破坏最巧妙的哈希,因为黑客可以访问盐?

【问题讨论】:

  • 您链接的罗斯的答案以“...破解单个密码时公共盐不会使字典攻击更难...”开头。破解整个数据库的盐“减慢速度”。破解一个密码的成本(大约)保持不变,有或没有盐。
  • 明白,谢谢!
  • 正如你所说,盐只会阻止使用单个彩虹表一次获取所有密码,如果攻击者暴力破解单个密码,它也无济于事。为了阻止暴力破解,您需要一个具有成本因子的慢速哈希算法(BCrypt、SCrypt 或 PBKDF2)。然后仍然可以破解非常弱的密码,在某些情况下,如果您使用服务器端密钥加密密码哈希会有所帮助,如本文末尾tutorial 所述。

标签: hash salt sha512


【解决方案1】:

你是对的,它不能防止糟糕的密码。

在装有八块 AMD R9 290X 显卡和 hashcat 的 PC 上,你可以破解 每秒 7.97 亿次 SHA512 哈希。

这使得非常可以很容易地对照一长串弱密码来检查密码。

如果您使用带有 SHA512 和 20,000 次迭代的 PBKDF2,您仍然可以管理每秒 39000 次哈希,因此出现在每个密码字典中的弱密码仍然存在风险。

最好强制用户不要使用标准字典中的密码。在这台机器上暴力破解单个 7 个字母数字、非字典密码将需要 17 年时间。

祝您的用户使用安全密码好运。 Dilbert reference:

【讨论】:

  • 如果非常简单的密码是“admin”或“password”。实际上,所有应用程序都需要一种相对有效的密码检查方式。因此,所有密码散列/加密方法都可以以大约不比用户登录速度慢的速度“反复试验”攻击!加盐使彩虹表和哈希表的使用变得更加困难。但遗憾的是,密码需要变得越来越复杂。我们已经处于大多数人可以记住的极限。我们需要更普遍的 2 因子系统 - 快速。
  • 丹,谢谢。 (我同意。ATM 的两步验证非常可靠,所以在输入密码之前,人们可能需要为笔记本电脑安装少量智能卡)。
  • Neuhaus -- 哦,是的,我总是忘记这样做。我刚刚接受了你的回答。非常感谢!
【解决方案2】:

给定一个散列密码数据库,可以通过以下方式破解密码:(1) 获取所有可能密码的字典 (2) 为每个可能的密码生成哈希 (3) 将给定数据库中的每个哈希与您刚刚使用的所有哈希相匹配生成。

所以,cost-of-cracking-one-password = cost-of-generating-all-hashes + cost-of-matching-all-hashes

=> cost-of-cracking-1000-passwords = 1000 x cost-of-cracking-one-password 或者看起来如此。但是,

如果没有盐,那么cost-of-generating-all-hashes 是恒定的,只需要执行一次。然后我们可以说cost-of-cracking-the-whole-database 与cost-of-cracking-one-password 大致相同。由此我们看到,在没有盐的情况下,如果黑客掌握了密码数据库,那么黑客肯定会去破解整个数据库,而不是针对任何单个条目。这样他肯定会得到至少几个正确的哈希值。

Salt 被引入来防止这种行为。现在对于具有 1000 个加盐哈希的数据库,cost-of-cracking-1000-passwords = 1000 x cost-of-cracking-one-password。请注意,即使这样 cost-of-cracking-one-password 仍然与之前的 cost-of-generating-all-hashes + cost-of-matching-all-hashes 相同。

TLDR;

Salting 不会保护个人密码。相反,它是对黑客主动破解整个数据库的威慑。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    相关资源
    最近更新 更多