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

问题描述 投票:2回答:1

我在堆栈溢出时遇到了这个问题:How to randomly selection item from a list in Python并且他们提到它不适合加密/安全目的。

所以,我在官方文档中找到了这个页面:random - Generate pseudorandom numbers

它提到他们使用梅森捻线机产生随机数。

Mersenne twister不是一个相当不错的随机发生器(至少那是我在课堂上被告知的)吗?那么为什么不能将它用于安全目的呢?

python security random mersenne-twister
1个回答
1
投票

Mersenne Twister在模仿随机性的统计特性(*)方面做得不错,但它是一种确定性算法。如果将两个副本设置为相同的状态,则它们将在同步中产生相同的结果。这意味着,对于加密/安全应用程序,如果攻击者可以确定您的初始状态,则会发现安全性。我已经读过MT,这可以由知识渊博的人在六百次连续观察之后完成。

底线 - 用于蒙特卡罗采样或随机模型,但不用于加密。

(*) - 实际上,Pierre L'Ecuyer被认为是伪随机数生成的最重要的研究者之一,即使对蒙特卡罗使用也不是MT的粉丝。他已经表明,虽然整个周期是均匀分布的,但是内部状态中的零往往是持久的,并且发生器可能在非均匀子序列中被“卡住”相当大的子周期。他与Mersenne Twister的创造者合作,在WELL generator解决了这些问题。

© www.soinside.com 2019 - 2024. All rights reserved.