0

我想在 Windows 上使用英特尔的 RDRAND 功能并生成真正的随机数(因为 Python 的随机模块不是那么随机)。Python中是否有任何API可以访问此功能?

我已经尝试安装下面评论中提到的 rdrand 模块,但我一直收到错误消息。日志: http: //pastebin.com/A2Vqsqec

rdrand.c 中的这些行似乎引发了错误:

#ifdef __GNUC__
#define USING_GCC 1
#elif __clang__
#define USING_CLANG 1
#else
#error Only support for gcc or clang currently
#error if you port to another compiler, please
#error send back the patch to https://github.com/stillson/rdrand
#endif

为什么会这样?

更新:我已经检查并确保定义了 __GNUC__

4

2 回答 2

0

您不一定需要 RDRAND 来获得质量随机性。random模块的文档指出:

使用os.urandom()或者SystemRandom如果您需要加密安全的伪随机数生成器。

的文档os.urandom(n)说:

返回适合加密使用的n 个随机字节的字符串。

此函数从特定于操作系统的随机源返回随机字节。返回的数据对于加密应用程序来说应该是不可预测的,尽管它的确切质量取决于操作系统的实现。在类 UNIX 系统上,这将查询/dev/urandom,而在 Windows 上,它将使用CryptGenRandom().

SystemRandom是基于urandom.

于 2018-12-01T22:27:27.163 回答
0

您可能希望使用 Python 来包装 C/C++ 例程,而不是使用 RdRand() 的 Python 实现。此处为研究论文(http://iopscience.iop.org/article/10.3847/1538-4357/aa7ede/meta;jsessionid=A9DA9DDB925E6522D058F3CEEC7D0B21.ip-10-40-2-120),或此处为非付费版本(https ://arxiv.org/abs/1707.02212)最近展示了 RdRand() 在 Python 中的性能有多差。即便如此,正如论文所述,RdRand 和 RdSeed 指令并不是完全“真正”随机的......

希望有帮助。

于 2017-11-13T21:59:49.950 回答