1

来自 Wikipedia on Salt(密码学)

为每个密码随机生成一个新盐。在典型的设置中,盐和密码被连接起来并使用加密散列函数进行处理,结果输出(但不是原始密码)与盐一起存储在数据库中。

但是如果我没有离散数据库怎么办?是否可以使用密码的固有属性进行加盐,例如其反向?甚至(更好?)用密码的哈希值对密码进行加盐?例如:

md5(md5("password") + "password")

当然会有性能后果,但如果我使用的是低访问系统,这种加盐会显示任何漏洞吗?

同样,我考虑这样做的主要原因是为自己省去很多储存盐的麻烦。

4

2 回答 2

2

既然您必须将密码的哈希值和任何盐值存储在某处(否则,当需要进行身份验证时,您将如何进行比较),为什么不将它们存储在一起呢?

将盐和密码和盐的哈希结果存储在单个字段中的情况并不少见。可以在需要时通过使用具有恒定长度的盐或使用不属于盐中使用的字符集的分隔符将它们分开。

于 2014-01-06T02:31:04.440 回答
1

这种加盐会显示出任何漏洞吗?

是的。唯一盐的一个关键目的是确保选择相同密码的用户将具有不同的密码哈希。如果盐是作为密码的函数计算的,那么共享相同密码的用户也将共享相同的密码哈希。

使用哈希数据库,攻击者可以简单地找到多次出现的哈希。这样的密码很可能是暴力攻击的弱而有吸引力的目标。

如果您必须存储密码并且不能存储专用盐,更好的方法是使用与帐户关联的不变字段(例如,用户名或帐户标识符)作为盐。这种方法将防止您的数据库中出现重复的密码哈希。

于 2014-01-06T03:30:38.250 回答