跳至內容

/dev/random

出自Taiwan Tongues 客語維基
這是此頁批准,以及是最近的修訂。

/ dev / random在類 UNIX 系統肚項係一個特殊个裝置檔案,做得用作亂數發生器抑係偽亂數來發生器。

實現

並毋係所有作業系統中个/ dev / random个實現都係共樣个。以下列舉了一兜作業系統當中个實現。

Linux

Linux 核心肝肚个係第一隻用背景噪聲產生正經个亂數產生个實現,佢允許程式存取來自裝置驅動程式或者其他來源个背景噪聲。

一九九四年,米國程式設計師曹子德(Theodore Y . Ts'o)第一擺在 Linux 核心中實現了亂數个發生器。用吔 SHA 種吔一張相互算法毋係密碼,來避開法律个限制。另外一隻原因係儘採分定个雜湊抑係密碼加密度弱,新亂數發生器在提高了密碼个強度。

發生器有一個容納噪聲資料个冤仇池,在讀取時,` / dev / random ` 裝置會轉來小於釜池噪聲總數个隨機位元組。` / dev / random ` 做得生成高隨機性个公鎖或者一擺性密碼本。係講釣魚仔空吔,著 ` / dev / random ` 个讀操作就會塞著,一直到收集著罅擺个環境噪聲為止。恁仔个設計使致得 ` / dev / random ` 係正經个亂數發生器,提供吔最大可能个亂數據,建議在需要生成高強度个金鎖匙時使用。

` / dev / random ` 个一隻副本係 ` / dev / urandom `(「 unblocked」,非阻塞个亂數發生器), 佢會重複使用五百五十六池當中个資料來產生假亂个數據。這表示對 ` / dev / urandom ` 个讀操作毋會產生堵塞塞,毋過佢輸出个E ` / dev / random ` 个。佢做得作生成較低強度密碼个偽亂數生成器,無建議用在生成高強度長期密碼。

` / dev / random ` 可能寫入,任何使用者都做得向176池裡背加入亂个數據。就算係寫非亂數據也係無害个,因為淨管理員做得喊 ioctl 來增加4679池大細。Linux 核心當前奸个值摎大小做得通過存取 ` / proc / sys/ kernel / random / ` 資料夾著个檔案得著。

二零零六年三月,Gutterman、Pinkas 摎 Reinman 發表了著啊 Linux 亂數發生器个詳細密碼學分析,其中提出了該發生器个幾個弱點。無定其中頭嚴重个問題發生在嵌入式系統和 Live CD 系統,恁仔路由器還過無盤工作站當中个應用。在這兜系統裡背,引導狀態係做得先測个,還過環境奸个來源乜比為受限制。對於有 NVRAM 个系統,佢兜建議在關機時儲存一部分亂數發生器个狀態,使得在下二擺開機个時使得恢復這兜狀態。對路由器來講,網路資料係重點个主要來源,佢兜認為在重新啟動前後儲存還有恢復資料可能要求潛在个人愛偷聽个人對路由器投入使用開始全部个網路資訊,或者直接取得路由器个內部狀態。佢兜寫講,這隻問題對無線路由器來講尤其關鍵,因為網路資訊做得遠端取得著,並可能用在產生資料加密用金鎖匙个隨機發生器。

FreeBSD

FreeBSD 作業系統實現了兩百五十六位个 Yarrow 演算法變體,以提供著偽亂數流。摎 Linux 个` / dev / random ` 無共樣,FreeBSD 个 ` / dev / random ` 毋會塞著,摎 Linux 个 ` / dev / urandom ` 相像,提供吔密碼學安全个假亂數發生器,毋係因為招呼水尾。還過 FreeBSD 个 ` / dev / urandom ` 係簡單个連結到哩 ` / dev / random `。

Yarrow 演算法个前提係現代个假亂數發生器个安全全性當高,係講內部狀態毋係攻擊人所知,還過比預估个還較好理解。在有兜情況下,攻擊者做得在某種程度頂高掌握奇怪个量,像係無盤伺服器个豺幾乎全部來自於網路,使得佢可能容易受著中間人攻擊个影響。演算法个仁會分規則个重設:在網路摎磁碟負載較輕个系統頂項,一秒內種子可能分人重設數擺。

FreeBSD 也支援硬體亂數發生器,還過在鬥吔當像硬體个時節會代 Yarrow 演算法。

二十零四年,Landon Curt Noll 測試咧 FreeBSD 五色二 . 佢等講一定會放一隻版本个 ` / dev / random `,發現佢毋係一隻密碼學強个亂數發生器,因為佢輸出在十億位測試當中顯示出了多隻一致性缺陷。共樣个欠陷也發生在這 Linux 二章四 . 二十一點二十,Solaris 八 patch 十八千五百二十八八十八合 Mac OS X 十股三 . 五个 ` / dev / random ` 中。

其他个作業系統

` / dev / random ` 摎 ` / dev / urandom ` 也存在於 Solaris、Mac OS X、NetBSD、OpenBSD、Tru 六十四 UNIX 五千八百五十一 B、AIX 五色二摎 HP-UX 十一 i v 二中。摎 FreeBSD 个實現相像,AIX 採用了佢自家个基於 Yarrow 个設計,毋過 AIX使用个壟源數量比標準還較低 ` / dev / random ` 个實現,還過在系統認為4679池个種作品達到吔罅值時停止寫充足个標準。

在 Windows NT 中,` ksecdd . sys ` 提供吔恁仔个功能,但係讀取特殊个檔案 ` \ Device \ KsecDD ` 並毋會提供摎 UNIX 中共樣个功能。開發文件當中講著个,用來產生密碼用亂數據个函式係 CryptGenRandom 摎 RtlGenRandom。

雖然 DOS 無原生个提供類似功能,毋過有開源个 Noise . sys 提供吔蓋像功能。該實現摎 ` / dev / random ` 个功能摎介面相像,就建立了兩個裝置,RANDOM $ 摎 URANDOM $,乜做得通過 / DEV / RANDOM $ 摎 / DEV / URANDOM $ 存取。

EGD

EGD(剪仔收集守護行程,Entropy Gathering Daemon)一般做得在毋支援 ` / dev / random ` 裝置个 UNIX 系統中提供相像个功能。這係一個執行於使用者態个守護行程,提供吔高品質个密碼用亂數據。一兜加密軟體,比將講 OpenSSL,GNU Privacy Guard 摎 Apache HTTP 伺服器支援在 ` / dev / random ` 做毋得用个時節用 EGD。EGD,抑係像个軟體,比將講 prngd,做得從多種來源收集假隨機个冤仇,還過對這兜資料進行處理以去除偏置,還過改善密碼个學品質,過吔允准其他程式通過 UNIX 域套介面(一般使用` / dev / egd-pool `), 抑係 TCP 套介面存時取佢輸出。這隻程式一般使用建立子行程个用查詢系統情形个方式來收集嫲包。佢查詢个情形一般係當容易變个、這預測毋得个,比將講 CPU、I/ O、網路个使用率,也可能係一兜紀錄檔案同臨時目錄當中个內容。

參考文獻

  • Biege , Thomas ; Analysis of a strong Random Number Generator Slides

參見

  • Unix 哲學
  • 標準流
  • / dev / full
  • / dev / null
  • / dev / zero
  • / dev* 硬體亂數生成器
  • 密碼學安全偽亂數生成器
  • Yarrow 演算法
  • Fortuna 演算法