Trong chế độ CBC, quá trình giải mã khối thứ i được tính bởi
Pi=DK(Ci)⊕Ci−1.
Tấn công lật bit (bit-flipping attack): kẻ tấn công không biết khóa K, nhưng biết trước bản rõ gốc Pi tại một khối và không có quyền sửa Ci. Tuy vậy, kẻ tấn công vẫn có thể khiến khối đó, sau khi giải mã, cho ra một bản rõ Pi′ tùy ý (cùng độ dài n byte) bằng cách chỉ sửa khối mật mã liền trước, Ci−1. Vì DK(Ci)=Pi⊕Ci−1 không đổi (do Ci giữ nguyên), nếu thay Ci−1 bằng
Ci−1′=Ci−1⊕Pi⊕Pi′
thì khi giải mã: DK(Ci)⊕Ci−1′=(Pi⊕Ci−1)⊕(Ci−1⊕Pi⊕Pi′)=Pi′, đúng như mong muốn.
Cho Ci−1, Pi (bản rõ gốc đã biết) và Pi′ (bản rõ mong muốn), hãy tính Ci−1′.
Ví dụ: n=4, Ci−1= 01020304, Pi= 41424344, Pi′= 30313233 → Ci−1′= 70717273.
In ra một dòng duy nhất là Ci−1′ dưới dạng hex chữ hoa, đúng n byte (không dấu cách).
Ví dụ:
Đầu vào:
8
0000000000000000
4142434445464748
2E2E2E2E2E2E2E2E
Đầu ra:
6F6C6D6A6B686966
Đầu vào:
4
01020304
41424344
30313233
Đầu ra:
70717273
Đang tải editor...