什么是盐预防黑客的情况,需要的不仅仅是'暴力'?

时间:2016-05-04 22:49:05

标签: php security passwords salt

我已经阅读了几个关于盐和密码管理的stackoverflow问题和注释,但可能太多,因为我没有得到它或看到价值。

我的基本理解是,它们可以防止彩虹表,但是,当盐可见并与数据库/密码一起存储时,访问pwds的攻击者是否只能删除盐并运行彩虹表?

我理解盐应该是对抗蛮力的帮助,但是从哪里来,这是什么情景?是来自某人试图模仿用户登录,可能是1000的时间,比如从您的登录表单?但对于无效尝试的基本限制或验证码,这是不是可以减轻?

换句话说,对我来说,盐是如此公开地存储似乎是一种常态建议,当一个能够访问pwds的攻击者也能获得盐并且可以在对着彩虹表运行之前查看并删除。

具体来说我正在使用PHP并且正在使用password_hash()和password_verify()。

我已经读过这张票,但仍然不太清楚: How does password salt help against a rainbow table attack?

引用答案: “彩虹表攻击总是需要/ etc / passwd(或者使用任何密码数据库),或者你如何比较彩虹表中的哈希值与实际密码的哈希值?

至于目的:让我们说攻击者想为10万个常用英语单词和典型密码(想想“秘密”)建立一个彩虹表。如果没有盐,她将不得不预先计算100,000个哈希值。即使使用2个字符的传统UNIX盐(每个都是64个选项中的一个:[a-zA-Z0-9./]),她也必须计算和存储4,096,000,000个哈希值......这是一个很大的改进。“

好的,但是如果他们可以对pwds进行ping操作,那么他们就不能访问salt了,为什么他们在这一点上使用像password_verify()这样的东西就像在用户时一样容易登录?

引用接受的回答:“破解单个密码时公共盐不会使字典攻击变得更难。正如您所指出的,攻击者可以同时访问散列密码和盐,因此在运行字典攻击时,她在尝试破解密码时可以简单地使用已知的盐。“

我在想一个简单的循环可行吗?或者,为什么不呢?也许这是我真正的问题?

此外,对于其他任何看到谁来到这里的人,我发现这个问题比我的问题被标记为重复的问题更为贴切,但似乎仍然不完整: Where do you store your salt strings?

非常感谢任何帮助清除我的雾。

最后注意:完成了更多的研究和一些测试并得出结论,每个pwd随机腌制并使用密码哈希公开存储盐,如同使用php password_hash / verify一样,确实减慢了攻击者破解pwds的能力,但没有达到通常在上面提到的另一个问题中提到的回答中指出,即使是基本的2字符盐强迫4,096,000,000次计算的好处与仅提到的100,000个普通pwds相比。

我的问题是,这种比较似乎没有意义,因为攻击者必须真正做到的是通过password_verify运行100,000个常见密码并且当验证返回true时移动到下一个。

慢?是的但是,在很大程度上取决于你的'成本'设置,就像我在边缘虚拟机vm设置(2处理器4069mb,90%上限,2015 Macbook Pro主机)上的测试一样,使用10的成本(通常推荐的设置)100循环password_verify花了8秒钟,确实大约增加了14个成本,但这个设置与攻击者所拥有的相比毫无结果。

另一种说法,令人困惑,我认为根据攻击者为所有盐选项选择彩虹表的核选项时,我认为他们似乎需要做的事情和他们一样的事情都是不准确的。只是添加运行通过密码验证为他们最喜欢的纯文本密码列表,他们没有关心盐或甚至成本和哈希,如果他们有一些时间。如果您的用户的帐户具有任何价值,那么攻击者可能就有时间。但是,在这一点上,我不确定还能做什么,所以继续前进,可能会接受盐,直到我学会了更好的方法。

0 个答案:

没有答案