没有确切的答案,原因如下:
蛮力
我们从 128 位对称密钥开始。假设算法(例如 AES)还没有被破坏,我们必须看看功耗。假设 100% 高效的计算设备,其技术远远超过任何计算机、ASIC、图形卡或其他您可以想象的破解密钥设备,那么只需翻转比特就可以计算出这么高的最低能量要求。维基百科为我们做了数学计算,结果表明,对于 128 位密钥,物理学所需的最低能量需求约为 10 18焦耳,或 30 吉瓦一年。显然,对于“真正的”硬件,要求将是几十万倍;超过了整个世界的能源生产。因此,这远远超出了任何现有陆地物体的能力。
但如果我们转向 256 位密钥,数学就会变得更加严重。Schneier 在 Applied Cryptography 中对此进行了数学计算,之前已在此处讨论过。为了避免重复的细节让你厌烦,我将简单地得出结论:我们的太阳没有产生足够的能量来完成这项任务。
理论上的可逆计算(量子计算机可能实现)可以将有效位长度减少一半,使这样的项目仅仅超出任何现有能力的范围,而不是完全超出物理学的范围。但这都是学术性的。
要点是:无法强制使用大小合理的对称密钥。不是你,不是任何人。
等效回合
那么,PBKDF2有多少轮呢?如果攻击者必须在等待 10 年以完成密钥推导与围绕太阳构建戴森球体之间做出选择,那么 PBKDF2 路线仍然更快。从任何实际的衡量标准来看,为您的密钥派生增加更多时间意味着为攻击增加更多时间,并且在任何时候尝试暴力破解密钥都不会成为一种选择(除非 PBKDF2 路线还需要外星建设项目)。
那么,等值点在哪里呢?暴力破解 PBKDF2 何时需要整个 Dyson Sphere 设置?答案是:视情况而定。看,在你的攻击中使用散列过程而不是猜测密钥本身的重点是让你尝试更少的密码。如果您知道密码是“monkey”或“123456”,那么您宁愿只猜测两次,而不是尝试在顺序扫描中碰巧找到正确的哈希值。
所以答案取决于攻击者在攻击中使用的字典的大小。如果他知道正确的密码,那么他只猜一次。因此,蛮力攻击所花费的时间与正确登录的时间完全相同。不管你做多久。如果他希望在两次猜测中得到它,那么他的蛮力将花费您正确登录时间的两倍。如果他有一本 100 字的字典要尝试,那么正好是你正确登录的 100 倍,如果你的密码不在他的字典上,那么他永远不会成功。
一些实用数学
所以为了保证他的暴力攻击是不可能的,你还必须保证你的成功登录是不可能的,因为你必须考虑到你的密码是他名单上唯一候选者的可能性。
另一方面,如果您想获得一个合理的平均值,只需进行一些简单的除法即可。假设您希望暴力攻击需要 1 万亿年。假设我们的密码是 14 个字母数字字符(所以 10 25中有 1 个)。假设他的字典都是字母数字密码,那就是在 10 12年(短规模万亿)内猜测 10 25次密码,或每年 10 13次猜测,或每秒大约 316900 次猜测。这是一个完整的列表。有些密码会先猜,有些密码会最后猜,我们可能关心的是平均值,而不是最大值,所以让我们将猜测率降低一半。每秒大约 150000 次猜测使我们在相同的时间内完成了列表的一半。
因此,只要我们调整 PBKDF2 使得猜测每个密码的时间超过 1/150,000 秒,并且我们可以保证我们的密码将出现的最小字典是所有 14 个字母可能性的列表,那么 1万亿年。
更长的密码
当然,很难得到 14 个字符的随机密码。13 个字符将我们的密码列表从 10 25个条目缩小到 10 23 个,需要将破解速度降低约 100 倍(每秒 1500 个密码)才能保持我们 1 万亿年的平均值(从技术上讲,100 倍实际上是 62 倍,因为那是有多少个字母数字字符,但我四舍五入到 10 次方)。从你的长度中删除另一个字符每次都会将你的数字再改变62 倍。
这个故事的寓意是,你正在散列的内容比你如何散列更重要。例如,一个 22 个字符的字母数字密码是一个 131 位的密钥,即使根本不使用 PBKDF2,也无法尝试破解它。
警告
请记住,如果底层加密曾经被破坏,以至于可以在不猜测密钥的情况下对其进行攻击,那么这可能会成为首选的攻击方法。但是我们不知道 AES 中没有这样的攻击,我们也不希望这样的攻击永远存在。