MỤC LỤC1.Giới thiệu chung31.1.Ưu điểm của AES31.2.Nhược điểm của AES31.3.Ứng dụng của AES32.Các thuật ngữ32.1.Các quy ước32.2.Cơ sở toán học của AES32.2.1.Phép cộng32.2.2.Phép nhân32.2.3.Phép nhân với x32.2.4.Đa thức với các hệ số trên trường GF(28)33.Thuật toán mã hóa33.1.Quá trình mã hóa33.1.1.Hàm SubBytes()33.1.2.Hàm ShiftRows()33.1.3.Hàm MixColumns()33.1.4.Hàm AddRoundKey()33.1.5.Thuật toán sinh khóa (Key Expansion)33.2.Quá trình giải mã33.2.1.Hàm InvShiftRow()33.2.2.Hàm InvSubBytes()33.2.3.Hàm InvMixColumns()33.2.4.Hàm nghịch đảo của hàm AddRoundKey()34.Kết luận34.1.Độ an toàn của thuật toán34.2.Đánh giá thuật toán3Phụ lục A: Ví dụ về mở rộng khóa 128 bit3Phụ lục B: Ví dụ về mã hóa31.Giới thiệu chungVào những năm 1990, nhận thấy nguy cơ của mã hóa DES là kích thước khóa ngắn, nó có thể bị phá mã trong tương lai gần nên cục tiêu chuẩn quốc gia Hoa Kỳ đã kêu gọi xây dựng một phương pháp mã hóa mới. Cuối cùng một thuật toán có tên là Rijndael được chọn và đổi tên thành Andvanced Encryption Standard hay AES. Chuẩn mã hóa dữ liệu cao cấp AES là một hệ mã hóa khóa bí mật có tên là Rijndael do hai nhà mật mã học người Bỉ là Joan Deamen và Vincent Rijmen đưa ra và trở thành chuẩn từ năm 2000. Chuẩn mã hóa AES cho phép xử lý các khối dữ liệu input có kích thước 128 bit sử dụng các khóa có độ dài 128, 192 hoặc 256 bit. Hệ mã hóa Rijndael được thiết kế để có thể làm việc với các khóa và khối dữ liệu có độ dài lớn hơn, tuy nhiên, khi được chọn là chuẩn do ủy ban tiêu chuẩn của Hoa kỳ đưa ra vào năm 2001, nó được quy định chỉ làm việc với khối dữ liệu 128 bit và các khóa có độ dài 128, 192, hoặc 256 bit (do đó còn đặt cho nó các tên AES128, AES192, AES256 tương ứng với độ dài khóa sử dụng)1.1.Ưu điểm của AES•AES đã được chính phủ Hoa Kỳ tuyên bố là có độ an toàn cao, và được sử dụng trong thông tin mật.•AES sử dụng bảng tra và phép thế có tính chất phi tuyến mạnh dẫn đến mức độ phân tán thông tin phức tạp làm tăng độ an toàn cho thuật toán•AES có mô tả toán học đơn giản, cấu trúc rõ ràng đơn giản1.2.Nhược điểm của AESCấu trúc toán học của AES có mô tả toán học khá đơn giản. Tuy điều này chưa dẫn đến mối nguy hiểm nào nhưng một số nhà nghiên cứu cho rằng sẽ có người lợi dụng được cấu trúc này trong tương lai
Trang 2MỤC LỤC
1 Giới thiệu chung 2
1.1 Ưu điểm của AES 2
1.2 Nhược điểm của AES 2
1.3 Ứng dụng của AES 2
2 Các thuật ngữ 2
2.1 Các quy ước 2
2.2 Cơ sở toán học của AES 2
2.2.1 Phép cộng 2
2.2.2 Phép nhân 2
2.2.3 Phép nhân với x 2
2.2.4 Đa thức với các hệ số trên trường GF(28) 2
3 Thuật toán mã hóa 2
3.1 Quá trình mã hóa 2
3.1.1 Hàm SubBytes() 2
3.1.2 Hàm ShiftRows() 2
3.1.3 Hàm MixColumns() 2
3.1.4 Hàm AddRoundKey() 2
3.1.5 Thuật toán sinh khóa (Key Expansion) 2
3.2 Quá trình giải mã 2
3.2.1 Hàm InvShiftRow() 2
3.2.2 Hàm InvSubBytes() 2
3.2.3 Hàm InvMixColumns() 2
3.2.4 Hàm nghịch đảo của hàm AddRoundKey() 2
4 Kết luận 2
4.1 Độ an toàn của thuật toán 2
4.2 Đánh giá thuật toán 2
Phụ lục A: Ví dụ về mở rộng khóa 128 bit 2
ĐẠI HỌC QUỐC GIA HÀ NỘI TRƯỜNG ĐẠI HỌC CÔNG NGHỆ
BỘ MÔN ANH NINH HỆ THỐNG THÔNG TIN
HỆ MÃ HÓA AES
Hà Nội, 2013
Trang 3Phụ lục B: Ví dụ về mã hóa 2
1 Giới thiệu chung
Vào những năm 1990, nhận thấy nguy cơ của mã hóa DES là kích thước khóa ngắn, nó
có thể bị phá mã trong tương lai gần nên cục tiêu chuẩn quốc gia Hoa Kỳ đã kêu gọi xâydựng một phương pháp mã hóa mới Cuối cùng một thuật toán có tên là Rijndael đượcchọn và đổi tên thành Andvanced Encryption Standard hay AES
Chuẩn mã hóa dữ liệu cao cấp AES là một hệ mã hóa khóa bí mật có tên là Rijndael dohai nhà mật mã học người Bỉ là Joan Deamen và Vincent Rijmen đưa ra và trở thànhchuẩn từ năm 2000 Chuẩn mã hóa AES cho phép xử lý các khối dữ liệu input có kíchthước 128 bit sử dụng các khóa có độ dài 128, 192 hoặc 256 bit Hệ mã hóa Rijndaelđược thiết kế để có thể làm việc với các khóa và khối dữ liệu có độ dài lớn hơn, tuynhiên, khi được chọn là chuẩn do ủy ban tiêu chuẩn của Hoa kỳ đưa ra vào năm 2001, nóđược quy định chỉ làm việc với khối dữ liệu 128 bit và các khóa có độ dài 128, 192, hoặc
256 bit (do đó còn đặt cho nó các tên AES-128, AES-192, AES-256 tương ứng với độ dàikhóa sử dụng)
AES đã được chính phủ Hoa Kỳ tuyên bố là có độ an toàn cao, và được sử dụng trongthông tin mật
AES sử dụng bảng tra và phép thế có tính chất phi tuyến mạnh dẫn đến mức độ phântán thông tin phức tạp làm tăng độ an toàn cho thuật toán
AES có mô tả toán học đơn giản, cấu trúc rõ ràng đơn giản
Cấu trúc toán học của AES có mô tả toán học khá đơn giản Tuy điều này chưa dẫn đếnmối nguy hiểm nào nhưng một số nhà nghiên cứu cho rằng sẽ có người lợi dụng được cấutrúc này trong tương lai
Trang 4 Mã hóa AES được sử dụng như một hàm băm
Xây dựng các hàm băm, ví dụ hàm băm Whilrpool
2 Các thuật ngữ
Input và Output : Input và Output của hệ mã hóa đều là các dãy 128 bit, còn gọi là các
khối (block), độ dài của mỗi khối này là số bit dữ liệu mà nó chứa Khóa của chuẩn mãhóa cao cấp là một dãy có độ dài 128, 192, hoặc 256 bit Hệ mã hóa không làm việc vớicác giá trị input, output và khóa có độ dài khác (mặc dù thuật toán cơ sở cho phép điềunày) Các input, output của hệ mã hóa được đánh số từ 0
Đơn vị byte: Đơn vị cơ bản để xử lý trong AES là một byte tức là một dãy 8 bit được xem
như là một đối tượng đơn Các giá trị input, output và khóa của hệ mã hóa được xem làmột mảng các byte Các giá trị input, output và khóa của hệ mã được ký hiệu bởi tênmảng a và biểu diễn dưới dạng an hoặc a[n] trong đó n nhận các giá trị trong khoảng sau:
Nếu độ dài khóa bằng 128 bit: 0≤n≤16;
Nếu độ dài khóa bằng 192 bit: 0≤n≤24;
Nếu độ dài khóa bằng 192 bit: 0≤n≤32;
Tất cả các giá trị byte sử dụng trong thuật toán AES đều được biểu diễn dưới dạng mộtdãy các bit 0 và 1 theo định dạng {b7, b6, b5, b4, b3, b2, b1, b0} Các byte này sau được hiểu
là phần tử trên trường hữu hạn bằng cách sử dụng biểu diễn thành dạng đa thức:
Trang 5b7x7 + b6x6 + b5x5 + b4x4 + b3x3 + b2x2 + b1x1 + b0x0 =
Mảng trạng thái (state): Các thao tác bên trong của AES được thực hiện trên một mảng
hai chiều các byte được gọi là mảng trạng thái Mảng trạng thái gồm có 4 hàng, Nb cột(Nb là kích thước của khối chia cho 32), ký hiệu là s trong đó mỗi byte của mảng có 2 chỉ
số hàng r và cột c (0≤c,r≤4) , được dùng để lưu trữ giá trị trung gian trong mỗi bước củaquá trình xử lý Bắt đầu của phép mã hóa hay giải mã là việc sao chép mảng các byte in0,
in1, , in15 đầu vào vào mảng trạng thái s theo công thức sau:
s[r,c]=in[r+4c], với 0≤c,r≤4
Vào cuối quá trình mã hóa hay giải mã, mảng trạng thái sẽ được sao chéo vào mảng byteđầu ra theo công thức out0, out1, …,out15
out[r+4c]=s[r,c], với 0≤c,r≤4
AES sử dụng trường hữu hạn Galois GF(28) để thực hiện các phép toán: phép cộng, phéptrừ, phép nhân, và phép chia Các phần tử của trường GF(28) được xem như là các đa thức
m(x) = x8+x4+x3+x2+x+1
hay {01} {1b} nếu biểu diễn dưới dạng hexa
Kết quả nhận được của phép rút gọn là một đa thức có bậc nhỏ hơn 8 nên có thể biểu diễnđược dưới dạng một byte
Trang 62.2.3 Phép nhân với x
Phép nhân với đa thức x (hay phần tử {00000010} GF(28)) có thể được thực hiện ởmức độ byte bằng một phép dịch trái và sau đó thực hiện tiếp phép XOR với giá trị {1b}nếu b7=1 Thao tác được ký hiêu là xtime() Phép nhân với các lũy thừa của x có thể đượcthực hiện bằng cách áp dụng nhiều lần thao tác xtime() Kết quả của phép nhân với mộtgiá trị bất kỳ được xác định bằng phép cộng (() các kết quả trung gian này lại với nhau
Trang 73 Thuật toán mã hóa
Thuật toán AES được thực hiện bởi tuần tự gồm nhiều bước biến đổi, kết quả đầu ra của phép biến đổi trước là đầu vào của phép biến đổi tiếp theo Kết quả trung gian của phép biến đổi chính là mảng trạng thái (state)
Độ dài của khối dữ liệu đầu vào của AES là cố định với Nb=4, tùy vào độ dài khoá (Nk=4,6,8) ban đầu ta có số lần lặp Nr cho mỗi quá trình được xác định theo công thức Nr=max{Nb,Nk}+6
Quy trình mã hóa và giải mã AES sử dụng hàm lặp là hàm kết hợp của bốn hàm biến đổi (với đơn vị xử lý là byte) sau:
- Biến đổi thay thế byte bằng cách sử dụng một bảng thế S-box
- Dịch các hàng của mảng trạng thái với số lần dịch của mỗi hàng là khác nhau
- Kết hợp dữ liệu của mỗi cột trong mảng trạng thái
- Cộng một khóa RoundKey vào trạng thái
Giải mã AES bằng cách thực hiện biến đổi ngược của các biến đổi ở phép mã hóa AES hoặc bằng cách biến đổi tương đương Các biến đổi này được minh họa như trong hình vẽ:
Trang 8(a) Mã hóa (b) Giả mã
Tên hàm Giải thích
AddRoundKey() Hàm biến đổi được sử dụng trong thuật toán mã hóa và giải mã
trong đó thực hiện phép XOR bit giữa trạng thái trung gian (state)
và một khóa vòng lặp (Round Key) Kích thước của một Round Key bằng kích thước của trạng thái, ví dụ với Nb=4 độ dài của một Round Key sẽ là 128 bit hay 16 byte
MixColumns() Hàm biến đổi trong thuật toán mã hóa nhận tất cả các cột của một
trạng thái (state) và trộn với dữ liệu của nó (không phụ thuộc lẫn nhau) để nhận được cột mới
ShiftRows() Hàm sử dụng trong quá trình mã hóa, xử lý các trạng thái bằng cách
dịch vòng ba hang cuối của trạng thái với số lần dịch khác nhauSubBytes() Hàm biến đổi sử dụng trong quá trình mã hóa, xử lý một trạng thái
Trang 9bằng cách sử dụng một bảng thế phi tuyến các byte (S-box) thao tác trên mỗi byte một cách độc lập
InvMixColumns() Hàm biến đổi được sử dụng trong thuật toán giải mã, là hàm ngược
của hàm MixColumns()InvShiftRows() Hàm biến đổi được sử dụng trong thuật toán giải mã, là hàm ngược
của hàm ShiftRows()Inv SubBytes() Hàm biến đổi được sử dụng trong thuật toán giải mã, là hàm ngược
của hàm SubBytes()
Bắt đầu thuật toán, bản rõ được sao chép vào mảng trạng thái sử dụng các quy ước được
mô tả ở phần trên Sau khi cộng với khóa RoundKey, mảng trạng thái khởi tạo được biếnđổi bằng cách thực hiện một hàm vòng Nr lần (10, 12 hoặc 14 phụ thuộc vào độ dài củakhóa) trong đó lần cuối cùng thực hiện khác với các lần trước đó Trạng thái sau lần lặpcuối cùng sẽ được chuyển thành output của thuật toán
Hàm vòng được tham số hóa bằng cách sử dụng một dãy các khóa được biểu diễn như làmảng một chiều của các word 4 byte được sinh ra từ thử tục sinh khóa (Key Expansion)Tất cả các vong đều thực hiện công việc giống nhau dựa trên 4 hàm theo thứ tựSubBytes(), ShiftRows(), MixColumns(), và AddRoundKey() trừ vòng cuối cùng bỏ quaviệc thực hiện hàm MixColumns()
Thuật toán được mô tả chi tiết qua đoạn mã giả sau:
Cipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
Trang 101 Nhân nghịch đảo trên trường hữu hạn GF(28), phần tử {00} được ánh xạ thànhchính nó
2 Áp dụng biến đổi Affine sau (trên GF(2)):
bi’= bi b(i+4)mod8 b(i+5)mod8 b(i+6)mod8 b(i+7)mod8 ci, trong đó 0 i 8 là bitthứ i của byte b tương ứng và ci là bit thứ I của byte c với giá trị {63} hay{01100011}
Hình dưới đây minh họa kết quả của việc áp dụng hàm biến đổi SubBytes() đối với mảngtrạng thái
Trang 113.1.2 Hàm ShiftRows()
Trong hàm này các byte trong ba hàng cuối của mảng trạng thái sẽ được dịch vòng với sốlần dịch (hay số byte bị dịch) khác nhau Hàng đầu tiên r=0 không bị dịch Cụ thể hàm này sẽ tiến hành bước đổi sau:
S’rc = Sr,(c+shift(r,Nb))modNb (Nb=4) trong đó giá trị dịch shift(r,Nb) phụ thuộc vào số hàng r như sau:
shift(1,4)=1, shift(2,4)=2, shift(3,4)=3
Thao tác này sẽ chuyển các byte tới các vị trí thấp hơn trong các hàng, trong khi các byte thấp nhất sẽ được chuyển lên đầu hàng Tất cả các mô tả trên có thể minh họa qua hình vẽsau:
3.1.3 Hàm MixColumns()
Hàm này làm việc trên các cột của mảng trạng thái, nó coi mỗi cột của mảng trạng thái như là một đa thức gồm 4 hạng tử Các cột sẽ được xem như là các đa thức trên GF(28) vàđược nhân trên modulo x4+1 với một đa thức cố định a(x):
a(x) = {03}x3 + {02}x2 + {01}x + {02}
Có thể biểu diễn bằng phép nhân ma trận:
Trang 12s’(x) = a(x) s(x)
= Với mọi 0≤c<Nb = 4
Kết quả là bốn byte trong mỗi cột sẽ được thay thế theo công thức sau:
Trang 133.1.4 Hàm AddRoundKey()
Trong hàm này, một khóa vòng (Round Key) sẽ được cộng vào mảng trạng thái bằng mộtthao tác XOR bit Mỗi khóa vòng gồm Nb word được sinh ra bởi thủ tục sinh khóa Cácword này sẽ được cộng vào mỗi cột của mảng trạng thái như sau:
[s’0,c, s’1,c, s’2,c, s’3,c] = [s0,c, s1,c, s2,c, s3,c] [wround*Nb+c] 0≤c≤Nb = 4
Trong đó [wi] là các word của khóa và round là lần lặp tương ứng với quy ước0≤round≤Nb Trong thuật toán mã hóa phép cộng khóa vòng khởi tạo xảy ra với round=0trước khi các vòng lặp của thuật toán được thực hiện Hàm AddRoundKey() được thựchiện trong thuật toán mã hóa khi 1≤round≤Nb
Việc thực hiện hàm này có thể được minh họa như trong hình vẽ, trong đó l=round*Nb
3.1.5 Thuật toán sinh khóa (Key Expansion)
Thuật toán sinh khóa AES nhận một khóa mã hóa K sau đó thực hiện một thủ tục sinhkhóa để sinh một dãy các khóa cho việc mã hóa Thủ tục này sẽ sinh tổng số Nb*(Nr+1)word, thủ tục sử dụng một tập khởi tạo Nb word và mỗi lần lặp trong số Nr sẽ cần tới Nbword của dữ liệu khóa Dãy các kết quả là một mảng tuyến tính các word 4 byte được kýhiệu là [wi] trong đó 0≤i<Nb(Nr+1)
Sự mở rộng khóa thành dãy khóa được mô tả qua đoạn mã giả sau:
KeyExpansion(byte key[4*Nb], word w[Nb*(Nr+1), Nk])
begin
Trang 14i = Nk
while (i< Nb*(Nr+1))
temp = w[i-1]
if(i mod Nk = 0)
temp = SubWord(RotWord(temp)) xor Rcon[i/Nk]
else if (Nk>6 and I mod Nk = 4)
temp = SubWord(temp)end if
w[i] = w[i-Nk] xor temp
i = i+1end while
end
SubWord() là hàm nhận một input 4 byte và áp dụng bảng thế S-box lên input để nhận được một word output Hàm RotWord() nhận một word input [a0, a1, a2, a3] thực hiện một hoán vị vòng và trả về [a1, a2, a3, a0] Các phần tử của mảng hằng số Rcon[i] chứa các giá trị nhận được bởi [xi-1, {00}, {00}, {00}] trong đó xi-1 là mũ hóa của x (x được biểu diễn dưới dạng {02} trên GF(28) và i bắt đầu từ 1)
Chúng ta có thể nhận thấy rằng Nk word của khóa kết quả sẽ được điền bởi khóa mã hóa.Các word sau đó w[i] sẽ bằng XOR với word đứng trước nó w[i-1] và w[i-Nk] Với các word ở vị trí chia hết cho Nk một biến đổi sẽ được thực hiện với w[i-1] trước khi thực hiện phép XOR bit, sau đó là phép XOR với một hằng số Rcon[i] Biến đổi này gồm một phép dịch vòng các byte của một word (RotWord(), sau đó là áp dụng một bảng tra lên tất
cả 4 byte của word (SubWord()) Thủ tục mở rộng khóa đối với các khóa có độ dài 256 bit hơi khác so với thủ tục cho các khóa có độ dài 128 hoặc 192 bit Nếu Nk=8 và i-4 là
Trang 15bội số của Nk thì SubWord() sẽ được áp dụng cho w[i-1] trước khi thực hiện phép XOR bit
Quá trình giải mã khá giống với quá trình mã hóa về mặt cấu trúc nhưng 4 hàm cơ bản sửdụng là các hàm ngược của các hàm trong thuật toán giải mã Dưới đây là đoạn mã giả cho thuật toán giải mã sau:
InvCipher(byte in[4*Nb], byte out[4*Nb], word w[Nb*(Nr+1)])
Cụ thể hàm này tiến hành xử lý như sau:
s’r,(c+shift(r,Nb))modNb = sr,c 0<r<4, 0≤c<Nb (Nb=4)
Dưới đây là hình ảnh minh họa
Trang 16a-1(x) = {0b}x3 + {0d}x2 + {09}x + {0e}
Có thể được mô tả bằng phép nhân ma trận sau:
s’(x) = a-1(x) s(x)
= trong đó 0≤c<Nb
Trang 17Kết quả là bốn byte trong mỗi cột sẽ được thay thế theo công thức sau:
s’0,c = ({0e}●s0,c)({0b}●s1,c) ({0d}●s2,c) ({09}●s3,c)
s’1,c = ({09}●s0,c)({0e}●s1,c) ({0b}●s2,c) ({0d}●s3,c)
s’2,c = ({0d}●s0,c)({09}●s1,c) ({0e}●s2,c) ({0b}●s3,c)
s’3,c = ({0b}●s0,c)({0d}●s1,c) ({09}●s2,c) ({0e}●s3,c)
3.2.4 Hàm nghịch đảo của hàm AddRoundKey()
Hàm nghịch của hàm AddRoundKey() cũng chính là nó vì hàm này chỉ có phép toánXOR bit
Trang 184 Kết luận
Việc sử dụng các hằng số khác nhau ứng với mỗi chu kỳ giúp hạn chế khả năng tính đốixứng trong thuật toán Sự khác nhau trong cấu trúc của việc mã hóa và giải mã đã hạnchế được các khóa “yếu” như trong phương pháp DES Ngoài ra, thông thường nhữngđiểm yếu liên quan đến mã khóa đều xuất phát từ sự phụ thuộc vào giá trị cụ thể của mãkhóa của các thao tác phi tuyến Trong phiên bản mở rộng, các khóa được sử dụng thôngqua thao tác XOR và tất cả những thao tác phi tuyến đều được cố định sẵn trong S-box
mà không phụ thuộc vào giá trị cụ thể của khóa mã hóa Tính chất phi tuyến cùng khảnăng khuếch tán thông tin trong việc tạo bản mã khóa mở rộng làm cho việc phân tíchmật mã dựa vào khóa tương đương hay các khóa có liên quan trở nên không khả thi.Đối với phương pháp vi phân rút gọn, việc phân tích chủ yếu khai thác đặc tính tập trungthành vùng của các vết vi phân trong một số phương pháp mã hóa Trong thuật toán AES,
số lượng chu kỳ lớn hơn 6, không tồn tại phương pháp công phá mật mã nào hiệu quảhơn phương pháp thử sai Tính chất phức tạp của biểu thức S-box cùng với hiệu ứngkhuếch tán giúp cho thuật toán không thể bị phân tích bằng phương pháp nội suy
Đối với phương pháp thử sai với chiều dài khóa 256-bit tương ứng 2256 hay 1.2 x 1077 khảnăng có thể xảy ra Thậm chí nếu sử dụng một trong những siêu máy tính mạnh nhấthiện nay là Roadrunner 54 của IBM để xử lý thì cũng cần 3.5 x 1054 năm để kiểm tra tất
cả khả năng (Roadrunner có khả năng thực hiện 1.042 triệu tỉ phép tính / giây)
Thuật toán AES thích hợp cho việc triển khai trên nhiều hệ thống khác nhau, khôngchỉ trên các máy tính cá nhân, mà cả trên các hệ thống thẻ thông minh
Tất cả các bước xử lý của việc mã hóa và giải mã đều được thiết kế thích hợp với cơchế xử lý song song nên AES càng chứng tỏ thế mạnh của mình trên các hệ thốngthiết bị mới