gpt4 book ai didi

c - `/dev/urandom` 是否适合模拟目的?

转载 作者:太空狗 更新时间:2023-10-29 11:08:15 27 4
gpt4 key购买 nike

似乎在类 unix 系统中使用纯 C,/dev/urandom 中的 fread 是提取高质量随机字节的最简单方法。我需要运行一个模拟,每秒需要大约 10k 个 32 位随机数,它可能会运行几天。 /dev/urandom 可以用于此目的吗?当熵池耗尽时,这里的随机字节质量如何?

edit_1

当我现在在笔记本电脑上为 /dev/urandom 运行 3 个并行顽固测试时,我得到了以下有趣的行。测试尚未完成。

#=============================================================================#
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,其输出池的最大周期为less than 2^(26∗32) − 1。 ,然后将其输入 SHA-1 以生成 /dev/urandom 的输出。因此,urandom 显然可以生成您想要的随机数数量,但它无法为您提供可重现的结果 - 您必须缓存自己获得的序列。

您不必担心熵池估计耗尽时会发生什么,/dev/urandom 将输出您要求的任何内容。 urandom(4) 手册页提到的“理论攻击”是 nonexistent . (“问题”是对“熵估计”是什么的巨大误解)

许多其他具有大周期的 PRNG 存在可重复播种:C++ 中的 Mersenne Twister , xorshift PRNG 等。您应该能够使任何 PRNG 适应适合您目的的分发。

关于c - `/dev/urandom` 是否适合模拟目的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32139660/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com