Khác biệt giữa bản sửa đổi của “Advanced Encryption Standard”
Nội dung được xóa Nội dung được thêm vào
n r2.7.1) (Bot: Thêm sq:AES |
|||
Dòng 35:
|}
Mặc dù 2 tên ''AES'' và ''Rijndael'' vẫn thường được gọi thay thế cho nhau nhưng trên thực tế thì 2 [[thuật toán]] không hoàn toàn giống nhau. AES chỉ làm việc với các khối dữ liệu (đầu vào và đầu ra) 128 bít và [[khóa (mật mã)|khóa]] có độ dài 128, 192 hoặc 256 bít trong khi Rijndael có thể làm việc với dữ liệu và khóa có độ dài bất kỳ là bội số của 32 bít nằm trong khoảng từ 128 tới 256 bít.
Các khóa con sử dụng trong các chu trình được tạo ra bởi [[quá 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ột [[trường hữu hạn]] củ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ột [[ma trận]] 4x4 của các byte,nó được gọi là ma trận trạng thái, hay vắn tắt là trạng thái (tiếng Anh: ''state'', trang thái trong Rijndael có thể có thêm cột) . Trong quá trình thực hiện thuật toán các toán tử tác động để biến đổi ma trận trạng thái này.
== Mô tả mức cao của thuật toán==
=== Mở rộng khóa (KeyExpansion)===
Là quá trình tạo các vòng khóa từ khóa chính, mỗi khóa con chứa 4 byte.
===Quá trình [[mã hóa]]===
▲Các khóa con sử dụng trong các chu trình được tạo ra bởi [[quá trình tạo khóa con Rijndael]].
Bao gồm các bước:
# Khởi động vòng lặp
▲Hầu hết các phép toán trong thuật toán AES đều thực hiện trong một [[trường hữu hạn]].
## <tt>AddRoundKey</tt> — 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
## <tt>
## <tt>
## <tt>
## <tt>AddRoundKey</tt>
#Vòng lặp cuối
Tại chu trình cuối thì bước <tt>MixColumns</tt> được thay thế bằng bước <tt>AddRoundKey</tt>▼
## <tt>SubBytes</tt>
## <tt>AddRoundKey</tt>
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ách [[XOR]] từng bít của khóa con với khối dữ liệu.▼
▲Tại chu trình cuối thì bước <tt>MixColumns</tt>
=== Bước <tt>SubBytes</tt> ===
Các byte được thế thông qua bảng tra [[Rijndael S-box|S-box]]. Đây chính là quá trình phi tuyến của thuật toán. Hộp S-box này được tạo ra từ một [[phép
'''Xem thêm''': [[Rijndael S-box]].
=== Bước <tt>ShiftRows</tt> ===
Các hàng được dịch vòng một số
=== Bước <tt>MixColumns</tt> ===
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ước <tt>ShiftRows</tt>, <tt>MixColumns</tt> đã tạo ra tính chất [[khuyếch tán (mật mã)|khuyếch tán]] cho thuật toán. Mỗi cột được xem như một đa thức trong trường hữu hạn và được nhân với đa thức <math>c(x) = 3x^3 + x^2 + x + 2</math> (modulo <math>x^4+1</math>). Vì thế, bước này có thể được xem là phép [[nhân (toán học)|nhân]] [[ma trận]] trong trường hữu hạn.
=== Bước <tt>AddRoundKey</tt> ===
▲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ách [[XOR]] từng bít của khóa con với khối dữ liệu.
'''Xem thêm''': [[Rijndael mix columns]].
|