CHƯƠNG 1: GIỚI THIỆU THUẬT TOÁN MÃ HÓA AES1Giới thiệu tổng quátTiêu chuẩn Advanced Encryption Standard AES - Tiêu chuẩn mã hóatiên tiến là một thuật toán tiêu chuẩn của chính phủ Hoa Kỳ
Trang 1HỌC VIỆN KỸ THUẬT MẬT MÃ
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO BÀI TẬP LỚN MÔN CƠ SỞ AN TOÀN VÀ BẢO MẬT THÔNG TIN
Đề tài: Gửi, nhận một file dữ liệu giữa hai máy sử dụng
thuật toán AES bằng Java
Sinh viên thực hiện:
Trần Thị Kim Liên CT030429Cao Hoàng Huy CT030126
Giảng viên hướng dẫn: TS Nguyễn Đào Trường
Khoa Công nghệ thông tin – Học viện Kỹ thuật mật mã
Hà Nội, 2021
Trang 2
Trang 3
MỤC LỤC
L I NÓI Đ U ỜI NÓI ĐẦU ẦU 1
L I C M N ỜI NÓI ĐẦU ẢM ƠN ƠN 2
DANH M C HÌNH NH ỤC HÌNH ẢNH ẢM ƠN 3
DANH M C B NG BI U ỤC HÌNH ẢNH ẢM ƠN ỂU 4
CH ƯƠN NG 1: GI I THI U THU T TOÁN MÃ HÓA AES ỚI THIỆU THUẬT TOÁN MÃ HÓA AES ỆU THUẬT TOÁN MÃ HÓA AES ẬT TOÁN MÃ HÓA AES 5
1 Gi i thi u t ng quát ới thiệu tổng quát ệu tổng quát ổng quát 5
1.1 Đ c đi m kĩ thu tặc điểm kĩ thuật ểm kĩ thuật ật 6
1.2 Đ c t thu t toán AESặc điểm kĩ thuật ả thuật toán AES ật 7
2 Xây d ng b ng S-box ựng bảng S-box ảng S-box 7
2.1 B ng S-box thu nả thuật toán AES ật 7
2.2 B ng S-box ngh ch đ oả thuật toán AES ịch đảo ả thuật toán AES 9
3 M r ng khóa (ExpandKey) ở rộng khóa (ExpandKey) ộng khóa (ExpandKey) 10
CH ƯƠN NG 2: QUÁ TRÌNH MÃ HÓA 12
1 Phép bi n đ i AddRoundKey ến đổi AddRoundKey ổng quát 13
2 Phép bi n đ i SubBytes ến đổi AddRoundKey ổng quát 13
3 Phép bi n đ i ShiftRow ến đổi AddRoundKey ổng quát 14
4 Phép bi n đ i MixColumns ến đổi AddRoundKey ổng quát 15
CH ƯƠN NG 3: QUÁ TRÌNH GI I MÃ ẢM ƠN 17
1 Phép bi n đ i InvSubBytes() ến đổi AddRoundKey ổng quát 18
2 Phép bi n đ i InvShiftRows ến đổi AddRoundKey ổng quát 18
3 Phép bi n đ i InvMixColumns() ến đổi AddRoundKey ổng quát 19
4 Phép bi n đ i ngh ch AddRoundKey() ến đổi AddRoundKey ổng quát ịch AddRoundKey() 20
CH ƯƠN NG 4: ĐÁNH GIÁ THU T TOÁN AES ẬT TOÁN MÃ HÓA AES 21
Trang 41 Ưu điểm u đi m ểm 21
2 Nh ược điểm c đi m ểm 21
3 Ứng dụng ng d ng ụng 21
CH ƯƠN NG 5: L P TRÌNH SOCKET TCP/IP TRONG JAVA ẬT TOÁN MÃ HÓA AES 22
1 T ng quan v Socket ổng quát ề Socket 22
2 L p trình TCP Socket v i Java ập trình TCP Socket với Java ới thiệu tổng quát 24
PH L C ỤC HÌNH ẢNH ỤC HÌNH ẢNH 26
K T LU N ẾT LUẬN ẬT TOÁN MÃ HÓA AES 27
TÀI LI U THAM KH O ỆU THUẬT TOÁN MÃ HÓA AES ẢM ƠN 28
Trang 5LỜI NÓI ĐẦU
AES là viết tắt của Advanced Encryption Standard, chuẩn mã hóa dữ liệurất phổ biến, dùng cho nhiều mục đích và được cả chính phủ Mỹ sử dụng đểbảo vệ các dữ liệu tuyệt mật AES là kiểu mã hóa đối xứng dạng khối, nghĩa làmỗi khối văn bản có một kích thước nhất định được mã hóa, khác với mã hóadạng chuỗi khi từng kí tự được mã hóa Đối xứng nghĩa là khóa để mã hóa vàgiải mã đều là một AES được phát triển từ cuối những năm 90s để thay thếchuẩn mã hóa trước đó là Data Encryption Standard (DES) do IBM tạo ra đầunhững năm 70s Vào năm 1998, DES trở thành 3DES hay còn gọi là TripleDES, dùng thuật toán DES để truyền thông điệp 3 lần liên tiếp với 3 khóa mãhóa khác nhau 3DES khiến dữ liệu an toàn hơn trước kiểu tấn công brute forcethời đó
15 thuật toán được đề xuất thay thế DES, bắt đầu quy trình 5 năm củachính phủ Mỹ AES được hai nhà mật mã học là Vincent Rijmen và JoanDaemen đề xuất, sau được gọi là “đơn Rijindael” AES là chuẩn mở vì khi đóchuẩn thực sự cũng chưa được xác định Trong quá trình thiết kế, nó cũng nhậnbình luận, góp ý Nó được Viện tiêu chuẩn và kỹ thuật quốc gia Hoa Kỳ pháttriển với mục tiêu dễ dùng cho cả phần cứng và phần mềm Một số thay đổi vềkhóa và khối được thực hiện để tăng tính an toàn.NSA cũng tham gia xem xét
15 bản đề xuất Tới tháng 8/1999 chỉ còn 5 thuật toán (Rijndael, Serpent, RC6,Twofish và MARS) Các “ứng viên” được phân tích thêm về độ bảo mật, tính
dễ sử dụng, bản quyền, tốc độ, độ chính xác khi mã hóa và giải mã
Người chiến thắng sau cùng là Rijndael, sau đó được đưa lên cho chínhphủ Mỹ vào năm 2002 và cả NSA cùng các tổ chức khác Đến giờ, AES vẫnđược dùng cho các tài liệu tuyệt mật, được cho là FIPS (Federal InformationProcessing Standard - tiêu chuẩn xử lý thông tin liên bang) Sau đó nó đượcdùng trong khối tư nhân, là chuẩn mã hóa phổ biến nhất với mã hóa khóa đốixứng
Trang 7LỜI CẢM ƠN
Nhóm chúng em xin chân thành cảm ơn các thầy cô Trường Học viện kỹthuật Mật Mã nói chung, quý thầy cô của khoa Công nghệ thông tin nói riêng đãtận tình dạy bảo, truyền đạt kiến thức cho em trong suốt quá trình học
Kính gửi đến Thầy Nguyễn Đào Trường lời cảm ơn chân thành và sâu sắc,cảm ơn thầy đã theo sát và chỉ dẫn nhóm em trong quá trình thực hiện đề tài này.Trong quá trình tìm hiểu nhóm chúng em xin cảm ơn các bạn cùng lớp đãgóp ý, giúp đỡ nhóm chúng em rất nhiều trong quá trình tìm hiểu và làm đề tài
Trang 8DANH MỤC HÌNH Ả
Hình 1 1 Quy trình mã hóa và giải mã bằng AES 7
Hình 1 2 Công thức tính giá trị bảng S-box thuận 9
Hình 1 3 Bảng S-box thuận 9
Hình 1 4 Công thức tính giá trị bảng S-box nghịch đảo 10
Hình 1 5 Bảng S-box nghịch đảo 10
Hình 1 6 Quy trình mở rộng khóa (ExpandKey) 11
Hình 1 7 Mở rộng khóa với khóa 128 bit 12Y Hình 2 1 Phép biến đổi AddRoundKey() 14
Hình 2 2 Phép biến đổi SubBytes() 15
Hình 2 3 Bảng S-box 15
Hình 2 4 Phép biến đổi ShiftRows() 16
Hình 2 5 Ma trận chuyển đổi sử dụng trong phép biến đổi MixColumns() 16
Hình 2 6 Phép biến đổi MixColumns() 1 Hình 3 1 Quy trình giải mã 18
Hình 3 2 Phép biến đổi InvSubBytes() 19
Hình 3 3 Phép biến đổi InvShiftRows() 20
Hình 3 4 Phép biến đổi InvMixColumns() 20
Hình 3 5 Phép biến đổi nghịch AddRoundKey()2 Hình 5 1 Mô hình OSI và TCP/IP 23
Hình 5 2 Quá trình gửi-nhận gói tin 24
4
Trang 9Hình 5 3 Lập trình TCP Socket 25 Hình 5 4 Quá trình gửi-nhận tin giữa Client-Server 26
Trang 10DANH MỤC BẢNG BIỂU
Bảng 1 1 Bảng tổ hợp khóa-khối-vòng 8
6
Trang 11CHƯƠNG 1: GIỚI THIỆU THUẬT TOÁN MÃ HÓA AES
1 Giới thiệu tổng quát
Tiêu chuẩn Advanced Encryption Standard (AES) - Tiêu chuẩn mã hóatiê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 Viện Tiêu chuẩn và Công nghệ quốc gia Hoa Kỳ (NationalInstitute Standards and Technology– NIST) phát hành ngày 26/11/2001 vàđược đặc tả trong Tiêu chuẩn Xử lý thông tin Liên bang 197 (FederalInformation Processing Standard – FIPS 197) sau quá trình kéo dài 5 năm trìnhphê duyệt, AES tuân theo mục 5131 trong Luật Cải cách quản lý công nghệthông tin năm 1996 và Luật An toàn máy tính năm 1997
AES là một thuật toán “mã hóa khối” (block cipher) ban đầu được tạo rabởi 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áckhóa vòng) Ở Việt Nam, thuật toán AES đã được công bố thành tiêu chuẩnquốc gia TCVN 7816:2007 năm 2007 về Thuật toán mã hóa dữ liệu AES.AES làm việc với các khối dữ liệu 128bit và độ dài khóa 128bit, 192bithoặc 256bit Các khóa mở rộng sử dụng trong chu trình được tạo ra bởi thủ tụcsinh khóa Rijndael
Hầu hết các phép toán trong thuật toán AES đều thực hiện trong mộttrường hữu hạn của các byte Mỗi khối dữ liệu đầu vào 128bit được chia thành16byte, có thể xếp thành 4 cột, mỗi cột 4 phần tử hay một ma trận 4x4 của cácbyte, nó gọi là ma trận trạng thái
Trang 12Tùy thuộc vào độ dài của khóa khi sử dụng 128bit, 192bit hay 256bit màthuật toán được thực hiện với số lần lặp khác nhau.
1.1 Đặc điểm kĩ thuật
AES là một thuật toán mã hóa khối đối xứng với độ dài khóa là 128 bít(một chữ số nhị phân có giá trị 0 hoặc 1), 192 bít và 256 bít tương ứng dọi làAES-128, AES-192 và AES-256 AES-128 sử dụng 10 vòng (round), AES-192
mã bị che khuất Một cách đơn giản hơn để xem thứ tự hàm AES là: Trộn từngbyte (SubBytes), trộn từng hàng (ShiftRows), trộn từng cột (MixColumns) và
mã hóa (AddRoundKey)
8
Trang 13Hình 1 1 Quy trình mã hóa và giải mã bằng AES
1.2 Đặc tả 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ừ 32bí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ệnthuậ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 trongBả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
Bảng 1 1 Bảng tổ hợp khóa-khối-vòng
Dạng khóa Độ dài khóa (Nk từ) Độ dài khối (Nb từ) Số vòng (Nr)
Trang 14Công thức tính các giá trị bảng S-box và bảng S- box tương ứng:
10
Trang 16Hình 1 3 Công thức tính giá trị bảng S-box thuận
2.2 Bảng S-box nghịch đảo
S-box nghịch đảo chỉ đơn giản là S-box chạy ngược Nó được tính bằngphép biến đổi affine nghịch đảo các giá trị đầu vào Phép biến đổi affine nghịchđảo được biểu diễn như sau:
12
Hình 1 2 Bảng S-box thuận
Trang 17Hình 1 4 Công thức tính giá trị bảng S-box nghịch đảo
Hình 1 5 Bảng S-box nghịch đảo
3 Mở rộng khóa (ExpandKey)
ExpandKey là thao tác tạo lược đồ khóa hay mở rộng khóa, tạo ra Nr+1khóa vòng từ khóa chính K, mỗi khóa vòng gồm Nb từ 32 bit, trong đó đối vớiAES thì Nb = 4, còn Nr được xác định theo các phép biến đổi để tạo khóa vòng
Trang 18trong ExpandKey là khác nhau đối với các giá trị khác nhau của kích thướckhóa K
Quá trình sinh khóa gồm 4 bước:
Rotword: quay trái 8 bít
SubBytes
Rcon: tính giá trị Rcon(i) Trong đó :
Rcon(i) = x(i-1) mod (x8 + x4 + x3 + x + 1).
ShiftRow
Hình 1 6 Quy trình mở rộng khóa (ExpandKey)
Sau đây là việc mở rộng khóa đối với khóa mã 128 bit
14
Trang 19Hình 1 7 Mở rộng khóa với khóa 128 bit
Trong thao tác mở rộng khóa với khóa mã 128 bit có đầu vào là 16 byte (4word) của khóa mã, và sinh ra một mảng khóa vòng (Nr+1)x4=44 từ (word)hay 176 byte 44 word này được sử dụng cho 11 vòng mã hóa của AES, mỗivòng dùng 4 word Từ bốn word đầu vào w0w1w2w3, trong lần lặp đầu tiênthao tác ExpandKey sinh ra bốn word w4w5w6w7, lần lặp thứ 2 từw4w5w6w7 sinh ra w8w9w10w11 , cứ như thế cho đến lần lặp thứ 10 (tùythuộc chiều dài khóa) sinh ra bốn word cuối cùng w40w41w42w43 như hìnhvẽ
Mục đích của ExpandKey: dùng để chống lại known-plaintext attack
Biết một số bit của khóa hay khóa con cũng không thể tính các bitcòn lại
Không thể tính ngược: biết một khóa con cũng không thể tính lạicác khóa con trước đó
Tính khuếch tán: một bit của khóa chính tác động lên tất cả các bitcủa các khóa con
Trang 20CHƯƠNG 2: QUÁ TRÌNH MÃ HÓA
Tại thời điểm bắt đầu phép mã hóa, đầu vào được sao chép vào mảngtrạng thái sử dụng các quy ước Sau phép cộng khóa vòng khởi đầu, mảngtrạng thái được biến đổi bẳng cách thực hiện một hàm vòng liên tiếp với sốvòng lặp là 10, 12 hoặc 14 (tương ứng với độ dài khóa), vòng cuối cùng khácbiệt không đáng kể với Nr-1 vòng đầu tiên Trạng thái cuối cùng được chuyểnthành đầu ra Hàm vòng được tham số hóa bằng cách sử dụng một lược đồkhóa – mảng một chiều chứa các từ 4 byte nhận từ phép mở rộng khóa
Phép biến đổi cụ thể gồm SubBytes(), ShiftRows(), MixColumns() vàAddRoundKey() dùng để xử lý trạng thái
Mô tả quá trình mã hóa:
2 ShiftRows — dịch chuyển, các hàng trong trạng thái được dịchvòng theo số bước khác nhau
3 MixColumns — quá trình trộn làm việc theo các cột trong khốitheo một phép biến đổi tuyến tính
4 AddRoundKeyIII Vòng lặp cuối:
1 SubBytes
2 ShiftRows
3 AddRoundKey
16
Trang 21Tại chu trình cuối thì bước MixColumns không thực hiện
1 Phép biến đổi AddRoundKey
Hình 2 1 Phép biến đổi AddRoundKey()
2 Phép biến đổi SubBytes
Biến đổi SubBytes() thay thế mỗi byte riêng rẽ của state Sr,c bằng một giátrị mới S’ r,c sử dụng bảng thay thế (S - box) được xây dựng ở trên
Trang 22Hình 2 2 Phép biến đổi SubBytes()
18
Hình 2 3 Bảng S-box
Trang 233 Phép biến đổi ShiftRow
Trong biến đổi ShiftRows(), các byte trong ba hàng cuối cùng của trạng thái được dịch vòng đi các số byte khác nhau (độ lệch) Cụ thể :
S’r,c = Sr,(c + shift ( r, Nb)) mod Nb (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.
Hàng đầu tiên không bị dịch, ba hàng còn lại bị dịch tương ứng:
o Hàng thứ 1 giữ nguyên
o Hàng thứ 2 dịch vòng trái 1 lần
o Hàng thứ 3 dịch vòng trái 2 lần
o Hàng thứ 4 dịch vòng trái 3 lần
Hình 2 4 Phép biến đổi ShiftRows()
4 Phép biến đổi MixColumns
Biến đổi MixColumns() tính toán trên từng cột của state Các cột được coi như là đa thức trong trường GF(28) và nhân với một đa thức a(x) với:
a(x) = (03)x^3 +(01)x^2 +(01)x + (02)
Trang 24 Biến đổi này có thể được trình bày như phép nhân một ma trận, mà mỗi byteđược hiểu như là một phần tử trong trường GF(28): s’(x) = a(x) s(x):
Mô tả bằng ma trận như sau :
Hình 2 5 Ma trận chuyển đổi sử dụng trong phép biến đổi MixColumns()
Hình 2 6 Phép biến đổi MixColumns()
20
Trang 25CHƯƠNG 3: QUÁ TRÌNH GIẢI MÃ
Mã hóa chuyển một "bản rõ" (plaintext) thành một "bản mã" (ciphertext)thông qua một khóa mã (key) giúp che dấu thông tin gốc ban đầu Giải mã làquá trình nghịch đảo (Inverse cipher) của quá trình mã hóa Nó giúp khôi phụclại bản rõ từ một bản mã
Trong quá trình giải mã, ma trận ciphertext sẽ bị biến đổi bởi các chứcnăng AddRoundKey, InvSubBytes, InvShiftRows hoặc InvMixColumns để tạo
ra các dữ liệu trung gian gọi là ma trận trạng thái Ma trận khóa mã sẽ bị biếnđổi bởi chức năng KeyExpansion như trong quá trình mã hóa Tuy nhiên, thứ
tự sử dụng các khóa vòng trong quá trình giải mã ngược với quá trình mã hóa
Trang 26Hình 3 1 Quy trình giải mã
22
Trang 271 Phép biến đổi InvSubBytes()
Phép biến đổi InvSubBytes() là nghịch đảo của phép thay thế theo byte SubBytes(), trong đó sử dụng một S-box nghịch đảo áp dụng cho mỗi byte của trạng thái
Hình 3 2 Phép biến đổi InvSubBytes()
Trang 282 Phép biến đổi InvShiftRows
Phép biến đổi InvShiftRows() là phép biến đổi ngược của ShiftRows().Các byte trong ba từ cuối của trạng thái được dịch vòng theo số byte khácnhau Ở hàng đầu tiên (r=0) không thực hiện phép chuyển dịch, ba hàng dướicùng được dịch vòng Nb-shift(r,Nb) byte
Hình 3 3 Phép biến đổi InvShiftRows()
3 Phép biến đổi InvMixColumns()
Phép biến đổi InvMixColumns() là phép biến đổi ngược củaMixColumns() Nó thao tác theo từng cột của trạng thái, xem mỗi cột như một
đa thức bốn hạng tử
24
Trang 29Hình 3 4 Phép biến đổi InvMixColumns()
4 Phép biến đổi nghịch AddRoundKey()
Phép biến đổi AddRoundKey() là phép biến đổi thuận nghịch vì nó chỉ ápdụng một phép toán XOR nên nó được thực hiện như nhau ở cả phép mã hóa
và phép giải mã.InvMixColumns của quá trình giả mã là đảo của MixColumnstrong quá trình mã hóa
Trang 30Hình 3 5 Phép biến đổi nghịch AddRoundKey()
26
Trang 31CHƯƠNG 4: ĐÁNH GIÁ THUẬT TOÁN AES
1 Ưu điểm
- AES đã được chính phủ Hoa Kỳ tuyên bố là có độ an toàn cao và đã được sửdụng thông tin mật
- AES có mô tả toán học đơn giản
- Cấu trúc rõ ràng đơn giản
2 Nhược điểm
- AES không đủ an toàn đối với dạng tấn công kênh bên (side channel attack)
- 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àychưa dẫn đến mối nguy hiểm nào nhưng một số nhà nghiên cứu sợ rằng sẽ
có người lợi dụng được cấu trúc này trong tương lai
3 Ứng dụng
- Hiện nay, AES được sử dụng phổ biến trên toàn thế giới để bảo vệ dữ liệu ởcác tổ chức ngân hàng, tài chính, chính phủ, thương mại điện tử, chữ ký điệntử,…
- Mã hóa AES được ứng dụng nhanh đối với cả phần cứng và phần mềm, vàchỉ yêu cầu một không gian lưu trữ nhỏ, lý tưởng để sử dụng cho việc mãhóa những thiết bị cầm tay nhỏ như ổ USB Flash, ổ đĩa CD,…
- Sử dụng như một hàm băm
- Xây dựng các hàm băm Hàm băm Whilrpool là một ví dụ điển hình