2012-03-17 7 views
6

Jeśli mam zaszyfrowany plik, który jest zaszyfrowany za pomocą AES CBC, czy zmiana losowego bajtu gdzieś w pliku spowoduje, że nie będzie już można go odszyfrować?Czy zmiana 1 bajtu w pliku zaszyfrowanym przez AES CBC spowoduje, że nie będzie już można odszyfrować?

Czy moje zrozumienie jest poprawne, że wszystko do momentu, w którym bajt został zmieniony, odszyfrowuje dobrze, ale od tego czasu nie będzie odszyfrowywane?

+3

AFAIK, zwykle będzie nadal odszyfrowywać, ale da inny tekst w postaci zwykłego tekstu. – SLaks

+1

jeśli padding jest używany, a ostatni blok jest odszyfrowywany do innego zwykłego tekstu, to implementacja ** może ** zgłosić błąd. Na przykład w Java otrzymasz wyjątek BadPaddingException, jeśli zwykły tekst nie może zostać usunięty. –

+0

@owlstead: Tak; właśnie dlatego powiedziałem: – SLaks

Odpowiedz

8

To nie jest całkiem poprawne. AES szyfruje/odszyfrowuje dane w blokach (w szczególności blokach 128-bitowych). Dodatkowo, w trybie CBC, szyfrowanie/odszyfrowywanie (i + 1) th bloku zależy od bloku (i).

Tak więc, jeśli losowy bajt wpada w i-tym bloku (załóżmy dla uproszczenia, że ​​bajt nie przechodzi przez dwa bloki), kiedy przejdziemy do odszyfrowania tego bloku, da on błędne odszyfrowanie (tj. blok 128 bitów będzie niepoprawny). Dodatkowo, ponieważ następny blok został zaszyfrowany przy użyciu i-tego bloku, blok (i + 1) th również zostanie odszyfrowany niepoprawnie (kolejne 128 bitów to 16 bajtów). Stamtąd kolejne bloki będą poprawne (podobnie jak wszystkie poprzednie bloki).

Aby uzyskać więcej informacji, przeczytałem o Modes of Encryption na wikipedia.

Jeszcze jedno: zmiana losowego bajtu najprawdopodobniej nie zapobiegnie odszyfrowaniu - po prostu nie przyniesie oryginalnego tekstu jawnego (oczywiście).

Nadzieję, że pomaga!

+0

Jeśli niepoprawny bajt znajduje się w dopełnieniu, całe odszyfrowanie może spowodować "Złe dopełnienie". błąd, jak powiedział @owlstead. – rossum

+0

@mrfrankli Jestem nieco zdezorientowany, dlaczego 1 bajt zmienia się w tekst jawny, zanim szyfrowanie zmieni się co kolejny blok, ale to samo nie jest prawdą w przypadku 1 bajtowej zmiany w zaszyfrowanym tekście, zanim deszyfrowanie nie zmieni się co kolejny blok po odszyfrowaniu. Czytałem stronę wiki, ale wciąż nie byłem pewien. Czy uważasz, że możesz wyjaśnić to nieco dalej, dlaczego tak się dzieje? – Kyle

+0

Podczas obliczania tekstu zaszyfrowanego ostatni blok szyfru XOR jest opatrzony zwykłym tekstem. Jeśli zmienisz cokolwiek z prostego tekstu, zmieni się zaszyfrowany blok tego zwykłego tekstu, zmieniając wektor XOR z czystym tekstem w następnym bloku, aż do końca. Jeśli zmienisz tekst szyfrowania, zmieni się zwykły tekst tego bloku. Wektor XOR ze zwykłym tekstem następnego bloku również jest inny, co powoduje utratę pojedynczego bajtu w tym bloku. Hoever, ponieważ tekst szyfrujący kolejnych bloków nie jest zmieniany, wektor dla następnych bloków jest w porządku. –