web-dev-qa-db-ja.com

どのくらいのデータ暗号化(AES-256)の後、キーを変更する必要がありますか?

AES-256暗号化を考えると、1つのキーで暗号化する必要があるデータの最大量はいくつですか?ブロック暗号モード/ IV /カウンターも制限を管理しますか?

最大容量が50GBだとすると、50GBの1つのファイルに制限があるか、10GBの5つのファイルに制限があるということですか?

12
Deepesh M

ブロック暗号は Pseudorandom permutation です。キーは、ブロック値のスペースの可能な順列のセット(このスペースにはサイズ2がある)のセットでランダムに見えるように関数を選択します128 AESの場合、128ビットのブロックがあるため)。 疑似ランダム関数 のように見える限り、PRPのほとんどの使用法は問題ありません。 PRPとPRFの違いは、PRPが提供する可能性があるのに対し、PRPは2つの異なる入力に対して2つの同一の出力を提供しないことです。ただし、ランダムに選択されたfunctionを使用すると、このような衝突はランダムに発生するだけであり、多くの呼び出しが必要になります。平均して、2N/2 サイズNのブロックを処理する場合の呼び出し.

Translation:2つ以上暗号化する場合64 AES(つまり、268 バイト(AESブロックは16バイトなので)、AESはPRFよりもPRPのように見え始めます。そこで停止する必要があります。これは2億5,000万テラバイトを超える量であり、かなりの量です。

上記のデータ量が、「ファイル」と呼んでもよいものとして10億、100億、420億のいずれとして処理されたかは関係ありません。 AESは16バイトのブロックを処理し、他に何も知りません。一方、実際には到達しないので、まったく問題ありません268 バイト制限:AESは128ビットブロックで正確に定義されているため、キーが不足することを心配せずにテラバイトのデータを暗号化できます。 AESが指定されたとき、それは DES を置き換えることを意味し、その64ビットブロックサイズwasは本当に心配(232 8バイトのブロック、つまり32ギガバイトで、今日のマシンでは非常に簡単にアクセスできます)。

鍵のサイズは、そのことに関しては何の関係もありません。それはすべてブロックサイズについてであり、それはAESの128ビットです(キーサイズに関係なく)。

12
Tom Leek

Thomas Pornin(もう一人のクマ)は、暗号化モードが暗号のこの側面にどのように影響するかについて 優れた説明 を投稿しました。簡単に言えば、前のブロックの出力を使用して次のブロックの状態を設定すると、自分自身を繰り返すリスクを負うことになります。

特にOFBモードでは、パターンが繰り返されるとループに陥ります。これは非常にタイトなループである可能性があります。または、すべての可能な値が探索されるまでループがまったく繰り返されない可能性があります。平均ループサイズはN/2ビットです。具体的には、2N 可能な状態の合計、平均して、2を実行しますN/2 繰り返す前にそれらの状態の。通常、状態カウンターはブロックと同じサイズなので、ブロックサイズは128ビットなので、平均して2を循環します。64 繰り返す前にブロック(ビットではなく、バイトではない)。

逆に、「カウンターモード」(「CTR」)操作では、暗号状態として単純なカウンターが使用されます。つまり、繰り返す前に可能な限りのスペース全体を循環することが保証されます。したがって、状態が128ビットの場合、2つすべてを循環します。128 繰り返す前の状態。

そのサイズのスペースは事実上無限であることを指摘する価値があります。これは、キーを変更する前の約5,000,000,000,000,000,000,000,000,000,000,000,000,000バイトです。そして、それは128ビットのブロックです。 256ビットブロックでは、ゼロの数が2倍になります。

CBCモード(おそらく最も一般的)は、特定の暗号ブロックの出力を使用して次のブロックの状態を設定します。つまり、状態は前のブロックのcontentに大きく影響されます暗号化されたブロック。つまり、サイクルの存在とサイズ(存在する場合)は、暗号化されるプレーンテキストによって部分的に決定されます。これにより、数学の精度は少し低下しますが、OFBモードの場合よりも悪いパフォーマンスは期待できません。

TL; DR:CTRモードを使用し、キーの切り替えを邪魔しないでください。

6
tylerl