我们如何将摩尔定律纳入密码破解估计中?

信息安全 密码 哈希 面向未来 算法
2021-09-10 12:30:01

我们将如何将摩尔定律分解为超长的密码破解估计值?

假设我们有一个 12 个字符的密码,其中包含混合大小写的字母字符和数字,a-zA-Z0-9这种密码的密钥空间大约是 3.2x10 21

现在,假设我目前可以在现代 GPU 上以每秒 3.0x10 9(三十亿)的速度计算哈希。以这个速度,使用相同的硬件,我可以在 33,824 年内搜索整个键空间。

但是,如果我可以迁移到更新的硬件,那么这个数字可能会大大减少。

假设如下:

  • 晶体管数量每 2 年翻一番。
  • 哈希计算速度与晶体管数量成正比。
  • 哈希计算速度不受其他约束(例如内存带宽)
  • 晶体管数量没有上限。
  • 我们可以立即过渡到新硬件。
  • 我们正在寻找总裂解时间的绝对下限。

我们将如何计算破解哈希所需的时间长度?有没有表达几何级数的数学公式?

4个回答

会大大减少。我将为此设置一个递归关系,如下所示:

A(n) = A(n-1) - C * 2 ^ (N-1) 和 A(0) = 键空间的大小,比如 62^12

让第一年计算的哈希值设置为 C = 3.0*10^12,并假设计算能力每年翻一番。

将其代入 wolfram alpha 会产生此递归关系的函数解:

递归关系...

f(x) ~= 3.22627x10^21 - 3.0x10^12 * 2^x

为 x 求解 f(x) = 0:

x = lg (3.22627x10^21 / 3.0x10^12) 其中 lg 是以 2 为底的对数

x ~= 30.00226 年

在 30 年内破解,但这是很多硅片,没有浪费的工作,而且您需要一种方法来无缝地将新硬件集成到正在运行的程序中,而无需停止它。


解释:

所以我们有原始的密钥空间大小:62^12 和一个能够以某种方式结合摩尔定律的假设机器。

我原来的数学有点偏离。出于某种原因,我做了 3.0 x 10^9 * 1000 = 3.0 x 10^12 一年的计算,但它应该是 3.0 x 10^9 * 3600(秒/小时)* 24(小时/天)* 365(天/年)。不管怎样,这就是我们的初始速度,根据摩尔定律,这个速度每年都会翻一番。为了解释的一致性,我将保留最初的错误。

因此,在第一年,我们执行所需的 1.0x62^12 最大哈希的 3.0x10^12 哈希(假设最坏的情况)。第二年,摩尔定律适用,现在我们在第二年进行 6.0x10^12 散列,这给了我们迄今为止计算的累计 9.0x10^12 散列。我们剩下要做的哈希是通过从哈希的总数中减去来找到的。我们将运行该程序,直到找不到更多的哈希值。

A(N) = A(N-1) - C * 2^(N-1)

A(N) 是今年之后剩余的哈希数

A(N-1) 是今年之前剩余的哈希数

C是初始速度

N 是年份的编号(第一、第二、第三等)。

所以每年速度都会翻一番,这是等式的 2^(N-1) 部分。C是第一年的初始速度,所以我们有C * 2 ^ 0 = C * 1 = C。第二年速度翻了一次,所以我们有2 * C。第三年,速度有从最初的两倍加倍,所以我们有 2 * 2 * C = 2^2 * C = 2^(N-1) * C 因为 N 是 3。这形成了剩余要计算的哈希数的递归关系。

使用组合学书籍,您可以将递归关系转换为生成函数。或者 wolfram alpha 可以为你做这件事,如果你和我一样记得可以找到生成函数,但自从七年前的数学课以来就忘记了如何找到它们。

无论如何,你会得到一个 x 的函数,其中 x 仍然是被迭代的年份。f(x) 是要计算的散列数。当剩下 0 时,我们就完成了。所以我们在 f(x) = 0 时为 x 求解 f(x)。最后一部分是代数。

我可能在这里偏离了基地,但这对我来说很有意义:)

可以根据您的假设进行数学计算,但结果几乎没有实际意义,因为您的假设无效并且您的问题陈述缺少一些重要的背景。在不质疑假设的情况下在这里进行数学运算就像是那些以“假设一头球形牛......”开始的物理笑话之一。

例如,期望晶体管数量无限期地以指数速度增加是不合理的。功耗与晶体管数量成线性关系,因此您迟早会在这方面碰壁。一般来说,功耗是当今 CPU 的主要限制因素之一。预测 30 年指数曲线的影响有点愚蠢,因为它忽略了电源墙。

其次,很少有密码需要保持安全 30 年。在大多数情况下,与其尝试选择一个可以保持 30 年安全的密码,不如简单地每隔一段时间更改一次密码。

第三,当我们谈论 12 个字符混合大小写字母数字的真正随机密码时,密码破解不太可能是您系统中最薄弱的环节。几乎可以肯定,攻击者可以通过更简单的方法来破坏安全性。

因此,虽然我完全有能力根据您的假设进行数学计算,但我不会这样做。这将是一个数学手淫的练习。不要误会——我喜欢数学本身——但在这种情况下,结果会产生误导。

简而言之,我的回答是:你问错问题了。在可预见的未来,一个真正随机的 12 个字符的密码绰绰有余。如果您的密码如此强大,请停止担心密码破解,并花精力防御其他威胁。

假设攻击者的计算能力可以随时间呈指数表示:

p = a·e bt

其中t是时间(当攻击者开始尝试密码时t = 0 ), ab是两个常数,p是用“每时间单位的密码尝试次数”表示的功率度量,然后探索的密码空间大小为时间段T内的攻击者为:

S = \int_{0}^{T} p·dt = \frac{a}{b}(e^{bT} - 1)

摩尔定律或多或少意味着基于指数的公式是一个有效的模型——在一定范围内。摩尔定律的一个乐观表达是,在三年的时间里,晶体管密度翻了两番,时钟频率翻了一番,但预算不变:在相同的成本下,我们拥有四倍的晶体管,我们可以更快地运行电路。这意味着b = 0.693反年(2 的对数:功率每年翻倍;我们以年表示时间t),a是攻击者现在可以使用他的年度预算尝试的密码数量(例如,a = 3 ×10 17 如果攻击者以每秒 100 亿次的速度开始,密码/年,就像简单的加盐 MD5 哈希和几千美元预算的情况一样)。

上面的计算假设了以下不太现实的属性:

  • 攻击者有可更新的年度预算,允许他执行定期硬件更新。
  • 从旧硬件转换到新硬件不需要任何成本,这类似于宣布软件生长在树上,您只需提着篮子走到树枝下即可。
  • 攻击者可以遵循摩尔定律。密码破解是高度并行的,但这仍然需要使用 FPGA。CPU 或 GPU 等消费产品还有其他限制,无法充分发挥摩尔定律的作用(特别是内存延迟也无法扩展)。
  • 摩尔定律成立。早在 1997 年,戈登·摩尔本人在分崩离析之前又给了它大约 20 年的时间,即直到大约 2017 年——也就是四年后。摩尔定律在逐步应用一系列优化思想的基础上运作,这些思想至少在理论上已经在 1970 年代表达过。这只股票很快就用完了……事实上,我们可以看到电路(甚至 ASIC)中的时钟频率在 10 GHz 以下有些停滞。
  • 我们可以忽略能源消耗。我们现在知道这不是真的能源现在是大型计算的主要限制因素(不仅用于为机器供电,还用于冷却,因为所有能量都变成了热量)。也是理论上算力最接近的边界。

因此,虽然您可以使用我上面展示的公式,但从中得到的结果不会很实用。我想补充一点,如果攻击者有足够的意图每年花费硬件来破解你的密码,那么那个人确实是你的死敌;用不了多久,他就会意识到雇佣两三个暴徒来打断你的膝盖骨要便宜得多,而且更有效。

首先我很抱歉,我对你的问题没有真正的答案,但我的直觉是肯定的。我一直在努力从一个相当具体的场景中推导出一个类似的公式,但我相信如果我能证明我的假设,它可以更普遍地真正回答你的问题。

我也收到过类似的反对意见,他们关心从严格和不切实际的假设场景得出的结果的“实际意义”。对无限资源的担忧是有效的,但确实可以在数学上将洛克定律考虑在内,以便对问题进行更准确的分析。尽管如此,我认为从防御者的角度来看,严格限制任何实际关注的攻击者可用的资源首先是不安全的,原因有很多实际原因,包括一个现实的假设,即根据她的本性,攻击者可能在例如,任何时间点都可以访问任意数量的被盗信用卡。

我使用了我被教导的更准确的假设,即处理能力每 18 个月翻一番。

换句话说,如果在时间 0 的处理能力是 P(O),那么在 18 个月内,可用的处理能力是 P(0)*2^1.5。(值得注意的是,3 年后,处理能力因此正好翻了两番)。

我仍在努力从数学上证明我用电子表格所做的观察,但我对我的公式很有信心。我发现几乎无法相信的结果是,无论初始处理速度如何,无论需要多少年才能达到这一点,在你破解了总密码空间的 1/4 后,你都会破解在不超过三年的时间内剩下3/4!由于处理能力在 3 年内翻了两番,这似乎是合理的,但自然怀疑是确定初始处理能力,因为这似乎会对观察产生重大影响。

我尝试过使用键空间和初始输入,但还不能破坏我的电子表格。

我计算出,处理能力每年增加 2^(2/3) 以形成离散的递推关系。

在场景方面,这意味着攻击者每年都会升级到当前的处理能力,而不会浪费时间。是的,从绝对的角度来看这是不现实的,但我的工作假设是,随着处理能力和密钥空间的增加,传输时间的相对重要性将趋向于 0。并且愿意将美元赌在甜甜圈上,这可以在数学上得到证明。

于是关系就变成了

给定一些常数 P(0),P(1) = P(0)*2^(2/3)。P(2) = P(1) * 2^(2/3) = P(0) * 2^(2/3) * 2^(2/3)。

我们很快就会看到 P(i) = P(0) * 2^(2i/3)。

因此,我们将 P(i) 定义为在第 i 年使用年初可用的处理能力破解的密码数。

换句话说,P(n) = P(0)*2((2*0)/3) + P(0)*2((2*1)/3) + P(0)*2((2 *2)/3) + ... P(0) 2((2 (n-1))/3) + P(0)*2((2*n)/3)。

或 P(0)(1 + 2^(2/3) + 2^(4/3) + ... + 2^((n-1)/3) + 2^(2n/3))

现在我们可以看看密码空间和破解额外空间所用时间之间的关系。

我们得到一个 128 位的密钥空间可以在 100 年内破解,并确定再增加两个位(总共 130 位)会使密钥空间翻两番。

所以不管原始进程速度如何,或者一年内破解的密钥如何,我们知道100年后我们已经破解了完整的128位空间,这个空间是新密码空间的1/4。所以 100 年后我们已经破解了总空间的 1/4,我们想知道还有多少年才能破解剩下的 3/4。

让我们从 n 年开始破解我们可以表示为的完整空间:

P(n) = P(0)(1 + 2^(2/3) + 2^(4/3) + ... + 2^((n-1)/3) + 2^(2n/3 )) = 100% 的空间。

而前一年(n-1)我们一共破解了

P(n-1) = P(0)(1 + 2^(2/3) + 2^(4/3) + ... + 2^((n-1)/3))

到第 n-1 年,我们破解了总密钥空间的哪一部分?

P(0)(1 + 2^(2/3) + 2^(4/3) + ... + 2^((n-1)/3))

P(0)(1 + 2^(2/3) + 2^(4/3) + ... + 2^((n-1)/3) + 2^(2n/3))

P(n-3)

P(n)

=

P(0)(1 + 2^(2/3) + 2^(4/3) + ... + 2^((n-3)/3))

P(0)(1 + 2^(2/3) + 2^(4/3) + ... + 2^((n-1)/3) + 2^(2n/3))

这就是我的算术、归纳和数学基础继续失败的地方,我被一个正式的证明所阻碍,但我的观察表明,对于显着大小的 n,这应该简化为 1/4。

我的兴趣是确定一个数学证明来解释一些直观但仍然令人惊讶的结论。

我的问题是帮助确定密码空间的固定扩展实际上增加的最大额外安全性,即破解者完全计算给定空间中所有可能的典当散列所需的时间。

对于不同的变量,我们必须接受许多不太现实的假设,以建立严格的数学可证明关系,然后从中确定我们关于密码长度中附加字符的额外好处的假设是否是现实的。

我遇到了一个测试问题:如果破解者可以计算从 128 个字符的二进制字母表定义的密钥空间中的每个哈希值,那么她破解 130 位二进制密钥空间需要多长时间?

“正确”的答案是 400 年。我认为这个问题定义不明确,因为考虑到摩尔定律,我们知道即使密钥空间增加了四倍(假设所有选项都是有效密码,2 个额外的位创建的选项是 4 倍)破解它所花费的时间会更少超过四倍。

“显着”少确实是准确的,但是在未能通过正式证明定义少多少之后,我使用电子表格生成硬数据来帮助指导我的证明方法。