1

我想由于新技术(CPU更强大,GPU ...),用于加密密码的算法年复一年地变弱,

所以; 这是否意味着 2006 年注册的用户受到的保护低于 2012 年注册的用户?

然后; 如何更新该用户2006年的密码?(例如雅虎,如果我是从 2006 年开始注册的,那么我的密码破解时间比我在 2012 年输入的密码要短,那么雅虎将如何更新我的密码到新的强大系统?)

换句话说:如何从一个系统迁移到另一个系统(例如从 MD5 到 Bcrypt,对于现有的 MD5 哈希密码)

4

2 回答 2

2

有两个实际问题:

  • CPU功率增加,因此蛮力破解增加
  • 较旧的算法变得不那么安全

后者是通过更改您通常在数据库中散列和存储密码的方式来修复的。当用户的密码以旧格式存储时,您已经可以在每次用户登录时执行此操作。

第一个需要实际更改密码,您应该“强制”用户经常更新密码,并在输入新密码时检查(或至少表明)密码强度。

应对 CPU 功率增加的另一种方法是在多次失败后限制密码尝试次数,从而防止密码的暴力破解。

总的来说,尽管我认为大多数网站和系统都缺乏对密码存储的适当管理。

于 2012-12-14T11:13:43.507 回答
1

如果您的散列方案只涉及重复散列当前值(1000 次),那么您以后总是可以增加迭代次数(只是不要减少它)。

你可以使用 bcrypt 作为你的迭代函数,这样你就可以获得这两种方案的好处。

像这样:

var hash = bcrypt(pw, salt);
for N iterations:
 hash = bcrypt(hash, salt)

您可以随时“追加”未来的新迭代。

于 2012-12-14T11:26:08.457 回答