0

私は混乱しています。以下によると、私の IV は暗号化のすべてのラウンドで一意である必要があります。

IV のプロパティは、使用される暗号方式によって異なります。基本的な 要件は一意性です。つまり、同じキーで IV を再利用することはできません。ブロック暗号の場合、IV 値が繰り返されると、暗号化方式が電子コードブック モードに移行します。IV と平文が等しいと、暗号文が等しくなります。- https://en.wikipedia.org/wiki/Initialization_vector

.NET AesCryptoServiceProvider クラスを使用しています。GenerateIVを使用して新しい IV を生成し、その IV を暗号テキストと共にリモート エンドポイントに送信します。リモート エンドポイントは、IV と非公開共有キーを使用してパケットを復号化します。

私のパケットは XML であるため、常に同じ先頭テキストで始まります。(例: "<SomeTag ...>unique_text</SomeTag>")

私のキーは、キーの 5 ~ 10 分間の有効期間中に、数千回の暗号化/復号化サイクルにわたって存続する可能性があります。同じ IV を 2 回生成する前に、GenerateIV を何回呼び出すことができますか? または別の言い方をすれば、GenerateIV は何サイクルに適していますか? 五、十、百、千、百万?

問題のコードは次のとおりです。

_sessionKeys[_currentSessionKeyId].GenerateIV();
var key = _sessionKeys[_currentSessionKeyId].Key;
var iv = _sessionKeys[_currentSessionKeyId].IV;

ICryptoTransform encryptor = _sessionKeys[_currentSessionKeyId].CreateEncryptor(key,iv);

AesCryptoServiceProvider.GenerateIV によって生成された IV のサイズが有限であることを考えると、重複する IV を生成する前に呼び出すことができる回数も有限のようです。しかし、その有限数は何ですか。

4

1 に答える 1

2

IV には 128 ビット (16 バイト) があります。ウィキペダの誕生日攻撃に関するページ(プールからランダムに値が引き出される確率) によると、0.0000000000000001% の確率で任意の数値が 2 回表示されるには、関数を約 26,000,000,000 回呼び出す必要があります。任意の数値が 2 回表示される確率を 1% にするには、2,600,000,000,000,000,000 回呼び出す必要があります。

これは、GenerateIV が均等な分布を与える「優れた」乱数ジェネレーターを持っていることを前提としています。

于 2015-09-09T06:11:14.080 に答える