秘密模块的默认熵在2018年是否仍然足够好?

时间:2018-11-30 20:07:23

标签: python python-3.x cryptography standard-library

documentation中说:

  

从2015年开始,我们相信32个字节(256位)的随机性足以满足秘密模块预期的典型用例。

和下面有一个注释:

  

注意:默认值随时可能更改,包括在维护版本中。

您会在Python 3.7的source中看到32字节仍然是默认值。

DEFAULT_ENTROPY = 32 # number of bytes to return by default

安全吗?是否有任何时间表来更改它或重新评估此设置?

2 个答案:

答案 0 :(得分:3)

对熵问题的答案是,是的,256位机密不能被强行使用,并且在不久的将来不会变得可行。

但是 ,您将需要使用更大的密钥和非对称密码算法。很难预测这些类型的键的强度。键强度和键长度并不总是相同的。 (256位RSA没有256位强度。)与对称算法相比,非对称算法的世界具有更高的军备竞赛质量。

我经常看到与比特币哈希率或DES破解硬件有关的蛮力工作。您不能将这两个目的的性能指标直接转换为针对其他算法的暴力性能指标,但我们可以将它们用于估算。

看来,2018年比特币的最高估计哈希率约为60 million terra-hashes per second。为了便于计算,我们将每秒60 * 10 6 + 12 的哈希数舍入为2的下一个幂2 66

让我们现在假设

  • 我们提高了硬件效率。假设某些新技术在消耗相同能量的情况下,其工作量是现代硬件的一百万倍。
  • 人类设法以某种方式产生了一百万倍的电力。 (也许使用融合或魔术。)
  • 说我们得到了新技术,我们的计算机时钟速度提高了百万分之一。
  • 我们的GPU的内核数量是原来的一百万倍,或者我们可以将计算机尺寸缩小相同倍数。
  • 人类遍布其他恒星系统,我们的人口增加了100万。
  • 每个人负担得起的计算机数量是现在的一百万倍,他们都想猜测您的256位机密。

让我们假装每次改进都是正交的,我们的蛮力力量与所有这些改进呈线性比例关系。让我们将每一百万舍入为2 20 。我们新的性能指标是每秒2 66 + 6(20) = 2 186 个猜测。测试每个可能的256位值需要多长时间?

需要2 256 / 2 186 = 2 256-186 = 2 70 秒。这超过了 37万亿年。比自“大爆炸”以来的时间长数千倍。因此,使用256位熵是相当保守的。

(借助现实世界中目前拥有的技术和资源,我们甚至无法暴力破解128位机密。)

关于对称算法,量子计算机并不是一个大问题。如果我们使用256位对称密钥,则仍将使用Grover's algorithm进行2 128 个函数评估。但是,可以合理地假设量子计算机上 n 评估的成本至少是经典计算机上 n 评估的成本。

如果您生成许多随机值,并希望每个值都是唯一的,则由于birthday problem,您需要使用的位数是您可能需要的两倍。对k位哈希函数的通用冲突攻击的成本大约相当于2 k / 2 个哈希函数的评估。对于量子计算机,它可能是2 k / 3 。 (因此,请勿混淆密钥长度和哈希函数输出长度。)

这些通用攻击具有理想的功能。特定的算法可能会“破解”,这意味着发现了比蛮力更好的攻击。<​​/ p>

重要的是,您生成的所有机密都是使用不可预测的输入得出的。如果您想要一个 n 位安全级别,则需要具有 n 位熵。 (因此,您不能使用Mersenne Twister或PCG,也不能使用系统时间或密码来初始化RNG。)

256位熵在2018年是很好的,除非出现不可思议的类似科幻的技术进步或魔术,否则到3018年它仍然是安全的。

也请参见Landauer's principle,这限制了我们进行计算的效率。出于明显的原因,我什至不打算将这种基于时间的论点转换为美元金额。

答案 1 :(得分:1)

是的,仍然认为256位就足够了。

请参阅布鲁斯·施耐尔(Bruce Schneier)的文章中的“-Warning Sign #5: Ridiculous key lengths”部分:

  

密钥长度越长越好,但只能达到一定程度。 AES将具有128位,192位和256位密钥长度。这远远超过可预见的未来所需的时间。 事实上,我们甚至无法想象一个世界上可以进行256位强力搜索。这需要在物理学和我们对宇宙的理解方面取得一些根本性突破。对于公钥加密,2048位密钥具有相同的性质;更长的时间是没有意义的。

有关更多详细信息,请阅读RFC 4086 - Randomness Requirements for Security

  

3.1。所需音量

     

对于AES,密钥可以是128位,正如我们在第8节的示例中所示,即使是最高安全性的系统也不太可能需要超过200位的强密钥材料。

此外,entropy-您仍然需要good source of randomness。这与密钥的 length 不同。