Linux中的隨機數文件 /dev/random /dev/urandom


Linux中的隨機數可以從兩個特殊的文件中產生,一個是/dev/urandom.另外一個是/dev/random。他們產生隨機數的原理是利用當前系統的熵池來計算出固定一定數量的隨機比特,然后將這些比特作為字節流返回。熵池就是當前系統的環境噪音,熵指的是一個系統的混亂程度,系統噪音可以通過很多參數來評估,如內存的使用,文件的使用量,不同類型的進程數量等等。如果當前環境噪音變化的不是很劇烈或者當前環境噪音很小,比如剛開機的時候,而當前需要大量的隨機比特,這時產生的隨機數的隨機效果就不是很好了。

這就是為什么會有/dev/urandom和/dev/random這兩種不同的文件,后者在不能產生新的隨機數時會阻塞程序,而前者不會(ublock),當然產生的隨機數效果就不太好了,這對加密解密這樣的應用來說就不是一種很好的選擇。/dev/random會阻塞當前的程序,直到根據熵池產生新的隨機字節之后才返回,所以使用/dev/random比使用/dev/urandom產生大量隨機數的速度要慢。

下面是一個簡單的測試:

  1. [lichao@sg01 dd]$ dd if=/dev/random of=random.dat bs=1024b count=1 
  2.  
  3. 0+1 records in 
  4.  
  5. 0+1 records out 
  6.  
  7. 128 bytes (128 B) copied, 0.000169 seconds, 757 kB/s 
  8.  
  9. [lichao@sg01 dd]$ dd if=/dev/urandom of=random.dat bs=1024b count=1 
  10.  
  11. 1+0 records in 
  12.  
  13. 1+0 records out 
  14.  
  15. 524288 bytes (524 kB) copied, 0.091297 seconds, 5.7 MB/s 

可以看到使用/dev/random產生隨機數的速度很慢,而且產生的量很有限,當然,/dev/urandom的隨機效果則好很多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM