2012-03-17 10 views
6

暗号化されたファイルがAES CBCで暗号化されている場合、ファイルのどこかでランダムなバイトを変更すると、復号化できなくなります。AES CBCによって暗号化されたファイルの1バイトを変更すると、それ以上復号化できなくなるでしょうか?

バイトが変更された時点までのすべてが大丈夫ですが、それ以降は解読できないと私の理解は正しいですか?

+3

AFAIK、それはまだ解読されますが、あなたには異なる平文が与えられます。 – SLaks

+1

パディングが使用され、最後のブロックが別のプレーンテキストに解読されている場合、実装**はエラーを返すかもしれません。例えば。 Javaの場合は、プレーンテキストにパディングを適用できない場合、BadPaddingExceptionが発生します。 –

+0

@owlstead:はい。だから私は_usually_と言った。 – SLaks

答えて

8

これは間違いです。 AESはブロック単位でデータを暗号化/復号化します(特に128ビットブロック)。さらに、CBCモードでは、(i + 1)番目のブロックの暗号化/復号化は、 (i)番目のブロックに依存します。

もしランダムバイトがi番目のブロックに入っているなら(単純に2つのブロック間でバイトが交差しないと仮定しましょう)、i番目のブロックを解読すると間違った解読をします128ビットのブロックは正しくありません)。さらに、次のブロックはi番目のブロックを使用して暗号化されているため、i + 1番目のブロックも誤って復号化されます(別の128ビットは別名16バイト)。そこから、後続のブロックは正しいでしょう(前のすべてのブロックと同じです)。

詳細については、Modes of Encryptionをウィキペディアで読むことにします。

もう1つ:ランダムバイトを変更することで、復号化が行われない可能性は低いです。もちろん、元の平文(もちろん)は得られません。

希望に役立ちます!

+0

不正なバイトがパディングにある場合、復号化全体が "Bad Padding" @owlsteadが言ったように、エラー。 – rossum

+0

@mrfrankli暗号化前の平文の1バイトの変更が後続のブロックごとに変更される理由は分かりませんが、暗号化されたテキストへの1バイトの変更では同じではありません解読後。私はwikiページを読んだが、まだ分かりませんでした。その理由をもう少し詳しく説明できると思いますか? – Kyle

+0

暗号文の計算中、最後の暗号ブロックはプレーンテキストとXORされます。プレーンテキストの何かを変更すると、そのプレーンテキストのcryptedブロックが変更され、次のブロックのプレーンテキストとXORされたベクトルが最後まで変化します。暗号テキストを変更すると、そのブロックの平文が変更されます。次のブロックのプレーンテキストとXORされたベクトルもまた異なるので、そのブロックでは1バイトの損失が生じます。次のブロックの暗号テキストは変更されないので、次のブロックのベクトルはOKです。 –

関連する問題