【问题标题】:Where does Random in PyCrypto module get its random bytes from?PyCrypto 模块中的 Random 从哪里获取随机字节?
【发布时间】:2019-12-02 02:48:22
【问题描述】:

在使用C++ 进行WinAPI 编程期间,我注意到我们可以调用函数CryptGenRandom 在Windows CryptoAPI 的上下文中生成随机字节。如果我们深入了解系统细节,这些字节实际上是从 Windows 上的advapi32.dll 生成的。

Python 中,我知道有两种方法可以生成可用于加密的随机字节:

  • from Crypto.Random import get_random_bytes
  • from secrets import token_bytes

我想知道这些模块是否仍然在 Windows 上调用 advapi32.dll 来生成所需的随机字节。或者,他们是否有办法生成完全独立于 Windows 动态库(或DLLs)的随机字节?

【问题讨论】:

    标签: python encryption random cryptography pycrypto


    【解决方案1】:

    深入研究一下代码(您希望有文档),您会发现两者似乎都依赖于os.urandom,而后者又依赖于CryptGenRandomaccording to the documentation

    在 Windows 上,它将使用 CryptGenRandom()

    现在它通常会使用 Microsoft CSP,而使用的内容取决于系统。

    通常您希望依赖操作系统熵,因为要为特定运行时获得足够的熵是很棘手的。如今,这些 RNG 是非常值得信赖的资源,而且速度也相对较快,因此将 CSPRNG 实现起来通常没有多大意义,更不用说将熵源实现到高级语言库中了。

    【讨论】:

    • 是的,.NET 的东西通常依赖于过去的本地加密东西,没有什么新东西。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-26
    • 2010-09-25
    • 1970-01-01
    • 1970-01-01
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多