MÔ PHỎNG HỆ THỐNG TRUYỀN THÔNG 3.1 Nguyên lý và quy trình truyền thông...17 1.. Nguyên lý của hệ thống mô phỏng truyền thông có bảo mật...17 2... Cơ sở toán học của lý thuyết mật mãI.1 T
Trang 1ĐẠI HỌC BÁCH KHOA HÀ NỘI
TRƯỜNG ĐIỆN – ĐIỆN TỬ
BÁO CÁO GIỮA KỲ
Vũ Xuân Thịnh - 20203596 Phạm Bá Độ - 20203362 Trương Quang Huy - Nguyễn Chí Cường -
Trang 2Hà Nội, 29/11/2023
MỤC LỤC
BẢNG PHÂN CÔNG VÀ TỰ CHẤM ĐIỂM
………4
1 CƠ SỞ TOÁN HỌC CỦA LÝ THUYẾT MẬT MÃ 1.1 TỔNG QUAN LÝ THUYẾT MẬT MÃ 5
1.1.1 SƠ LƯỢC LỊCH SỬ KHOA HỌC MẬT MÃ 5
1.1.2 CÁC LOẠI MẬT MÃ 5
1.2 CƠ SỞ TOÁN HỌC CỦA LÝ THUYẾT MẬT MÃ 5
1.2.1 Tính chia hết của các số nguyên: 5
1.2.2 Ước chung lớn nhất và bội chung nhỏ nhất 5
1.2.3 Thuật toán Euclide 5
a) Tìm Ước Chung Lớn Nhất 5
b) Thuật toán Euclide mở rộng 5
1.2.4 Đồng dư và phương trình đồng dư tuyến tính 5
a) Đồng dư 5
b) Phương trình đồng dư tuyến tính 5
1.2.5 Thặng dư thu gọn và phần tử nguyên thủy 5
a) Thặng dư thu gọn 5
b) Phần tử nguyên thủy 6
1.2.6 Xác Suất Thống Kê 6
2 LÝ THUYẾT HỆ MẬT HIỆN ĐẠI 2.1 Data Encryption Standard (DES) 7
2.1.1 Giới thiệu 7
2.2.2 Cách hoạt động (Trình bày bằng tiếng anh để đảm bảo thuật ngữ không bị nhầm lẫn) 7
a) Overview 7
b) Detail for each part 8
2.2 Advanced encryption standard 13
2.2.1 Xây dựng bảng S-box 13
a Bảng S – box thuận 13
b Bảng S-box nghịch đảo 13
2.2.2 Giải thuật sinh khóa phụ 14
2.2.3 Quá trình mã hóa 14
Trang 3a Sơ đồ tổng quát 14
b Hàm AddRoundKey 15
c Hàm SubBytes 15
d Hàm ShiftRow 15
e Hàm MixColumns 16
3 MÔ PHỎNG HỆ THỐNG TRUYỀN THÔNG 3.1 Nguyên lý và quy trình truyền thông 17
1 Nguyên lý của hệ thống mô phỏng truyền thông có bảo mật 17
2 Quy trình và thực hiện 17
2.1 Mã hóa và Giải mã File ảnh/Text với DES, AES, RC4 17
2.2 Mô phỏng hệ thống truyền thông 18
A) Mục tiêu 18
B) Thực hiện 18
3.2 Kiểm thử chương trình mô phỏng 20
1 Các testcase của nhóm 20
2 Kết quả kiểm thử 20
3.3 ĐÁNH GIÁ VÀ NHẬN XÉT 21
Trang 4Bảng phân công và tự chấm điểm
thành viên mỗi tuần
- Chỉnh sửa báo cáo giữa kì
- Làm hệ mật cổ điển: Ceasar, Pad
Hoàn thành
- Làm slides giới thiệu thành viênnhóm
Hoàn thành
Trang 5Phần 1 Cơ sở toán học của lý thuyết mật mã
I.1 TỔNG QUAN LÝ THUYẾT MẬT MÃ
I.1.1 SƠ LƯỢC LỊCH SỬ KHOA HỌC MẬT MÃ
Người Ai Cập cổ đại bắt đầu sử dụng mật mã hạn chế khoảng 4000 năm về trước Thuật ngữ “mật mã cryptography” dịch từ tiếng Hy Lạp có nghĩa là “chữ viết bí mật”
-Sự phát triển và ngày càng phổ biến của máy tính và hệ thống thông tin liên lạc trong những năm 1960
đã tạo ra nhu cầu bảo vệ thông tin dưới dạng số và cung cấp dịch vụ an ninh thông tin
Mật mã là một lĩnh vực quan trọng trong khoa học máy tính và an ninh thông tin, nó đóng vai trò quantrọng trong việc bảo vệ thông tin và dữ liệu khỏi việc truy cập trái phép
I.1.2 CÁC LOẠI MẬT MÃ
Mật mã học cổ điển: Đây là các hệ thống mật mã truyền thống trước khi công nghệ số hóa trở nên phổ
biến Ví dụ, mật mã Caesar sử dụng việc dịch chữ cái theo một khoảng cố định trong bảng chữ cái để mãhóa thông tin
Mật mã học hiện đại: Đối với mật mã học hiện đại, có nhiều hệ thống phức tạp hơn, bao gồm mật mã
đối xứng (AES, DES) và mật mã không đối xứng (RSA, ECC) Mật mã này sử dụng các thuật toán phứctạp để mã hóa và giải mã thông tin
Mật mã học thông tin: Mật mã học thông tin là một lĩnh vực mới nổi trong mật mã học, nó liên quan
đến việc sử dụng thông tin và lý thuyết thông tin để thiết kế các hệ thống mật mã mới.
I.2 CƠ SỞ TOÁN HỌC CỦA LÝ THUYẾT MẬT MÃ
Z là tập hợp các số nguyên: Z = { ,-2,-1,0,1,2, }, Z+ là tập hợp các số nguyên không âm, Z+={0,1,2, }
Tập hợp Z là đóng kín đối với các phép cộng, trừ và nhân, nhưng không đóng kín đối với phép chia
1.2.1 Tính chia hết của các số nguyên:
Cho a, b≠0 là các số nguyên. Ta nói a chia hết cho b nếu tồn tại 1 số c sao cho: a=b.c
Ký hiệu: b|a: a là bội số của b, b là ước số của a VD: 2|6.
Tính chất: Với a, b, c, d, e 𝜖 Z, ta có:
- Nếu a|b và b|c thì a|c
- Nếu a|b, thì ac|bc với mọi C
- Nếu c|a và c|b thì c|da+be với mọi d,e
- Nếu a|b và b≠0 thì |a| ≤ |b|
- Nếu a|b và b|a thì |a|=|b|
Trang 61.2.2 Ước chung lớn nhất và bội chung nhỏ nhất
UCLN: Cho hai số a, b 𝜖 Z\{0}, c 𝜖 Z được gọi là ước chung của a và b nếu c|a và c|b C được gọi là
UCLN, ký hiệu là gcd(a,b) nếu nó là số nguyên lớn nhất a, b chia hết
BCNN: Cho hai số a, b 𝜖 Z\{0}, c 𝜖 Z được gọi là bội chung của a và b nếu a|c và b|c C được gọi là
BCNN, ký hiệu là lcm(a,b) nếu nó là số nguyên nhỏ nhất chia hết a, b
1.2.3 Thuật toán Euclide
b) Thuật toán Euclide mở rộng
Thuật toán Euclide mở rộng dùng để tìm hai số x,y thỏa mãn phương trình sau: ax+by =gcd(a,b)
Input: hai số nguyên không âm a và b với a>= b
Output: d=gcd(a,b) và hai số x,y sao cho a.x +b.y =d
Thuật toán:
B1: Nếu b=0 thì đặt d←a, x ←1, y ←0 và cho ra (d,x,y)
B2: Đặt x2=1, x1=0, y2=0, y1=1
B3: Trong khi còn b>0, thực hiện:
B4: q ←a div b, r ← a mod b, x ←x2-q.x1, y ←y2-q.y1, a ←b, b ←r, x2 ←x1, x1 ←x, y2 ←y1 và y1
←y
B5: Đặt d ←a, x ←x2, y ←y2 và cho ra kết quả (d,x,y)
1.2.4 Đồng dư và phương trình đồng dư tuyến tính
a) Đồng dư
Hai số nguyên a và b là đồng dư với nhau theo môđun n, và viết a ≡ b (mod n), nếu (a-b) chia hết cho n.Hai số nguyên thuộc cùng một lớp tương đương khi và chỉ khi chúng cho cùng một số dư nếu chia cho n
Mỗi lớp tương đương được đại diện bởi một số duy nhất trong tập hợp: Zn = {0, 1, 2, 3, , n -1} là số
dư chung khi chia các số trong lớp đó cho n
Ví dụ: với Z25 = {0, 1, 2, , 24
b) Phương trình đồng dư tuyến tính
Cho a ∈ Zn Một số nguyên x ∈ Zn được gọi là nghịch đảo của a theo mod n , nếu a.x ≡ 1 (mod n) Nếu có số x như vậy thì ta nói a là khả nghịch, và ký hiệu x là a^-1 mod n
Phép chia trong Zn được định nghĩa như sau: a: b (mod n) = a.b^-1 (mod n) Phép chia chỉ thực hiện được khi b là khả nghịch theo (mod n)
Phương trình đồng dư tuyến tính: là phương trình có dạng: a.x ≡ b(mod n) trong đó a, b, n là các số
nguyên, n > 0, x là ẩn số
Phương trình đó có nghiệm khi và chỉ khi d = gcd(a, n ) b, và khi đó nó có đúng nghiệm d theo (mod n)⏐
Trang 7Định lý: Giả sử các số nguyên n1, n2,… , nk là từng cặp nguyên tố với nhau Khi đó, hệ phương trình
đồng dư tuyến tính sau có một nghiệm duy nhất theo (mod n)
Tập các thặng dư thu gọn theo mod n được định nghĩa là tập Zn* = {a ∈ Zn: gcd(a , n) = 1} , tức Zn* làtập con của Zn bao gồm tất cả các phần tử nguyên tố với n Nếu p là một số nguyên tố thì Z*p = {1,2, …, p – 1}
b) Phần tử nguyên thủy
Số các phần tử trong một nhóm là cấp 𝜑(n) của nhóm đó
Một phần tử g ∈ Zn* có cấp m , nếu m là số nguyên dương bé nhất sao cho g^m = 1 trong Zn*
Nhóm Z*n có 𝜑(n) , và nếu p là số nguyên tố thì nhóm Z*p có cấp p - 1 khi đó ∀b ∈ Z*p ∶ b^p-1 ≡ 1(mod p)
Nếu b có cấp p - 1, tức p - 1 là số mũ bé nhất thoả mãn công thức trên, thì các phần tử b, b^2,… , b^p-1 đều khác nhau và theo mod p, chúng lập thành Z*plà một nhóm cyclic và b là một phần tử sinh, hay
phần tử nguyên thuỷ của nhóm.
Các tính chất của phân tử nguyên thủy:
- Phương trình đồng dư bậc 2 là phương trình có dạng: 𝑥^2 ≡ a(mod n) trong đó n là một số nguyên dương, a là số nguyên với gcd(a, n) = 1,và x là ẩn số
- Nếu phương trình có nghiệm thì a là thặng dư bậc 2 (mod n)
- Nếu phương trình vô nghiệm thì a là bất thặng dư bậc 2 (mod n)
- Tập các số nguyên nguyên tố với n được phân hoạch thành hai tập con: tập Qn các thặng dư bậc hai mod n, và tập Qn các bất thặng dư mod n
- Tiêu chuẩn Euler: Số a là thặng dư bậc hai (mod p) nếu và chỉ nếu𝑎^((𝑝−1)/2)
Số pi được coi là xác suất của sự kiện sơ cấp si Tập con E ⊆ Ω được gọi là một sự kiện Xác suất của
sự kiện E được định nghĩa bởi p(E) = ∑s∈E p(s)
Trang 8Cho Ak và B là hai sự kiện, với p(B)> 0, xác suất có điều kiện của Ak khi có B , p(Ak|B) được định nghĩa là:
Phần 2 Lý thuyết các hệ mật hiện đại
2.1 DATA ENCRYPTION STANDARD (DES)
2.2.2 Cách hoạt động (Trình bày bằng tiếng anh để đảm bảo thuật ngữ không bị nhầm lẫn)
a) Overview
DES is a block cipher, has two inputs:
Plaintext: 64 bits
Cipher key: 64 bits (Which will be droped to 56 bits)
One output for equivalent stage: Cipher text/Plain text
A DES cipher includes four parts:
Initial Permutation:
Input: 64 bit plain text
Output: 64 bit of the plain text which has been permuted by the IP tables
Round-key generator:
Input: key with 64 bits
Output: 16 round key, each round key is a 48 bits key
16 Rounds:
Input: 64 bit from Initial permutation for the first round, 64 bits output from previous round forthe next rounds
Trang 9 Output: 64 bits
Final permutation
Input: 64 bits from the sixteenth round
Ouput: Cipher text with 64 bits which has been permuted by the FP table
b) Detail for each part
Initial permutation
The Initial permutation table contains position of each bits from the plain text
We need to map each old position of bit in the 64 bit plain text with it’s new position in the IP table
Round key Generator
We will generate 16 round keys 48 bits which will be used to XOR with 48 bits from the plain text in 16rounds
Step 1: the origin 64 bits cipher key will be permuted by PC-1 table (the parity-bit drop tablebelow), after that we have a 56 bit key, 8 bits are reduced:
Trang 10 Step 2: We divided 56 bit into two part with 28 bit: Left and Right
Step 3:
Left round shift k* bits for the Left part, Right round shift k bits for the Right part
Combine two part into 56 bits key
Use D-box to convert 56 bits to 48 bits, this 48 bits will be outputed as the first roundkey
Step 4: Repeat the step 3, the 28 bits of left part and righr part are from the shifted part of step 3
=> 16 round will output 16 round key 48 bits
*k: k = 1 for round key 1,2,9,16, k = 2 for the left
16 Rounds
Trang 11 Next figure is the general structure of a round, which has:
Input: LI-1 and RI-1 from previous round or from the Initial permutation for the first round androunding keys from the Round-key Generator
Output: the next LI and RI which go to the next round or the final permuatation box if it is thefinal round
Step 1: Divide M which is 64 bit from the initial permutatio step into two blocks: 32 bits left and
32 bits right, we call L1, R1
Step 2: DES function, have the general structure as below, where RI-1 is the 32 bits Right, KI is
the round key Ith from the Round key Generator
Step 1: R1 is maped in the D-box, resulting in 48 bit, below is the D-box:
Step 2: The 48 bit from the D-box are XOR with the round key KI
Trang 12 Step 3: Convert 48 bit to 32 bit using 8 S-boxes: The 48 bits are divided into eight 6-bitchunks, each chunk is fed into the equivalent S-box Result of each S-box is 4 bit, combineeight box, we will have the final result is 32 bit
Step 4: Use Straight D-box to permute 32 bit from S-boxes:
Step 3: 32 bit đầu ra của DES function XOR với 32 bit của 32 bit Left, sau đó dùng 32 bit đầu ralàm 32 bit Right cho Next Round, 32 bit Right ban đầu của đầu vào chuyển sang làm 32 bit Left chonext Round
Step 4: Repeat from the step 2 for 16 times, use the equivalent Round-key.
Step 5: After finisjh 16 round, we got 64 bits from the 16th round
Trang 13 Công thức tính các giá trị bảng S-box và bảng S- box tương ứng:
Trang 14b 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ằng phé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:
2.2.2 Giải thuật sinh khóa phụ
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
Trang 16 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
Trang 17e Hàm 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)
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 :
Phần 3 Mô phỏng hệ thống truyền thông
Trang 183.1 NGUYÊN LÝ VÀ QUY TRÌNH TRUYỀN THÔNG
3.1.1 Nguyên lý của hệ thống mô phỏng truyền thông có bảo mật
- File cần truyền sẽ được mã hóa sử dụng Key và thuật toán mã hóa đã cho tại máy A, sau đó được chia nhỏ thành các gói tin để truyền
- Sử dụng kết nối Bluetooth giữa 2 máy để truyền các gói tín đã được mã hóa sang máy B
- Máy B tổng hợp các gói tin, sử dụng Key và thuật toán đã thống nhất với máy A để giải mã, lưu lại File
3.1.2 Quy trình và thực hiện
a) Mã hóa và Giải mã File ảnh/Text với DES, AES, RC4
Bước 1: Lấy đầu vào là đường dẫn của file và key, đọc file dưới dạng bytes:
# Part 1: Get input image and key:
path = input ( r ' Enter path of Image : ')
key = input ( Enter Key for encryption of Image : ' )
print ( ' The path of file : ' , path)
print ( ' Key for encryption : ' , key)
# Part 2: Read image in binary mode and
fin = open (path, ' rb ' )
image = fin read ()
fin close ()
- Bước 2: Padding và chia file thành các N-bit blocks:
- #Part 3: Padding if image is not diviable to N/8 bytes (N bits)
- if len (image) % N != 0 :
- image = pad (image)
- # Part 4: Get blocks of N bits of file
- len_arr = int( len (image) / N )
Trang 19- arr += binary (byte)
- count += N
- image_bin append (arr)
- Bước 3: Mã hóa từng N-bit blocks và ghép lại thành file gốc:
# Part 5: Create key and encrypt our image N-bit block by N-bit block
cipher_text = []
print ( " Encrypting " )
for block in image_bin:
cipher_text append ( encrypt (block,key))
print ( " Done encryption! " )
return cipher_text
b) Mô phỏng hệ thống truyền thông
A) Mục tiêu
- Hệ thông mô phỏng cần truyền được thực giữa 2 máy
- Hệ thống cần có đủ các bước quan trọng trong truyền thông mật mã: Mã hóa -> đóng thành các gói -> truyền qua sóng -> nhận các gói -> giải mã
- Kênh truyền: Sóng Bluetooth
B) Thực hiện
- Máy gửi – Client:
- print ( " Type 1/2/3 to choose type of encryption you want to use: " )
- print ( " 1: DES \n2: AES \n 3: RC4 "
- encrypt_type = int( input ( " I choose: " ))
- # Devide data into many 2048-byte packages and transfer them
- for i in range(math ceil ( len (data) / 2048 )):
- start = i * 2048
- end = start + 2048
- block = data[start : end]
- s send (block)
- # Send the final package to announce finishing the transfering
- s send (bytes( END " , encoding= " utf-8 " ))
- s close ()
Trang 20size = 2048 # Set size of each package is 2048 bytes
s = socket.socket(socket.AF_BLUETOOTH, socket.SOCK_STREAM, socket.BTPROTO_RFCOMM)
# Start connection and listening
data = client recv (size)
# If the received package is not the final package:
if data and data != bytes( " END " , encoding= " utf-8 " ):
cipher_text += data
client send (data)
# Else is the final package, finish listenning
elif data == bytes( " END " , encoding= " utf-8 " ):
break
# Start choosing type or crypto and input key to decrypt the data
print ( " Type 1/2/3 to choose type of encryption you want to use: " )
print ( " 1: DES \n2: AES\n3: RC4 " )
encrypt_type = int( input ( " I choose: " ))