2011-12-06 16 views
2

我在內核中使用kubuntu 2.6.38-12-generic爲什麼讀取/ dev/random幾乎總是阻塞?

我想在程序開始時從/ dev/random讀取16個隨機數。 但是,它在相對較短的時間後會阻塞。

/dev/random緩衝區填充需要多長時間?爲什麼需要這麼長時間才能填滿。

我用它作爲一個uuid發生器與其他隨機性來源添加到種子 我mersenne龍捲風。關鍵是我不會得到重複的或重複的種子。

如果我更改爲/ dev/urandom,它工作正常。關於在/ dev/urandom上使用/ dev/random的任何視圖。

+0

參見http://superuser.com/questions/359599/why-is-my-dev-random-so-slow-when-using-dd –

回答

11

你真的不應該使用/dev/random。沒有已知的情況,/dev/random優於/dev/urandom的優點,並且缺點非常明顯。

不同之處在於/dev/urandom只提供了密碼安全的隨機數,而/dev/random提供了真正的隨機數(至少,這是我們認爲的)。但是並不存在這種差異很重要的已知情況,並且沒有已知的測試可以將「真實」隨機性與僅僅密碼安全的隨機性區分開來。

我通常開玩笑說/dev/urandom提供了水,/dev/random提供了神聖的水。

+2

更正確地說,沒有已知的多項式時間算法能區分/ dev/urandom和一個真正的隨機流的時間比可以忽略的很小的一小部分。 –

3

從/ dev/random讀取是不確定的,因爲它所做的只是從隨機池中獲取請求的位數。它會阻塞,直到它可以讀取請求的位數。

然而,/ dev/urandom是內核的PRNG,並且可以提供接近無限的僞隨機數字流。

2

man 4 randomman page回答了這個問題:

When read, the /dev/random device will only return random bytes within 
    the estimated number of bits of noise in the entropy pool. /dev/random 
    should be suitable for uses that need very high quality randomness such 
    as one-time pad or key generation. When the entropy pool is empty, 
    reads from /dev/random will block until additional environmental noise 
    is gathered. 

我很驚訝人們喜歡問比閱讀手冊頁!您甚至不需要使用Internet來閱讀系統的手冊頁。

+0

其實我讀過這個。我應該問:「爲什麼當我只讀最多100個4字節的數字時,熵池空空如此之快?然後需要很長時間才能讀取更多的信息 – Matt

+2

」熵池「是由物理現象(取決於硬件)饋送的,例如鼠標移動,按鍵,以太網數據包等。一些處理器有一個硬件隨機噪聲發生器(但不是全部),但大多數沒有。 /隨機'很貴! –