在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位的秘密不可能被暴力强迫,也不会很快变成暴力的现实。你知道吗
但是您需要在非对称加密算法中使用更大的密钥。也很难预测这些类型的键有多强。键的强度和键的长度并不总是相同的。(256位RSA没有256位的强度。)非对称算法的世界比对称算法更具有军备竞赛的性质。你知道吗
我经常看到与比特币哈希率或DES破解硬件相关的暴力行为。您不能直接将这两个目的的性能指标转换为针对其他算法的暴力性能指标,但我们可以将它们用于评估目的。你知道吗
看起来2018年比特币的哈希率峰值估计约为60 million terra-hashes per second。为了便于计算,我们将每秒60*106+12个哈希取整到下一个2的幂,即266。你知道吗
现在我们假设
让我们假设每个改进都是正交的,并且我们的蛮力能力与所有这些改进成线性比例。让我们把每100万四舍五入到20万。我们新的性能度量是每秒266+6(20)=2186次猜测。测试每个可能的256位值需要多长时间?你知道吗
需要2256/2186=2256-186=270秒。那已经超过37万亿年了。比大爆炸以来的时间长了几千倍。所以使用256位的熵是相当保守的。你知道吗
(以我们目前在现实世界中拥有的技术和资源,我们甚至无法强行破解128位的秘密。)
对于对称算法,量子计算机并不是一个大问题。如果我们使用256位对称密钥,那么仍然需要使用Grover's algorithm进行2128函数求值。然而,假设量子计算机上的n评估的成本至少是经典计算机上的n评估的成本是合理的。你知道吗
如果您生成许多随机值并期望每个值都是唯一的,那么由于birthday problem,您需要使用两倍于您可能认为需要的位。对k位哈希函数的一般冲突攻击的代价大约相当于2k/2hash函数的求值。对于量子计算机,它可以是2k/3。(所以不要混淆密钥长度和哈希函数输出长度。)
这些通用攻击具有理想的功能。特定的算法可能被“破解”,这意味着发现了比暴力更有效的攻击。你知道吗
重要的是,你产生的任何秘密都是用不可预知的输入导出的。如果你想要一个n-位的安全级别,你需要有n-位的熵。(因此不能使用Mersenne Twister或PCG,也不能使用系统时间或密码初始化RNG。)
256位的熵在2018年是好的,除非科技进步或魔术等不可思议的科幻作品出现,否则在3018年仍然是安全的。你知道吗
另外,请参见Landauer's principle,它限制了我们进行计算的效率是的。出于显而易见的原因,我甚至不打算把这个基于时间的论点翻译成一美元的数额。
是的,256位仍然被认为是足够的。你知道吗
请参阅Bruce Schneier的一篇文章中的一节-“Warning Sign #5: Ridiculous key lengths”:
有关详细信息,请阅读RFC 4086 - Randomness Requirements for Security:
另外,entropy-您仍然需要一个good source of randomness。这是一个不同的因素比长度的关键。你知道吗
相关问题 更多 >
编程相关推荐