[英]How does the OpenSSL‘s PRNG works in Windows?
每次我用相同的种子调用RAND_bytes
和RAND_pseudo_bytes
,它返回不同的随机数,我不明白为什么。 它说PRNG在Linux中自动从/dev/urandom
播种,但是在Windows中它如何工作?
为什么同一个种子会导致不同的随机数?
为什么同一个种子会导致不同的随机数?
您可以在OpenSSL Wiki上的随机数中了解有关rand子系统的一般设计。 同一种子产生不同随机数的原因是...
这取决于发电机。 如果使用默认生成器,则使用md_rand
。 如果您查看md_rand.c
的源代码 ,那么您将看到rand_bytes
在每次调用时都增加了熵,并带有对诸如time
函数的系统调用。
在Linux上, rand_bytes
还添加了getpid
的结果; 在Windows上,它会添加GetSystemTime
和SystemTimeToFileTime
的结果。
对于RNG,在每次调用时添加熵是一个好的设计实践。 另请参见何时良好的随机性变得很糟糕:虚拟机重置漏洞和对冲已部署的加密技术以及何时虚拟性比真实困难:基于虚拟机的计算环境中的安全性挑战 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.