密码的盐值应该存储在数据库的单独字段中吗?

6
我一直在研究如何为我正在开发的系统存储密码的最佳实践。到目前为止,我决定使用SHA512哈希和RNG生成盐来加密每个密码(显然是防止彩虹表等攻击的最佳做法)。
将密码分别存储在表中的两个不同字段中是否过于简单化了数据库中的密码表示(有一个PasswordHash字段和一个PasswordSalt字段)?这似乎是通过混淆来保证安全性,但我想把盐和密码哈希值合并到一个字段中存储,这样做会“有所帮助”吗?

+1 很好的问题,我在偶然间发现这个之前正在写我的自己的。 - James
2个回答

5

这并不是很重要。盐并不会泄露任何秘密,事实上,它有助于保守秘密。如果你想给数据库设计师朋友留下深刻印象,请将其保留在一个字段中。如果你想给优化朋友留下深刻印象,请将其与哈希值一起保存。这只是风格问题。

关于盐;为了防止彩虹表攻击,你可能需要将其长度设置得足够长:http://en.wikipedia.org/wiki/Rainbow_table#Defense_against_rainbow_tables


3

将其单独存储。

记住你要防范的是:有人获取了你的数据库副本,因此可以对字段执行彩虹表查找,如果没有加盐。

攻击者知不知道盐并不重要;这只是为了防止他使用预先生成的彩虹表。


我知道大致的想法,但不确定它是否真的必要。感谢您的意见。 - TheCloudlessSky
为了优化,把它们存储在同一个字段中肯定更好吧? - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接