Mã hóa AES và các cách tấn công mã hóa này

Giới thiệu

Trong mật mã học, Advanced Encryption Standard (tiếng Anh, viết tắt: AES, nghĩa là Tiêu chuẩn mã hóa tiên tiến) là một thuật toán mã hóa khối được chính phủ Hoa kỳ áp dụng làm tiêu chuẩn mã hóa. Giống như tiêu chuẩn tiền nhiệm DES, AES được kỳ vọng áp dụng trên phạm vi thế giới và đã được nghiên cứu rất kỹ lưỡng. AES được chấp thuận làm tiêu chuẩn liên bang bởi Viện tiêu chuẩn và công nghệ quốc gia Hoa kỳ (NIST) sau một quá trình tiêu chuẩn hóa kéo dài 5 năm (Xem thêm: quá trình thiết kế AES).

Thuật toán được thiết kế bởi hai nhà mật mã học người Bỉ: Joan Daemen và Vincent Rijmen. Thuật toán được đặt tên là "Rijndael" khi tham gia cuộc thi thiết kế AES. Rijndael được phát âm là "Rhine dahl" theo phiên âm quốc tế

Quá trình mã hóa

Bao gồm các bước:

-Khởi động vòng lặp

  • AddRoundKey — Mỗi cột của trạng thái đầu tiên lần lượt được kết hợp với một khóa con theo thứ tự từ đầu dãy khóa. -Vòng lặp
  • SubBytes — đây là phép thế (phi tuyến) trong đó mỗi byte trong trạng thái sẽ được thế bằng một byte khác theo bảng tra (Rijndael S-box).
  • ShiftRows — dịch chuyển, các hàng trong trạng thái được dịch vòng theo số bước khác nhau.
  • MixColumns — quá trình trộn làm việc theo các cột trong khối theo một phép biến đổi tuyến tính.
  • AddRoundKey -Vòng lặp cuối
  • SubBytes
  • ShiftRows
  • AddRoundKey Tại chu trình cuối thì bước MixColumns không thực hiện.

Trích từ : Wikipedia (https://vi.wikipedia.org/wiki/Advanced_Encryption_Standard)

Các cách tấn công thuật toán AES

Thuật toán AES gồm nhiều mode nhưng ở bài này chúng ta tìm hiểu 2 loại mode để attack là : + AES mode ECB (sử dụng key encrypt và decrypt từng block) https://images.viblo.asia/3e23d282-2d04-463c-a487-ae0eae949160.png + AES mode CBC (sử dụng key encrypt và decrypt từng block kết hợp với XOR block trước đó)

Tấn công AES mode ECB (Block cipher attack)

Giả sử chúng ta có đoạn cipher gồm 3 block (độ dài = 48) (mỗi block 16 bytes)

Chuỗi gồm "1"*16 + "2"16 + "316"

Chúng ta sẽ được chuỗi mã hóa gồm 48 bytes, lần lượt 16 bytes đầu là chuỗi 16 kí tự số 1, kế tiếp là 2 và lần lượt là chuỗi số 3

Chúng ta có thể đổi vị trí 16 bytes giữa sang đầu và khi giải mã chúng ta được chuỗi "2"*16 + "1"*16 + "3"*16

Dù không biết key, nhưng với cách mã hóa sử dụng key encrypt mỗi block 16 bytes thì chúng ta có thể đổi các vị trí block với nhau hoặc thêm vào các block khác được mã hóa cùng key để có được chuỗi chúng ta muốn.

Tấn công AES mode CBC (CBC Bit-flipping attack)

Như chúng ta đã thấy, mỗi lần giải mã, AES mode CBC sẽ XOR cipher text của block trước đó với decrypt của cipher block hiện tại, ví dụ các block được kí hiệu như sau: + C1 --->Cipher text của block thứ nhất- P2 = C1 XOR D(C2).

+ D(C1) --->Kết quả hàm giải mã của cipher text block thứ nhất
+ P1 --->Plain text của block thứ nhất

==> P2 = C1 XOR D(C2).

Vì vậy, khi chúng ta có đc C1 và D(C2), chúng ta có thể thay đổi làm ảnh hưởng kết quả P2

Như hình trên, chúng ta có thể thấy, chúng ta có thể XOR kí tự kế cuối của P1 với P2 chúng ta biết được và kí tự chúng ta muốn, kết quả sẽ cho chúng ta kí tự chúng ta muốn.

==> P2 = C1 XOR D(C2).

==> Px = C1 XOR P2 XOR Px XOR (DC2) 

Kết luận :

  • Có thể bạn chưa biết: Thuật toán RSA thực thi chậm hơn AES nhiều lần, vì vậy chỉ sử dụng RSA để exchange key mà ko dùng để mã hóa dữ liệu.

--> Như vậy, mỗi loại thuật toán đều có ưu điểm và nhược điểm riêng, đều có thể bị attack. Vì vậy, chúng ta sử dụng các loại thuật toán ứng với tùy mục đích khác nhau.

Tham khảo :
https://vi.wikipedia.org/wiki/Advanced_Encryption_Standard https://medium.com/@kekayan/encrypt-files-using-aes-with-openssl-dabb86d5b748 https://www.researchgate.net/figure/Block-diagram-for-AES-encryption-and-decryption_fig1_324796235 https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation


All Rights Reserved