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

ern*_*ern 7 asp.net security cryptography salt

已经有几个伟大关于盐的最佳做法的讨论,似乎铺天盖地的建议是生成每个密码不同的盐,并将其存储在旁边数据库中的密码.

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

Gle*_*len 16

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

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


Mal*_*ist 15

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

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

  • 如果你想要有很多乐趣,可以做两件事;)或者同时做两件事并将数据存储在数据库中,或者两者都存储,数据库中的第三个盐和第四个盐是d:D (2认同)

pjc*_*c50 8

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


Nic*_*son 7

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