我正在考虑使用两个不同的salt字符串哈希用户密码,一个存储在代码中,对于所有用户都是相同的,另一个存储在数据库中,每个用户都有自己独特的值。
这比仅仅将值存储在数据库中更有效吗?
任何建议,意见相关。
由于
答案 0 :(得分:20)
如果有的话,效果微乎其微。考虑到静态的硬编码盐只能被视为对散列算法的改变 - 它每次都以完全相同的方式发生,所以它也可以被认为是算法的一部分。
但盐的目的是创建一些类似于扩展密码(最小)强度的随机性,目的是使离线破解(包括彩虹表)更加资源密集(非彩虹表破解)将需要更多的CPU时间,彩虹表将需要所有字符串的所有盐。)
从这里得到任何价值的唯一方法是静态盐未知 - 相当于算法未知。如果您的二进制文件或源代码可供攻击者使用,则逆向工程将演示算法和硬编码盐。
如果这个问题公之于众,你可能不得不面对许多安全爱好者的抨击,他们认为任何不完美的东西都会被彻底打破,即使你的产品已经做对了,而且额外的步骤也没用。 / p>
当然,你必须处理有静态盐的维护问题 - 向后兼容性和散列代码周围的错误修复可能会很痛苦。
静态键(或盐)的非常小的好处根本不值得花费。始终使钥匙和盐动态。