为什么盐化哈希密码会增加安全性?

时间:2011-12-21 21:12:13

标签: security salt

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

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

正如我所看到的,无论是否有散列,相同的密码都会成功验证您,因为使其不同的管道将在幕后进行。这就是为什么到目前为止我读过的文章都没有澄清过。

2 个答案:

答案 0 :(得分:4)

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

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

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

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

答案 1 :(得分:3)

Salted密码降低了rainbow table已包含盐渍密码哈希的可能性。