2012-01-26 5 views
3

楽しいことに私は暗号化の方法を実験してきました。私が使用しているメソッドの1つに、シード値が必要です。私は本当の乱数でそれを供給したいと思います。私は、例えばC++で標準のメソッドを知っていますが、これは擬似ランダムなので、本当に乱数を集める信頼できる方法があるのか​​疑問に思っていました。唯一の制約は、C、C++、およびJavaで実装可能でなければならないということです。種の中でより高いレベルのエントロピーを作成する方法

ありがとうございます。

明確化:Ubuntuを実行している間、このコードはWindowsシステムを実行する必要があります。

+0

これは、プラットフォームに合わせて必要なものによって異なります。一度は、エントロピー生成(パスワード生成)は、ユーザーからのランダムなマウスの動きを取得するのが一般的な方法です。 Linuxの場合は、 '/ dev/random'や'/dev/urandom'から読み込むことができます。それは本当にあなたが何のためにあなたの種子が必要なのか、そしてあなたがどこにいるのかによって決まります。 – Grizzly

答えて

3

多くのものがありますが、の任意のエントロピービットのソースは乱数ジェネレータになるため、用語は混乱しています。あなたは実際に "擬似乱数"について考えています。

今や、エントロピーソースのための多くの異なるスキームがあります。多くのUNIX系システムには、キャッシュサイズやメモリ内容などの物理的プロセスにさまざまな魔法を施して乱数を生成する/ dev/randomがあります。例えば、イベント間時間と放射能崩壊を使用する強力な情報源があります。

Fourmilab.chは、実際の乱数hereを提供します。

CCDは暗闇の中で保管されていますwork well

Lava lampsがいいです。

+0

説明してくれてありがとうございました。 – jozefg

+0

溶岩ランプは素敵です:-) –

+0

私は編集が間違っていると思います。実際の乱数でシードしたいのですが、他の擬似乱数ジェネレータに依存しない方式が必要です。おそらく、/ dev/randomは擬似ランダムであり、時間(NULL)はあまりランダムではありません。なぜなら、それは自己相関が悪いからです.100秒離れた秒数は2桁の数字でのみ異なります。 –

1

システムによっては、本当にランダムなデータのソースにアクセスすることができます。たとえば、Linuxの/dev/randomは、暗号的に強力なランダムビットのソースを提供します。それは通常遅いので、PRNGをシードするためにそれを使用することは、本当のランダム性を本当に必要としないときにそれを使用する良い方法です。

1

high-resolution performance countersの魔法は、おそらく良い種を与えるだろう。特に、マルチコアシステム、さまざまなCPU負荷などを考慮する場合

+0

これはどのようにjavaを実装するか考えていますか? – jozefg

+0

ここにはいくつかの言語で 'RTDSC'を使う方法の例があります。そして、値を使って適切な操作を行います(ビット単位のシフトなど)。 – lapk

0

チャーリーマーティンには、カメラ(ビデオまたは静止画)からの本当の乱数の良い出典があります。デジタルカメラのピクセルの最下位ビットを使用し、それらを必要な長さの文字列に連結すると、優れた乱数ジェネレータが得られます。

+0

それは合理的に良いですが、自己相関となるバンディングがある傾向があります。LandonのLavaRndサイトへのリンク(私の答えの2番目のリンク)は、効果を減らすために彼が何をしているかを説明します。 –