作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在考虑使用两个不同的盐字符串对用户密码进行哈希处理,一个存储在代码中,对于所有用户来说都是相同的,另一个存储在数据库中,每个用户都有自己的唯一值。
这比简单地将值存储在数据库中更有效吗?
任何建议,意见表示赞赏。
谢谢
最佳答案
即使有影响,效果也是微乎其微的。考虑到静态的硬编码盐只不过是对哈希算法的更改 - 它每次都以完全相同的方式发生,因此它也可以被视为算法的一部分。
但是盐的目的是创建一些随机性,类似于扩展密码的(最小)强度,目的是使离线破解(包括彩虹表)更加资源密集(非彩虹表破解)将需要更多的 CPU 时间,并且彩虹表将需要所有字符串的所有盐)。
从中获得任何值(value)的唯一方法是静态盐未知 - 相当于算法未知。如果攻击者可以使用您的二进制文件或源代码,那么逆向工程将演示算法和硬编码盐。
如果这个问题公开,您可能不得不面对许多安全爱好者的批评,他们认为任何不完美的东西都完全被破坏了,即使您的产品已经做了正确的事情,并且额外的步骤毫无用处。
当然,您必须处理静态盐的维护问题 - 散列代码的向后兼容性和错误修复可能会很痛苦。
静态 key (或盐)的微小好处根本不值得付出代价。始终使键和盐动态化。
关于passwords - 双盐用于散列密码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2065558/
我是一名优秀的程序员,十分优秀!