如何为用户更新密码系统?

时间:2012-12-09 10:20:52

标签: passwords cryptography

我认为由于新技术(CPU更强大,GPU ......),用于加密密码的算法年复一年变得越来越弱,

因此;这是否意味着2006年注册的用户受到的保护程度低于2012年注册的用户?

然后;如何更新2006年该用户的密码? (例如雅虎,如果我从2006年开始注册,那么我的密码需要的时间比我2012年提供的密码少,所以雅虎将如何更新我的密码到新的强大系统?)

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

2 个答案:

答案 0 :(得分:2)

有两个实际问题:

  • CPU功率增加,因此强力开裂增加
  • 较旧的算法安全性较低

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

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

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

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

答案 1 :(得分:1)

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

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

像这样:

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

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