random.randint 用于生成加密安全密钥

sur*_*bhi 5 python random python-cryptography

此链接中的文档表示不应使用 randint 来生成加密密钥: https: //docs.python.org/2/library/random.html

我试图了解攻击者为何以及如何破解基于此类密钥的加密系统。

Pre*_*onM 4

Python 使用伪随机数生成器 (prng) 来创建供程序使用的“随机”数。这些数字是由数学算法生成的,看起来只是随机的。python使用的算法是Mersenne Twister。如文档中所述:

\n\n
\n

Python 使用 Mersenne Twister 作为核心生成器。它产生 53 位精度浮点数,周期为 2**19937-1。C 中的底层实现既快速又线程安全。Mersenne Twister\n 是目前经过最广泛测试的随机数生成器之一。然而,由于它是完全确定性的,因此并不适合所有用途,并且完全不适合加密用途。

\n
\n\n

如前所述,该算法的目的是既要快速又要尽可能“随机”。请注意,第二句话提到了算法的“周期”。由于计算机并不完美,并且只有有限的内存,因此它们只能根据该算法产生这么多“随机”数。周期是机器开始重复之前可以达到的 prng 状态数(https://softwareengineering.stackexchange.com/questions/273105/why-is-the-period-of-a-pseudorandom-number-生成器-重要)。除此之外,Python 根据运行程序的机器的内部特征来决定使用什么“状态”或使用什么“种子”。(请参阅有关 random.seed 的文档)

\n\n
\n

random.seed(a=None)\xc2\xb6 初始化随机数生成器的内部状态。

\n\n

无或无来自当前时间或操作系统特定随机源(如果可用)的参数种子(有关可用性的详细信息,请参阅 os.urandom()\n 函数)。

\n
\n\n

因此,攻击者可以使用暴力和运行应用程序的机器的基本知识来重新创建并确定程序中 prng 的排序和未来状态。我绝不是伪随机数生成算法方面的专家,但希望这能让您掌握这个主题:)

\n