2

私は Windows Phone 用のアプリに取り組んでおり、ワンタイム パッド暗号化のキーとして使用する 1MB のランダムなバイト プールが必要です。最初にバイト配列を作成し、組み込みの RNGCryptoServiceProvider (アプリは c# で作成) によって生成されたバイトで埋める予定です。また、加速度計、カメラ、マイク、タッチなどのソースからの情報を使用します。次に、この情報を各プール ビットとビット単位で xor します。

これは安全なアプローチですか、それともより良い/安全な方法はありますか?

4

1 に答える 1

2

わかりました、パート 1 に対処するコメントがいくつかあるようですが、これは安全ですか。質問 2 に進みますが、より安全な方法はありますか?

このパズルには、鍵の生成、鍵の配布、および暗号化という 3 つのピースがあります。

キー配布と暗号化の実証済みの真の方法に固執することを強くお勧めしますが、サンプリングされた入力デバイスからのキー生成にエントロピーを追加することは役に立ちません。

秘訣は、ハッシュ関数を使用して、そのエントロピーをキーに蓄積して「ホワイトニング」することです。たとえば、言及したすべてのエントロピー ソースからデータを収集し、それらを SHA-256 でハッシュして、そのすべてのエントロピーを管理可能なスペースにパックしてランダム化し、前に提案したように RNGCryptoServiceProvider データと XOR することができます。

これで、追加した野生のエントロピーによって、PRNG から真の RNG が作成されました。

より多くのエントロピーを収集したら、元のハッシュを新しいデータでハッシュして、古いエントロピーが新しいエントロピーでマッシュアップされるようにします。このようにして、最終的にハッシュ長に相当するエントロピーを蓄積します。

ただし、その状態に到達するまでにかかる時間を計算するのは困難です。

于 2012-07-24T16:54:54.830 に答える