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