我可以通过使用Scrypt或PBKDF2 HMACSHA256对现有MD5哈希进行盐析并对结果进行哈希来提高MD5哈希密码的安全性吗?

jps*_*ook 5 security md5 password-encryption pbkdf2 scrypt

我有一个使用MD5进行盐渍和散列的旧密码数据库.我想更新系统,以便数据更安全.

第一种选择是在用户登录并在一段时间后停用旧用户时将用户转换为新的哈希方案(Salt + Scrypt或PBKDF2 HMACSHA256),这样他们就必须使用密码恢复功能,该功能会自动更新其哈希值.

允许我立即升级所有人的另一个选项是采用现有的MD5哈希值,为每个哈希值添加一个新的随机盐值,然后使用新的哈希方案(Salt + Scrypt或PBKDF2 HMACSHA256)对结果进行哈希并存储该值到数据库并删除旧值.

然后当用户登录时,我将不得不应用旧方法,然后应用新方法.我更喜欢第二个选项,因为它允许我尽早从数据库中删除所有旧的不安全哈希.

盐和重现现有的哈希是否安全?MD5是如此破碎,以至于我可以运行脚本来解密密码并使用新方案重新散列它们吗?

或者最好的解决方案是两种方案的组合?这样我就不必在数据库中保留现有的MD5哈希不安全状态,我可以将用户迁移到新系统一段时间吗?

Fre*_*Ben 5

MD5并没有那么破碎,你可以轻松解除所有密码的散列,但假设密码的质量不是很好,那么你可能会强制它们并将它们转换为新的,更安全的格式.MD5的破碎是由于它相对较小的长度(更多的碰撞表面)和计算上简单的计算(意味着暴力攻击比具有更大运行时复杂度的算法(如SHA2)更可行)

如果我是你,我会做你列出的两种方法(因为正如你所提到的,如果你的数据库遭到黑客攻击,快速移动密码很重要).首先,我会强制所有暴力强制MD5密码并将它们转换为新格式.我在过去做过这个,到目前为止,最好的结果是使用HashCat(Cuda或OCL风味,因为他们使用GPU并且速度提高了200倍).如果Hashcat太难(学习曲线可能很陡峭),那么试试John the Ripper.它比HashCat慢很多,但使用起来要容易得多.

对于无法破解的密码,请使用户的帐户过期并让他们重置密码.或者为了更好用户,只需在下次登录时通过发送两个哈希值将数据库中的密码更新为新格式.如果MD5签出,则销毁它并用新格式替换它.这些只是一些想法.

编辑:

忘了提一下,如果你想将MD5密码散列为新的格式,这种格式在安全性方面会很好,尽管它会给代码增加另一层复杂性,而且复杂性存在实施缺陷的空间.只是想一想.