Hôm nay chúng ta sẽ tìm hiểu về CBC, tại mode này, khối text đầu tiên sẽ được XOR với một khối Initialization vector (viết tắt là iv) rồi mới mã hóa ra bản mã. Các khối text phía sau sẽ được XOR với bản mã của khối text đằng trước nó sau đó mới mã hóa và cuối cùng các bản mã ghép lại với nhau như ở hình bài trước. Hôm nay mình sẽ giới thiệu về 1 bài trên cryptohack về CBC. Link: http://aes.cryptohack.org/ecbcbcwtf/ Code chính (hình 1): đại khái có 2 hàm, hàm encrypt_flag() sẽ trả về bản mã của FLAG (trong đó 16 bytes đầu là giá trị của iv) được mã bằng mode CBC, còn hàm decrypt() trả về plaintext của một bản mã bất kỳ mà chúng ta truyền vào, bản mã này được giải bằng mode ECB. Đầu tiên, chỉ với 2 hàm thì ta sẽ cần xác định độ dài FLAG bằng cách chạy hàm encrypt_flag() sau đó trừ đi 16 bytes iv đầu. Như vậy ta thấy FLAG có độ dài từ 16 đến 31 bytes (hình 2). Ta sẽ minh họa lại hàm encrypt_flag() như hình 3. Sau khi nhìn minh họa thì ta có thể nhận ra ngay các để leak được FLAG của bài này khi mà ta có thể decrypt từng khối mã riêng lẻ theo mode ECB. Minh họa cách giải như hình 4