我感兴趣的是,当从物理系统(如掷骰子)中播撒高熵值时,是否有可能预测Python3 random.random()。
换句话说,random.random()是一个很好的函数,它接受“熵”并将其降为不可预测的有界值吗?
据我所知,它通过了我发现的所有随机性测试。
我对良好实践不感兴趣,我认为最好使用/dev/urandom、机密或其他好的随机值来源。这是众所周知的事实。
需要考虑的事项:
我之所以要这么做,是因为它允许我使用random.choise,这是一种非常方便的方法,可以将种子转换为一种选择。下面是这个想法的一个粗略的实现:
random.random种子为高熵种子。random.choice。random.random种下了一种新的高熵种子。random.choice。结果选择列表可预测吗?
发布于 2017-12-12 15:07:41
可以预测python的random.random()数吗?如果你能访问这台机器,它是决定性的,绝对有可能的。所有伪随机数生成器都是这样。
你能根据以前的数字预测下一个数字吗?理论上,任何伪随机数发生器都可以从外部观察得到,尽管在实践中,强伪随机数发生器需要很长的时间。
即使每次使用它,如果它被重新加载的方式不是真正随机的,那么它仍然是一个伪数生成器,所有上述语句仍然是正确的。
如果它带有真正的随机数,则应该使用实数随机数生成器,同时避免伪数生成器。
如果你确实传递了真正的随机数来种子随机数产生器,结果会是随机的吗?这是个有趣的问题。这取决于实现。如果实现只是使用种子作为随机数,而种子是一个真正的随机数,并且不断被重新传播,那么是的,它是随机的。在大多数情况下,我猜,将一个真正的随机数传递到一个伪随机数生成器中,会使这个数字是伪随机的。这是我有教养的猜测--至少,对于密码学专家来说,这个问题比安全专家更理想。这是一个有趣的问题,但同样,在我所能想到的任何方面都不实用。
关于python random.random()的强大程度,我不能说得太多,但是用于随机的python文档声明:
本模块的伪随机生成器不应用于安全目的。如果需要加密安全的伪随机数生成器,请使用os.urandom()或SystemRandom。
简短的回答是肯定的,这是可能的。random.random()特别显示它用于随机性,而不是安全性,因此相应地使用它。
https://security.stackexchange.com/questions/175325
复制相似问题