[ < ] [ > ]   [ << ] [ Up ] [ >> ]         [Top] [Contents] [Index] [ ? ]

2.7 ランダムデータのソース

shuf, shred, sort コマンドは、 作業を行うためにランダムデータを必要とすることがある。たとえば、‘sort -R’ ではハッシュ関数をランダムに選ばねばならず、その選択のためにランダムデータを必要としている。

デフォルトでは、こうしたコマンドは、プログラム内部の擬似乱数ジェネレータを、 少量のエントロピーによって初期化して使用するが、 ‘--random-source=file’ オプションで、 外部ソースを使うように指示することもできる。 file の中身のバイト数が不十分なときは、エラーが通知される。

たとえば、デバイスファイル ‘/dev/urandom’ を、 ランダムデータのソースとして使用してもよい。通常、このデバイスは、 デバイスドライバーなどのソースから環境ノイズを集めて、エントロピー・プールに入れ、 そのプールを使って、ランダムなビットを生成する。プールにデータが足りない場合は、 内部プールを再利用し、暗号的に安全な擬似乱数ジェネレータを使って、 より多くのビットを作り出す。 とは言え、このデバイスは、大量のランダムデータの生成のために設計されたものではなく、 比較的動作が遅いことは、承知しておいた方がよい。

たいていの実用には、‘/dev/urandom’ で十分だが、 プライベートなデータの高度で長期に渡る保護が必要になるアプリケーションでは、 ‘/dev/random’ や ‘/dev/arandom’ のような他のデータソースが必要になるかもしれない。 どんなデータソースが利用できるかは、ご使用のオペレーティング・システム次第だ。

前回コマンドを実行したときの結果を再現するには、 何らかのランダムデータをファイルに保存しておき、 そのコマンドの一回目の実行でも二回目の実行でも、 ランダムソースとしてそのファイルを使用すればよい。 ファイルを使用する代わりに、たとえば、次のような方法を使っても、 ある値を種として与えたときの、再現性のある適当な量の擬似ランダムデータを生成することができる。

 
get_seeded_random()
{
  seed="$1"
  openssl enc -aes-256-ctr -pass pass:"$seed" -nosalt \
    </dev/zero 2>/dev/null
}

shuf -i1-100 --random-source=<(get_seeded_random 42)

This document was generated on June 7, 2022 using texi2html 1.82.