我想问一个问题:如果网络用户选择了非常容易猜测的密码,加盐的效果如何。我已经阅读(并重新阅读)了以下网页,但我觉得我的理解仍然不是100%清晰。
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 是文件中包含的用户名和密码的数量。
现在,我了解到,为表中的每条记录引入唯一的盐会使黑客破解密码的难度增加了 n 倍。但是,如果网络用户天真地使用“password”或“dog”或“cat”作为密码怎么办?如果我正确理解 StackOverflow 的答案,则数据库表中每条记录的每个唯一盐都不会保密。成功攻破数据库的黑客可以轻松地获取单独的盐。这些盐的目的是减慢黑客的速度,因为黑客需要 n 个彩虹表而不是一个彩虹表。但是,如果某个 Web 用户的密码为 cat,并且该 Web 用户恰好是 10000 条记录的长表中的第一条或第二条或第三条记录,那么
$hash = sha512($salt.cat)
不会保护天真的网络用户免遭黑客攻击,不是吗?因为黑客知道盐,他可能会将盐附加或前置到一个简单的密码中,并且他会知道哈希值。然后他将使用彩虹表,网络用户的数据就会受到损害。我是否正确理解,网络用户在表中的记录的位置以及网络用户选择的密码的简单性,甚至可以破坏最巧妙的哈希,因为黑客可以访问盐?
最佳答案
你是对的,它不能防止糟糕的密码。
在拥有八 block AMD R9 290X显卡和hashcat的PC上,就可以破解 每秒 7.97 亿次 SHA512 哈希。
这使得根据一长串弱密码字典检查密码变得非常容易。
如果您将 PBKDF2 与 SHA512 和 20,000 次迭代一起使用,您仍然可以每秒管理 39000 个哈希,因此每个密码字典中出现的弱密码仍然存在风险。
最好强制用户不要使用标准字典中的密码。在该机器上暴力破解一个由 7 个字母组成的字母数字、非字典密码将需要 17 年时间。
祝您的用户使用安全密码一切顺利。 Dilbert reference :
关于hash - sha512 可以保护您免受极其简单的密码的侵害吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29100726/