首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果random.random()经常被高熵值所播种,它有可能预测它吗?

如果random.random()经常被高熵值所播种,它有可能预测它吗?
EN

Security用户
提问于 2017-12-12 14:26:06
回答 1查看 4.1K关注 0票数 1

我感兴趣的是,当从物理系统(如掷骰子)中播撒高熵值时,是否有可能预测Python3 random.random()

换句话说,random.random()是一个很好的函数,它接受“熵”并将其降为不可预测的有界值吗?

据我所知,它通过了我发现的所有随机性测试。

我对良好实践不感兴趣,我认为最好使用/dev/urandom、机密或其他好的随机值来源。这是众所周知的事实。

需要考虑的事项:

  • 该随机发生器具有较高的熵值,在再次播种之前,只使用一次从初始状态生成单个值。
  • 发电机每一个数字都有新的种子。
  • 种子具有较高的熵,大约256位或更高的熵。

我之所以要这么做,是因为它允许我使用random.choise,这是一种非常方便的方法,可以将种子转换为一种选择。下面是这个想法的一个粗略的实现:

  1. random.random种子为高熵种子。
  2. 使用random.choice
  3. random.random种下了一种新的高熵种子。
  4. 使用random.choice
  5. ...again再来一次。

结果选择列表可预测吗?

EN

回答 1

Security用户

发布于 2017-12-12 15:07:41

可以预测python的random.random()数吗?如果你能访问这台机器,它是决定性的,绝对有可能的。所有伪随机数生成器都是这样。

你能根据以前的数字预测下一个数字吗?理论上,任何伪随机数发生器都可以从外部观察得到,尽管在实践中,强伪随机数发生器需要很长的时间。

即使每次使用它,如果它被重新加载的方式不是真正随机的,那么它仍然是一个伪数生成器,所有上述语句仍然是正确的。

如果它带有真正的随机数,则应该使用实数随机数生成器,同时避免伪数生成器。

如果你确实传递了真正的随机数来种子随机数产生器,结果会是随机的吗?这是个有趣的问题。这取决于实现。如果实现只是使用种子作为随机数,而种子是一个真正的随机数,并且不断被重新传播,那么是的,它是随机的。在大多数情况下,我猜,将一个真正的随机数传递到一个伪随机数生成器中,会使这个数字是伪随机的。这是我有教养的猜测--至少,对于密码学专家来说,这个问题比安全专家更理想。这是一个有趣的问题,但同样,在我所能想到的任何方面都不实用。

关于python random.random()的强大程度,我不能说得太多,但是用于随机的python文档声明:

本模块的伪随机生成器不应用于安全目的。如果需要加密安全的伪随机数生成器,请使用os.urandom()或SystemRandom。

简短的回答是肯定的,这是可能的。random.random()特别显示它用于随机性,而不是安全性,因此相应地使用它。

票数 2
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/175325

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档