我正在考虑使用两个不同的盐字符串对用户密码进行哈希处理,一个存储在对所有用户都相同的代码中,另一个存储在数据库中,每个用户都有自己的唯一值。
这会比简单地将值存储在数据库中更有效吗?
任何建议,意见appreiated。
谢谢
如果有的话,效果是微乎其微的。考虑到静态的硬编码盐只不过是对散列算法的一种改变——它每次都以完全相同的方式发生,所以它也可以被视为算法的一部分。
但是盐的目的是创造一些类似于扩展密码的(最小)强度的随机性,目的是使离线破解(包括彩虹表)更加资源密集(非彩虹表破解将需要更多CPU 时间和彩虹表将需要所有字符串的所有盐)。
从中获得任何价值的唯一方法是在静态盐未知的情况下 - 相当于算法未知。如果您的二进制文件或源代码可供攻击者使用,则逆向工程将演示算法和硬编码盐。
如果这个问题被公开,你可能不得不面对许多安全爱好者的批评,他们认为任何不完美的东西都会被彻底破坏,即使你的产品已经做了正确的事情并且额外的步骤只是无用的。
而且,当然,您将不得不处理使用静态盐的维护问题 - 围绕哈希代码的向后兼容性和错误修复可能会很痛苦。
静态键(或盐)的微小好处根本不值得付出代价。始终使键和盐动态化。