哈希和盐渍密码是否可以抵御字典攻击?

Ton*_*ony 9 security authentication hash salt

我知道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)
}
Run Code Online (Sandbox Code Playgroud)

据我所知,这可以防止黑客使用彩虹表......但似乎并没有阻止字典攻击.我想你可以在哈希算法中添加其他东西,但是在安全性的情况下我们必须假设攻击方法是已知的.

因此,盐腌似乎可以防止黑客弄清楚哪些密码可能是字典密码(多个用户拥有的密码)并防止彩虹攻击......但不会阻止字典攻击.

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

谢谢!

Ste*_*dit 10

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

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

  • 不是个人,但http://project-rainbowcrack.com/table.htm说你不需要自己做:你可以下载他们自己的.更糟糕的是,这些破解者正在利用NVidia Cuda GPU加速他们的努力.这些彩虹表是巨大的,即使按照现代标准,所以将它们乘以4G(32位)就足以使甚至存储每个可能的彩虹表完全不可行,忘记了发电成本. (2认同)