为什么 8ms 是散列的目标?

信息安全 哈希 pbkdf2
2021-08-19 14:37:13

我目前正在用 PHP 开发一个小项目,因为它涉及用户身份验证,所以我一直在研究我有哪些关于散列的选项。我选择 PBKDF2 主要是因为它的迭代特性、哈希算法的灵活性和可扩展性。

我一直在阅读的是 8 毫秒(或 0.008 秒)是生成哈希的目标。为什么这个特定值是目标?我理解使生成哈希需要更多时间的原因,但为什么要专门用 8ms 呢?它只是花费时间和安全性之间的一个很好的平衡值,还是有更具体的原因?

理论

假设我有一台服务器可以使用 SHA256 进行 6400 次迭代,密钥长度为 6 个字符,盐长度为 X 个字符,密码长度为 Y 个字符,时间不到 9 毫秒。我不确定这是否是对我的“恐惧”,但我认为这还不够,主要是因为迭代次数低且密钥长度极短,尽管它已被盐渍化并与所有意图和散列目的是一种安全的算法。在专门用于“破解”哈希的系统上,我的系统上的 9 毫秒将大大减少。同样,这些值只是理论上的——不要过多地研究它们。

所以,假设我进行了 64000 次迭代,密钥长度为 60。这需要将近 90 毫秒的时间来计算,而且我认为这对于所有意图和目的都是安全的,因为它的迭代次数很高,它是输出密钥长度和生成所需的时间。

更重要的是,计算后一个哈希(与第一个相比)需要 10 倍的时间,尽管它在原始环境中运行时比“8ms 规则”要长约 91%,但无论它是在哪个系统上计算的。

那么,这个 8ms 的值最初是从哪里来的,究竟是基于什么推荐的呢?8ms 是基于您环境的计算时间,还是通过其他方式计算(例如通过在 GPU 上运行的专用哈希应用程序)?

8ms 推荐源#1

8ms 推荐源#2

2个回答

没有“8 毫秒规则”。Thomas Pornin(您的第一个链接)解释了一个方程式,该方程式在该示例中指出,对于 32 位密码质量和具有 200 倍于您的哈希系统的计算资源的攻击者专用于破解哈希将在一个月内完成任务如果你花了 8 毫秒来运行一个哈希。您需要调整有关密码强度、攻击者资源和资源投入的假设以满足您的需求。

好的,根据您提供的链接/来源:PKBDF2 迭代次数没有正确的具体值。

Thomas Pornin 在他的回答中指出,您可以进行一些粗略的计算,以估计在您将在系统中使用多少计算机能力、对用户进行身份验证以及攻击者愿意花费多少试图破解之间取得良好的平衡。它。

他在回答中使用的所有数字都是猜测:他假设任何攻击你的人都将拥有 100 台计算机,并且每台计算机的计算能力都是你的两倍。因此,要花一个月的时间尝试破坏您的系统,他的计算得出,您的系统中每个散列生成需要 8 毫秒,这意味着攻击者将花费整整一个月的时间进行暴力攻击。

您提到的另一个来源也是对第一个答案的参考。

那是一个目标吗?也许,如果你在他描述的场景中。

为什么要打扰 8 毫秒?因为它是一个开始的数字,因为该答案非常解释如何达到 8 毫秒。

如果您预计每秒的登录次数少于 125,您可以增加 PKBDF2 的迭代次数,并且更加安全……