为什么对散列密码加盐会提高安全性?

Gig*_*igi 3 security salt

我一直在做一些关于在数据库中安全存储密码的研究。通常建议您使用盐。正如Secure hash and salt for PHP passwords中的一个答案所解释的那样,这会更改哈希值,使密码更难以破解。

作为验证机制的一部分,用户输入的密码与盐结合并根据需要进行散列。鉴于盐对用户是透明的,使用盐如何提供任何额外的好处?

在我看来,无论有没有散列,相同的密码都将成功验证您的身份,因为使其与众不同的管道将在幕后进行。这就是为什么到目前为止我读过的文章都没有澄清事情的原因。

Raj*_*ula 5

考虑一个场景,您接受来自用户的密码,然后通过网络发送密码或以纯文本形式存储在数据库中。

如果您的用户输入密码,请说 6-8 个字符长。黑客可能会为所有可能的 6-8 个字符长度的字符串预先生成哈希值,并且他可以通过将其与您的哈希值进行比较来推断出密码。(将您的哈希值与所有预先生成的哈希值进行匹配,他可以获得一组可能的候选者,如果发生碰撞)

但是,如果您在他的纯文本密码中添加 30 个字符的盐,然后对其进行哈希处理。任何黑客都很难预先生成该范围的所有可能组合。这就是我们使用盐的主要原因。

出于安全考虑,您不能限制每个用户输入 30 个字符长的密码。如果任何用户选择 4 个字符长度的密码,只需添加 30 个字符的盐,使其更安全。