在代码而不是数据库中存储salt

时间:2009-05-18 16:20:41

标签: asp.net security cryptography salt

关于盐最佳做法的couplegreat讨论,似乎压倒性的建议是为每个密码生成不同的盐,并将其与密码一起存储在数据库中。< / p>

但是,如果我正确理解了盐的目的,那就是减少彩虹表攻击会让你受到损害的可能性。因此,我理解通过将其存储在数据库中,最好为每个用户更改它,但是如果盐不在数据库附近怎么办?如果我在代码中存储单个salt值(在Web服务器上将存储在已编译的dll中),如果攻击者以某种方式获得对数据库的访问权限,那么它是否会起到同样的作用?在我看来,它更安全。

5 个答案:

答案 0 :(得分:16)

盐的价值在于每个用户的不同之处。当您为了比较目的重新创建散列值时,还需要能够检索此非唯一值。

如果您存储了用于每个密码的单个salt值,那么您首先会大量减少使用salt的值。

答案 1 :(得分:15)

盐的目的是要求每个密码重新生成彩虹表。如果您使用单一盐,黑客/黑客只需要重新生成一次彩虹表,并且他拥有您所有的密码。但是如果你为每个用户生成一个随机的,他必须为每个用户生成一个。黑客部分的成本要高得多。这就是为什么你可以用纯文本存储一个盐,如果黑客知道它只要不止一个就没关系。

默默无闻的安全性并不好,微软告诉我们这一点。

答案 2 :(得分:8)

...直到攻击者获得对DLL的访问权限。

答案 3 :(得分:7)

除了其他答案之外,还值得注意的是,攻击者可以像找出密码一样找出你的盐:给定一个已知的密码(他自己的密码),他可以对可能进行暴力攻击盐

答案 4 :(得分:1)

我从盐中学到的教训是:分而治之(安全)

相关问题