Crypt::Random
Linux のスペシャルデバイスを使用して乱数を生成する。
use Crypt::Random qw( makerandom );
モジュールをロードして関数をエクスポートする。
my $r = makerandom ( Size => 512, Strength => 0 );
乱数を生成する。perl のスカラ値ではなく、10進文字列表記された値を戻すので、2048bit とか 4096bit
などの大きな乱数も生成できる。
Sizeビット長の乱数が生成される。Sizeビット未満の乱数が生成される事はない(最上位ビットは必ず1である)。
Strength => 1 の場合は /dev/random Strength => 0 の場合は /dev/urandom を使う。
一般には、/dev/random の方がエントロピーが高い(/dev/random は、環境ノイズをエントロピー源にした乱数、/dev/urandomは擬似乱数なので、正しい言い方とは言い難いが…)と言われるが、実測してみると、環境ノイズ(例えば、デバイスドライバに対するランダムなアクセス)が少ない環境(例えば、アクセス頻度が低く、同じような動作しかしない暇なサーバ)では、/dev/randomは、十分なエントロピーを提供しない。
/dev/randomは、エントロピープールが空になると乱数生成をブロックするが、”十分なエントロピーが蓄積されていない”状態では、そのまま乱数を生成してしまう。random (4) のmanページに書かれているように、/dev/random のエントロピーはなるべく消費しない様にするのが望ましいので、長期間使用する暗号鍵以外は、/dev/urandom を使うのが望ましい。