2011-08-24 174 views
2

可能重复:
What is the purpose of salt?盐如何防止字典攻击?

我刚刚读了一些关于使用盐的,我一直在读的例子给出了加入盐的哈希之前的密码,以防止字典攻击。但是我真的不明白这有什么帮助 - 如果攻击者可以访问密码的散列(正如他们在我读过的例子中所做的那样),他们很可能也会访问salt 。 因此,在运行字典之前,攻击者是不是可以预先计算并将盐加到字典中的每个项目,以查看它是否与散列匹配?所以他们不得不遍历字典不止一次,这似乎不是一个保护增强?

回答

7

一个字典攻击是攻击下,攻击者需要密码,可能是由情形产生/概率有序的大名单,并应用算法为每次它,检查的结果。

如果密码被淹没,如果攻击者拥有盐(通常假定的),那么这种攻击仍然是可能的(并且成本不高):只需在算法中输入salt即可。

什么是盐保护,是彩虹桌。 A 彩虹表是一个包含明文对(例如密码)和相应散列对(通过散列排序)的表。给定散列,这样的表允许简单查找密码。

产生彩虹表是一个昂贵的步骤(取决于用作输入的字典的大小),但你可以使用它没有任何代价后来因为要查找尽可能多的密码。

由于盐可以防止这种情况发生,因为您现在需要每种盐的单独表格。即使使用简单的Unix密码的2字母盐,这已经是3,844的因素。现代密码哈希算法使用一个更大的盐(例如bcrypt使用128位的盐,它给出了2 的一个因素。)

为了防止字典攻击,同样,你将使用一个慢哈希算法,而不是像简单的MD5或SHA1/SHA2这样的快速算法。 Bcrypt就是这样一种算法(具有可配置的工作因子),同一作者后来提出了scrypt(这不仅需要很多时间,还需要大量内存,而攻击者往往没有处理能力那么多)。

+0

这是否意味着盐可能不是一个随机的字符串。例如,如果我存储用户密码,我可以使用用户名为salt目的:md5(密码+用户名)?这将防止彩虹桌,我可以通过不储存盐来保留一些空间。 – alexpods

+1

@alexpods这适用于某些攻击场景,但不适用于所有攻击场景 - 例如现在在不同的应用程序(网站)中使用相同的用户名 - 密码组合会产生相同的散列。 (另外,请不要使用任何东西的MD5。) –

+0

感谢您的回答! (md5我只用于实验目的)但是我还是不太明白:为了最好的安全性盐总是必须是随机的,或者不是。对于exapmle,我可以从用户名获得散列并迭代多次(伪代码):hash(密码+ iterate(1512,hash(username))。迭代计数特定于我的应用程序即使攻击者知道算法和迭代计数他是老公司的雇员,他被解雇了,想要报复他)他什么也做不了,至少这比用随机盐不安全,也许我错了?我的错误是什么? – alexpods

0

字典攻击是基于字典中的单词。通过添加一个随机盐,你不再有字典单词。因此,基于字典单词的密码哈希表将不会有助于破解密码。

+0

如果你知道字典的内容,并且你知道salt,那么附加到字典的salt就是一个新的字典,字典前缀的salt是另一个新的字典。因此,你现在知道两本字典没有?或者是有时散布在密码中的盐? – Gruntcakes

+1

对于UNIX系统上的/ etc/passwd,密码前面有两个字符。相同的两个字符存储在密码文件的值的开头。当用户设置密码时使用随机盐,因此“密码”变为“azPASSWORD”,散列值为(说)az12345。然后,当用户尝试登录时,输入“PASSWORD”,系统知道使用“az”作为盐。即使盐只有a-zA-Z0-9,你的字典仍然是(10 + 26 + 26)^ 2 = 3,844倍大。 –

+1

BiscutWoofington在正确的轨道上,Teddy的答案是错误的。你可以简单地修改你选择的破解引擎,实际上所有的都是开源的,可以附加salt值,你有魔力。腌制的目的是为了消除预先计算的彩虹表的威胁,可以快速搜索,现在我们生活在EC2和GPU并行化的时代,每个需要今天破解密码的人都可以这么做,但无论如何,它们都是可笑的。 –

5

1-您不能使用彩虹表破解哈希

2 - 如果两个用户具有相同的密码,如果腌制的哈希会有所不同(所以它很难赶上普通密码)

1

它通过增加密码文件中可能的答案数量来增加他们必须做的工作。

执行字典攻击的一种方法是扫描密码文件。如果没有盐,并且您看到“DFGE $%$%£TEW”,那么您知道密码是“PASSWORD”。加盐意味着你必须使用一个更大的字典,其中包含所有可能的盐类的“PASSWORD”的值,或者你必须花费精力读取盐分并加密,这会降低你的速度。它不再是一个简单的搜索。

在多个用户选择相同密码的情况下,盐也有帮助。尤其是在过去,所有用户都可以读取密码文件,但是如果其他用户使用的密码与您的密码相同,或者密码与您知道的密码相同,这种情况并不明显。

+0

你所描述的“字典”通常被称为“彩虹桌”。字典(用于字典攻击)仅仅是可能/可能密码的一长串列表(没有它们的哈希值)。你仍然可以使用这样的列表来攻击一个咸味的密码,它比彩虹桌面攻击慢得多(但仍然比蛮力更快)。 –

1

其实盐不能防止字典的攻击。它具有以下好处:

  1. 增加打破它的计算成本,因为对于攻击者的每个密码,攻击者需要尝试使用所有可能的盐进行哈希处理。
  2. 防止具有相同密码的两个用户也具有相同的散列。这样一来,即使在同一文件中存在相同的密码(密码的哈希总是不同),攻击者也必须明确地破解所有密码。
0

每个salt值都需要一个不同的字典,因此每个不使用盐的数据库都可能被同一个字典攻击。

  • 在没有任何盐的攻击者可以只使用一个现成的,货架 预先计算的字典,其中有很多。

  • 如果你的整个数据库有一个盐,那么他们需要 创建一个特定于你的数据库的字典。

  • 如果每个用户记录都有它自己的salt,现在他们需要为每个用户创建一个1 字典。