Kể từ khi được công bố là một tiêu chuẩn, AES trở thành một trong những thuật toán mã hóa phổ biến nhất sử dụng khóa mã đối xứng để mã hóa và giải mã một số được giữ bí mật dùng cho quy
Trang 1MÔN HỌC: AN NINH MẠNG THÔNG TIN
ĐỀ TÀI: TIÊU CHUẨN MẬT MÃ HÓA
TIÊN TIẾN VÀ ỨNG DỤNG
- -
BÀI TIỂU LUẬN CUỐI KÌ
HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
KHOA VIỄN THÔNG
Trang 2Bài thi cuối kì môn ANM
Trang 3BẢNG PHÂN CÔNG CÔNG VIỆC NHÓM
Họ tên sinh viên Nội dung phụ trách Chi tiết công việc
Tổng quan về thuật toán AES
Độ an toàn của thuật toán AES
Tìm hiểu, nghiên cứu và trình bày nội dung phần 1
và độ an toàn của AES
Hoàn thành bản word bao gồm: Chỉnh sửa toàn diện, mục lục, làm danh mục hình vẽ - bảng
Sinh khóa trong AES Thuật toán mã hóa AES
Tìm hiểu, nghiên cứu và trình bày nội dung phần 2: quá trình sinh khóa; nội dung về quá trình mã hóa AES
Hoàn thành tài liệu tham khảo
Trang 4Bài thi cuối kì môn ANM
MỤC LỤC
LỜI NÓI ĐẦU 8
I TỔNG QUAN HỆ MẬT MÃ AES 9
1.1 Định nghĩa 9
1.2 Đặc điểm thuật toán AES 9
a, Đặc trưng cơ bản 9
b, Cơ sở toán học 9
1.3 Cấu trúc thuật toán AES 10
II Sinh khóa trong AES (KeyExpansion) 11
2.1 Các quá trình trong sinh khóa: 12
RotWord() 12
SubBytes() 12
Rcon() 13
III Thuật toán mã hóa và giải mã trong AES 17
3.1 Thuật toán mã hóa AES 17
Phép SubBytes() 17
Phép ShifRows() 18
Phép biến đổi MixColumns() 19
Phép AddRoundKey() 20
3.2 Thuật toán giải mã 20
Phép biến đổi Add Round Key đảo 21
Phép biến đổi InvShiftRows 21
Phép biến đổi InvSubBytes 22
Phép biến đổi InvMixColumns 23
IV Ứng dụng thực tế của AES 24
4.1 Sử dụng cho công cụ lưu trữ và nén ( 7 Zip ) 24
Trang 54.2 Mã hóa ổ đĩa 25
4.3 Mạng riêng ảo VPN 26
V Kết Luận 28
Độ an toàn của thuật toán AES 28
VI Tài liệu tham khảo 28
LỜI CẢM ƠN 29
Trang 6Bài thi cuối kì môn ANM
6
DANH MỤC CÁC BẢNG BIỂU VÀ HÌNH VẼ
A – HÌNH VẼ
Hình 1: Cấu trúc mã hóa chung của AES 11
Hình 2 : Sơ đồ qua trình sinh khóa mở rộng 12
hình 3: Minh họa quá trình sinh khóa trong AES - 128 13
hình 4:: Minh họa quá trình mã hóa mỗi word đầu tiên trong vòng lặp 14
hình 5:Minh họa quá trình sinh khóa trong AES – 192 15
hình 6: Minh họa quá trình sinh khóa trong AES – 256 15
Hình 7: Sơ đồ quá trình mã hóa và giải mã hóa 17
hình 8: S-box 18
hình 9: Minh họa phép biến đổi ShiftRows 18
hình 10: Minh họa dich vòng của ShiftRows 19
hình 11: Minh họa phép MixColumns: 19
hình 12: Minh họa phép AddRoundKey 20
hình 13: Ma trận khóa vòng thứ 10 và ma trận dữ liệu đã mã hóa 20
hình 14: Phép biến đổi Add Round Key 21
hình 15: : Phép biến đổi InvShiftRows 21
hình 16: Bảng S-box đảo của chuẩn AES 22
hình 17: Phép biến đổi InvSubBytes 22
hình 18: Ma trận chuyển đổi dùng trong InvMixColumns 23
hình 19: Phép biến đổi InvMixColumns 23
hình 20: 7 Zip sử dụng phương pháp mã hóa AES-256 24
hình 21: Thực hiện kết nối VPN sử dụng TunnelBear 26
Trang 7B – BẢNG BIỂU
Bảng 1: Tổ hợp Khóa - Khối - Vòng 10 Bảng 2: bảng các giá trị RC[j] trong cơ số 16 13 bảng 3: So sánh quá trình sinh khóa giữa các loại khóa : AES – 128 , AES –
192 , AES – 256 16 bảng 4: Vòng lặp chính của AES 17
DANH MỤC THUẬT NGỮ VIẾT TẮT
VPN Virtual Private Network Mạng riêng ảo
Trang 8Bài thi cuối kì môn ANM
LỜI NÓI ĐẦU
Trước khi đi sâu vào AES, chúng ta sẽ nói về cách AES đạt được tiêu chuẩn hóa
và nói ngắn gọn về tiền nhiệm của nó là DES hay tiêu chuẩn mã hóa dữ liệu Dựa trên
sự phát triển của họ trên một thuật toán nguyên mẫu do Horst Feistel thiết kế, IBM đã
phát triển thuật toán DES ban đầu vào đầu những năm 1970
Sau đó, mã hóa được đệ trình lên Văn phòng Tiêu chuẩn Quốc gia Sau đó hợp tác
với NSA đã sửa đổi thuật toán ban đầu rồi xuất bản nó thành tiêu chuẩn xử lý thông tin
liên bang vào năm 1977 DES đã trở thành thuật toán tiêu chuẩn được chính phủ Hoa
Kỳ sử dụng trong hơn hai thập kỷ, cho đến khi, vào tháng 1 năm 1999, Distribute.net và
Electronic Frontier Foundation đã hợp tác để phá khóa DES công khai trong vòng chưa
đầy 24 giờ Họ đã kết thúc thành công chỉ sau 22 giờ 15 phút, đưa điểm yếu của thuật
toán trở thành tiêu điểm cho tất cả mọi người xem
Trong suốt quá trình 5 năm, toàn bộ cộng đồng mật mã đã tập hợp lại với nhau để
thực hiện các bài kiểm tra chi tiết, các cuộc thảo luận và các cuộc tấn công giả nhằm tìm
ra các điểm yếu và lỗ hổng tiềm ẩn có thể ảnh hưởng đến bảo mật của từng mật mã Mặc
dù sức mạnh của mật mã cạnh tranh rõ ràng là vô cùng quan trọng, nhưng nó không phải
là yếu tố duy nhất được đánh giá Các yêu cầu về tốc độ, tính linh hoạt và tính toán cũng
được xem xét vì chính phủ cần một mã hóa dễ thực hiện, đáng tin cậy và nhanh chóng
Và trong khi có nhiều thuật toán khác hoạt động rất tốt (thực tế là nhiều thuật toán trong
số đó vẫn được sử dụng rộng rãi cho đến ngày nay), mật mã Rijndael cuối cùng đã giành
chiến thắng và được tuyên bố là một tiêu chuẩn liên bang Trên thực tế, sau khi tiêu
chuẩn hóa AES, mật mã tiếp tục tăng qua các cấp bậc, và vào năm 2003, NSA cho rằng
nó phù hợp để bảo vệ Thông tin tối mật
Trong mật mã học, mã hóa là phương pháp để biến thông tin từ định dạng bình
thường sang dạng thông tin không thể hiểu được nếu không có phương tiện giải mã Giải
mã là phương pháp để đưa từ dạng thông tin đã được mã hóa về dạng thông tin ban đầu,
quá trình ngược của mã hóa AES ( viết tắt của Advanced Encryption Standard – Thuật
toán mã hóa tiên tiến ) là một thuật toán mã khối lặp, khá an toàn và rất khó tấn công
được thiết kế bởi hai nhà mật mã người Bỉ (Joan Daemen và Vincent Rijmen)
Trang 9I TỔNG QUAN HỆ MẬT MÃ AES
1.1 Định nghĩa
Tiêu chuẩn Advanced Encryption Standard (AES) – Tiêu chuẩn mã hóa tiên tiến
là một thuật toán tiêu chuẩn của chính phủ Hoa Kỳ nhằm mã hóa và giải mã dữ liệu do NIST ( National Institute Standards and Technology ) phát hành vào ngày 26/11/2001 AES là một thuật toán “mã hóa khối” (block cipher) ban đầu được tạo ra boiwr hai nhà mật mã học người Bỉ là Joan Daemen và Vincent Rijmen Kể từ khi được công bố
là một tiêu chuẩn, AES trở thành một trong những thuật toán mã hóa phổ biến nhất sử dụng khóa mã đối xứng để mã hóa và giải mã (một số được giữ bí mật dùng cho quy trình mở rộng khóa nhằm tạo ra một tập các khóa vòng) Ở Việt Nam, thuật toán AES
đã được công bố thành tiêu chuẩn quốc gia TCVN 7816:2007 năm 2007 về Thuật toán
mã hóa dữ liệu AES
1.2 Đặc điểm thuật toán AES
b, Cơ sở toán học
Cơ sở toán học của giải thuật mã hóa AES là phép cộng và phép nhân trên trường
GF ( 28 ) Phép cộng trên trường GF (28): chính là phép cộng XOR hay phép cộng theo modulo 2 giữa các bit tương ứng giữa 2 byte
Trang 10Bài thi cuối kì môn ANM
Đa thức tối giản m(x) = x8 + x4 + x3 + x + 1
Ví dụ: Thực hiện phép cộng và nhân hai số (57) và (83) GF(28)
1.3 Cấu trúc thuật toán AES
Đối với thuật toán AES, độ dài của khối đầu vào, khối đầu ra và trạng thái là 128 bít, số các cột (các từ có độ dài 32 bít) tạo nên trạng thái là Nb = 4 Trong thuật toán AES, độ dài khóa mã K có thể là 128, 192 hay 256 bít Độ dài khóa được biểu diễn bằng
Nk = 4, 6 hoặc 8 thể hiện số lượng các từ 32 bít (số cột) của khóa mã
Đối với thuật toán AES, số vòng được thay đổi trong quá trình thực hiện thuật toán phụ thuộc vào kích cỡ khóa Số vòng này được ký hiệu là Nr Nr = 10 khi Nk = 4, Nr =
12 khi Nk = 6 và Nr = 14 khi Nk = 8
Các tổ hợp khóa-khối-vòng phù hợp đối với tiêu chuẩn này thể hiện trong Bảng 1 Việc thực hiện cụ thể thuật toán có liên quan đến độ dài khóa, kích cỡ khối và số vòng
Độ dài khóa (Nk từ)
Độ dài khối (Nb từ)
Số vòng (Nr)
Trang 11trong mỗi cột của mảng trạng thái, AddRoundKey() phép cộng khóa vòng và trạng thái Các phép biến đổi này (cũng như các phép nghịch đảo tương ứng của chúng) được mô
tả trong hình dưới đây
Hình 1: Cấu trúc mã hóa chung của AES
II Sinh khóa trong AES (KeyExpansion)
Thuật toán AES nhận một khóa mã K có độ dài là:128;192;256 Sau đó thực hiện phép mở rộng khóa để tạo ra các khóa con để đưa vào các vòng lặp Đây chính là quá trình mở rộng khóa
Quá trình sinh khóa gồm 4 bước :
Rotword : Quay trái 8 bit các khóa vào
SubBytes : Thay thế trạng thái của khóa vào thông qua bảng trạng thái S-box
Rcon : Tính giá trị Rcon(i) Trong đó :
Rcon(i) = x(i-1) mod(x8+x4+x3+x+1)
ShiftRow: Dịch vòng của khóa vào
Trang 12Bài thi cuối kì môn ANM
Hình 2 : Sơ đồ qua trình sinh khóa mở rộng
Như trên sơ đồ trên đầu tiên (Cipher key) khóa vào để mã hóa có một khóa duy nhất sau đó thực hiện Rotword (quay trái 8 bit ) tiếp đến thay thế dựa vào bảng mã S-box Trộn với Rcon sau đó dịch vòng trong quá trình ShiftRow Được đầu ra (Subkeys/round key) đưa vào các khóa con Các bước này sẽ lặp lại 10 lần nếu như khóa đầu vào có độ dài là 128 (12 lần đối với khóa đầu vào là 192 , 14 lần đối với khóa đầu vào là 256)
2.1 Các quá trình trong sinh khóa:
Thực hiện biến đổi bằng cách tra các mã tương ứng tròn s-box
SubWord(X) = [Box(X[31-24]), Box(X[23-16]), Box(X[15-8]), Box(X[7-0])]
S-SubWord(73744765) = 8f92a04d
Trang 13Rcon()
Rcon : Mảng chứa hằng số sử dụng trong các vòng lặp.Rcon[i] là một word (4 bytes) định nghĩa là Rcon[j] = (RC[j] , 0 , 0 , 0), với phép nhân sẽ được định nghĩa trên trường GF(28)
Các giá trị của RC[j] trong cơ số 16 là :
Bảng 2: bảng các giá trị RC[j] trong cơ số 16
j 1 2 3 4 5 6 7 8 9 10 11 12 13 14
RC[j] 01 02 04 08 10 20 40 80 1B 36 6c d8 ab 4d
Quá trình sinh khóa trong AES:
hình 3: Minh họa quá trình sinh khóa trong AES - 128.
Trang 14Bài thi cuối kì môn ANM
Như dưới hình vẽ , mỗi một word w0, w1, w2, w3 đại diện cho 4 bytes đầu vào
Để tính ra các vòng lặp tiếp theo , ta cần tính toán các bytes đầu tiên của mỗi vòng lặp khóa Trong thuật toán mở rộng khóa mã 128 bit có đầu vào là 16 bytes của khóa mã ,
và sinh ra một mảng khóa vòng (Nr + 1)*4 = 44 (word) (Hay 176 bytes)
44 word này sử dụng cho các vòng mã hóa Từ 4 word đầu vào w0,w1,w2,w3 lặp
đi lặp lại nhiều lần và cuối cùng cho ra 4 word cuối cùng như trong hình vẽ
hình 4:: Minh họa quá trình mã hóa mỗi word đầu tiên trong vòng lặp
Quá trình mã hóa mỗi word đầu tiên trong vòng lặp:
Như trên hình ta có thể thấy , Từ khóa đầu vào ta sẽ lấy mảng khóa cuối cùng w3 thực hiện RotWord Sau đó sử dụng SubBytes với hàm bằng cách tra mã trong bảng S-box Được chuỗi mã sau S-box ta sẽ lấy khối khóa này thực hiện phép XOR với Rcon (RC[j], j=1) Ta thu được chuỗi mã w’ , tiếp đó thực hiện một lần nữa phép XOR với w0 ta thu được chuỗi mã w4 Tiếp theo đó , thực hiện phép XOR giữa w4 và w1 ra w5 ,…vv Thực hiện tương tự với mỗi chuỗi mã của đầu vòng lặp ta thu được 10 khóa con khác nhau
Tương tự với các độ dài khóa khác :
Trang 15hình 5:Minh họa quá trình sinh khóa trong AES – 192
hình 6: Minh họa quá trình sinh khóa trong AES – 256.
Trang 16Bài thi cuối kì môn ANM
bảng 3: So sánh quá trình sinh khóa giữa các loại khóa : AES – 128 , AES – 192 , AES – 256
Khóa 128 bit Khóa 192 bit Khóa 256 bit
Số từ word được tạo
ra:
4 x (N r +1)= 4 x (12+1) = 52 word
Số word được tạo ra:
4 x (N r + 1)=4x(14 + 1) = 60 word
Số từ sinh ra sau mỗi vòng lặp sinh khóa con: 4 word
Số từ sinh ra sau mỗi vòng lặp sinh khóa con: 6 word
Số từ sinh ra sau mỗi vòng lặp sinh khóa con: 8 word
Số vòng lặp:
⌈44⁄4⌉ = 11 (𝑣ò𝑛𝑔)
=>sử dụng đến Rcon[10], không thừa word nào
Số vòng lặp:
⌈52⁄6⌉ = 9 (𝑣ò𝑛𝑔)
=>sử dụng đến Rcon[8], thừa w 52 và
w 53
Số vòng lặp:
⌈60⁄8⌉ = 8 (𝑣ò𝑛𝑔)
=>sử dụng đến Rcon[7], thừa 4 word
từ w 60 đến w 63
Mục đích của việc thực hiện ExpandKey (Mở rộng/Sinh khóa):
Tính bảo mật: Khi biết được một số bit của khóa hay khóa con thì việc tính các bit còn lại là bất khả thi Không thể tính ngược , truy ngược khi biết một khóa con thì cũng không thể tính được khóa con trước đó
Tính khuếch tán: Một bit của khóa chính sẽ tác động lên tất cả các khóa con
Trang 17III Thuật toán mã hóa và giải mã trong AES
3.1 Thuật toán mã hóa AES
Hình 7: Sơ đồ quá trình mã hóa và giải mã hóa
Thuật toán mã hóa AES được mô tả gồm các bước sau :
Với mỗi chuỗi đầu vào cho trước x, khởi tạo Mảng trạng thái (state) gọi là x và thực hiện phép toán AddRoundKey để thực hiện XOR khóa RoundKey với trạng thái x Nr-1 vòng lặp bao gồm các phép biến đổi :
bảng 4: Vòng lặp chính của AES
MÃ HÓA SubBytes() ShiftRows() MixColumns() AddRoundKey() Vòng lặp cuối bao gồm các phép biến đổi trên ngoài trừ không có MixColumns
Phép SubBytes()
Là phép thay thế phi tuyến tính , ở trong phép này mỗi byte được tác động đến độc lập với nhau trong các trạng thái hiện tại Phép SubBytes sẽ thay thế mỗi byte của mảng trạng thái (state) bằng 1 byte trong bảng S-box
Trang 18Bài thi cuối kì môn ANM
hình 8: S-box
Ví dụ : SubBytes({90}) = {60} (tra ở hàng 9 cột 0)
Phép ShifRows()
hình 9: Minh họa phép biến đổi ShiftRows
Phép biến đổi dùng trong phép mã hóa áp dụng lên trạng thái bằng cách chuyển dịch vòng ba hàng cuối của trạng thái theo số lượng byte các offset khác nhau
Là phép hoán vị các ma trận state theo cách thức sau:
Hàng đầu không thay đổi
Hàng hai dịch vòng trái 1- byte
Hàng ba dịch vòng trái 2-byte
Hàng tư dịch vòng trái 3-byte
Trang 19hình 10: Minh họa dich vòng của ShiftRows
Phép biến đổi MixColumns()
Phép biến đổi MixColumns thực hiện biến đổi từng cột một trong ma trận trạng thái (state) bằng một phép nhân đa thức Mỗi cột trong ma trận trạng thái được biểu diễn cho một đa thức a(x) trong trường GF(28) Phép biến đổi MixColumns được thực hiện bằng cách nhân mỗi cột với một ma trận trong trường hữu hạn sự chuyển đổi này cùng với ShiftRows đảm bảo tính làm rối (confusion) của mã hóa
hình 11: Minh họa phép MixColumns:
Trong thao tác MixColumns
S’(x) = a(x) ⨁ S(x)
a(x) = 3x3 + x2 + x + 2
Trang 20Bài thi cuối kì môn ANM
Phép AddRoundKey()
hình 12: Minh họa phép AddRoundKey
Mỗi trạng thái trong ma trận (state) được thực hiện phép XOR với khóa vòng Quá trình AES kết hợp 11 khóa vòng từ khóa mật mã đến đầu bộ mã hóa Việc kết hợp với khóa bí mật sẽ tạo ra tính làm rối (hashing)
3.2 Thuật toán giải mã
Giải mã là quá trình để có được dữ liệu gốc từ dữ liệu đã được mã hóa Quá trình này dựa trên khóa nhận được từ dữ liệu của bên gửi AES là hệ mã đối xứng nên các bước của quá trình giải mã chính là các bước ngược lại với các bước của quá trình mã hóa, cả bên gửi và bên nhận đều có chìa khóa để mã hóa và giải mã dữ liệu Vòng cuối cùng của một giai đoạn giải mã bao gồm ba giai đoạn như InvShiftRows, InvSubBytes
và AddRoundKey như trên hình
Quá trình giải mã AES-128 với (Nk =4, Nr = 10) sẽ được giải thích trên một ví dụ
cụ thể Giả sử chuỗi dữ liệu cần mã hóa cipher_text[127:0] và khóa vòng cuối cùng lấy
từ quá trình mã hóa round_key_10[127:0] có giá trị như sau:
o cipher_text[127:0] = 69 c4 e0 d8 6a 7b 04 30 d8 cd b7 80 70 b4 c5 5a
o round_key_10[127:0] = 13 11 1d 7f e3 94 4a 17 f3 07 a7 8b 4d 2b 30 c5
Dữ liệu và khóa mã được sắp xếp dưới dạng ma trận với mỗi phần tử là một byte
hình 13: Ma trận khóa vòng thứ 10 và ma trận dữ liệu đã mã hóa
Trang 21Phép biến đổi Add Round Key đảo
Chức năng AddRoundKey đảo trong quá trình giải mã cũng chính là chức năng Add Round Key trong quá trình mã hóa nên gọi chung là Add Round Key
hình 14: Phép biến đổi Add Round Key
Phép biến đổi InvShiftRows
InvShiftRows là đảo của chức năng ShiftRows InvShiftRows thực hiện quay phải từng hàng của ma trận trạng thái, sinh ra từ bước trước đó, theo byte với hệ số quay tăng dần từ 0 đến 3 Hàng đầu tiên có hệ số quay là 0 thì các byte được giữ nguyên vị trí Hàng thứ hai có hệ số quay là 1 thì các được quay một byte Hàng thứ ba quay hai byte
và hàng thứ tư quay ba byte
hình 15: : Phép biến đổi InvShiftRows