1

私はCで非常に大きなランダム整数の生成に取り組んでいます。/dev/randomが優れたソースであることがわかりましたが、エントロピープールが使い果たされるとブロックされます。/ dev / urandomは次のgotoのように見えましたが、ランダム性の品質は比較するとそれほど良くありません。/ dev / randomからの整数を使用してPRNGをシードし、/ dev / randomから読み取りを続ける必要がないようにする方法はありますか?長期的ではありませんが、暗号的に安全なPRNGを探しています。

4

4 に答える 4

7

からの整数を使用し/dev/randomてPRNGをシードするのは、まさにそのため/dev/urandomです。urandomに特定の弱点があるという証拠がない限り、車輪の再発明を行っています。

urandomがより弱いのは事実ですが/dev/random、提案されたスキームはまったく同じように弱いので、urandomを使用するよりも利点はありません。urandomには、基盤となるハードウェアから新しいエントロピーが利用可能になると、生成された数値に新しいエントロピーを継続的に混合できるという追加の利点があります。たとえば、FreeBSDにはurandomスタイルのデバイスしかありません。

最後に、urandomは何年も前から存在しており、そのソースはセキュリティの専門家によってレビューされていますが、自分でロールできる代替品の場合はそうではありません。

于 2013-03-14T19:38:22.073 に答える
0

プラットフォームに依存する可能性があります。すでに/dev/randomに暗号化された安全なPRNGを使用しているものもあります。例:FreeBSD、OpenBSD、OSX。Yarrow、Fortuna、ISAAC(RC4に基づく)も見ることができます。これは、さらに調査したい場合に開始するのに適した場所です:http: //csrc.nist.gov/groups/ST/toolkit/index.html

于 2013-03-14T19:42:19.063 に答える
0

エントロピーの大きなプールが必要な場合は、ノイズの多いデータストリーム(たとえば、ビジー環境のビデオやオーディオ)からデータブロックのSHA1を取得するなど、基本的なことを行うことができます。

問題は、どのくらいのエントロピーが必要で、どれだけ速くなるかということです。「大きな数値」とは、プロジェクトのランダムビットのギガバイトから「このサービスには100k/秒の一定のエントロピーストリームが必要」までのすべてを意味する可能性があるためです。

于 2013-03-14T19:45:26.687 に答える
0

あなたがそれをするためのハードウェアを持っているならば、それはさらに良いでしょう。暗号化乱数生成をサポートしている場合は、CPUまたはその他のモジュールを確認してください。/ dev/randomと/dev/ urandomはどちらも、暗号化の観点から安全ではありません。それらをアプリケーションのソースとして使用しないでください。

于 2013-03-15T02:01:14.910 に答える