[英]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.