RANDOM(4)

名前
random, urandom - カーネル乱数ソースデバイス

説明
(Linux 1.3.30 から提供されている) /dev/random 、 /dev/urandom キャラクタスペシャルファイルはカーネル乱数ジェネレー タへのインタフェースを提供する。 /dev/random ファイルはメジャーデバイスナンバー 1 マイナーデバイ ス番号 8 である。/dev/urandom はメジャーデバイスナンバー 1 マイ ナーデバイスナンバー 9 である。

乱数ジェネレータはデバイスドライバやその他の源からの環境ノイズを エントロピー・プールへ集める。 また、ジェネレータはエントロピー・プール内のノイズビットの数の見積りを 保存する。 このエントロピー・プールから乱数が生成される。

読み込みが行われると、 /dev/random デバイスはエントロピー・プールのノイズビットの数の評価値から、ランダム バイトのみを返す。 /dev/random はワンタイムパッド(one-time pad) や鍵の生成のような 非常に高い品質を持った無作為性が必要になる場合に適切であろう。 エントロピー・プールが空の時は、/dev/random からの読みだしは、更 なる環境ノイズが得られるまで、ブロックされる。

また、/dev/urandom デバイスから読み出しが行われた場合は、要求 された量のバイトを返す。その結果、もしエントロピー・プールに十分なエント ロピーが存在しない場合、返り値はこのドライバで使われているアルゴリズ ムに基づく暗号攻撃に対して、論理的には弱くなることになる。 この攻撃をどのように行うかという事については、現在研究論文などの 形で入手できる資料はない、しかし、そのような攻撃は論理的に存在可能である。 もし、この事が心配なら、(/dev/urandom ではなく) /dev/random を利用すればいい。

設定
システムにあらかじめ作成された /dev/random と /dev/urandom が存在しないなら、次のようなコマンドで作成できる。
        mknod -m 644 /dev/random c 1 8
        mknod -m 644 /dev/urandom c 1 9
        chown root.root /dev/random /dev/urandom

オペレータの操作なしに Linux システムでが起動した直後は、エントロピー・ プールは意外性の乏しい均一な状態にあるだろう。 これにより、エントロピー・プールの実際のノイズ量は評価値より少なくなる。 この効果を打ち消すために、シャットダウンから(次の)起動時まで持ち越した エントロピー・プールの情報が助けになる。 エントロピー・プールを持ち越すためには、Linux システムの起動動作の間に 走るスクリプトの適切な部分に、次のような行を付け加えれば良い。
 	echo "Initializing kernel random number generator..."
 	# 前回のシャットダウン (または、スタートアップ)から今回の
	# スタートアップに持ち越した乱数種を利用したカーネル乱数ジェネ
	# レータの初期化。
	# ロードを行い、その後、512 バイトのエントロピー・プールを
	# セーブする。
 	if [ -f /var/random-seed ]; then
		cat /var/random-seed >/dev/urandom
 	fi
	dd if=/dev/urandom of=/var/random-seed count=1
また、Linux システムのシャットダウン時に走るスクリプトの適切な部分に 次のような行を加える。
	# 乱数ジェネレータで用いるために、今回のシャットダウンから、次
	# 回の起動時まで乱数種を持ち越す。
	# 512 バイトの乱数ジェネレータのエントロピー・プールを保存する。
 	echo "Saving random seed..."
 	dd if=/dev/urandom of=/var/random-seed count=1

ファイル
/dev/random
/dev/urandom

著者
カーネル・ランダムナンバー・ジェネレータは Theodora Ts'o (tytso@athena.mit.edu) によって書かれた。

関連項目
mknod (1)
RFC 1750, "Randomness Recommendations for Security"

翻訳者
石川 睦 <ishikawa@linux.or.jp>