【发布时间】:2015-05-19 23:28:30
【问题描述】:
我想问一个问题,如果网络用户选择一个非常容易猜到的密码,加盐的效果如何。我已阅读(并重新阅读)以下网页,但我觉得我的理解仍然不是 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] .尝试[0])”,与条目 B 进行比较等。现在我有 n 倍的工作要做,其中 n 是文件中包含的用户名和密码的数量。
现在,我了解到为表中的每条记录引入唯一盐会使黑客破解密码的难度增加 n 倍。但是,如果网络用户天真到将“密码”或“狗”或“猫”作为他的密码怎么办?如果我正确理解 StackOverflow 的答案,则数据库表中每条记录的每个唯一盐都不会保密。设法破坏数据库的黑客可以轻松地单独使用盐。这些盐是为了减慢黑客的速度,因为黑客需要 n 个彩虹表而不是一个彩虹表。但是,如果一个网络用户有密码cat,并且这个网络用户恰好是10000条记录长表中的第一条或第二条或第三条记录,那么
$hash = sha512($salt.cat)
不会保护天真的网络用户免受黑客攻击,是吗?因为黑客知道salt,他可能会将salt附加或添加到一个简单的密码中,他会知道哈希值。然后他将使用彩虹表,并且网络用户的数据受到损害。我是否正确理解网络用户在表格中的记录的位置,以及网络用户选择密码的简单性,甚至可以破坏最巧妙的哈希,因为黑客可以访问盐?
【问题讨论】:
-
您链接的罗斯的答案以“...破解单个密码时公共盐不会使字典攻击更难...”开头。破解整个数据库的盐“减慢速度”。破解一个密码的成本(大约)保持不变,有或没有盐。
-
明白,谢谢!
-
正如你所说,盐只会阻止使用单个彩虹表一次获取所有密码,如果攻击者暴力破解单个密码,它也无济于事。为了阻止暴力破解,您需要一个具有成本因子的慢速哈希算法(BCrypt、SCrypt 或 PBKDF2)。然后仍然可以破解非常弱的密码,在某些情况下,如果您使用服务器端密钥加密密码哈希会有所帮助,如本文末尾tutorial 所述。