Chuẩn mã khối AES

Một phần của tài liệu Tài liệu Kỹ thuật lập trình - Chương 7 Kiểm tra và xây dựng số nguyên tố (Trang 58 - 64)

Q trình sinh khóa: Thuật tốn sử dụng khóa mật có chiều dài b bytes, ở đây

7.16Chuẩn mã khối AES

Lịch sử ra đời. Với rất nhiều nhược điểm đã được chỉ ra, thuật tốn DES (được cơng nhận vào năm 1976 bởi NIST của Mỹ và có tên gọi chính thức là chuẩn FIPS PUB 46 vào năm 1977) đã gần như khơng cịn được sử dụng trong các ứng dụng thực tiễn. Các nghiên cứu về khả năng ứng dụng của DES đã chỉ ra rằng, thuật toán DES đã khơng cịn đáp ứng được các tiêu chuẩn cần thiết (độ an tồn, tính hiệu quả, tốc độ thực hiện, …) để có thể tiếp tục là chuẩn cho các ứng dụng trong thực tiễn. Để cố gắng khắc phục các nhược điểm đã chỉ ra của thuật toán DES, trên thực tế đã xuất hiện rất nhiều các thuật toán cải tiến dựa trên DES (như DES-X, G-DES, D_DES, T_DES) hoặc các thuật toán khác (như IDEA, RC5, Blowfish, …) nhằm khắc phục các nhược điểm hoặc thay thế thuật tốn DES. Nhưng với các địi hỏi ngày càng cao của các ứng dụng trong thực tiễn các thuật tốn này đều đã chứng tỏ là khơng đạt chuẩn với các yêu cầu mới.

Trước tình hình đó, NIST đã mở ra một cuộc thi nhằm tìm kiếm thuật tốn mới thay thế cho thuật toán DES (được gọi là AES – Advanced Encryption Standard [12-20]). Các yêu cầu cơ bản đối với các thuật tốn AES là có tốc độ nhanh hơn so với DES, ít nhất có độ an tồn khơng kém T_DES và có khả năng thực hiện tối ưu trên cả phần cứng và phần mềm. Các thuật toán này phải thực hiện trên khối dữ liệu có độ dài 128 bít, và có khả năng làm việc với các khóa có độ dài khác nhau – 128, 192, và 256 bít, và cuộc thi đã chính thức cơng nhận thuật tốn Rijndael là chuẩn mới (với độ dài khóa là 128 bít, và khuyến nghị sử dụng khóa 256 bít đối với các yêu cầu tối mật).

Kết quả qua so sánh thực hiện trên phần mềm và phần cứng, có 5 thuật tốn vào vịng chung kết MARS, RC6, Rijndael, Serpent, Twofish, chúng ta đã xem 4 thuật toán trước. Ở đây chúng ta xem thuật toán được bầu làm chuẩn mới Rijndael.

Đặc điểm chung: là thuật toán được phát triển từ thuật toán Square, Nhà thiết kế:

Vincent Rijmen và Joan Daemen. 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 tốn khơng hồn tồn giống nhau. AES chỉ làm việc với khối dữ liệu 128 bít và khóa có độ dài 128 (có 10 vịng mã), 192 (có 12 vịng mã) hoặc 256 (có 14 vịng mã) 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. Trong phần này chúng ta tìm hiểu về hệ mật AES.

Miêu tả thuật tốn: Hầu hết các tính tốn của AES được thực hiện trên trường hữu

hạn. AES hoạt động trên các mảng của byte kích thước 4×4, được gọi là state (trạng thái). Quy trình mã hóa Rijndael 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 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.

Q trình mã hóa được thực hiện 3 ba 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ỳ 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.

Chúng ta đi tìm hiểu các lệnh biến đổi trong q trình mã hóa.

+ SubstituteBytes – bước thay thế có tính phi tuyến, theo đó mỗi byte được thay thế bởi một byte có giá trị khác theo bảng tìm kiếm (lookup table) – gọi là hộp S. Như vậy, mỗi byte trong bảng được thay thế bởi một byte của hộp S (S-box). Hộp S được sinh ra từ hàm ngược (inverse function) trên GF(28) để có được tính chất phi tuyến cao nhất. Để ngăn ngừa cuộc tấn cơng dựa trên các tính chất đại số đơn giản, 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

cũng được thiết kế để bảo đảm tính xáo trộn tốt nhất và được chọn để tránh các điểm bất động.

Hình 7.34. Trong bước SubstituteBytes, mỗi byte trong state được thay thế bởi một byte (phần tử 8 bít) của hộp S đóng vai trị là bảng tìm kiếm.

+ ShiftRows – bước chuyển dịch, theo đó mỗi hàng của state được dịch vịng một số bước nào đó. Đối với AES hàng đầu tiên khơng thay đổi. Các byte của hàng thứ 2 được dịch vòng đi 1byte về bên trái. Tượng tự, các byte của hàng thứ 3 và 4 được dịch vòng đi 2 và 3 byte tương ứng về phía trái. Bằng cách này mỗi cột của state ra của ShiftRows là sự kết hợp lại của các byte từ mỗi cột của state vào.

Hình 7.35. Trong bước ShiftRows, các byte trong mỗi hàng của state được dịch vịng về phía trái. Số lượng các bước dịch vịng là khác nhau ở mỗi hàng.

+ MixColumns – hoạt động trên các cột của state, thực hiện một biến đổi tuyến tính. Trong bước này 4 byte của mỗi cột của state được tổ hợp sử dụng một biến đổi tuyến tính ngược. Trong hàm MixColumns mỗi byte của lối vào sẽ ảnh hưởng lên tất cả 4 byte ở lối ra. Cùng với ShiftRows, MixColumns sẽ tạo ra tính khuếch tán (diffusion) của mã. Mỗi cột được xử lý như một đa thức trên GF(28) và được nhân với một đa thức cố định c(x) = ‘03’x3 +’01’ x2 + ‘01’x + ‘02’ theo modul (x4 + 1).

Hình 7.36. Trong MixColumns, mỗi cột của state được nhân với một đa thức cố định c(x) theo mod(x4 + 1).

Hàm Mixcolums(state) được thực hiện trên mỗi cột của ma trận state. Như vậy, đối với 4 cột của ma trận state, hàm Mixcolums(state) được thực hiện 4 lần.

+ AddRoundKey – mỗi byte của state được kết hợp với khóa vịng, mỗi khóa vịng được sinh ra từ khóa bí mật, khi sử dụng thời gian biểu của khóa (key schedule), mỗi khóa vịng có cùng kích thước với state.

Hình 7.37. Trong bước AddRoundKey, mỗi byte của state được kết hợp tương ứng với 1 byte của khóa vịng bằng sử dụng tốn tử XOR.

Vịng cuối cùng, thay thế bước Mixcolumns bằng một giá trị AddRoundKey riêng biệt.

Quá trình giải mã: Quá trình này thực hiện các biến đổi ngược so với q trình mã

hóa. Nó thực hiện thơng qua các bước 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 bước biến đổi liên tiếp nhau: InvShiftRows, InvSubBytes, 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. (adsbygoogle = window.adsbygoogle || []).push({});

Phép biến đổi InvSubBytes: Phép biến đổi ngược của thao tác SubBytes, ký hiệu là InvSubBytes, sự dụng bảng thay thế nghịch đảo của S-box trên GF(28), ký hiệu là S-box- 1.

Phép biến đổi InvShiftRows: InvShiftRows chính là phép biến đổi ngược của phép biến đổi ShiftRows. Dòng đầu tiên của trạng thái sẽ vẫn được giữ nguyên trong khác ba dòng cuối của trạng thái sẽ được dịch chuyển xoay vòng theo chiều ngược với phép biến đổi ShiftRows.

Phép biến đổi InvMixColumns: InvMixColumns là biến đổi ngược của phép biến đổi MixColumns. Mỗi cột của trạng thái hiện hành được xem như đa thức s(x) bậc 4 có các hệ số thuộc GF(28) và được nhân với đa thức a-1(x) là nghịch đảo của đa thức a(x) (modulo M(x)) được sử dụng trong phép biến đổi MixColumns.

a-1(x) = {0b}x3 + {0d}x2 + {09}x + {0e}

Hàm mở rộng khóa:

Bảng khóa mở rộng là mảng 1 chiều chứa các từ (có độ dài 4 byte), được ký hiệu là w[Nb*(Nr + 1)]. Hàm phát sinh bảng khóa mở rộng phụ thuộc vào giá trị Nk, tức là phụ thuộc vào độ dài của mã khóa chính. Hàm mở rộng khóa được hổ trợ bởi hai hàm sau:

Hàm SubWord(W) thực hiện việc thay thế (sử dụng S-box) từng byte thành phần của từ 4 byte được đưa vào và trả kết quả về là một từ bao gồm 4 byte kết quả sau khi thực hiệc việc thay thế.

Hàm RotWord(W) thực hiện việc dịch chuyển xoay vòng 4 byte thành phần (a, b, c, d) của từ được đưa vào. Kết quả trả về của hàm RotWord là một từ gồm 4 byte thành phần là (b, c, d, a).

KeyExpansion(byte key[4 * Nk], word w[Nb * (Nr + 1)], Nk) begin i=0 while (i < Nk) w[i] = word[key[4*i],key[4*i+1], key[4*i+2],key[4*i+3]] i = i + 1 end while i = Nk while (i < Nb * (Nr + 1))

word temp = w[i - 1]

if (i mod Nk = 0) then

temp = SubWord(RotWord(temp)) xor Rcon[i / Nk]

else

if (Nk = 8) and (i mod Nk = 4) then

temp = SubWord(temp)

w[i] = w[i - Nk] xor temp i = i + 1

end while end

Các hằng số của mỗi chu kỳ hoàn toàn độc lập với giá trị Nk và được xác định bằng Rcon[i] = (RC[i], {00}, {00}, {00}) với RC[i] ∈GF(28) và thỏa:

RC[1]=1 ({01})

RC[i] =x ({02})•(RC[i-1]) = x(i–1)

Khóa của vịng thứ i được xác định bao gồm các từ (4 byte) có chỉ số từ Nb*i đến Nb*(i +1)−1 của bảng mã khóa mở rộng. Như vậy, mã khóa của chu kỳ thứ i bao gồm các phần tử w[Nb*i], w[Nb* i +1] ,…, w[Nb*(i+1)−1] . Các khóa vịng được miêu tả ở hình 7.38.

Hình 7.38. Miêu tả khóa vịng Độ bền vững của thuật tốn:

Khắc phục được điểm yếu của khóa DES

Thám mã vi sai (diffrential cryptanalysis): các tấn cơng vi sai là có thể nếu có thể dự đốn được sự sai khác lan truyền trên tất cả các vịng mà có tỉ số lan truyền lớn hơn đáng kể 21-n, với n là độ dài của khối dữ liệu. Trong AES với 4 vòng đưa ra, tỉ số lan truyền khoảng 2-150 và với 8 vòng là khoảng 2-300. Vì vậy nó đủ nhỏ để chống lại thám mã vi sai.

Thám mã tuyến tính (linear cryptanalysis): với AES tương qua vào ra qua 4 vòng vào khoảng 2-75 và qua 8 vịng là 2-150. Vì vậy nó đủ nhỏ để chống lại thám mã tuyến tính.

Ưu điểm và hạn chế: Ưu điểm:

Phương diện thực hiện:

AES có thể được thực hiện để làm việc tại tốc độ rất nhanh (đối với một thuật toán mã khối) trên bộ vi xử lý Pentium (Pro).

AES có thể được thực hiện trên một Smart card với 1 số lượng nhỏ của chỉ thị (code), sử dụng ít RAM và tiêu tốn ít chu kì thời gian.

Vịng biến đổi song song bởi thiết kế, đây là một ưu điểm quan trọng cho các bộ vi xử lý song song và dành cho phần cứng chuyên dụng. (adsbygoogle = window.adsbygoogle || []).push({});

Trong thuật tốn khơng sử dụng các phép tốn số học, nó khơng ảnh hưởng đến giới hạn trên hoặc dưới của cấu trúc bộ vi xử lý.

Tính đơn giản thực hiện:

Thuật tốn mã hồn tồn “tự hỗ trợ”. Nó khơng sử dụng các thành phần của thuật tốn mã khác.

Tính bí mật của thuật tốn khơng dựa trên sự khơng rõ ràng.

Thiết kế kín của thuật tốn khơng cho phép có đủ cơ hội để che giấu một cửa sập. Độ dài của khối dữ liệu:

128 bít là phù hợp với các yêu cầu hiện tại của các ứng dụng trong thực tế. Khả năng mở rộng:

Khả năng sử dụng khóa với các độ dài khóa 128, 192, 256 cho phép thuật toán đáp ứng được một phạm vi rộng về các mức độ bảo mật.

Giới hạn:

Phần giải mã ít phù hợp để thực hiện trên Smart card hơn phần mã hóa, nó yêu cầu nhiều chỉ thị và số chu kì thực hiện nhiều???.

Trên phần mềm: mã và giải mã sử dụng các chỉ thị và/hoặc các bảng khác nhau. Trên phần cứng: giải mã chỉ sử dụng một phần mạch đã được thiết kế thực hiện cho mã hóa.

Một phần của tài liệu Tài liệu Kỹ thuật lập trình - Chương 7 Kiểm tra và xây dựng số nguyên tố (Trang 58 - 64)