2012-03-17 27 views
6

Nếu tôi có tệp được mã hóa được mã hóa bằng AES CBC, sẽ thay đổi một byte ngẫu nhiên ở đâu đó trong tệp khiến nó không còn có thể được giải mã nữa?Việc thay đổi 1 byte trong một tệp được mã hóa bởi AES CBC có làm cho nó không thể giải mã được nữa không?

Sự hiểu biết của tôi có đúng là mọi thứ đến mức mà byte được thay đổi sẽ giải mã được không, nhưng từ đó về sau nó sẽ không giải mã được?

+3

AFAIK, thường sẽ vẫn giải mã, nhưng sẽ cung cấp cho bạn một bản rõ khác. – SLaks

+1

nếu padding được sử dụng và khối cuối cùng là giải mã cho một văn bản thuần khác nhau, sau đó việc thực hiện ** có thể ** báo cáo lại một lỗi. Ví dụ: Java, bạn sẽ nhận được một BadPaddingException nếu văn bản thuần túy không thể được bỏ độn. –

+0

@owlstead: Có; đó là lý do tại sao tôi nói _usually_. – SLaks

Trả lời

8

Điều đó không hoàn toàn chính xác. AES mã hóa/giải mã dữ liệu theo khối (khối 128 bit, cụ thể). Ngoài ra, trong chế độ CBC, việc mã hóa/giải mã khối (i + 1) phụ thuộc vào khối (i) thứ. Vì vậy, nếu byte ngẫu nhiên nằm trong khối thứ i (giả sử đơn giản là byte không vượt qua giữa hai khối), khi bạn đi để giải mã khối thứ i, nó sẽ cho bạn giải mã sai (ví dụ: khối 128 bit sẽ không chính xác). Ngoài ra, vì khối tiếp theo được mã hóa bằng khối thứ i, khối thứ i (i + 1) cũng sẽ giải mã không chính xác (128 bit khác còn gọi là 16 byte). Từ đó, các khối tiếp theo sẽ chính xác (như tất cả các khối trước đó).

Để biết thêm thông tin, tôi đã đọc khoảng Modes of Encryption trên wikipedia.

Một điều nữa: thay đổi byte ngẫu nhiên có khả năng sẽ không ngăn việc giải mã xảy ra - nó sẽ không tạo ra bản gốc thô (dĩ nhiên).

Hy vọng điều đó sẽ hữu ích!

+0

Nếu byte không chính xác nằm trong vùng đệm, thì toàn bộ giải mã có thể ném "Bad Padding" lỗi, như @owlstead nói. – rossum

+0

@mrfrankli Tôi hơi bối rối vì sao thay đổi 1 byte thành bản rõ trước khi mã hóa sẽ thay đổi mọi khối tiếp theo, nhưng điều này cũng không đúng với thay đổi 1 byte đối với văn bản được mã hóa trước khi giải mã không thay đổi mọi khối tiếp theo sau khi giải mã. Tôi đọc trang wiki, nhưng vẫn không chắc chắn. Bạn có nghĩ rằng bạn có thể giải thích thêm một chút về lý do tại sao không? – Kyle

+0

Trong khi tính toán văn bản mật mã, khối mật mã cuối cùng được XOR'ed với văn bản thuần. Nếu bạn thay đổi bất kỳ thứ gì của văn bản thuần túy, thì khối văn bản của văn bản thuần tuý đó bị thay đổi, thay đổi vectơ XOR'ed bằng văn bản thuần túy trong khối tiếp theo, tất cả các cách để kết thúc. Nếu bạn thay đổi văn bản mật mã, thì văn bản thuần túy của khối đó sẽ bị thay đổi. Vector XOR'ed với văn bản thuần túy của khối tiếp theo cũng khác nhau, dẫn đến mất một byte trong khối đó. Hoever, như các văn bản mật mã của các khối tiếp theo không thay đổi, vector cho các khối tiếp theo là ok. –

Các vấn đề liên quan