1 回答
TA贡献1802条经验 获得超5个赞
random.random()
使用伪随机数生成器 (PRNG),该生成器根据定义使用确定性算法并在数学上扩展其输入。因此,它生成的数字是伪随机的,即使它是由量子随机数生成器或某些其他不确定源的输出播种的。
种子是初始化 PRNG 的值,PRNG 可以生成的可能序列的数量取决于 PRNG 的状态大小和种子的大小。例如,如果种子或状态只有 32 位长,则该 PRNG 最多可能有 2 32 个不同的伪随机数序列,无论种子来自何处。
无论如何,“伪随机”和“真正随机”数字之间的区别不是应用程序关心的(并且您没有真正指定您想要的应用程序类型)。相反,一般来说:
安全应用程序关心这些数字是否难以猜测;在这种情况下,只有加密 RNG 可以实现这一要求(即使是依赖于伪随机数生成器的 RNG)。Python 的示例是
secrets
模块或random.SystemRandom
.科学模拟关心这些数字是否表现得像独立的均匀随机数,并且通常关心这些数字在以后是否可重现。一个 Python 示例是
numpy.random.Generator
.
例如,random.random()
Mersenne Twister 使用的伪随机数生成器不适合密码学或信息安全;它产生的数字并不是为了难以猜测而设计的,无论该生成器如何播种(无论是通过量子随机数生成器还是其他方式),情况都是如此。
相比之下,为信息安全而设计的伪随机生成器通常涉及加密哈希函数、分组密码或流密码,特别是因为目标之一是使未来的伪随机数难以猜测,即使生成器的输出已知。
添加回答
举报