我试图了解密码盐如何提高安全性。基本上,对于每个用户密码,都会生成一个随机字符串,将其添加到密码中,然后进行散列处理。当用户登录时,系统会为该特定用户获取盐,将其添加到密码、散列并与存储的散列值进行比较。
现在。我了解这如何使密码/哈希值更长。我不明白是什么阻碍了自动功能选择用户名并且只是在 - 例如 - 一个网站上进行大量登录尝试,每次都使用不同的密码。在我看来,盐在那种情况下似乎没有作用?
我很确定我误解了这一点,如果有人能帮助我理解,我会很高兴。
我试图了解密码盐如何提高安全性。基本上,对于每个用户密码,都会生成一个随机字符串,将其添加到密码中,然后进行散列处理。当用户登录时,系统会为该特定用户获取盐,将其添加到密码、散列并与存储的散列值进行比较。
现在。我了解这如何使密码/哈希值更长。我不明白是什么阻碍了自动功能选择用户名并且只是在 - 例如 - 一个网站上进行大量登录尝试,每次都使用不同的密码。在我看来,盐在那种情况下似乎没有作用?
我很确定我误解了这一点,如果有人能帮助我理解,我会很高兴。
我不明白是什么阻碍了自动功能选择用户名并且只是在 - 例如 - 一个网站上进行大量登录尝试,每次都使用不同的密码。在我看来,盐在那种情况下似乎没有作用?
正确的。散列和加盐并不能防止暴力登录尝试。(为此,您希望限制每单位时间的登录尝试次数,或在 X 次尝试失败后禁止)。
散列和加盐用于防止被盗密码列表被破解(或增加破解所述列表所需的时间)。
存储密码时,您有 3 个选项:纯文本、散列或散列+加盐。如果我窃取了您的密码列表:
所以:散列+加盐用于防止(或减慢)尝试使用蛮力方法从被盗散列中破解密码。
盐用于减少对哈希使用蛮力攻击的威胁。如果您的密码是“未加盐的”,则可以轻松使用包含 100 万个哈希值的字典,然后针对您的数据库运行它们(字典攻击)。Salt是一个随机序列,在生成哈希之前与您的密码连接。然后,您的数据库会保存盐和散列。如果您选择足够高的可能盐的数量,那么蛮力攻击将相当难以执行,因为攻击者必须结合他的密码字典生成所有可能的盐。
例如,像 MD5 这样的散列算法不再有用,因为有些数据库具有完全的自由散列,所以如果有人可以访问你的散列密码(没有加盐)。他们可以搜索并找到哈希的那个词。如果你加盐就很难做到。但这只会减慢黑客的速度。如果他们可以访问您的代码,那么盐将无济于事。但总是加点盐就好了。