2013-03-14 72 views
1

我正在C中產生非常大的隨機整數我發現/ dev/random是一個很好的來源,但它會阻塞熵池是否用盡。/dev/urandom看起來像是下一個goto,但隨機性的質量並不如此。有沒有一種方法可以使用/ dev/random中的整數來種子PRNG,以便我不必從/ dev/random中讀取數據?我正在尋找密碼安全的PRNG,雖然不是長期的。加密安全PRNG在C

+0

/dev/urandom是*假設*是加密安全的,並且基本上與您建議的一樣 - 使用/ dev/random來種子PRNG。你是如何測試質量的? – 2013-03-14 19:36:48

回答

7

使用/dev/random的整數來播種PRNG正是/dev/urandom所做的。除非你有隨意的弱點證據,否則你正在重新發明輪子。

儘管urandom確實比/dev/random弱,但是您提出的方案在完全相同的情況下很脆弱,所以與僅使用urandom相比,它沒有什麼好處。 urandom具有額外的好處,它可以連續混合新的熵到生成的數字中,因爲新的熵可以從底層硬件獲得。 FreeBSD的例子只有有一個urandom風格的設備。

最後,urandom已經存在很多年了,其來源已經由安全專家進行了審查,而替換者可以自行推出。

+0

謝謝,我會使用urandom。 – JessMcintosh 2013-03-14 22:24:40

0

這可能取決於平臺。有些使用加密安全的PRNG已經用於/ dev/random。例子:FreeBSD,OpenBSD,OS X.你也可以看看Yarrow,Fortuna,ISAAC(基於RC4)。 如果你想更多地研究它,這是一個很好的開始:http://csrc.nist.gov/groups/ST/toolkit/index.html

0

如果你只是想要一個大的熵池,你可以做一些基本的事情,比如從噪聲數據流中獲取數據塊的SHA1(例如視頻或繁忙環境的音頻)。

那麼問題就變成了你想要的熵多少,以及多快?因爲「大數字」可能意味着任何事情,從一個項目的隨機比特的Gb到「我需要100k /秒的恆定熵熵」,這項服務「

0

如果你有硬件來做它會更好。如果它支持加密隨機數生成,請檢查您的CPU或任何其他模塊。在加密方面,/ dev/random和/ dev/urandom都不安全。您不應該將它們用作應用程序中的源代碼。