我知道盐将相同的密码散列到不同的值。但是,盐通常与密码一起存储在数据库中。所以假设我是攻击者,这就是我如何使用字典攻击来攻击盐(注意在这个例子中,为了简洁起见,我没有写出 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)
}
我知道这可以防止黑客使用彩虹表......但似乎并不能防止字典攻击。我想您可以在哈希算法中添加其他内容,但出于安全考虑,我们必须假设攻击方法是已知的。
因此,加盐似乎可以防止黑客找出哪些密码可能是字典密码(多个用户拥有的密码)并防止彩虹攻击......但不能防止字典攻击。
这是正确的分析吗?有什么更好的安全建议吗?
谢谢!