0

ランダム データ (キー、IV など) を生成する必要がありますが、それを行う正しい方法が見つからないようです。

背景は次のとおりです。Visual Studio を使用して Windows 上の c/c++ でサーバーを開発しており、openssl1.0.1c ライブラリを使用しています。

http://www.openssl.org/docs/crypto/RAND_add.html#でopensslを使用したランダムデータ生成のドキュメントを読んでいて、次のことに出くわしました-

"

OpenSSL は、PRNG 状態がスレッドごとに一意であることを確認します。/dev/urandom を提供するシステムでは、乱数デバイスを使用して PRNG を透過的にシードします。ただし、他のすべてのシステムでは、アプリケーションは RAND_add()、RAND_egd(3)、または RAND_load_file(3) を呼び出して PRNG をシードする必要があります。

num == entropy の場合、RAND_seed() は RAND_add() と同等です。

RAND_event() は、マウスの動きやその他のユーザー操作などの Windows イベントからエントロピーを収集します。ウィンドウ プロシージャに送信されるすべてのメッセージの iMsg、wParam、および lParam 引数を指定して呼び出す必要があります。イベント メッセージ (存在する場合) に含まれるエントロピーを推定し、PRNG に追加します。その後、プログラムは通常どおりメッセージを処理できます。

RAND_screen() 関数は、Windows プログラマの便宜のために利用できます。画面の現在のコンテンツを PRNG に追加します。Windows イベントをキャッチできるアプリケーションの場合、RAND_event() を呼び出して PRNG をシードすると、ランダム性が大幅に向上します。ユーザーの操作なしで実行されるサーバーでは、両方の方法を使用できないことに注意してください。 "

現在、私のサーバーは無人モードで実行されているため、Rand_event() および Rand_screen() メソッドを使用できないと思います。Windows で Rand_bytes() メソッドを安全に使用するにはどうすればよいですか? エントロピーを含むファイルをまだ持っていないため、RAND_load_file() は問題外であり、EGD のドキュメント ページのリンクには、Windows でサポートされている EGD がないようです。Rand_bytes() を使用してキー/ivs/ソルトなどを生成できるように、openssl ランダム データ ジェネレーターに十分なエントロピーがシードされていることを確認するにはどうすればよいですか?

4

2 に答える 2

0

RAND_bytes初期化を気にせずに簡単に呼び出すことができるはずです。参照されているマニュアル ページの意味はよくわかりませんが、少し古くなっているのではないかと思います。OpenSSL には、RAND_bytes の OS 固有の初期化コードがあります。たとえば、v1.0.0c はCryptGenRandomRAND_poll利用可能な場合に呼び出します。

ただし、RAND_bytes の戻り値を確認することはおそらく理にかなっています。初期化コードが十分なエントロピーを生成できなかった場合、エラーが返されます (成功を示すために 1 が返されます)。

于 2012-05-14T23:24:27.950 に答える
0

EGDW (The Entropy Gathering Daemon for Windows)を試すことができます

于 2012-09-27T20:46:07.900 に答える