Jac*_*cco 25 security password-protection password-hash
我被要求对Intranet站点实施一些更改/更新; 让它成为'未来证明',因为他们称之为.
我们发现使用MD5算法对密码进行哈希处理.(该系统自2001年以来一直存在,因此它足够了).
我们现在想要将散列算法升级为更强的算法(BCrypt-hash或SHA-256).
我们显然不知道明文密码,为用户群创建新密码不是一个选项*).
所以,我的问题是:
在没有访问明文密码的情况下,更改散列算法的可接受方法是什么?
最好的解决方案是完全"幕后"的解决方案.
*) 我们尝试了; 试图说服他们,我们使用了"密码时代"的论点,试图用咖啡贿赂他们,试图用蛋糕贿赂他们等等.但这不是一种选择.
更新
我希望有一些解决问题的自动解决方案,但显然除了'等待用户登录,然后转换'之外没有其他选择.
好吧,至少现在我现在没有其他解决方案可用.
小智 30
首先,向DB添加一个字段,以确定密码是使用MD5还是新算法.
对于仍在使用MD5的所有密码:
- 在登录过程中,您验证用户输入的密码:暂时将用户提交的密码存储在内存中(此处没有安全问题,因为它已经存储在内存中)并执行常用的MD5哈希并与存储的哈希进行比较;
- 如果给出了正确的密码(与现有哈希匹配),则通过新算法运行临时存储的密码,存储该值,更新新字段以识别此密码已更新为新算法.
(当然,您只需将新算法用于任何新用户/新密码.)
我不完全确定这个选项,因为我不是加密专家.如果我在这里错了,请纠正我!
我认为Dave P.显然是最好的选择.
......但是.有一个自动化的解决方案 - 哈希老哈希自己.也就是说,获取当前哈希值,并使用更强大的算法再次哈希它们.请注意,据我所知,这里没有从哈希长度获得任何额外的安全性,只增加了新算法的加密复杂性.
当然,问题是检查密码必须经过两个哈希.而且你也必须为evey新密码做同样的事情.这是非常愚蠢的.除非你想使用像Dave P.这样的类似方案解释最终用新哈希算法重新使用单哈希密码...在这种情况下,为什么甚至打扰这个呢?(当然,你可以在一个华而不实的"改进所有密码的安全性,立即应用!"中使用它 - 在演示公司服装的方式,相对直面...)
不过,它是一个可以立即应用于所有当前密码的选项,无需任何逐步迁移阶段.
但男孩,哦,男孩,有人会笑着看看以后的代码!:)