secrets 模块的默认熵在 2018 年是否仍然足够好?
Is the default entropy of the secrets module still good enough in 2018?
在 documentation 中说:
As of 2015, it is believed that 32 bytes (256 bits) of randomness is sufficient for the typical use-case expected for the secrets module.
下面有注释:
Note: That default is subject to change at any time, including during maintenance releases.
而且在Python3.7的source中可以看到32字节仍然是默认值。
DEFAULT_ENTROPY = 32 # number of bytes to return by default
安全吗?是否有更改或重新评估此设置的计划?
是的,256 位仍然足够。
请参阅 Bruce Schneier 的文章中的部分 - “Warning Sign #5: Ridiculous key lengths”:
Longer key lengths are better, but only up to a point. AES will have 128-bit, 192-bit, and 256-bit key lengths. This is far longer than needed for the foreseeable future. In fact, we cannot even imagine a world where 256-bit brute force searches are possible. It requires some fundamental breakthroughs in physics and our understanding of the universe. For public-key cryptography, 2048-bit keys have same sort of property; longer is meaningless.
更多详细信息,请阅读RFC 4086 - Randomness Requirements for Security:
3.1. Volume Required
For AES, the key can be 128 bits, and, as we show in an example in Section 8, even the highest security system is unlikely to require strong keying material of much over 200 bits.
此外,entropy - you still need a good source of randomness。它与密钥的 长度 不同。
熵问题的答案是,是的,256 位的秘密不能被暴力破解,而且在短期内也不会变得实用。
但是您将需要使用更大的密钥和非对称加密算法。也很难预测这些类型的密钥有多强。密钥强度和密钥长度并不总是相同的。 (256 位 RSA 没有 256 位强度。)非对称算法的世界比对称算法具有更多的军备竞赛质量。
我经常看到与比特币哈希率或 DES 破解硬件相关的暴力破解。您不能将用于这两个目的的性能指标直接转换为针对其他算法的强力性能指标,但我们可以将它们用于估计目的。
看起来比特币 2018 年的峰值估计哈希率约为 60 million terra-hashes per second。为了便于计算,让我们将每秒 60 * 106+12 次哈希取整为 2 的下一次幂 266。
现在假设
- 我们提高了硬件的效率。假设某些新技术在使用相同数量的能量的情况下,可以完成现代硬件的一百万倍的工作量。
- 人类设法以某种方式产生一百万倍的电力。 (也许使用融合或魔法。)
- 假设我们获得了新技术,我们的计算机时钟速度提高了 100 万倍。
- 我们的 GPU 拥有一百万倍的内核,或者我们可以将计算机尺寸缩小相同的系数。
- 人类居住在其他星系,我们的人口增加了一百万。
- 每个人都可以买得起比现在多一百万倍的电脑,而且他们都想猜出你的 256 位秘密。
让我们假设每项改进都是正交的,并且我们的蛮力力量与所有这些改进成线性比例。让我们将每个百万四舍五入为 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。 (所以不要混淆密钥长度和散列函数输出长度。)
这些通用攻击具有理想的功能。具体算法可能是"cracked",意思是发现了比暴力破解更好的攻击。
重要的是,您生成的任何秘密都是使用不可预测的输入派生的。如果你想要 n 位的安全级别,你需要有 n 位的熵。 (因此您不能使用 Mersenne Twister 或 PCG,也不能使用系统时间或密码初始化 RNG。)
256 位的熵在 2018 年是好的,除非不可思议的科幻技术进步或魔法,在 3018 年仍然是安全的。
另请参阅 Landauer's principle,这限制了我们进行计算的效率。出于显而易见的原因,我什至不会尝试将这种基于时间的论点转化为美元金额。
在 documentation 中说:
As of 2015, it is believed that 32 bytes (256 bits) of randomness is sufficient for the typical use-case expected for the secrets module.
下面有注释:
Note: That default is subject to change at any time, including during maintenance releases.
而且在Python3.7的source中可以看到32字节仍然是默认值。
DEFAULT_ENTROPY = 32 # number of bytes to return by default
安全吗?是否有更改或重新评估此设置的计划?
是的,256 位仍然足够。
请参阅 Bruce Schneier 的文章中的部分 - “Warning Sign #5: Ridiculous key lengths”:
Longer key lengths are better, but only up to a point. AES will have 128-bit, 192-bit, and 256-bit key lengths. This is far longer than needed for the foreseeable future. In fact, we cannot even imagine a world where 256-bit brute force searches are possible. It requires some fundamental breakthroughs in physics and our understanding of the universe. For public-key cryptography, 2048-bit keys have same sort of property; longer is meaningless.
更多详细信息,请阅读RFC 4086 - Randomness Requirements for Security:
3.1. Volume Required
For AES, the key can be 128 bits, and, as we show in an example in Section 8, even the highest security system is unlikely to require strong keying material of much over 200 bits.
此外,entropy - you still need a good source of randomness。它与密钥的 长度 不同。
熵问题的答案是,是的,256 位的秘密不能被暴力破解,而且在短期内也不会变得实用。
但是您将需要使用更大的密钥和非对称加密算法。也很难预测这些类型的密钥有多强。密钥强度和密钥长度并不总是相同的。 (256 位 RSA 没有 256 位强度。)非对称算法的世界比对称算法具有更多的军备竞赛质量。
我经常看到与比特币哈希率或 DES 破解硬件相关的暴力破解。您不能将用于这两个目的的性能指标直接转换为针对其他算法的强力性能指标,但我们可以将它们用于估计目的。
看起来比特币 2018 年的峰值估计哈希率约为 60 million terra-hashes per second。为了便于计算,让我们将每秒 60 * 106+12 次哈希取整为 2 的下一次幂 266。
现在假设
- 我们提高了硬件的效率。假设某些新技术在使用相同数量的能量的情况下,可以完成现代硬件的一百万倍的工作量。
- 人类设法以某种方式产生一百万倍的电力。 (也许使用融合或魔法。)
- 假设我们获得了新技术,我们的计算机时钟速度提高了 100 万倍。
- 我们的 GPU 拥有一百万倍的内核,或者我们可以将计算机尺寸缩小相同的系数。
- 人类居住在其他星系,我们的人口增加了一百万。
- 每个人都可以买得起比现在多一百万倍的电脑,而且他们都想猜出你的 256 位秘密。
让我们假设每项改进都是正交的,并且我们的蛮力力量与所有这些改进成线性比例。让我们将每个百万四舍五入为 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。 (所以不要混淆密钥长度和散列函数输出长度。)
这些通用攻击具有理想的功能。具体算法可能是"cracked",意思是发现了比暴力破解更好的攻击。
重要的是,您生成的任何秘密都是使用不可预测的输入派生的。如果你想要 n 位的安全级别,你需要有 n 位的熵。 (因此您不能使用 Mersenne Twister 或 PCG,也不能使用系统时间或密码初始化 RNG。)
256 位的熵在 2018 年是好的,除非不可思议的科幻技术进步或魔法,在 3018 年仍然是安全的。
另请参阅 Landauer's principle,这限制了我们进行计算的效率。出于显而易见的原因,我什至不会尝试将这种基于时间的论点转化为美元金额。