有没有推荐的方法将 MD5 哈希“升级”到安全的东西?

信息安全 密码 哈希 密码管理 md5 pbkdf2
2021-08-18 02:44:05

我目前正在处理几个包含 MD5 散列密码的用户帐户。这些帐户从旧系统迁移到我们当前使用 PBKDF2 进行密码散列的系统。我也想将旧帐户提升到 PBKDF2 密码散列。

破解我们自己的 MD5 散列并用 PBKDF2 重新散列它们是不可能的。

首先想到的是在登录时迁移用户密码,如此处所述

但是,我将永远无法迁移所有用户密码,因为某些用户可能永远不会返回,因此永远不会再次登录,这让我永远拥有不安全的哈希值。

所以剩下两个选择:

  1. 重置所有密码并通过电子邮件通知用户
  2. 使用 PBKDF2 再次对数据库中的 MD5 散列进行散列,并在“旧用户”登录时使用此双重散列。含义PBKDF2(MD5(plaintext))

第一个解决方案对用户来说真的很不愉快,因为他们必须设置一个新密码,所以我倾向于第二种解决方案。 似乎支持这种方法,虽然主要谈论 bcrypt 而不是 PBDKF2

将 MD5 包装在 PBKDF2(或者,就其价值而言,其他安全散列算法)中是否可以安全地完成,或者是否有更好的方法来处理旧的、不安全的 MD5 散列?

2个回答

是的,可以安全地完成双重哈希,立即为较旧的 MD5 哈希提供更多保护。

只需确保您可以将此类双重哈希与常规哈希区分开来,并尽快更新它们。两种哈希的验证过程应该不同,否则泄漏的md5哈希可以直接用作密码,试图在这个答案中解释它。

将 MD5 包装在 PBKDF2(或者,就其价值而言,其他安全散列算法)中是否可以安全地完成,或者是否有更好的方法来处理旧的、不安全的 MD5 散列?

是的,它是安全的。您不会在此过程中失去任何安全性。所有这些密码都将体验到与非 MD5 密码相同的保护,由 PBKDF2 提供——可以说添加了一些额外的(弱且几乎不相关的)md5“安全性”。

登录时,您可以“删除” md5 哈希,在没有 MD5 的情况下重新计算 PBKDF2 并在成功登录后存储它。这样你就不需要“永远”保持 md5 检查。