One Time Pad システムを構築する必要があり、そのために独自の TRNG を構築する必要があります。大気ノイズを記録し、それを使用して乱数を生成する方法を知りたいです。これまでに .wav ファイルを記録して Java で読み取ろうとしましたが、値はあまりランダムではないようです。助言がありますか?Random.org については知っていますが、彼らのジェネレーターを実際に使用することはできません。自分で構築する必要があるため、Random.org の人々がどのように数値ジェネレーターを構築したかについての洞察が必要です。 「偶然性」の源。
6 に答える
非リアルタイム ソリューション
できることは、事前に部屋の周囲の音声を録音し、一時的な WAV ファイルを保存することです。RIFF 仕様に基づく WAV ファイルの仕組みを知っている場合。次に、長さが 44 バイトの WAV ヘッダーを取り除きます。次に、オーディオ バイトを読み取り、WORDS、DWORDS、または BYTES のいずれを生成するかに応じて適切な変換を行います。それはあなた次第です。次に、操作するランダムな値がいくつか必要です。次に、それらのランダム値を適宜使用します。
リアルタイムソリューション
これをJavaでプログラミングするのか、他の言語でプログラミングするのかわかりません。さらに、意図したプラットフォームがわかりません。そのため、リアルタイム オーディオ処理ライブラリをお勧めすることはできません。
C# の場合、NAudio を使用でき、オーディオをリアルタイムで録音し、オーディオ バイトを受信できます。次に、オーディオ バイトを DWORD、QWORD、WORD などに変換できます。いくつかのランダムな値を持つことができるはずです。乱数の生成が停止したら、記録を停止し、管理されていないリソースを解放することを忘れないでください。
WAV ファイル仕様に関する優れたリソース
答えは不明で、おそらく意図的にそうなっています。確かではありませんが、このサイトは慈善活動と営利活動を組み合わせたもののようです。各無線ソースは、数 Kbps のランダム データしか生成しません。彼が多くのリンクでそれをどのように説明しているか、CSRNGの証拠は見当たりません。それは問題ではありません。OTP の目的では、真にランダムでない場合、それは美化されたストリーム暗号です。(それはブルースや他の人がいつも言っていることだと思います。)
優れた CSRNG が壊れた時期を思い出すのは難しいと思います。ISAAC や適切に実装されたブロック/ストリーム暗号などを使用することをお勧めします。Perfect Paper Passwords はこれを行います。上記の暗号/アルゴリズムを使用して、Fortuna の内部で Fortuna 構築を使用し、ランダム データの大部分を生成します。Fortuna システムには、TRNG によって定期的にデータが注入されることがあります。予算内で最高の TRNG は、random.org とローカルで生成されたものです。最も安価なハードウェア ソリューションは、300 ドルの VIA パドロック (TRNG + SHA-1、SHA256、AES、および RSA のアクセラレーション) を備えた VIA Artigo ボードです。物事を使用するのに役立つライブラリもあります。(ネットワーク負荷の下でプロセッサのタイミングを使用する疑似 TRNG もあります。)
暗号は通常、チェーン内で最も強力なリンクであることを忘れないでください。システム セキュリティは、プロセッサ、ファームウェア、周辺機器ファームウェア (esp DMA)、カーネル モード コード、OS、信頼できるミドルウェアまたは OS 機能、アプリケーションなど、さまざまなレベルで存在します。全体としてのセキュリティには、ユーザー、ポリシー、物理的セキュリティ、EMSEC などが含まれます。RNG について過度に心配している人は、通常、労力を無駄にしています。承認された解決策または上記の何かを使用してください。次に、残りに集中します。特に、人とシステムがどのように相互作用するか。構成、パッチ適用、OS の選択、ポリシー。ほとんどの問題はそこで発生します。
random.org の記事を思い出しましたが、今は見つけられないようです。私が覚えているのは、彼らが測定していたノイズの LSB を使用したことです。MSB は確かにランダムではありません。次に、lsb に基づいて 1 と 0 の文字列を生成しました。単純なバイナリ変換のようなばかげたことをしないでください。それはうまくいきません。lsb の分布をより均一なサンプリングにするために、ノイズをバイナリでサンプリングする必要があるかもしれません。
均等な分布を確保するために彼らが使用したトリックは、この 1 と 0 の文字列を乱数として使用しないことでした。代わりに、一度に 2 ビットずつ文字列を解析します。ビットが一致するたびに (つまり、00 または 11)、ランダムな文字列に 1 が追加されました。ビットが反転するたびに (つまり、01 または 10)、ランダムな文字列に 0 が追加されました。
独自の TRNG を作成する場合は、必ず確認してください。
ソフトウェアから実際の乱数を取得することはほとんど不可能です。wav ファイルの静的なデータでさえ、コンピュータによって生成される定期的な EMI の影響を受ける可能性が高く、完全にランダムではありません。
特別なハードウェアを使用できますか、それとも純粋なソフトウェアに固執する必要がありますか? 疑似乱数がニーズを満たさないのはなぜですか? 比較的少数のランダムサンプルで問題なく動作します。OTP で乱数を使用したいので、大規模には使用しないと思います。
もう少し詳しく教えていただけますか?