似乎在类 Unix 系统中使用纯 C,fread
from /dev/urandom
是提取高质量随机字节的最简单方法。我需要运行一个每秒需要大约 10k 32 位随机数的模拟,并且可能会运行几天。是/dev/urandom
可以用于此目的吗?当熵池耗尽时,这里的随机字节的质量如何?
edit_1
虽然我现在正在运行 3 个并行的顽固测试/dev/urandom
在我的笔记本电脑中,我得到了以下有趣的台词。测试尚未完成。
#=============================================================================#
test_name |ntup| tsamples |psamples| p-value |Assessment
#=============================================================================#
diehard_parking_lot| 0| 12000| 100|0.99573896| WEAK
diehard_sums| 0| 100| 100|0.00116464| WEAK
sts_serial| 7| 100000| 100|0.99996076| WEAK
在底层实现中/dev/urandom
是一个 CSPRNG,其输出池的最大周期为小于 2^(26*32) − 1 https://eprint.iacr.org/2012/251.pdf,然后将其输入 SHA-1 以生成输出/dev/urandom
。像这样,urandom
显然可以产生您想要的随机数数量,但是它不能为您提供可重复的结果 - 您必须缓存自己获得的序列。
你不必担心当熵池估计耗尽时会发生什么,/dev/urandom
将输出您要求的任何内容。 urandom(4) 手册页提到的“理论攻击”是不存在的 http://blog.cr.yp.to/20140205-entropy.html。 (“问题”是对“熵估计”的巨大误解)
存在许多其他具有大周期的 PRNG,它们可重复播种:Mersenne TwisterC++ http://www.cplusplus.com/reference/random/mt19937/, xorshift http://www.karlin.mff.cuni.cz/jarniskola/files/abstrakty/linkeova.pdfPRNG 等。您应该能够使任何 PRNG 适应适合您的目的的发行版。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)