/dev/random
読み:デヴ-ランダム
外語:/dev/random

 乱数生成器を表わすスペシャルファイル。
目次

概要
 実装によって異なるが、疑似一様乱数または真性乱数を返す。
 このスペシャルファイルは、ハードウェアにより生成された乱数、またはエントロピープールにため込んだ環境ノイズへのアクセスを提供している。
 この機能はLinuxで最初に実装され、他のUNIX系OSにも実装されるようになった。従って、全てのUNIX系OSに実装されているわけではない。

実装

Linux

処理
 Linuxでは、drivers/char/random.cで定義されている。
 処理の簡単な内容としては、環境ノイズをエントロピープールに溜め込んで、そこから乱数を生成している。Linuxの実装の精神は、特定のソースに依存することなく、様々な乱数ソースを用いて乱数を生成することにある。何らかの乱数ソースに大きい偏りがあったとしても、品質のよい乱数が生成されると期待される。

ブロック
 起動直後などで、まだエントロピープールに環境ノイズがない時に/dev/randomにアクセスすると、ノイズが溜まるまでブロックされるような実装である。
 ブロックされない、unlockedなデバイスとして/dev/urandomも用意されており、こちらは内部プールを利用し計算によって乱数を算出する。ブロックされないが、代わりに乱数としての質は悪いことになる。

RDRANDの問題
 Intelは、Ivy Bridgeからはハードウェアの乱数生成器と新命令RDRANDを搭載した。
 これに伴いLinuxの/dev/randomに対し、IntelからはRDRANDに依存した実装にするよう要請されたというが、開発者のTheodore Y. "Ted" Ts'oはこれを拒否した。
 その後「IntelはNSAからの要求を飲んでRDRANDに何かを仕込んだようだ」という噂が立ち、Theodore Ts'oは、「Intelの要求を蹴飛ばして置いて良かった。監査しようのない、チップ内に封入されたハードウェア乱数生成器に頼るなんて、最悪だよね。」と安堵している。

FreeBSD
 FreeBSD(OS Xを含む)では、/usr/src/sys/dev/random以下にソースがある。
 古いFreeBSDの実装は現在のLinuxと似たような方法を用いていたが、現在はYarrow algorithmと呼ばれる疑似乱数生成器の実装を用いている。
 全て計算から得ているFreeBSDの実装では/dev/randomがブロックされることはない。また、Linuxとの互換性のため/dev/urandomも用意されているが、これは/dev/randomへのシンボリックリンクとなっている。

再検索