我认为由于新技术(CPU更强大,GPU ......),用于加密密码的算法年复一年变得越来越弱,
因此;这是否意味着2006年注册的用户受到的保护程度低于2012年注册的用户?
然后;如何更新2006年该用户的密码? (例如雅虎,如果我从2006年开始注册,那么我的密码需要的时间比我2012年提供的密码少,所以雅虎将如何更新我的密码到新的强大系统?)
换句话说:如何从系统迁移到另一个系统(从MD5迁移到Bcrypt,例如现有的MD5哈希密码)
答案 0 :(得分:2)
有两个实际问题:
通过更改您在数据库中正常哈希和存储密码的方式来修复后者。每当用户以旧格式存储密码时登录,您就可以执行此操作。
第一个需要实际更改密码,您应该“强迫”用户经常更新密码,并在他们输入新密码时检查(或至少指示)密码强度。
另一种抵消增加的CPU功率的方法是在发生多次失败之后限制密码尝试次数,从而防止暴力破解密码。
总的来说,我认为大多数网站和系统都缺乏对密码存储的正确管理。
答案 1 :(得分:1)
如果您的散列方案只涉及重复散列当前值(1000次),那么您以后总是可以增加迭代次数(只是不减少它)。
您可以使用bcrypt作为迭代函数,这样您就可以获得两种方案的好处。
像这样:
var hash = bcrypt(pw, salt);
for N iterations:
hash = bcrypt(hash, salt)
您可以随时“追加”新的迭代。