私は混乱しています。以下によると、私の 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 を生成する前に呼び出すことができる回数も有限のようです。しかし、その有限数は何ですか。