单个Salt是否提供任何额外的安全性?

时间:2014-07-10 17:20:50

标签: hash salt

我知道最好为您使用的每个密码生成一个长盐。但是,使用单一盐可以提供任何安全上的好处吗?

1 个答案:

答案 0 :(得分:2)

拥有共享盐可以让您更安全。它可以防止攻击者使用预先计算的彩虹表攻击,但它不会阻止他们为您的密码数据库构建一个新的彩虹表。因此,攻击者很难用给定的盐破解单个密码,但是用它来破解每个密码要容易得多。

例如,请考虑以下简化的密码,盐和哈希集:

Password  Salt     Hash
aaaaaz    y03sar   ze4lap
zzzzza    y03sar   enbe65

攻击者知道您的salt是y03sar并开始计算从azzzzzz的每个密码的每个哈希值。很久以前(在迭代方面,对于这种复杂性的密码和盐,实际的破解会很快完成)他们发现密码zzzzza,他们会发现他们也发现了密码aaaaaz。换句话说,在最糟糕的情况下,在数据库中强制使用一个密码并不比强制每个密码强大。

使用不同的盐,每个密码必须单独攻击。

Password  Salt     Hash
aaaaaz    bbq9f0   i2chf1
zzzzza    y03sar   enbe65

如果攻击者再次开始使用盐a计算从zzzzzzy03sar的每个密码的哈希值,那么i2chf1 将不会在他们的输出列表中(至少它是不可能的,具有合理的长度哈希输出;即使它是,盐[{1}}的计算密码仍然无法访问y03sar帐户,因为hash与salt aaaaaz)不同。

要在混合中添加一些数字,使用单个盐可以将攻击时间从瞬时(彩虹表提供对哈希摘要的恒定时间查找)延长到线性时间。一旦攻击者为您的系统允许的每个密码计算了哈希值,他们就可以访问系统中的每个帐户。即使您有16个字符的密码允许bbq9f0,您的整个系统也会在days or weeks中受到影响。 (链接的问题只是一个例子 - GPU可以比答案中的硬件更快地破解密码。)

现在,如果每个密码都有不同的盐,那么在攻击者破解整个数据库的同一时间内,他们只会破解一个密码。

这是一个非常大的差异。使用独特的盐。 (还有good hashing algorithm,而我们正在谈论这个话题。)