Hash 一种盐能提供额外的安全性吗?

Hash 一种盐能提供额外的安全性吗?,hash,salt,Hash,Salt,我知道最好的做法是为您使用的每个密码生成一个长的salt。但是,使用一种盐是否会因为根本没有盐而带来任何安全好处 共享一份盐会让你更加安全。它可以防止攻击者使用预先计算的彩虹表攻击,但不能阻止他们为您的密码数据库构建一个新的彩虹表。因此,攻击者很难用给定的salt破解单个密码,但他们用该salt破解每个密码要容易得多 作为一个例子,考虑以下简化的密码、盐和散列集合: Password Salt Hash aaaaaz y03sar ze4lap zzzzza y03sa

我知道最好的做法是为您使用的每个密码生成一个长的salt。但是,使用一种盐是否会因为根本没有盐而带来任何安全好处

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

作为一个例子,考虑以下简化的密码、盐和散列集合:

Password  Salt     Hash
aaaaaz    y03sar   ze4lap
zzzzza    y03sar   enbe65
攻击者知道您的salt是
y03sar
,并开始计算从
a
zzzzzz
的每个密码的每个哈希值。早在他们发现密码
zzzzzzz a
之前(就迭代而言,对于这种复杂的密码和盐来说,实际破解将很快完成),他们就会意识到他们也发现了密码
aaaaa z
。换句话说,在最坏的情况下,在数据库中强制输入一个密码并不比强制输入每个密码更难

对于不同的密码,必须分别攻击每个密码

Password  Salt     Hash
aaaaaz    bbq9f0   i2chf1
zzzzza    y03sar   enbe65
如果攻击者再次开始使用salt
y03sar
为从
a
zzzzzz
的每个密码计算哈希值,则
i2chf1
将不在其输出列表中(至少对于合理长度的散列输出是不可能的;即使是这样,salt
y03sar
的计算密码仍然无法访问
aaaaa z
帐户,因为散列与salt
bbq9f0
不同)

要在混合中添加一些数字,使用一个salt会从瞬间延长攻击时间(rainbow表提供哈希摘要上的恒定时间查找)到线性时间。一旦攻击者计算出您系统允许的每个密码的哈希值,他们就可以访问您系统中的每个帐户。即使您有允许
[a-zA-Z0-9]
的16个字符的密码,那么您的整个系统也会受到攻击。(链接问题只是一个例子——GPU破解密码的速度甚至比答案中的硬件还要快。)

现在,如果每个密码都有不同的密码,那么在攻击者破解整个数据库所花费的时间相同的情况下,他们只破解了一个密码

这是一个相当大的区别。使用独特的盐。(和a,当我们讨论这个话题时。)