【问题标题】:how to update a cryptosystem for users? [closed]如何为用户更新密码系统? [关闭]
【发布时间】:2012-12-09 10:20:51
【问题描述】:

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

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

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

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

【问题讨论】:

  • StackOverflow 是错误的地方。问题可能是 2006 年的密码比最近的密码弱,只是因为它更短。您可以将所有密码更改为 >12 个字符的长度,其中包含一些非字母字符。
  • 你不转换它。您要求您的用户更改密码(或更改您自己的密码),使用新的实现。如果它很容易兑换,那首先就意味着它非常不安全。
  • 为什么不在 MD5 哈希上运行 BCrypt?因此,不是存储 MD5(salt | password),而是存储 BCrypt(MD5(salt | password))。更新密码将是一次性操作。编辑:@AbdelouahabPp - 这些密码是用于生成加密密钥,还是用于登录?
  • 否 --- 您也将所有 FUTURE 密码存储为 BCrypt(MD5(salt | password)。然后只需检查此值。

标签: passwords cryptography


【解决方案1】:

实际存在两个问题:

  • CPU 功率增加,因此暴力破解增加
  • 旧算法的安全性降低

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

第一个要求实际更改密码,您应该“强制”用户每隔一段时间更新他们的密码,并在他们输入新密码时检查(或至少表明)密码强度。

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

虽然我认为大多数网站和系统都缺乏对密码存储的适当管理。

【讨论】:

  • 谢谢 :) 我认为这将是唯一的解决方案:例如,强制用户在 1 年后更新密码,这将使摩尔定律减少两倍,并且可以清理被遗弃的帐户。顺便说一句:SCrypt 可以很好地随时间扩展,您只需指定最大时间,因此您添加的 RAM+CPU 越多,密码就越复杂!
【解决方案2】:

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

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

像这样:

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

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

【讨论】:

  • 谢谢,问题是关于老用户的,在SCrypt中你可以指定最大时间,所以它可以很好地符合摩尔定律,但是如何更新老用户:'(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多