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
WikitanvirBot (thảo luận | đóng góp)
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
AES làm việc với từng khối dữ liệu 4×4 [[byte]] (tiếng Anh: ''state'', khối trong Rijndael có thể có thêm cột). Quá trình [[mã hóa]] bao gồm 4 bước:
## <tt>AddRoundKeySubBytes</tt> — mỗiđây byte củaphép khốithế được(phi kếttuyến) hợptrong vớiđó khóamỗi con,byte cáctrong khóatrạng conthái nàysẽ được tạothế rabằng từmột quábyte trìnhkhác tạotheo khóabảng contra ([[Rijndael S-box]]).
## <tt>SubBytesShiftRows</tt> — đâydịch chuyển, phépcác thế (phi tuyến)hàng trong đótrạng mỗi byte sẽthái được thếdịch bằng một byte khácvòng theo bảngsố trabước ([[Rijndaelkhác S-box]])nhau.
## <tt>ShiftRowsMixColumns</tt> — đổiquá chỗ,trình trộn làm việc theo các hàngcột trong khối đượctheo một phép biến đổi dịchtuyến vòngtính.
## <tt>AddRoundKey</tt>
# <tt>MixColumns</tt> — 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.
#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>
 
=== Bước## <tt>AddRoundKeyShiftRows</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> đượckhông thaythực thế bằng bước <tt>AddRoundKey</tt>hiện.
 
=== 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 nghịchbiến đảođổi khả nghịch]] trong [[trường hữu hạn]] GF (''2<sup>8</sup>'') có tính chất phi tuyế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).
 
'''Xem thêm''': [[Rijndael S-box]].
 
=== Bước <tt>ShiftRows</tt> ===
Các hàng được dịch vòng một số vị trí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.
 
=== 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]].