【问题标题】:Is the default entropy of the secrets module still good enough in 2018?在 2018 年,secrets 模块的默认熵是否仍然足够好?
【发布时间】:2019-05-03 00:06:00
【问题描述】:

documentation 中写道:

截至 2015 年,据信 32 字节(256 位)的随机性足以满足秘密模块预期的典型用例。

下面有注释:

注意:该默认设置可能随时更改,包括在维护版本期间。

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

DEFAULT_ENTROPY = 32 # number of bytes to return by default

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

【问题讨论】:

  • 在量子计算机变得更大一点(哈!)之前没关系。

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


【解决方案1】:

熵问题的答案是,是的,256 位机密不能被暴力破解,也不会很快变得实用。

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

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

看起来 2018 年比特币的峰值估计哈希率约为 60 million terra-hashes per second。为了便于计算,让我们将每秒 60 * 106+12 个哈希值取整为 2 的下一个幂,即 266

现在假设

  • 我们提高了硬件的效率。假设某些新技术在使用相同数量的能源的情况下完成的工作量是现代硬件的 100 万倍。
  • 人类设法以某种方式产生了一百万倍的电力。 (也许使用融合或魔法。)
  • 假设我们获得了新技术并且我们的计算机时钟速度增加了一百万倍。
  • 我们的 GPU 拥有 100 万倍的内核,或者我们可以将计算机尺寸缩小相同的倍数。
  • 人类居住在其他恒星系统中,我们的人口增加了 100 万倍。
  • 每个人都能买得起比现在多一百万倍的计算机,而且他们都想猜测您的 256 位秘密。

让我们假设每个改进都是正交的,并且我们的蛮力与所有这些改进成线性关系。让每 100 万个舍入到 220。我们的新性能衡量标准是每秒 266+6(20) = 2186 次猜测。测试每个可能的 256 位值需要多长时间?

需要 2256 / 2186 = 2256-186 = 270 秒。那是超过 37 万亿年。比大爆炸以来所经过的时间长数千倍。所以使用 256 位的熵是相当保守的。

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

在对称算法方面,量子计算机并不是一个大问题。如果我们使用 256 位对称密钥,那么仍然需要使用 Grover's algorithm 进行 2128 次函数评估。然而,假设在量子计算机上进行 n 次评估的成本至少是在经典计算机上进行 n 次评估的成本是合理的。

如果您生成许多随机值并期望每个值都是唯一的,则您需要使用两倍于您可能认为由于birthday problem 而需要的位。对 k 位散列函数的一般碰撞攻击的成本大约相当于 2k/2 个散列函数评估。对于量子计算机,它可能是 2k/3。 (所以不要混淆密钥长度和哈希函数输出长度。)

这些通用攻击假定了一个理想的功能。特定算法可能会被“破解”,这意味着发现了比蛮力更好的攻击。

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

256 位的熵在 2018 年是不错的,除非不可思议的科幻般的技术进步或魔法,在 3018 年仍然是安全的。

另外,请参阅Landauer's principle,它限制了我们进行计算的效率。出于显而易见的原因,我什至不会尝试将这个基于时间的论点转换为美元金额。

【讨论】:

    【解决方案2】:

    是的,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。它与密钥的长度不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-07-25
      • 1970-01-01
      • 1970-01-01
      • 2019-04-19
      • 2011-05-25
      • 2013-11-11
      • 2014-05-13
      相关资源
      最近更新 更多