Thuật toán AES làm việc với các khối dữ liệu (đầu vào và đầu ra) 128 bít vàkhóacó độ dài 128, 192 hoặc 256 bít. Các khóa con sử dụng trong các chu trình được tạo ra bởiquá trình tạo khóa con Rijndael. Mỗi khóa con cũng là một cột gồm 4 byte. Hầu hết các phép toán trong thuật toán AES đều thực hiện trong mộttrường hữu hạncủa các byte. Mỗi khối dữ liệu 128 bit đầu vào được chia thành 16 byte (mỗi byte 8 bit),có thể xếp thành 4 cột, mỗi cột 4 phần tử hay là mộtma trận4x4 của các byte,nó được gọi là ma trận trạng thaí(Hình 3.15)
Quá trình mã hóabao gồm các bước:
AddRoundKey:Tại bước này, khóa con được kết hợp với các khối. Khóa con trong mỗi chu trình được tạo ra từ khóa chính với quá trình tạo khóa con Rijndael; mỗi khóa con có độ dài giống như các khối. Quá trình kết hợp được thực hiện bằng cáchXORtừng bít của khóa con vớikhối dữliệu.
Hình 3.9 : Bước AddroundKey
SubBytes : Các byte được thế thông qua bảng tra S-box. Đây chính là quá trình phi tuyến của thuật toan (Hình 3.10). Hộp S-box này được tạo ra từ mộtphép biến đổi khả nghịch trong trường hữu hạn GF (28) có tính chất phituyến. Để chống lại các tấn công dựa trên các đặc tính đại số, hộp S-box này
được tạo nên bằng cách kết hợp phép nghịch đảo với một phép biến đổi affine khả nghịch.
Hộp S-box này cũng được chọn để tránh các điểm bất động (fixed point).
ShiftRows:Các hàng được dịch vòng một số bước nhất định. Đối với AES, hàng đầu được giữ nguyên. Mỗi byte của hàng thứ 2 được dịch vòng trái một vị trí. Tương tự, các hàng thứ 3 và 4 được dịch vòng 2 và 3 vị trí. Do vậy, mỗi cột khối đầu ra của bước này sẽ bao gồm các byte ở đủ 4 cột khối đầu vào. Đối với Rijndael với độ dài khối khác nhau thì số vị trí dịch chuyển cũng khác nhau (Hình 3.11)
Hình 3.11- Bước ShiftRows
MixColumns:Bốn byte trong từng cột được kết hợp lại theo một phép biến đổi tuyến tính khả nghịch. Mỗi khối 4 byte đầu vào sẽ cho một khối 4 byte ở đầu ra với tính chất là mỗi byte ở đầu vào đều ảnh hưởng tới cả 4 byte đầu ra. Cùng với bướcShiftRows,MixColumnsđã tạo ra tính chấtkhuyếch táncho thuật toán.
Hình 3.12- Bước Mixcolumn
SubBytes ShiftRows AddRoundKey
Tại chu trình cuối thì bước MixColumns không thực hiện.
Hình 3.13 - thuật toán AES
Mã hóa:
- AES mã hóa một khối bản rõ (M) 128 bit thành một khối bản mã (C) 128 bit tương ứng bằng cách dùng một khóa mã k có độ dài 128 bit (hoặc 192 hoặc 256 bit) tương ứng với AES-128 (hoặc AES-192 hoặc AES-256).
- Thuật toán thực hiện xử lý trên các byte và kích thước khối đối với đầu vào, đầu ra và khóa được biểu thị bằng các từ 32 bit (4 byte).
- Xử lý khối dữ liệu 128 bit như 4 nhóm của 4 byte: 128 bit = 4 4 8 bit (mỗi
- Ma trận 4 hàng, 4 cột với mỗi phần tử 1 byte được coi như trạng thái (state) được xử lý qua các vòng xử lý.
- Khóa sẽ được mở rộng thành mảng gồm 44, 52 và 60 từ 32 bit W[i] tương ứng với độ dài khóa 128, 192 và 256 bit.
- Phép xử lý vòng (trừ vòng cuối cùng) được tạo nên từ 4 phép toán khác nhau, các hàm của nó được mô tả như sau:
- Round(State, RoundKey) { Subbytes(State); ShiftRows(State); MixColumns(State); AddRoundKey(State,RoundKey); }
- Vòng cuối cùng, ký hiệu là FinalRound(State, RoundKey) đó chính là Round(State, RoundKey) nếu bỏ đi hàm MixColumns.
- Để đảm bảo thực hiện được việc giải mã thì các phép xử lý vòng phải là các phép toán
có tính chất nghịch đảo (involution). Tương ứng ta có ký hiệu cho vòng giải mã là: - Round-1 (State, RoundKey) và FinalRound-1 (State, RoundKey).
3 Giải mã:
- Ta thấy rằng, mỗi hàm mã hóa đều có tính nghịch đảo, vì vậy giải mã chỉ đơn thuần là mã hóa theo chiều ngược lại. Trong trường hợp này, áp dụng các hàm sau:
AddRoundKey(State, RoundKey)-1 ; MixColumns(State)-1 ;
ShiftRows(State)-1 ; SubBytes(State)-1 ;
- Các khóa vòng được định nghĩa từ khóa mật theo bảng danh mục khóa. Bảng này bao gồm hai phần: bảng khóa mở rộng và bảng lựa chọn khóa vòng. Nguyên tắc cơ bản phù hợp theo:
• Toàn bộ số bit của khóa vòng bằng độ dài của khối nhân với số vòng cộng 1 (chẳng hạn, khối dài 128 bit và có 10 vòng, thì số bit của khóa vòng là: 128(10 + 1) = 1408);
• Khóa mật được mở rộng thành khóa mở rộng;
• Khóa vòng được lấy từ khóa mở rộng này theo cách sau: vòng thứ nhất bao gồm Nbtừ đầu tiên, vòng thứ hai là Nbtừ tiếp theo và cứ tiếp tục như vậy. - Bảng khóa mở rộng là một mảng tuyến tính của các từ 4 byte và được định nghĩa bởi W[Nb. (Nr + 1)].
- Nk từ đầu tiên bao gồm chỉ các bit của khóa mật. Toàn bộ từ còn lại được định nghĩa theo thuật ngữ từ với chỉ số nhỏ.
- Hàm khóa mở rộng phụ thuộc vào giá trị Nk .- Lựa chọn khóa vòng:
• Khóa vòng thứ i được cho bởi các từ có chỉ số từ W[Nb.i] đến W[Nb.(i + 1) – 1]
Hình 3.14- Lựa chọn khóa vòng