Python的pycrypto库用于随机数生成与os.urandom

Cha*_*ker 11 python random pycrypto

我试图理解并弄清楚我是否应该使用os.urandom()Crypto.Random.new()用于加密安全的伪随机数.

以下网站似乎建议使用os.urandom():

https://github.com/mozilla/PyHawk/pull/13

但我真的不明白为什么,我在网上找到的其他网站并没有真正解释使用哪个网站.

如果有人知道哪一个是加密使用的安全,我将不胜感激!

特别让我担心的一件事是,我打算用它来生成随机数,但我担心有一天我生成一些随机数,第二天生成器的状态是相同的,它开始生成相同的"随机"数字.

Squ*_*ree 10

我去os.urandom.在我检查的所有(最近的)Python实现中,它通过简单地打开与其他非Linux平台上的无缓冲连接/dev/urandom或等效设备来做正确的事情.

另一方面,PyCrypto Crypto.Random是一个基于Fortuna的非常复杂的包装器.这种复杂的构造可能是为了减轻底层操作系统的一些缺陷.不幸:

  • 它仍然从/dev/urandom(在Linux上)获取熵,因此如果操作系统被破坏,PyCrypto Crypto.Random也将被破坏(击败其目的)
  • 这种选择适得其反,因为很难处理分叉以及不同过程重复使用相同熵的情况(参见CVE-2013-1445).
  • Fortuna代码根本不包含在单元测试中,而Fortuna算法本身并没有附带测试向量.仅这一点就会迫使你做出(大)信仰的飞跃.


Tim*_*ers 9

在你给出的链接中,唯一的理由urandom()是它减少了代码(操作系统实现了"大部分",并os.urandom()内置于Python中).

如果您要分发Python包,可以通过最小化外部依赖性来简化用户的生活.这就是您找到的链接的全部内容.

在质量方面,无论哪种方式都应该正常.我更喜欢urandom()因为我理解它的作用; 我从来没有挖过胆量PyCrypto.但urandom()一直被批评在某些环境中使用. 单击此按钮并向下滚动到开始的部分

2006年3月,Gutterman,Pinkas和Reinman发布了Linux随机数生成器的详细加密分析...