2

我试图了解密码盐如何提高安全性。基本上,对于每个用户密码,都会生成一个随机字符串,将其添加到密码中,然后进行散列处理。当用户登录时,系统会为该特定用户获取盐,将其添加到密码、散列并与存储的散列值进行比较。

现在。我了解这如何使密码/哈希值更长。我不明白是什么阻碍了自动功能选择用户名并且只是在 - 例如 - 一个网站上进行大量登录尝试,每次都使用不同的密码。在我看来,盐在那种情况下似乎没有作用?

我很确定我误解了这一点,如果有人能帮助我理解,我会很高兴。

4

3 回答 3

9

我不明白是什么阻碍了自动功能选择用户名并且只是在 - 例如 - 一个网站上进行大量登录尝试,每次都使用不同的密码。在我看来,盐在那种情况下似乎没有作用?

正确的。散列和加盐并不能防止暴力登录尝试。(为此,您希望限制每单位时间的登录尝试次数,或在 X 次尝试失败后禁止)。

散列和加盐用于防止被盗密码列表被破解(或增加破解所述列表所需的时间)。

存储密码时,您有 3 个选项:纯文本、散列或散列+加盐。如果我窃取了您的密码列表:

  • 纯文本:我现在拥有所有用户的登录详细信息。我可以模仿他们。(那很糟)。
  • 散列:我可以使用彩虹表从散列中合理快速地确定密码。(这也很糟糕)。
  • Hashed + salted:现在彩虹表不起作用。我必须花费更多的时间来破解每个密码。这仍然是可能的,但要困难得多(而且,除非你真的很重要,否则我可能不会打扰)。请注意,这也让您有时间注意到安全漏洞并通知您的客户他们的密码被盗,并要求他们更改密码(所以即使我最终破解了哈希+加盐列表,我也无法使用它)。

所以:散列+加盐用于防止(或减慢)尝试使用蛮力方法从被盗散列中破解密码。

于 2013-11-13T10:50:49.927 回答
2

盐用于减少对哈希使用蛮力攻击的威胁。如果您的密码是“未加盐的”,则可以轻松使用包含 100 万个哈希值的字典,然后针对您的数据库运行它们(字典攻击)。Salt是一个随机序列,在生成哈希之前与您的密码连接。然后,您的数据库会保存盐和散列。如果您选择足够高的可能盐的数量,那么蛮力攻击将相当难以执行,因为攻击者必须结合他的密码字典生成所有可能的盐。

于 2013-11-13T10:27:12.300 回答
1

例如,像 MD5 这样的散列算法不再有用,因为有些数据库具有完全的自由散列,所以如果有人可以访问你的散列密码(没有加盐)。他们可以搜索并找到哈希的那个词。如果你加盐就很难做到。但这只会减慢黑客的速度。如果他们可以访问您的代码,那么盐将无济于事。但总是加点盐就好了。

数据库中数据的安全性

于 2013-11-13T10:24:36.437 回答