Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [An toàn thông tin] Tấn công lật bit trong chế độ CBC

    Trong chế độ CBC, quá trình giải mã khối thứ iii được tính bởi

    Pi=DK(Ci)⊕Ci−1.P_i = D_K(C_i) \oplus C_{i-1}.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 KKK, nhưng biết trước bản rõ gốc PiP_iPi​ tại một khối và không có quyền sửa CiC_iCi​. 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′P_i'Pi′​ tùy ý (cùng độ dài nnn byte) bằng cách chỉ sửa khối mật mã liền trước, Ci−1C_{i-1}Ci−1​. Vì DK(Ci)=Pi⊕Ci−1D_K(C_i) = P_i \oplus C_{i-1}DK​(Ci​)=Pi​⊕Ci−1​ không đổi (do CiC_iCi​ giữ nguyên), nếu thay Ci−1C_{i-1}Ci−1​ bằng

    Ci−1′=Ci−1⊕Pi⊕Pi′C'_{i-1} = C_{i-1} \oplus P_i \oplus P_i'Ci−1′​=Ci−1​⊕Pi​⊕Pi′​

    thì khi giải mã: DK(Ci)⊕Ci−1′=(Pi⊕Ci−1)⊕(Ci−1⊕Pi⊕Pi′)=Pi′D_K(C_i) \oplus C'_{i-1} = (P_i \oplus C_{i-1}) \oplus (C_{i-1} \oplus P_i \oplus P_i') = P_i'DK​(Ci​)⊕Ci−1′​=(Pi​⊕Ci−1​)⊕(Ci−1​⊕Pi​⊕Pi′​)=Pi′​, đúng như mong muốn.

    Cho Ci−1C_{i-1}Ci−1​, PiP_iPi​ (bản rõ gốc đã biết) và Pi′P_i'Pi′​ (bản rõ mong muốn), hãy tính Ci−1′C'_{i-1}Ci−1′​.

    Ví dụ: n=4n = 4n=4, Ci−1=C_{i-1} = Ci−1​= 01020304, Pi=P_i = Pi​= 41424344, Pi′=P_i' = Pi′​= 30313233 → Ci−1′=C'_{i-1} = Ci−1′​= 70717273.

    • Định dạng đầu vào:
      • Dòng 1: kích thước khối nnn (1≤n≤161 \le n \le 161≤n≤16).
      • Dòng 2: Ci−1C_{i-1}Ci−1​ dạng hex, đúng nnn byte.
      • Dòng 3: PiP_iPi​ dạng hex, đúng nnn byte (bản rõ gốc đã biết).
      • Dòng 4: Pi′P_i'Pi′​ dạng hex, đúng nnn byte (bản rõ mong muốn).
    • Định dạng đầu ra:

      In ra một dòng duy nhất là Ci−1′C'_{i-1}Ci−1′​ dưới dạng hex chữ hoa, đúng nnn 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...