security - 散列和加盐的密码是否可以防止字典攻击?

标签 security authentication hash salt

我知道,盐使相同的密码哈希值不同。但是,盐通常与密码一起存储在数据库中。因此,假设我是攻击者,这就是我可能会如何对盐使用字典攻击(请注意,在本示例中,为了简洁起见,我不会写出128位哈希或盐):

user_pw = 'blowfish'

Given:
email = 'blah@blah.com'
hash = '1234567890'
salt = '0987654321'

function attack(){
  for each(word in dictionary)
    md5( word * salt ) == hash ? cracked_one(email, word)
}

我知道这可以防止黑客使用Rainbow表...但是似乎并不能阻止字典攻击。我猜您可以在哈希算法中添加其他内容,但是出于安全性考虑,我们必须假定攻击方法是已知的。

因此,盐析似乎阻止了黑客弄清楚哪些密码很可能是字典密码(多个用户拥有的密码),并防止了rainbow攻击……但并不能阻止字典攻击。

这是正确的分析吗?有什么更好的安全建议吗?

谢谢!

最佳答案

Salt不能阻止字典攻击,而只能阻止预先计算的字典攻击。特别是,它可以防止彩虹表(http://en.wikipedia.org/wiki/Rainbow_table)并确保破解一个用户的密码不会自动让您破解共享该密码的任何用户。

我链接到的文章提到了一些改进的方法,包括增强关键性(http://en.wikipedia.org/wiki/Key_strengthening)。

关于security - 散列和加盐的密码是否可以防止字典攻击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1111494/

相关文章:

azure - 无法从 AAD 获取不记名 token 来使用 Web API

用于登录的身份验证过滤器和 servlet

javascript - 在 JavaScript 中计算文件的 SHA-256 哈希值和 B64

c++ - 散列图像(一系列 rgb 字节)

ruby-on-rails - params.merge 和跨站脚本

android - 每次用户返回 Android 应用程序时都需要登录

javascript - 通过 HTTPS 在 AJAX 调用中返回 HTML 内容的风险

security - 备份至云端

windows-phone-7 - 不使用 pin 的 Twitter 身份验证

javascript - 无需 JavaScript 的安全用户身份验证