如果您知道哈希是带有盐的 MD5(您知道),那么破解长达 10 个字母的密码需要多长时间?
用相同的盐破解MD5密码
计算很简单,尽管有一些隐藏的假设。
在这个站点上,可以找到一些基于 GPU 的破解系统的基准。其中之一配备不少于 8 个 AMD R9 290X GPU,每秒可计算 938 亿个 MD5。
有 26 10 = 141167095653376 个可能的 10 个字母序列。每秒 938 亿次,它们都可以在大约 1500 秒,即25 分钟内被散列。平均而言,找到正确的密码需要一半的时间(有时你很幸运,有时你没有)。
但是,请注意细节:
MD5是一个哈希函数。它的标准定义没有提到密码或盐。当您拥有“使用 MD5 和盐散列的密码”时,您实际上是在使用一些未指定的算法,该算法使用 MD5 作为其内部元素之一。该算法的计算成本是否可以降低到“只有一个 MD5”取决于该算法。一些基于 MD5 的密码散列函数实际上暗示了多次 MD5 调用,可能很多(从这个意义上说,带有 HMAC/MD5 的 PBKDF2 是一种“基于 MD5”的算法,每个密码可能涉及数十亿次调用)。
上面的计算假设 10个小写字母。如果密码可能同时包含小写和大写字母,并且它们的处理方式不同,那么组合的数量将增加到 52 10 = 144555105949057024,相应的暴力破解时间为17.8 天。如果我们使用可打印字符(95 个 ASCII 符号,不包括控制字符但包括空格),组合的数量会再次上升,达到 95 10 = 59873693923837890625,蛮力时间大约为20 年(再次,这是完整的太空探索;平均攻击时间将是该值的一半)。
相反,当普通人类用户应该生成密码时,他们会想出“机智”的密码,而不是“随机”的密码。在 10 个字母的可能密码中,有些密码比其他密码更有可能。攻击者会从更有可能的密码开始尝试密码,这大大减少了攻击时间。
这里用作示例的系统在业余术语中是相当大的(8 个大 GPU...),但勤奋的攻击者可能会积累更多的力量。他也可以租用它(从商业云系统),这可能具有成本效益。如果您不首先定义攻击者的预算,您的问题就没有绝对的答案。