Quy trình mã hóa AES

Một phần của tài liệu 28023_171220200196914NOIDUNGLUANVAN (Trang 32 - 36)

6. Bố cục luận văn

2.1.2.Quy trình mã hóa AES

Quy trình mã hóa sử dụng bốn phép biến đổi chính:

1. AddRoundKey: Cộng mã khóa của chu kỳ vào trạng thái hiện hành. Độ dài của mã khóa của chu kỳ bằng với kích thƣớc của trạng thái.

2. SubBytes: Thay thế phi tuyến mỗi byte trong trạng thái hiện hành thông qua bảng thay thế (S-box).

3. MixColumns: Trộn thông tin của từng cột trong trạng thái hiện hành. Mỗi cột đƣợc xử lý độc lập.

4. ShiftRows: Dịch chuyển xoay vòng từng dòng của trạng thái hiện hành với di số khác nhau.

Quy trình mã hóa đƣợc tóm tắt lại nhƣ sau:

1. Thực hiện thao tác AddRoundKey đầu tiên trƣớc khi thực hiện các chu kỳ mã hóa.

2. Nr – 1 chu kỳ mã hóa bình thƣờng, mỗi chu kỳ bao gồm bốn bƣớc biến đổi liên tiếp nhau: SubBytes, ShiftRows, MixColumns và AddRoundKey.

3. Thực hiện chu kỳ mã hóa cuối cùng: Trong chu kỳ này thao tác MixColumns đƣợc bỏ qua.

Hình 2.1. Quy trình mã hóa và giải mã AES

2.1.3. Phép biến đổi 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 toán. Hộp S-box này đƣợc tạo ra từ một phép biến đổi khả nghịch trong trƣờng hữu hạn GF (28) 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).

Hình 2.2. Thao tác SubBytes tác động trên từng byte của trạng thái

2.1.4 Phép biến đổi 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.

2.1.5 Quy trình giải mã

Quy trình giải mã đƣợc thực hiện qua các giai đoạn sau:

1. Thực hiện thao tác AddRoundKey đầu tiên trƣớc khi thực hiện các chu kỳ giải mã

2. Nr − 1 chu kỳ giải mã bình thƣờng: Mỗi chu kỳ bao gồm bốn biến đổi liên tiếp nhau: InvShiftRows, InvSubBtes, AddRoundKey, InvMixColumns.

3. Thực hiện chu kỳ giải mã cuối cùng. Trong chu kỳ này, thao tác InvMixColumns đƣợc bỏ qua.

Đoạn mã cho thuật toán giải mã nhƣ sau:

--- InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])

begin

byte state[4,Nb] state = in

AddRoundKey(state, w[Nr*Nb, (Nr+1)*Nb-1]) for round = Nr-1 step -1 down to 1

InvShiftRows(state) InvSubBytes(state)

AddRoundKey(state, w[round*Nb, (round+1)*Nb-1]) InvMixColumns(state) end for InvShiftRows(state) InvSubBytes(state) AddRoundKey(state, w[0, Nb-1]) out = state end. ---

Một phần của tài liệu 28023_171220200196914NOIDUNGLUANVAN (Trang 32 - 36)