我在 Stack overflow 上遇到了这个问题: How to randomly selection item from a list in Python 他们提到它不适合加密/安全目的。
所以,我在官方文档中找到了这个页面:random - Generate pseudorandom numbers
它提到他们使用 Mersenne twister 来生成随机数。
Mersenne twister 难道不应该是一个相当不错的随机生成器吗(至少我在类里面是这么说的)?那么,为什么不能出于安全目的使用它呢?
最佳答案
Mersenne twister 在模仿随机性的统计属性 (*) 方面做得不错,但它是一种确定性算法。如果两个副本被设置为相同的状态,它们将同步产生相同的结果。这意味着对于加密/安全应用程序,如果攻击者可以确定您的初始状态,您的安全性就会受到威胁。我读过,对于 MT,这可以由知识渊博的人在六百多次连续观察后完成。
底线 - 将其用于蒙特卡洛采样或随机模型,但不适用于加密。
(*) - 实际上,Pierre L'Ecuyer ,他被认为是伪随机数生成方面最重要的研究人员之一,即使对于蒙特卡罗的使用也不喜欢 MT。他已经表明,虽然整个循环是均匀分布的,但内部状态中的零点往往会持续存在,并且生成器可能会“卡住”非均匀子序列中的相当大的子周期。他与 Mersenne Twister 的创建者合作解决了 WELL generator 中的这些问题。 .
关于python - 为什么 random.random() 在 Python 中不安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54672594/