【发布时间】:2014-02-26 17:46:28
【问题描述】:
我的应用程序想要获得一个随机数,如果可用,最好带有熵,但不需要加密质量,并且想要确保在系统熵池耗尽时调用不会阻塞(例如在服务器上在农场)。
我知道 CryptGenRandom,但未指定其在逆熵条件下的阻塞行为。
在 Unix 上,/dev/urandom 支持此用例。 Windows 上是否有等效的功能?我宁愿避免使用非系统 RNG 来获得非阻塞语义。
【问题讨论】:
-
呃,你从哪里读到
CryptGenRandom可能会阻止?不过,对于非加密应用程序,您可以使用“常规”PRNG,也许就像“哑”LCG 一样简单。 -
CryptoGenRandom 说它依靠硬件状态变化来填充它的熵池,并且它的文档没有说明如果池是空的它的行为。所以它可能会阻塞。我需要一种不会阻塞的解决方案,而不是未指定阻塞行为的解决方案。我确实可以使用外部 RNG,但我询问 Windows 中是否已经有等效的功能。问题已更新。
-
您是在问是否有一个函数永远不会耗尽熵,或者您是在问是否有一个函数在没有熵的情况下失败而不是阻塞?
-
我要求一个返回随机数且不阻塞的调用。如果没有熵,我没有要求呼叫失败。目前提出的答案是针对我所提出的问题以外的问题。