/dev/random
読み:デヴ-ランダム
外語:/dev/random
乱数生成器を表わすスペシャルファイル。
目次
概要
実装
Linux
処理
ブロック
RDRANDの問題
FreeBSD
概要
実装によって異なるが、
疑似一様乱数
または
真性乱数
を返す。
このスペシャルファイルは、ハードウェアにより生成された乱数、またはエントロピープールにため込んだ環境ノイズへのアクセスを提供している。
この機能は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へのシンボリックリンクとなっている。
再検索