我在考虑用两个不同的salt字符串来散列用户密码,一个存储在代码中,对所有用户都是相同的,另一个存储在数据库中,每个用户都有自己的唯一值。
这是否比简单地将值存储在数据库中更有效?
任何建议和意见都可以提出来。
谢谢
发布于 2010-01-15 00:25:09
如果有什么影响的话,那也是微不足道的。考虑到静态的、硬编码的salt可以看作是对散列算法的一种改变-它每次都以完全相同的方式发生,因此它也可以被认为是算法的一部分。
但salt的目的是创建一些随机性,类似于扩展密码的(最小)强度,以便使离线破解(包括彩虹表)更加资源密集型(非彩虹表破解将需要更多的CPU时间,并且彩虹表将需要所有字符串的所有盐)。
你从中得到任何值的唯一方法是在静态盐未知的情况下-等同于算法是未知的。如果您的二进制文件或源代码对攻击者可用,则反向工程将演示算法和硬编码的salt。
如果这个问题公之于众,你可能不得不处理来自许多安全爱好者的抨击,他们认为任何不完美的东西都是完全坏的,即使你的产品已经做了正确的事情,额外的步骤只是无用的。
当然,您还必须处理具有静态盐的维护问题-向后兼容性和围绕散列代码的bug修复可能是一件痛苦的事情。
静态键(或盐)的极小好处根本不值得为此付出代价。始终使键和盐具有动态性。
https://stackoverflow.com/questions/2065558
复制相似问题