Cơ sở toán học của lý thuyết mật mã 1.1 Số học các số ngu1.1 Số học các số nguyênyênyên Nghiên cứu về các tính chất của số nguyên, như tính chia hết, ước số chung, bội số chung, số nguyê
Trang 1ĐẠI HỌC BÁCH KHOA HÀ NỘI Trường Điện Đi – ện tử Khoa Điện tử
Lý thuy t m t mã ế ậ
Nhóm 12
Trang 2Thông tin và nhiệm vụ từng thành viên:
1 Triệu Hoàng Quân (nhóm trưởng) Nhiệm vụ: tổng hợp thông tin; tìm hiể cơ sở u toán học lý thuyết mật mã, hệ mật vignere, hệ mật atbash; mô phỏng hệ ống thtruyền thông
2 Nguyễn Minh Phúc Nhiệm vụ: tìm hiểu cơ sở toán học lý thuyết mật mã, hệ mật Hill, chuẩn mã hóa nâng cao AES
3 Nguyễn Anh Tuấn Nhiệm vụ: tìm hiểu cơ sở toán học lý thuyết mật mã, hệ mật Caeser, hệ mật affine, hệ mật hiện đại RC4
4 Đặng Hữu Công Hiếu Nhiệm vụ: tìm hiểu cơ sở toán học lý thuyết mật mã, hệ mật Playfair, hệ mật DES
Trang 3I Cơ sở toán học của lý thuyết mật mã
1.1 Số học các số ngu
1.1 Số học các số nguyênyênyên
Nghiên cứu về các tính chất của số nguyên, như tính chia hết, ước số chung, bội số chung, số nguyên tố, thuật toán Euclide, thuật toán Euclide mở rộng, thuật toán phân tích thừa số nguyên tố, thuật toán RSA, v.v
• Tập hợp: Sử dụng các tập hợp số nguyên Z, số nguyên không âm với các phép 𝑍+toán cộng, trừ, nhân
• Cho hai số nguyên bất kỳ a và b , b > 1, ta luôn xác định được q và r sao cho (r là phần dư)
𝑎 = 𝑏 × 𝑞 + 𝑟, 0 < 𝑟 < 𝑏
• Ước chung lớn nhất
𝑑 = gcd(𝑎, 𝑏)
• Số nguyên tố
Một số nguyên a > 1 được gọi là số nguyên tố, nếu a không có ước số
nào ngoài 1 và chính a; và a được gọi là hợp số nếu không phải là số
nguyên tố
• Một số nguyên n > 1 bất kỳ đều có thể ết dưới dạng:vi
𝑛 = 𝑝1𝛼1 𝑝2𝛼2… 𝑝𝑘𝛼𝑘Trong đó 1 , 2 , … 𝑝 𝑝 , 𝑝𝑘 là các số nguyên tố khác nhau, 1, 2 , … , 𝛼 𝛼 𝛼𝑘 là các số mũ nguyên dương
Đây là dạng khai triển chính tắc của n
• Định lý:
Nếu 𝑏 > 0 và 𝑏 | 𝑎 thì 𝑔𝑐𝑑(𝑎 , 𝑏) = 𝑏
Nếu 𝑎 = + 𝑟𝑏𝑞 thì 𝑔𝑐𝑑(𝑎, 𝑏) = 𝑔𝑐𝑑(𝑏, 𝑟)
• Bội chung bé nhất m là bội số chung nhỏ ất của a và b, và mọi bội số chung củnh a
a và b đều là bội của m
𝑚 = 𝑙𝑐𝑚(𝑎, 𝑏)
• Với hai số nguyên dương a và b bất kỳ ta có quan hệ
𝑙𝑐𝑚 𝑎, 𝑏 gcd 𝑎, 𝑏 = 𝑎 𝑏( ) ( )1.2 Đồng dư v
1.2 Đồng dư và phươà phươà phương trình đồng dư tuyếng trình đồng dư tuyếng trình đồng dư tuyến tínhn tínhn tính
Đồng dư theo modular: nghiên cứu về các phép toán và tính chất của các số dư khi chia cho một số nguyên dương nào đó, như định lý số dư Trung Hoa, phương trình đồng dư tuyến tính, phương trình đồng dư bậc hai, thặng dư thu gọn, phần tử nguyên thủy, thuật toán Diffie Hellman, thuật toán ElGamal, v.v.-
Trang 4Ví dụ: 68 và 39 là những số cùng lớp vì khi chia cho 29 đều dư 10
• Mỗi lớp tương đương được đại diện bởi một số duy nhất trong tập hợp:
𝑍𝑛= {0, 1, 2, 3, , 𝑛 − 1} là số dư chung khi chia cácsố trong lớp đó cho
Phương trình đồng dư tuyồng dư tuyồng dư tuyến tínhến tínhến tính
Phương trình đồng dư tuyến tính có dạng 𝑎𝑥 ≡ 𝑏 (𝑚𝑜𝑑 ) 𝑛
Trong đó a, b, n là các số nguyên, n > 0, x là ẩn số
Hệ phương trình đồng dư tuyến tính
Cho k số nguyên dương đôi một nguyên tố cùng nhau 𝑛 , 𝑛 , … , 𝑛1 2 𝑘
và 𝑎1, 𝑎2, … , 𝑎𝑘 là k số nguyên tuỳ ý Khi đó ta có hệ phương trình đồng dư tuyến tính
Trang 5• Chứng minh sự duy nhất: Giả sử có hai nghiệm x, y dẫn đến
Thặng dưặng dưặng dư thu gọn và thu gọn và thu gọn và phần tử nguyên th phần tử nguyên thuỷ phần tử nguyên thuỷuỷ
• Tập 𝒁𝒏 = { 0,1,2, … , − 1} thường được gọi là tập các thặng dư đầy đủ theo 𝑛mod n, vì mọi số nguyên bất kỳ đều có thể tìm được trong Zn một số đồng dư với mình (theo 𝑚𝑜𝑑 𝑛 )
• Tập 𝒁𝒏 là đóng đối với các phép tính cộng, trừ và nhân theo 𝑚𝑜𝑑 𝑛, nhưng không đóng đối với phép chia, vì phép chia cho theo 𝑎 𝑚𝑜𝑑 𝑛 chỉ có thể thực hiện được khi và nguyên tố với nhau, tức khi gcd( , ) = 1.𝑎 𝑛 𝑎 𝑛
• Số ần tử của tập là { (10) = 6} được gọi là cấph 𝜑 p 𝜑(𝑛) của nhóm
là một phần tử sinh, hay phần tử nguyên thuỷ của nhóm
Trang 6Vd : 7 là phần tử nguyên thủy của nhóm Z = {7 , 73 }
1.3 Phương t
1.3 Phương trình đồng dư bậc hai và rình đồng dư bậc hai và rình đồng dư bậc hai và thặng dư bậc haithặng dư bậc haithặng dư bậc hai
• Phương trình đồng dư bậc hai có dạng: 𝑥𝑥𝑥𝑥𝑥2 ≡ 𝑎𝑎𝑎𝑎(𝑚𝑜𝑑𝑚𝑜𝑑 𝑛𝑚𝑜𝑑𝑛𝑛)
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)
Điều này được thực hiện bằng cách thử các giá trị của 𝑥 từ 0 đến n – 1 và kiểm tra xem giá trị nào thỏa mãn phương trình 𝑥𝑥𝑥𝑥𝑥2≡ 𝑎𝑎𝑎𝑎(𝑚𝑜𝑑𝑚𝑜𝑑𝑚𝑜𝑑 𝑛𝑛) 𝑛
Ví dụ, nếu muốn kiểm tra xem 7 có phải là thặng dư bậc hai modulo 11 hay không,
Trang 7Ta thấy rằng không có số nguyên nào trong khoảng từ 0 đến 10 thỏa mãn phương trình 𝑥
≡ 7(𝑚𝑜𝑑 11) Do đó 7 không phải là thặng dư bậc 2 modulo 11
• Tập các số nguyên nguyên tố với 𝑛 ợc phân hoạch thành hai tập con: tậđư p 𝑄𝑛 các thặng dư bậc hai 𝑚𝑜𝑑 𝑛 , 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 2
− p
a 1(mod )p
• Ký hiệu Legendre: p là một số nguyên tố lẻ, a 0 , ký hiệu
p
aLegendre được định nghĩa như sau:
• Với mọi a 0, ta có: a2(modp)
nppp
n 1 2 2 1
=thì:
kp
ap
ap
an
a
2 1
2 1
• Tính chất:
o Nếu m =1 m2(modn)thì = n
mn
Trang 8o =
n
mn
m, 𝑘ℎ𝑖 m 3(𝑚𝑜𝑑 4) 𝑣à n 3(𝑚𝑜𝑑 4) n
m, 𝑘ℎ𝑖 m1(𝑚𝑜𝑑 4) n 3(𝑚𝑜𝑑 4)
1.4 Xác suất v
1.4 Xác suất và thuậà thuậà thuật toán xt toán xt toán xác suấác suấác suấttttt
Trong phần này ta nghiên cứu về các khái niệm và công thức liên quan đến xác suất, như không gian mẫu, biến cố, phép toán xác suất, xác suất có điều kiện, độc lập xác suất, biến ngẫu nhiên, phân phối xác suất, kỳ vọng, phương sai, định lý giới hạn trung tâm, thuật toán Monte Carlo, v.v
- Biến cố: là một kết quả có thể xảy ra trong một phép thử ẫu nhiên Biến cố ng
số có thể ận được là hữu hạn hay vô hạnh n
- Phân phối xác suất: là một quy tắc cho biết xác suất của mỗi giá trị hoặc khoảng giá trị của một biến ngẫu nhiên Phân phối xác suất có thể được biểu diễn bằng bảng, công thức, đồ thị hoặc hàm mật độ xác suất Có nhiều phân phối xác suất thống kê cơ bản, như phân phối nhị thức, phân phối chuẩn, phân phối Poisson, Phân bố xác suất 𝑃 trên Ω được định nghĩa là một tập các số ực không âm th 𝑃
= { 1, 2, … , 𝑝 𝑝 𝑝𝑛} có tổng ∑ = 1.𝑝𝑖
Xác suất có điều kiện: là khả năng xảy ra của một biến cố A khi biết một biến cố B khác đã xảy ra Xác suất có điều kiện được ký hiệu là P(A|B) và được tính theo công thức:
P(A B)=P(A∣ ∩B)/P(B)
Trang 9Trong công thức trên, P(A ∩ B) là xác suất hợp của A và B, tức là xác suất của hai biến cố cùng xảy ra P(B) là xác suất của biến cố B Xác suất có điều kiện có thể được hiểu như là xác suất của A trong không gian mẫu mới, đã được thu hẹp lại bởi sự xảy ra của B
II CÁC HỆ MẬT CỔ ĐIỂN
2.1 Hệ mật mã
2.1 Hệ mật mã CaeserCaeser Caeser
2.1.1
2.1.1 ới thiGiới thiệệệệệới thiu:u:
H mệ ật mã Caeser còn được g i là M t mã d ch chuy n, là m t trong nh ng h ọ ậ ị ể ộ ữ ệmật mã cổ điển đơn giản nhất và được biết đến nhi u nh t trong l ch sề ấ ị ử Nó hoạt động bằng cách d ch chuy n m i ký t ị ể ỗ ự trong thông điệp một kho ng c nh theo b ng ch cái ả ố đị ả ữTrong l ch s , m t mã cị ử ậ ộng hưởng được g i là m t mã d ch chuy n Julius Caeser ọ ậ ị ể
đã sử dụng một hệ mật mã cộng để liên lạc với các sĩ quan của mình Vì lý do này, các hệ mật mã cộng đôi khi được g i là mọ ật mã Caeser, Caeser đã sử d ng mụ ột khóa d ch chuyị ển
là 3 cho các thông điệp của mình
2.1.2 Nguyên lý
2.1.2 Nguyên lý hoạt độ hoạt độ hoạt độngngng
Để ự th c hiện được mã hóa Caeser, trước tiên ta cần ánh xạ các ký t trong bảng thành ựcác ch cái Latinh thành các sữ ố tương ứng từ 00 25-
Plaintext and Ciphertex in Z26Sau đó ta thự ện quá trình mã hóa theo sơ đồ hi sau:
Ở đây, khóa klà m t s nguyên có giá tr thu c tộ ố ị ộ ập Z26 =0,1,2, ,25
VD: Mã hóa bản tin P = “NGUYENANHTUAN” bằng m t mã c ng v i khóa ậ ộ ớ k 5
Trang 10Để giải mã, ta th c hiự ện theo sơ đồ sau:
Trong công th c này, ứ klà ph n t nghầ ừ ịch đảo c ng cộ ủa k trong tập Z26:
026
Trang 11shifted =ord(char) -ord('A')
shifted (= shifted +shift) %26
encrypted_char =chr(shifted +ord('A'))
encrypted_text =caesar_cipher_encrypt(plaintext shift_amount, )
print("Mã hóa Caesar:", encrypted_text)
Trang 12x=ord(char) -ord('a')
decrypted_char =chr((x -shift) %26+ord('a'))
result+=decrypted_char
else:
x=ord(char) -ord('A')
decrypted_char =chr((x -shift) %26+ord('A'))
decrypted_text =caesar_cipher_decrypt(ciphertext i, )
print("Key = { }i : decrypted_text}")
2.2 Hệ mật AFFI
2.2 Hệ mật AFFINENE NE
2.2.1
2.2.1 ới thiệuGiới thiệu
M t mã Affine là m t d ng m t mã thay th dùng m t b ng chậ ộ ạ ậ ế ộ ả ữ cái, trong đó mỗi chữ cái được ánh xạ tới một số, sau đó được mã hóa thông qua một hàm bậc nhất có dạng y=ax+b
2.2.2 Nguyên
2.2.2 Nguyên lý hoạt độ lý hoạt độ lý hoạt độngngng
Để thực hi n m t mã hóa Affine, ệ ậ trước tiên ta c n ánh x các kí t trong b ng ch ầ ạ ự ả ữcái Latinh thành các số tương ứng t 00 - 25 ừ
Plaintext and Ciphertex in Z26
Sau đó, thực hiện quá trình mã hóa theo sơ đồ sau:
Trang 13Trong công th c này, 2 khóa ứ a và blà 2 s nguyên thu c tố ộ ập Z26, trong đó a và
26 là hai s nguyên t cùng nhau hay ố ố gcd(,a26) 1=
VD: Mã hóa bản tin P = “NGUYENANHTUAN” bằng m t mã Affine v i khóa ậ ớ =17
Trang 14Ở đây, a1 là ph n t nghầ ử ịch đảo nhân của avà blà ph n t nghầ ử ịch đảo c ng ộcủa btrong tập Z26: a.− mod1 26 1= và (b+ b(−))mod26 =0
Mật mã c ng là mộ ột trường hợp đặc bi t c a m t mã Affine vệ ủ ậ ới a 1
Mật mã nhân là một trường hợp đặc bi t c a m t mã Affine vệ ủ ậ ới b 0
VD: Gi i s ả ử thu được ciphertext như ví dụ ở trên, bi t khóa ế =10 và b 5 Tìm plaintext?
Trang 15x=ord(char) -ord('a')
encrypted_char =chr(((a * +b) %26) ord('a')) result+=encrypted_char
else:
x=ord(char) -ord('A')
encrypted_char =chr(((a * +b) %26) ord('A')) result+=encrypted_char
encrypted_text =affine_cipher_encrypt(plaintext, a, )
print("Mã hóa Affine:", encrypted_text)
Trang 16forchar inciphertext:
ifchar.isalpha():
ifchar.islower():
x=ord(char) -ord('a')
decrypted_char =chr(((a_inv ( )) * x-b %26) ord('a'))
result+=decrypted_char
else:
x=ord(char) -ord('A')
decrypted_char =chr(((a_inv ( )) * x-b %26) ord('A'))
decrypted_text =affine_cipher_decrypt(ciphertext, a, )
print("Giải mã Affine:", decrypted_text)
2.3 Hệ mật H
2.3 Hệ mật HILLILL
2.3.1 Lịch
2.3.1 Lịch sử hình thành sử hình thành và phát tri sử hình thành và phát tri và phát triển :ển :ển :
Mật mã Hill được phát minh vào năm 1929 bởi Lester S Hill Đây là mật mã đa đồ họa đầu tiên trong đó việc thực tế là có thể ạt động nhiều hơn 3 ký tự một lúc hoMật mã Hill sử dụng modulo, nhân ma trận và nghịch đảo ma trận Do đó, nó là mật
mã thiên về toán học nhiều hơn các loại mật mã khác
Trang 17Det(A) 0 và Det(A) khả nghịch trên Z thì gcd[ det(A),26 ] = 1 thì khi đó 26
Mật mã Hill là hệ mật trong đó P = C = (Z26 ) m và K với P là tập các ma trận m x
m biểu diễn plain text, C là tập các ma trận m x m biểu diễn cipher text, K là tập ác ma trận m x m khả nghịch trên Z26
Với mỗi ma trận k K, p ={p p1, , ,2 mp} P; c={c ,c , ,c }1 2 m C
Nếu các p và c ở dạng ma trận cột xác định :
o Hàm mã hóa : e (p) = K.pK
o Hàm giải mã : d (p) = K-1.c
Trang 18Cho đoạn văn bản rõ plain text là : P = NGUYENMINHPHUC
a Mã hóa đoạn văn bản trên bằng mật mã Hill với khóa key là K = HILL
b Giải đoạn mã thu được ở câu a
Khóa K có kích thước 2x2 nên m=2 => chia bản rõ thành các đoạn có độ dài 2 kí tự
từ trái qua phải và mã hóa từng đoạn mã này :
13
EpN
8
MpI
2
UpC
Trang 19Trên vành Z ta có (det(K)) = 7 vì 15.7 = 105 = 1mod2626 -1
Vì gcd( det(K), 26) = gcd (15, 26) = 1 nên K khả nghịch trên vành Z26
Trang 202.4.1 ới thiệuGiới thiệu
Mật mã Playfair là một phương pháp mã hóa chữ cái được sử dụng trong lĩnh vực mật mã học, được phát triển bởi Charles Wheatstone vào năm 1854 và được Lionel S Playfair chế tạo lại, từ đó mang tên củ ông Đây là một hệ ống mật mã a th
sử dụng một bảng chữ cái, thường là một ma trận 5x5, được tạo ra từ một từ khóa chọn lọc
Mật mã Playfair được sử dụng trong quá khứ cho mục đích thương mại và quân
sự Tuy nhiên, do một số hạn chế như khả năng bị ải mã dễ dàng nếu có thông gitin về từ khóa, nó đã được thay thế bởi các phương pháp mã hóa mạnh mẽ hơn trong thời kỳ ện đại Đây vẫn là một phương pháp mã hóa thú vị và có giá trị hitrong việc hiểu cơ bản về lịch sử của mật mã
2.4.2 Nguyên lý
2.4.2 Nguyên lý hoạt độ hoạt độ hoạt độngngng
a Chuẩn bị
Trang 21❖ Ma trận mã hoã
• Cần tạo một ma trận 5x5 chứa các chữ cái không trùng lặp
• Bắt đầu bảng với các chữ cái của khóa key (loại bỏ ữ trùng) và sau đó điềch n các chữ cái còn lại theo thứ tự
• Lưu ý: Bảng chữ cái Tiếng Anh có 26 chữ cái, mà ở đây chỉ có 25, nên thường thì ta sẽ cho 2 chữ i và j vào cùng một chỗ
Ví dụ: Key = committee
a – – – b c d – – e f – – g h – – i j – – k l – – – – m n o p q – – – – – r s t u – v – – w x – – y z
❖ Chọn cặp chữ cái từ văn bản cần mã hoá Plaintext
• Nếu thừa ra 1 chữ cái sau khi nhóm thì cũng có thể ghép cặp chữ đó với 1 chữ cái bất kì
• Nếu cặp chữ trùng nhau: Thêm một chữ "dummy" như "X" giữa chúng và sau
đó giải mã như bình thường
Ví dụ: Plaintext = communication
→ co mx mu ni ca ti on
b Quy tắc mã hoá Playfair
• Nếu cặp chữ cùng nằm trong cùng một hàng hoặc cột: Di chuyển theo hàng hoặc cột sang chữ cái kế tiếp theo chiều tương ứng để ải mã.gi
• Nếu cặp chữ cách nhau: Tạo một hình chữ ật bằng cách lấy hai chữ cái ở nhđối diện của hình chữ nhật
• Lưu ý: Giữ nguyên khoảng cách và dấu câu khi giải mã
1 Ví dụ
• Mã hoã bằng mật mã Playfair Cho Plaintext = hellooneandall và Key = thedieis
a – – – – – – – b c d e f g h – i – j – k – – – l m n – – – – – – – – o p q r s t u v – – – w x y – z
Ta có, ma trận mã hoá là:
Trang 232.4.3 Lập trình mô phỏh mô phỏh mô phỏngngng
# Tạo ma trận key kích thước 5x5
# Function to generate the Playfair matrix
alphabet = "ABCDEFGHIKLMNOPQRSTUVWXYZ"
key = key.upper().replace("J" "I", )
key = ''.join(dict.fromkeys(key))
matrix = []
forchar in key:
ifchar not in matrix:
matrix.append(char)
forchar in alphabet:
ifchar not in matrix:
matrix.append(char)
playfair_matrix = [matrix[i:i+5] fori inrange(0, len(matrix), 5)] return playfair_matrix
# Tìm vị trí của chữ cái
# Function to get the position of a character in the matrix
# Function to encrypt plaintext using Playfair cipher
Trang 24plaintext = plaintext.upper().replace("J" "I", )
iflen(plaintext) % != : 2 0
plaintext += 'X'
playfair_matrix = generate_playfair_matrix(key)
ciphertext = []
char1, char2 = plaintext[i], ''
i + if 1< len(plaintext):
char2 = plaintext[i + ] 1
row1, col1 = get_char_position(playfair_matrix, char1) row2, col2 = get_char_position(playfair_matrix, char2) row1 == row2: if
ciphertext.append(playfair_matrix[row1][(col1 + ) % 1 5]) ciphertext.append(playfair_matrix[row2][(col2 + ) % 1 5]) elif col1 == col2:
ciphertext.append(playfair_matrix[(row1 + ) % ][col1]) 1 5
ciphertext.append(playfair_matrix[(row2 + ) % ][col2]) 1 5
else:
ciphertext.append(playfair_matrix[row1][col2]) ciphertext.append(playfair_matrix[row2][col1]) return join(ciphertext) ''
# Thực hiện giải mã
# Function to decrypt ciphertext using Playfair cipher playfair_matrix = generate_playfair_matrix(key)
plaintext = []
char1, char2 = ciphertext[i], ''
i + if 1< len(ciphertext):
char2 = ciphertext[i + ] 1
row1, col1 = get_char_position(playfair_matrix, char1)
Trang 25row2, col2 = get_char_position(playfair_matrix, char2)
ciphertext = playfair_encrypt(plaintext, key)
# Decryption
decrypted_text = playfair_decrypt(ciphertext, key)
2.5 Hệ mật vignerenerenere
Mật mã Vigenère là một phương pháp mã hóa văn bản cổ điển hoạt động bằng cách s d ng xen k mử ụ ẽ ột số phép mã hóa Caesar khác nhau d a trên các ch ự ữ
Trang 26cái c a m t t khóa Nó là m t dủ ộ ừ ộ ạng đơn giản c a m t mã thay th dùng nhiủ ậ ế ều bảng ch cái ữ
2.5.1 Lịch
2.5.1 Lịch sử hình t sử hình thành sử hình thành hành
Mã hóa Vigenère được đặt tên theo nhà mật mã học người Pháp Blaise de Vigenère, người được coi là người đầu tiên giới thiệu phương pháp này Mã hóa Vigenère đã xuất hiện vào khoảng năm 1553 và được đăng trong tác phẩm của Vigenère có tựa đề "Traité des chiffres" (Quy n sách v ể ề mã hóa) Tuy nhiên, đã có một số đóng góp trước đó của các nhà m t mã hậ ọc khác như Giovan Battista Bellaso, người Ý, đã mô tả một phương pháp tương tự vào năm 1553 trong tác phẩm "La cifra del Sig Giovan Battista Bellaso"
Phương pháp mã hóa Vigenère tạo ra một loại mã hóa polyalphabetic, nơi mỗi ký tự trong văn bản được mã hóa bằng cách sử dụng một trong nhiều bảng chữ cái khác nhau, d a vào vị trí của ký t trong khóa Điều này làm cho việc giải ự ự
mã trở nên khó khăn hơn so với các phương pháp mã hóa monoalphabetic như Caesar cipher
Mã Vigenère đã được sử dụng rộng rãi trong quân s và truy n tin tình báo ự ềtrong m t th i gian dài vì nó t o ra m t mộ ờ ạ ộ ức độ độc đáo của tính an toàn so với các phương pháp mã hóa trước đó Tuy nhiên, sau này, khi các phương pháp giải
mã được phát triển, mã hóa Vigenère đã trở nên dễ b phá v , và các h ị ỡ ệ thống mã hóa m nh m ạ ẽ hơn đã thay thế nó trong nhiều ứng d ng ụ
2.5.2 Mô tả thuậ
2.5.2 Mô tả thuật toán mã hóa t toán mã hóa t toán mã hóa
Mã Vignere mã hóa b ng cách sằ ử dụng m t b ng hình vuông g m có 26 ộ ả ồhàng M i hàng d ch v bên trái mỗ ị ề ột bước so với hàng bên trên để ạ t o thành 26 bảng mã Caesar Trong quá trình mã hóa tùy vào t khóa mà m i thừ ỗ ời điểm ta dùng một dòng khác nhau để mã hóa văn bản
Trang 27Ví d : ụ
Ta có plaintext: HELLO WORLD và key: MAHOA
Bước 1: Điền Keyword dưới chuỗi plaintext và tái diễn ta có:
Trang 28def vigenere_encrypt(message, key):
key = generate_key(message, key) # S dử ụng hàm generate_key để ạ t o khóa encrypted_text = []
key_index = ord(key_char.upper()) - ord('A')
encrypted_index = (char_index + key_index) % 26
encrypted_char = chr(encrypted_index + ord('A'))
def vigenere_decrypt(encrypted_message, key):
key = generate_key(encrypted_message, key)
key_index = ord(key_char.upper()) - ord('A')
decrypted_index = (char_index - key_index) % 26
decrypted_char = chr(decrypted_index + ord('A'))
if char.islower():
decrypted_char = decrypted_char.lower()
Trang 29# Mã hóa v i mã hóa Vigenère ớ
encrypted_message = vigenere_encrypt(message, key)
print(f"Encrypted message: {encrypted_message}")
# Gi i mã v i mã hóa Vigenère ả ớ
decrypted_message = vigenere_decrypt(encrypted_message, key)
print(f"Decrypted message: {decrypted_message}")
Vì tính chất đơn giản nên hệ mật này không được sử d ng cho mụ ục đích mã hóa b o m t mà chả ậ ỉ dùng để ngụy trang từ ngũ thông thường cho người đọc ph ổthông
2.6.2 Mã
2.6.2 Mã hóa và giải mã hóa và giải mã hóa và giải mã hệ mật Atbash hệ mật Atbash hệ mật Atbash
Đây là một mật mã đơn giản để giải mã Tất cả những gì bạn cần làm là tạo một b ng d ch vả ị ới các chữ cái trong b ng chả ữ cái được vi t tế ừ A đến Z ở phía trên
và đảo ngược ở phía dưới Tìm ch ữ cái trong văn bản mật mã của bạn ở hàng dưới cùng và nhìn phía trên nó để xem nó đã được giải mã chưa
Trang 302.6.3 Một số
2.6.3 Một số ến thể khác củbiến thể khác củến thể khác của mã Atbasha mã Atbash
Atbash dở ạng thông thường ch mã hóa các ch cái A-ỉ ữ Z, để ạ ố l i s và dấu câu dướ ạng văn bải d n thuần túy Các dạng biến thể của mật mã tồn tại bao gồm các s và các ký hi u ch m câu phố ệ ấ ổ biến nhất Điều này tương tự như cách ROT13
đã được mở rộng trong mật mã ROT18 và ROT47