跳至內容

/dev/random

出自Taiwan Tongues 台語維基
於 2025年8月19日 (二) 21:55 由 TaiwanTonguesApiRobot留言 | 貢獻 所做的修訂 (從 JSON 檔案批量匯入)

(差異) ←上個修訂 | 已批准修訂 (差異) | 最新修訂 (差異) | 下個修訂→ (差異)

/ 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 ` 的讀操作袂產生阻塞,毋過其實輸出的問題可能是細漢 ` / dev / random ` 的。伊會當做生成較低強度密碼的偽亂數生成器,無建議用佇生成高強度長期密碼。

` /dev / random ` 嘛允准會寫入去,任何使用者攏會當向鋪池加入亂數據。就算寫入去非亂數據亦是無害的,因為干焦彼號管理員會使呼叫 ioctl 增加增加鋪池的大細。Linux 核心中當前瞻的值和大小會當通過存取` / proc / sys / kernel / random / ` 資料鋏著的檔案得著。

二空空六年三月,Gutterman、Pinkas 和 Reinman 發表矣著 Linux 亂數發生器的詳細密碼學分析,其中提出應該發生器的幾个弱點。凡勢其中上嚴重的問題發生佇1875入式系統佮 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 ` 的實現,並且佇咧系統認為講鋪池的枋達到有夠值的時陣停止填充著鋪池。

佇咧 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、網路的使用率,嘛可能是一寡紀錄檔案佮臨時 kha-tá-lok-guh 中的內容。

參考文獻

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

參見

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