乱数とは
次に何が出るか予測できない数値です。
/dev/random vs /dev/urandom/
Linuxでは/dev/random と /dev/urandom の2つがあって、 前者は環境ノイズを使った乱数ですが、後者は暗号論的擬似乱数生成器です。
前者の方が「真の乱数」のようですが、以下の2つの問題があります。
- インストールした直後などに、エントロピー不足でブロックされることがある。
- 「環境ノイズ」が予測される可能性がある(仮想マシンなど)
manページには以下のように書かれています。 理論上は環境ノイズを用いた乱数より弱いが、 (一般向けに)現実的に弱いという話は見ていません。
/dev/urandom デバイスから読み出しでは、 エントロピーがより高くなるのを待つためのブロックは行われない。 十分なエントロピーがない場合、 要求されたバイトを作成するのに疑似乱数生成器が使用される。 その結果、この場合の返り値はこのドライバで使われている アルゴリズムに基づく暗号攻撃に対して、論理的には弱くなることになる。 この攻撃をどのように行うかという事については、 現在研究論文などの形で入手できる資料はない、 しかし、そのような攻撃は論理的に存在可能である。
なので、ほとんどの場合は /dev/urandom でいいんじゃないかなぁと思います。