我正在阅读一些有关密码哈希的内容。我见过 SHA-256 > MD5。
这让我思考应用程序如何处理从一种哈希函数到另一种哈希函数的变化。如果有人实现一个使用 MD5 对其密码进行哈希处理的应用程序,会发生什么情况。然后他们决定 SHA-256 是最佳选择。当然,存储在数据库中的密码哈希值是 MD5 格式的。
将数据库中的数据从一种哈希函数迁移到另一种哈希函数的过程是什么?
不可能对密码进行“散列”处理(至少不能以通用、高效且可靠的方式进行处理——您can猜测一些密码,这就是攻击者所做的,而您想要从 MD5 迁移正是因为攻击者可能会取得一些成功)。因此,迁移将随着时间的推移而分散:一些密码将使用 MD5 进行哈希处理,其他密码将使用 SHA-256 进行哈希处理。当需要验证密码时:
- 如果该密码的 SHA-256 已知,则使用 SHA-256。该密码已迁移。
- 否则,使用MD5来检查密码。如果匹配,则密码正确,and,由于当时应用程序知道密码,因此应用程序还使用 SHA-256 对密码进行哈希处理,并replacesMD5 哈希值与数据库中的 SHA-256 哈希值。
因此,密码是动态迁移的;要彻底摆脱MD5,您必须等待很长时间和/或销毁长时间未访问的帐户。您需要能够区分 MD5 哈希值和 SHA-256 哈希值,这很容易,因为它们具有不同的大小(MD5 为 16 字节,SHA-256 为 32 字节)。您还可以添加一面旗帜或任何其他类似的花招。
请注意从安全角度来看,使用哈希函数的原始单一应用程序对密码进行哈希处理是一种非常糟糕的方法,并且用 SHA-256 替换 MD5 不会真正改善情况。您对密码进行哈希处理,以便获得数据库读取访问权限的攻击者自己不会获知密码。到really为了防止攻击者猜测密码,您还需要“盐”(每个密码的随机数据,与散列密码一起存储)和适当的slow哈希函数(即数千个,可能数百万个嵌套哈希函数调用)。看这个答案 https://stackoverflow.com/questions/2772014/is-sha-1-secure-for-password-storage/2774744#2774744了解详情。简短的回答:既然您正在考虑迁移,那就做明智的事情并迁移到bcrypt http://en.wikipedia.org/wiki/Bcrypt,不是 SHA-256(请参阅那个答案 https://security.stackexchange.com/questions/4781/do-any-security-experts-recommend-bcrypt-for-password-storage/6415#6415在 security.stackexchange 上)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)