首页 文章

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

提问于
浏览
9

我知道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)
}

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

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

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

谢谢!

5 回答

  • 0

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

    我所关联的文章提到了一些改善盐渍化的方法,其中包括关键的强化(http://en.wikipedia.org/wiki/Key_strengthening) .

  • 10

    没有什么能阻止攻击者猜测密码 .

    通过强制攻击者在每个用户(有效地,每个盐)的基础上散列字典来使盐更加困难 .

    为了提高安全性,可调谐哈希函数是您最好的选择 . 每次打哈乱时间,使字典攻击在攻击者可能拥有的任何硬件上都不切实际 .

    基本上,read this .

  • 1

    那是对的 . 如果有人获得了密码材料,字典攻击将是有效的 .

    为了防止这种情况:

    • 确保您的密码不受字典攻击 .

    • 确保您的密码文件(/etc/shadow)只能由root读取 .

  • 1

    如果没有盐,攻击者可以为他的词典中的每个单词生成哈希值,然后针对您的密码列表运行新的词典

    对于salt,每个密码都使用随机字符串进行哈希处理,因此即使使用先前的哈希字典知识,他仍然需要为数据库中的每个不同的盐重新创建一个包含盐的新哈希字典 .

    只需将dictionnaries表视为彩虹表的子集(小部分) . 虽然彩虹表可以包含数十亿个条目,但是字典包含“已知单词”,因此最多可能有几百万个条目 .

    彩虹表对盐失败的原因是因为重新创建过程将是“数十亿条目”的重新计算,而字典攻击仍然是“数百万条目” . 盐只会阻止预先计算的值

  • 4

    你的逻辑是合理的,但实际上,有足够的计算能力和时间,就没有针对字典/暴力攻击的保护 .

相关问题