5

Linux で実際に乱数を生成するプログラムを書きたいのです/dev/randomが、後でその実行時間が許容できない場合があります。その C バージョンは一貫して高速に実行されます。

#include <iostream>
#include <fstream>
using namespace std;
int main(int argc,char*argv[])
{
    ifstream random("/dev/random", ios_base::in);
    int t;
    random.read(reinterpret_cast<char*>(&t), sizeof(t));
    cout << t << endl;
    random.close();
    return 0;
}

実行時間の時間統計

$: time ./random 
-1040810404

real    0m0.004s
user    0m0.000s
sys 0m0.000s

$: time ./random 
-1298913761

real    0m4.119s
user    0m0.000s
sys 0m0.000s
4

1 に答える 1

7

エントロピー プールを使い果たした可能性があります。エントロピーの作成 (OK ハーベスティング) は、ほとんど予測不可能な物理世界の品質をサンプリングするデバイス ドライバーに基づいています。ただし、これらのデバイスがあまりアクティブでない場合、またはエントロピーを生成するアルゴリズムが停止している場合は、からの読み取りも停止します/dev/random

使えます/dev/urandomか?そうでない場合は、より決定論的な方法でより多くのエントロピーを生成できる方法を検討する必要があります。

同様の問題に関する記事からのいくつかの提案を次に示します。

  • AED などのオーディオ エントロピー デーモンを使用して、オープン マイクを使用してデータセンターからノイズを収集します。VED などの Web カメラ ノイズ コレクターと組み合わせることもできます。他の情報源は、「ディスク デバイスの乱気流による暗号ランダム性」について語っています。:)
  • Entropy Gathering Daemon を使用して、ユーザー空間プログラムのランダム性から弱いエントロピーを収集します。
于 2013-07-17T04:44:58.920 に答える