密码盐如何增加安全性

3
我试图理解密码盐如何提高安全性。基本上,对于每个用户密码,都会生成一个随机字符串,将其添加到密码中,然后进行哈希。当用户登录时,系统会获取该特定用户的盐值,将其添加到密码中,再次哈希并与存储的哈希值进行比较。
现在,我了解到这使得密码/哈希值变得更长。但我不明白的是,什么阻止自动化函数选择用户名,并在例如网站上进行大量登录尝试,每次使用不同的密码。对我来说,盐在这种情况下似乎没有任何功能?
我相信我已经误解了这个问题,如果有人能帮助我理解就好了。

我已经阅读了那个,但它并没有回答我的问题。 - nivis
你说得对,已经移除了。 - spydon
3个回答

9
我不理解的是,自动化功能阻碍了什么来选择用户名并在例如网站上进行许多登录尝试,每次使用不同的密码。对我来说,在这种情况下盐没有任何作用?
正确。哈希和盐不会防止暴力登录尝试。(为此,您想要限制每个时间单位内的登录尝试次数,或在X次失败尝试后禁止登录)。
哈希和盐用于防止窃取的密码列表被破解(或增加破解所需的时间)。
存储密码时,有三个选项:明文、哈希或哈希+盐。如果我窃取了您的密码列表:
  • 普通文本:我现在有所有用户的登录详细信息。我可以冒充他们。(这很糟糕)。
  • 哈希:我可以使用彩虹表相对较快地确定哈希值的密码。(这也很糟糕)。
  • 哈希+盐:现在彩虹表不起作用了。我必须花费更多的时间来破解每个密码。它仍然是可能的,但要困难得多(而且,除非你真的很重要,否则我可能不会费心)。请注意,这也给您时间注意到安全漏洞并通知您的客户他们的密码已被盗,并要求他们更改密码(因此,即使我最终破解了哈希+盐列表,我也无法使用它)。

因此:哈希+盐用于防止(或减缓)使用暴力方法从被盗哈希值中破解密码的尝试。


那就是我一直在寻找的答案。我卡在了思考盐如何帮助我增加登录安全性的问题上。谢谢! - nivis
为了提高登录安全性,可以参考这里的防范措施。尽管分布式僵尸网络登录很普遍,禁止单个IP可能不如限制登录尝试次数有效。在登录和凭证存储方面,始终要采取深度防御策略。 :) - simont
谢谢,我会确保去了解一下! - nivis
2
@simont是从数据库中获取的密码列表吗?如果是,那么有什么措施可以防止攻击者获取相关的盐值呢? - Thomas

2

盐值被用来减少在哈希算法中使用暴力破解的风险。如果你的密码“无盐”,那么攻击者可以轻易地使用一个包含100万个哈希值的字典对你的数据库进行攻击(字典攻击)。盐值是一个随机序列,它会在生成哈希之前与你的密码连接。你的数据库会保存盐值和哈希值。如果你选择足够多的盐值,那么暴力破解将变得更加困难,因为攻击者不得不针对他的密码字典生成每一个可能的盐值组合。


1
例如,像MD5这样的哈希算法已不再有用,因为存在具有完全自由散列的数据库,因此如果有人获取到您的哈希密码(没有盐),他们可以搜索并找到该哈希单词。如果您添加盐,那么这将变得更加困难。但这只会减慢黑客的速度。如果他们能够访问您的代码,则盐也无济于事。但始终要添加一些盐,这是好的。 数据库中数据的安全性

那么如果攻击者知道我们的哈希函数(通过获取我们的代码),盐对此没有任何作用? - Hieu Doan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接