sha512 可以保护您免受极其简单的密码的侵害吗?

Can sha512 protect you from an incredibly easy password?

我想问一个问题,如果网络用户选择一个非常容易猜到的密码,加盐的效果如何。我已经阅读(并重新阅读)了以下网页,但我觉得我的理解仍然不是 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] . attempt[0])",与条目 B 进行比较,等等。现在我有 n 倍的工作要做,其中 n 是文件中包含的用户名和密码数。

现在,我了解到 table 中的每条记录都引入了唯一的加盐值,这使得黑客破解密码的难度增加了 n 倍。但是,如果 Web 用户天真到将 "password" 或 "dog" 或 "cat" 作为他的密码怎么办?如果我正确理解 Whosebug 的答案,数据库中每条记录的每个唯一盐 table 都不会保密。设法破坏数据库的黑客可以轻松地分离盐。盐是为了减慢黑客的速度,因为黑客需要 n 条彩虹 table 而不是一条彩虹 table。但是,如果网络用户的密码为 cat,并且该网络用户恰好是 10000 条记录中的第一条或第二条或第三条记录table,则

               $hash = sha512($salt.cat)

不会保护天真的网络用户免受黑客攻击,对吗?因为黑客知道盐分,他可能会将盐分附加或添加到一个简单的密码中,他就会知道散列值。然后他将使用彩虹 table 并泄露网络用户的数据。我是否理解 table 中网络用户记录的位置以及网络用户选择的密码的简单性,甚至可以破坏最巧妙的散列,因为黑客可以访问盐?

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

在八块AM​​D R9 290X显卡和hashcat的PC上破解 每秒 7.97 亿个 SHA512 哈希值。

这使得 非常 可以很容易地根据一长串弱密码字典来检查密码。

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

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

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

给定一个哈希密码数据库,可以通过以下方式破解密码:(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-databasecost-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;

加盐不保护个人密码。而是对黑客主动破解整个数据库的威慑。