python - 为什么 random.random() 在 Python 中不安全?

标签 python security random mersenne-twister

我在 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/

相关文章:

带值或不带值的 python 参数,指定或未指定

php - 最安全的 PHP 'access denied' 方法

c - seteuid(0) 之后调用 popen 失败

python - 两个数据帧之间的逐元素乘法

python - 具有复杂结构的数据类实例的完整副本

python - Django {% if forloop.first %} 问题

php - 安全密码存储

javascript - 你能让一个非密码安全的随机数生成器安全吗?

c# - 为什么将 Random.Next() 乘以常量?

algorithm - 从给定的具有不同范围的随机数生成器方法创建随机数生成器方法