Tải bản đầy đủ (.pdf) (42 trang)

Báo cáo bài tập lớ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 ngôn ngữ java

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (5.16 MB, 42 trang )

HỌ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
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 tốn AES bằng ngơn ngữ java
Giáo viên hướng dẫn:
Th.S Nguyễn Đào Trường
Nhóm 13: Phùng Hồi Thương

CT040249

Phạm Trường Minh

CT040231

Lớp L04


Hà Nội, 03-2023


LỜI NÓI ĐẦU

Mật mã học là một lĩnh vực quan trọng trong khoa học máy tính, nghiên cứu và
ứng dụng các phương pháp mã hóa và giải mã thơng tin. Từ việc bảo vệ thông tin cá
nhân cho đến quản lý an tồn thơng tin doanh nghiệp, mã hóa là một cơng cụ quan
trọng để đảm bảo tính bí mật và tồn vẹn của thơng tin trong thế giới kỹ thuật số hiện
nay.
Trong bối cảnh mật mã hóa ngày càng phức tạp, thuật tốn mã hóa AES


(Advanced Encryption Standard) đã trở thành một trong những thuật tốn mã hóa phổ
biến nhất và được sử dụng rộng rãi trên toàn thế giới. Với khả năng bảo vệ thông tin
tốt, AES được áp dụng trong nhiều lĩnh vực như tài chính, ngân hàng, chính phủ và các
ứng dụng khác.
Bài báo cáo này sẽ cung cấp cho bạn những kiến thức cơ bản về mã hóa, giới
thiệu thuật tốn AES, cũng như các phương pháp tấn cơng và cài đặt thuật tốn mã hóa
AES để giúp bạn hiểu rõ hơn về lý thuyết và ứng dụng của mã hóa trong thế giới kỹ
thuật số ngày nay. Bài báo cáo của chúng em sẽ trình bày tổng quan lý thuyết và cài
đặt thuật tốn mã hóa AES - ADVANCED ENCRYPTION STANDARD theo 2
chương như sau :
Chương 1 : Cơ sở lý thuyết
Chương 2 : Thực nghiệm


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

MỤC LỤC

DANH MỤC HÌNH VẼ...........................................................................................................iii
DANH MỤC BẢNG BIỂU......................................................................................................iv
CHƯƠNG 1. CƠ SỞ LÝ THUYẾT.........................................................................................1
1.1 Giới thiệu chung.............................................................................................................1
1.2 Xây dựng thuật toán.......................................................................................................2
1.2.1 Xây dựng bảng S-box...............................................................................................2
1.2.2 Giải thuật sinh khóa phụ...........................................................................................4
1.2.3 Quá trình mã hóa......................................................................................................8
1.2.4 Q trình giải mã....................................................................................................12
1.3 Lập trình Socket TCP/IP trong Java...........................................................................14
1.3.1 Tổng quan về Socket..............................................................................................14
1.3.2 Lập trình TCP Socket với Java...............................................................................16

CHƯƠNG 2. THỰC NGHIỆM.............................................................................................19
2.1 Cài đặt thuật toán sinh khóa........................................................................................19
2.1.1 Hàm RotWord.........................................................................................................19
2.1.2 Hàm SubWord........................................................................................................19
2.1.3 Hàm XorRcon........................................................................................................19
2.1.4 Hàm KeyExpansion................................................................................................20
2.2 Cài đặt thuật tốn mã hóa............................................................................................20
2.2.1 Hàm AddRoundKey...............................................................................................20
2.2.2 Hàm SubBytes........................................................................................................21
2.2.3 Hàm ShiftRows......................................................................................................21
2.2.4 Hàm MixColumns..................................................................................................21
2.2.5 Hàm MaHoaAES....................................................................................................22
2.3 Cài đặt thuật toán giải mã............................................................................................23
2.3.1 Hàm InvShiftRows.................................................................................................23
2.3.2 Hàm InvSubBytes..................................................................................................23
2.3.3 Hàm InvMixColumns.............................................................................................24
2.3.4 Hàm GiaiMaAES...................................................................................................24

i

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

2.4 Cài đặt giao thức TCP/IP.............................................................................................25
2.4.1 Server.....................................................................................................................25
2.4.2 Client......................................................................................................................26
2.5 Kết quả thực nghiệm.....................................................................................................26
KẾT LUẬN..............................................................................................................................28

TÀI LIỆU THAM KHẢO......................................................................................................29

ii

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

DANH MỤC HÌNH

Y
Hình 1.1 Cơng thức và bảng S-box...............................................................................2
Hình 1.2 Cơng thức và S-box nghịch đảo.....................................................................3
Hình 1.3 Chức năng KeyExpansion..............................................................................4
Hình 1.4 Thực thi RotWord cho từ w[3].......................................................................5
Hình 1.5 code RotWord................................................................................................5
Hình 1.6 Thực thi SubWord khi chuyển đổi từ w[3].....................................................6
Hình 1.7 code SubWord................................................................................................6
Hình 1.8 Thực thi AddRcon khi chuyển đổi từ w[3].....................................................6
Hình 1.9 Thực thi AddW để tạo khóa vịng 1...............................................................7
Hình 1.10 Sơ đồ q trình mã hóa................................................................................8
Hình 1.11 Thuật tốn AddRoundKey............................................................................9
Hình 1.12 Thuật tốn SubByte....................................................................................10
Hình 1.13 Thuật tốn ShiftRow..................................................................................11
Hình 1.14 Thuật tốn MixColumns.............................................................................11
Hình 1.15 Thuật tốn InvShiftRow.............................................................................13
Hình 1.16 Thuật tốn InvSubBytes.............................................................................13
Hình 1.17 Thuật tốn InvMixColumn.........................................................................14
Hình 1.18 Mơ hình OSI và TCP/IP.............................................................................15

Hình 1.19 Q trình gửi-nhận gói tin..........................................................................15
Hình 1.20 Lập trình TCP Socket.................................................................................16
Hình 1.21 Quá trình gửi-nhận tin giữa Client-Server..................................................18
Hình 2.1 Phía máy gửi................................................................................................27
Hình 2.2 Phía máy nhận..............................................................................................27

iii

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

DANH MỤC BẢNG BIỂU

Bảng 1.1 So sánh số vòng mã hóa và giải mã..............................................................12
Bảng 2.1 Bảng giá trị số vịng mã hóa.........................................................................20

iv

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

v

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99



37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

CHƯƠNG 1. CƠ SỞ LÝ THUYẾT

1.1 Giới thiệu chung
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, q trình ngược của mã hóa.
 AES (viết tắt của từ tiếng anh: Advanced Encryption Standard, hay Tiêu chuẩn mã
hóa nâng cao) là một thuật tốn mã hóa khối được chính phủ Hoa Kỳ áp dụng làm
tiêu chuẩn mã hóa.
 Thuật toán được xây dựng dựa trên Rijndael Cipher phát triển bởi 2 nhà mật mã
học người Bỉ: Joan Daemen và Vincent Rijmen.
 AES làm việc với các khối dữ liệu 128bit và độ dài khóa 128bit, 192bit hoặc
256bit. Các khóa mở rộng sử dụng trong chu trình được tạo ra bởi thủ tục sinh
khóa Rijndael.
 Hầu hết các phép tốn trong thuật toán AES đều thực hiện trong một trường hữu
hạn của các byte. Mỗi khối dữ liệu đầu vào 128bit được chia thành 16byte, 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ác byte, nó gọi là ma
trận trạng thái.
 Tùy thuộc vào độ dài của khóa sử dụng 128 bit, 192 bit hay 256 bit mà thuật tốn
có số lần lặp khác nhau
 Các bước xử lý chính :
o Quá trình mở rộng khóa sử dụng
o Q trình mã hóa
o Quá trình giải mã

1


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

1.2 Xây dựng thuật toán
1.2.1 Xây dựng bảng S-box
1.2.1.1 Bảng S – box thuận
Bảng S-box thuận được sinh ra bằng việc xác định nghịch đảo cho một giá trị
nhất định trên GF(28) = GF(2)[x] / (x8+x4+x3+x+1) (trường hữu hạn Rijindael). Giá
trị 0 khơng có nghịch đảo thì được ánh xạ với 0. Những nghịch đảo được chuyển đổi
thông qua phép biến đổi affine.
Cơng thức tính các giá trị bảng S-box và bảng S-box tương ứng

Hình 1.1 Cơng thức và bảng S-box

Trong đó, mỗi bit sẽ được tính theo cơng thức:

Với 0 <= I < 8,
2

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

 yi là bit thứ i của byte cần chuyển đổi
 xi là bit thứ i của byte kết quả sau khi chuyển đổi
 ci là bit thứ i của byte có giá trị là H63 = B01100011.
1.2.1.2 Bảng S – box nghịch đảo

Công thức và bảng S – box nghịch đảo được xây dùng như sau :

Hình 1.2 Cơng thức và S-box nghịch đảo

Trong đó mỗi bit sẽ được tính theo cơng thức:

Với 0 <= i < 8:
 xi là bit thứ i của byte cần chuyển đổi
 yi là bit thứ i của byte kết quả sau khi chuyển đổi
3

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66



di là bit thứ i của byte có giá trị là H05 = B00000101.

1.2.2 Giải thuật sinh khóa phụ
Chức năng KeyExpansion thực hiện tính tốn khóa vịng cho bước lặp mã hóa
và bước tạo ngõ ra. Kết quả của một lần thực thi KeyExpansion là một khóa vịng sử
dụng cho chức năng AddRoundKey. Với mã hóa AES-128, số khóa vịng là 10 tương
ứng với 9 lần AddRoundKey ở bước lặp mã hóa và 1 lần AddRoundKey ở bước tạo
ngõ ra.
Chức năng KeyExpansion được thực hiện thông qua 4 chức năng là RotWord,
SubWord, AddRcon và AddW.

Hình 1.3 Chức năng KeyExpansion


Mỗi khóa vịng có 128 bit được chia làm 4 word, mỗi word là 4 byte và ký hiệu
là w[j] với j là số nguyên. Mã hóa AES-128 có 1 khóa mã và 10 khóa vịng nên tổng số
từ là 44 và được đánh số từ 0 đến 43. Khóa mã có 4 từ là w[0], w[1], w[2] và w[3].
Khóa vịng 1 có 4 từ là w[4], w[5], w[6] và w[7]. Tương tự, khóa vịng 10 có 4 từ là
w[40], w[41], w[42] và w[43].
Từ w[j] tính theo cơng thức sau, với 3 < j < 44.
4

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

w[j] = AddW[j - 4] = w[j - 1] + w[j - 4]
w[j = 4∗ n] = AddW[j - 4] = trans(w[j - 1])+ w[j - 4]
Chú ý, khi tính các từ ở vị trí j là bội số của 4, như w[4], w[8],... và w[40], thì
w[j-1] phải được biến đổi qua 3 chức năng RotWord, SubWord và AddRcon, gọi là
trans(w[j-1]), trước khi XOR với w[j-4].
Khóa mã key ở mục 1 được sử dụng để minh họa việc tính tốn khóa vịng.
Khóa mã key[127:0] được chia làm 4 từ như biểu thức sau:
w[0] = 2b7e1516 w[1] = 28aed2a6
w[2] = abf71588 w[3] = 09cf4f3c
Việc tính tốn khóa vịng 1 là thực hiện tính 4 từ w[4], w[5], w[6] và w[7]. Để
tính khóa vịng 1, trans(w[3]) phải được tính trước thơng qua 3 chức năng RotWord,
SubWord và AddRcon.
w[4] = AddW[0] = trans(w[3])+ w[0]w[5] = AddW[1]
= w[4]+ w[1]w[6] = AddW[2] = w[5]+ w[2]w[7] = AddW[3] = w[6]+ w[3]

Chức năng RotWord thực hiện quay trái từ w[j] một byte.

Hình 1.4 Thực thi RotWord cho từ w[3]

Hình 1.5 code RotWord

5

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Chức năng SubWord thực hiện thay thế các phi tuyến từng byte của kết quả
RotWord theo bảng sS-box

Hình 1.6 Thực thi SubWord khi chuyển đổi từ w[3]

Hình 1.7 code SubWord

Chức năng AddRcon thực hiện XOR kết quả SubWord và giá trị Rcon[j/4] với j
là bội số của 4. Số lượng giá trị Rcon[j/4] là 10 tương ứng với 10 lần tính khóa vịng.
Chức năng AddRcon sẽ tạo ra kết quả cuối cùng của biến đổi trans(w[j-1]).

6

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Hình 1.8 Thực thi AddRcon khi chuyển đổi từ w[3]


Chức năng AddW thực hiện XOR w[j-4] với w[j-1] hoặc trans(w[j-1]) như cơng
thức để tạo ra khóa vịng.

Hình 1.9 Thực thi AddW để tạo khóa vịng 1

7

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

1.2.3 Q trình mã hóa
1.2.3.1 Sơ đồ tổng quan

Hình 1.10 Sơ đồ q trình mã hóa

Q trình mã hóa bao gồm các bước :
 Khởi động vòng lặp
o AddRoundKey — Mỗi cột của trạng thái đầu tiên lần lượt được kết hợp
với một khóa con theo thứ tự từ đầu dãy khóa.
 Vịng lặp
o SubBytes — đây là phép thế (phi tuyến) trong đó mỗi byte trong trạng
thái sẽ được thế bằng một byte khác theo bảng tra S-box
o ShiftRows — dịch chuyển, các hàng trong trạng thái được dịch vịng
theo số bước khác nhau.
o MixColumns — q trình trộn làm việc theo các cột trong khối theo một
phép biến đổi tuyến tính.
o AddRoundKey

 Vịng lặp cuối
o SubBytes
8

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

o ShiftRows
o AddRoundKey
Tại chu trình cuối thì bước MixColumns khơng thực hiện.
1.2.3.2 Hàm AddRoundKey
 Được áp dụng từ vòng lặp thứ 1 tới vòng lặp Nr
 Trong biến đổi Addroundkey(), một khóa vịng được cộng với state bằng một
phép XOR theo từng bit đơn giản.
 Mỗi khóa vịng gồm có 4 từ (128 bit) được lấy từ lịch trình khóa. 4 từ đó được
cộng vào mỗi cột của state, sao cho:
[S’0,c, S’1,c, S’2,c, S’3,c ] = [S0,c, S1,c, S2,c, S3,c ] xor [W(4*i +c)]với 0 <= c < 4.

Hình 1.11 Thuật toán AddRoundKey

1.2.3.3 Hàm 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.
 Ví dụ, byte cần thay thế là H08 thì dị ở hàng số 0 và cột số 8 trong bảng S-box
sẽ được kết quả là 30.

9


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Hình 1.12 Thuật tốn SubByte

1.2.3.4 Hàm 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.

10

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Hình 1.13 Thuật tốn ShiftRow


1.2.3.5 Hàm MixColumns
 Biến đổi MixColumns() tính tố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)
 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) xor s(x):
 Mơ tả bằng ma trận như sau :

Hình 1.14 Thuật toán MixColumns

11

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

1.2.4 Q trình giải mã
1.2.4.1 Tổng quan
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 q trình mã hóa. Nó giúp khơi phục lại bản rõ từ một
bản mã.
Thuật toán giải mã khá giống với thuật tốn mã hóa về mặt cấu trúc nhưng 4
hàm sử dụng là 4 hàm ngược của quá trình mã hóa.
Bảng 1.1 So sánh số vịng mã hóa và giải mã
Mã hóa

Giải mã


AddRoundKey()

InvAddRoundKey()

SubByte()

InvSubByte()

ShiftRows()

InvShiftRow()

MixColumns()

InvMixColumns()

1.2.4.2 Hàm InvAddRoundKey
 Bản chất hàm InvAddRoundKey chính là hàm AddRoundKey vì khi xor 2 lần
thì nó sẽ quay về chính nó.
1.2.4.3 Hàm 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ữ ngun 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.

12

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99



37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Hình 1.15 Thuật tốn InvShiftRow

1.2.4.4 Hàm InvSubBytes
 Chức năng InvSubBytes là thực hiện thay thế từng byte của ma trận trạng thái,
bằng một giá trị đã quy định trong chuẩn AES. Bảng quy định giá trị thay thế
cho InvSubBytes gọi là S-box đảo (Inverse S-box).
 Ví dụ, byte cần thay thế là Ha7 thì dị ở hàng "a" và cột số 7 trong bảng S-box
đảo sẽ được kết quả là H89.

Hình 1.16 Thuật tốn InvSubBytes

13

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

1.2.4.5 Hàm InvMixColumns
Tương tự như MixColumns nhưng đa thức nhân ở đây đã được thay đổi
a(x) = (0e)x^3 +(0b)x^2 +(0d)x + (09)

Hình 1.17 Thuật tốn InvMixColumn

1.3 Lập trình Socket TCP/IP trong Java
1.3.1 Tổng quan về Socket
Trong hệ thống mạng máy tính tồn tại những mơ hình tham chiếu có kiến trúc phần

tầng (OSI, TCP/IP…) nhằm hỗ trợ chức năng trao đơi thơng tin giữa các ứng dụng ở
nhiều máy tính khác nhau.

14

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Hình 1.18 Mơ hình OSI và TCP/IP

Dữ liệu bên gửi sẽ được đóng gói (Encapsulation) từ tầng trên đến tầng cuối là tầng
vật lí (Physical Layer), sau đó nhờ tầng vật lí này chuyển dữ liệu đến tầng vật lí máy
bên nhận, bên nhận tiến hành giải mã (decapsulation) gói dữ kiện từ tầng dưới lên tầng
trên cùng, là tầng ứng dụng (application layer).

Hình 1.19 Q trình gửi-nhận gói tin

Ở đây, Socket chính là cửa giao tiếp giữa tầng ứng dụng và tầng giao vận (Transport
layer). Nói cách khác, Socket là giao diện do ứng dụng tạo ra trên máy trạm, quản lí
bởi hệ điều hành qua đó các ứng dụng có thể gửi/nhận thơng điệp đến/từ các ứng dụng
15

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

khác. Ở đó, Socket sẽ được ràng buộc với một mã số cổng (Port Number) để giúp tầng

giao vận định danh được ứng dụng nhận/gửi thơng điệp.
Các bạn có thể thấy ở hình ảnh trên, tầng giao vận có 2 phương thức là TCP
(Ttransmission Control Protocol) và UDP (User Datagram Protocol), như vậy socket
cơ bản là có 2 loại: Stream Socket sử dụng TCP truyền dòng bytes và Datagram
Socket dử dụng UDP truyền gói tin. Với ngơn ngữ lập trình Java, chúng ta được cung
cấp 3 loại khác nhau của sockets:
1. Stream Socket (TCP) : Tạo luồng dữ liệu hai chiều, đáng tin cậy, có
trình tự và khơng trùng lặp, dữ liệu chỉ được gửi/nhận khi có đã có
liên kết. Dùng với Socket Class của java.
2. Datagram Socket (UDP): Có thể nhận dữ liệu khơng theo tình tự,
trùng lặp. Dùng với DatagramSocket Class.
3. Multicast Socket : cho phép dữ liệu được gửi đến nhiều bên nhận
một lúc. Dùng với DatagramSocket Class.
Socket được hỗ trợ trên nhiều ngôn ngữ như C, Java, Pearl, Python,…. Sau đây là một
ví dụ lập tình socket với Java.

1.3.2 Lập trình TCP Socket với Java

Hình 1.20 Lập trình TCP Socket

16

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.C.33.44.55.54.78.655.43.22.2.4.55.2237.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.66

Đúng như tính chất của TCP chúng ta cần có liên kết 2 chiều trước khi server và client
có thể trao đổi thơng điệp với nhau.
Ban đầu, phía server tạo Socket được ràng buộc với một cổng (port number) để chờ

nhận yêu cầu từ phía client.
Tiếp đến phía client yêu cầu server bằng cách tạo một Socket TCP trên máy kèm với
địa chỉ IP và port number của tiến tình tương ứng trên máy server. Khi client tạo
Socket, client TCP tạo liên kết với server TCP và chờ chấp nhận kết nối từ server.
TCP cung cấp dịch vụ truyền dòng tin cậy và có thứ tự giữa client và server, giữa máy
chủ và máy nhận chỉ có 1 địa chỉ IP duy nhất. Thêm vào đó, mỗi thơng điệp truyền đi
đều có xác nhận trả về.
Sau đây là một ví dụ ứng dụng đơn giản về lập trình TCP Socket với Java.
Miêu tả ứng dụng:
 Client đọc dòng văn bản nhập từ bàn phím người dùng , gửi tới server
qua Socket
 Server đọc các dòng văn bản gửi từ Socket
 Server sẽ chuyển lại dòng văn bản kèm theo “Server accepted” tới
phía client qua Socket
 Client đọc dịng văn bản từ socket và in ra dòng văn bản nhận được từ
server

17

37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.55.77.77.99.44.45.67.22.55.77.C.37.99.44.45.67.22.99


×