我刚刚读了一些关于盐的使用的文章,我一直在阅读的例子给出了在散列之前为密码添加盐以防止字典攻击的问题。
但是我真的没有看到它有多大帮助 - 如果攻击者可以访问密码的哈希值(正如我在阅读的例子中那样),他们很可能也可以访问盐。 因此,在运行字典之前,攻击者是否只能将salt添加到字典中的每个项目之前并将其后置,以查看它是否与哈希匹配?所以他们不得不多次遍历字典,这似乎不是一个保护增强?
答案 0 :(得分:8)
字典攻击是一种攻击,其中攻击者获取大量密码,可能按可能性/概率排序,并为每个密码应用算法,检查结果。
如果使用盐渍密码,如果攻击者有盐(通常假设的话),这样的攻击仍然可能(而且费用不高):只需在算法中输入盐。
盐是什么防护,是彩虹表。 彩虹表是一个包含明文对(例如密码)和相应散列的表,按散列排序。在给定散列的情况下,这样的表允许简单地查找密码。
生成彩虹表是一个代价高昂的步骤(取决于用作输入的字典的大小),但是您可以在不需要任何费用的情况下使用它来查找所需数量的密码。
由于盐可以防止这种情况发生,因为现在每个盐都需要一个单独的表。即使使用简单的Unix crypt的2个字母的盐,这已经是3,844的因素了。现代密码哈希算法使用更大的盐(例如,bcrypt使用128位盐,其因子为2 128 。)
为防止字典攻击,您还将使用慢哈希算法,而不是简单的MD5或SHA1 / SHA2等快速算法。 Bcrypt就是这样一种算法(具有可配置的工作因子),同一作者后来提出了scrypt(这不仅花费了很多时间,而且还需要大量内存,攻击者通常没有处理能力那么多)。 / p>
答案 1 :(得分:5)
1-你不能使用彩虹表来破解哈希
2-如果两个用户拥有相同的密码,那么如果加盐,哈希会有所不同(因此很难捕获常用密码)
答案 2 :(得分:1)
通过增加密码文件中可能的答案数量,它确实增加了他们必须完成的工作。
进行字典攻击的一种方法是扫描密码文件。如果没有盐,你看到“DFGE $%$%£TEW”,那么你知道密码是“PASSWORD”。添加盐意味着您必须使用包含所有可能盐的“密码”的所有值的更大的字典,或者您必须花费精力读取盐并进行加密,这会降低您的速度。它不再是简单的搜索。
Salt还可以帮助多个用户选择相同密码的情况。特别是在过去所有用户都可以读取密码文件的情况下,如果其他用户拥有与您相同的密码,或者密码与您所知的密码相同,则不会显而易见。
答案 3 :(得分:1)
实际上盐不能防止字典攻击。它有以下好处:
答案 4 :(得分:0)
字典攻击基于字典中的单词。通过添加随机盐,您不再拥有字典单词。因此,基于字典单词的密码哈希表对破解密码没有帮助。
答案 5 :(得分:0)
每个salt值都需要不同的字典,因此每个不使用salt的数据库都可以使用相同的字典进行攻击。
没有任何盐,攻击者可以使用现成的 预先计算好的字典,其中有很多。
如果您的整个数据库都有一个盐,那么他们需要 创建一个特定于您的数据库的字典。
如果每个用户记录都有自己的盐,那么现在需要创建1 每个用户的字典。