/dev/randomおよび/dev/urandom文字デバイスの作成方法


/dev/randomおよび/dev/urandomは、乱数を生成するためのカーネル乱数ソースデバイスである.乱数を生成する原理は,現在のシステムのエントロピープールを用いて一定数のランダムビットを計算し,これらのビットをバイトストリームとして返すことである.エントロピープールは現在のシステムの環境騒音であり、エントロピーはシステムの混乱の程度を指し、システム騒音はメモリの使用、ファイルの使用量、異なるタイプのプロセス数など、多くのパラメータで評価することができる.現在の環境ノイズの変化が激しくない場合、または現在の環境ノイズが小さい場合、例えば電源を入れたばかりのとき、現在大量のランダムビットが必要である場合、発生したランダム数のランダム効果はあまりよくありません.
これは、/dev/urandomと/dev/randomの2つの異なるファイルがあり、後者は新しい乱数を生成できない場合にプログラムをブロックしますが、前者は(ublock)しません.もちろん、乱数の効果はあまりよくありません.これは暗号解読のようなアプリケーションにとって良い選択ではありません./dev/randomは、エントロピープールに基づいて新しいランダムバイトが生成されるまで、現在のプログラムをブロックするため、/dev/randomを使用するよりも/dev/urandomを使用して大量のランダム数を生成する速度が遅い.
この2つのファイルがシステムに存在しない場合は、次のコマンドで作成できます.
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 random number generator..."
    random_seed=/var/run/random-seed
    # Carry a random seed from start-up to start-up
    # Load and then save the whole entropy pool
    if [ -f $random_seed ]; then
        cat $random_seed >/dev/urandom
    else
        touch $random_seed
    fi
    chmod 600 $random_seed
    poolfile=/proc/sys/kernel/random/poolsize
    [ -r $poolfile ] && bytes='cat $poolfile' || bytes=512
    dd if=/dev/urandom of=$random_seed count=1 bs=$bytes

また、Linuxシステムのシャットダウン中に実行される適切なスクリプトに、次の行を追加します.
# Carry a random seed from shut-down to start-up
    # Save the whole entropy pool
    echo "Saving random seed..."
    random_seed=/var/run/random-seed
    touch $random_seed
    chmod 600 $random_seed
    poolfile=/proc/sys/kernel/random/poolsize
    [ -r $poolfile ] && bytes='cat $poolfile' || bytes=512
    dd if=/dev/urandom of=$random_seed count=1 bs=$bytes