2010-01-14 89 views
9

我正在考虑用两个不同的salt字符串对用户密码进行哈希处理,其中一个存储在所有用户都相同的代码中,另一个存储在数据库中,每个用户都有自己独特的值。用于散列密码的双盐?

这会比简单地将值存储在数据库中更有效吗?

任何意见,意见appreiated。

感谢

+0

这不是什么mathoverflow是:它的目的是非常不同的这个网站... – 2010-01-14 16:17:37

+0

@jldupont:它的安全性方面是非常计算机科学虽然:)。 – kennytm 2010-01-14 16:21:41

回答

19

效果显得非常渺小,如果任何事情。考虑一个静态的,硬编码的盐可以被看作是对哈希算法的改变 - 它每次都以完全相同的方式发生,所以它可能被认为是算法的一部分。

但是盐的目的是创建一些类似于扩展密码的(最小)强度的随机性,目的是使离线开裂(包括彩虹表)更耗费资源(非彩虹表破解将需要更多的CPU时间,而彩虹表将需要所有字符串的盐)。

只有这样,你才能从中得到任何值,而静态盐是未知的 - 相当于算法未知。如果您的二进制文件或源代码可供攻击者使用,则逆向工程将演示算法和硬编码盐。

如果这个问题公之于众,你可能不得不应对来自许多安全爱好者的信条,他们认为任何不完美的东西都会被彻底破坏,尽管你的产品已经做了正确的事情,而额外的步骤却毫无用处。

而且,当然,您将不得不面对维护问题 - 具有静态盐 - 向后兼容性以及哈希代码周围的错误修复可能会很痛苦。

静态键(或盐)的非常小的好处是不值得的成本。始终使钥匙和盐具有动态性。

+0

谢谢你,真的很有帮助! – Dan 2010-01-14 16:34:47