Professional Documents
Culture Documents
LỜI CẢM ƠN
Cấu trúc rời rạc là một môn học nghiên cứu về các đối tượng rời rạc. Nói về các
vấn đề logic, tư duy mà các giảng viên đã giảng dạy.
Em xin cảm ơn các giảng viên đã giúp cho em hoàn thành được tất cả những
vấn đề mà em còn gặp nhiều khó khăn trong quá trình học tập và làm bài thi giữa học
kì II này. Mặc dù gặp khó khăn nhưng không tránh được những sai xót và hạn chế rất
mong được sự tham gia và đóng góp ý kiến bổ sung của giảng viên.
Xin chân thành cảm ơn!
ii
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi và được sự hướng
dẫn khoa học của GV Mai Duy Tân;. Các nội dung nghiên cứu, kết quả trong đề tài này
là trung thực và chưa công bố dưới bất kỳ hình thức nào trước đây. Những số liệu trong
các bảng biểu phục vụ cho việc phân tích, nhận xét, đánh giá được chính tác giả thu
thập từ các nguồn khác nhau có ghi rõ trong phần tài liệu tham khảo.
Ngoài ra, trong luận văn còn sử dụng một số nhận xét, đánh giá cũng như số liệu
của các tác giả khác, cơ quan tổ chức khác đều có trích dẫn và chú thích nguồn gốc.
Nếu phát hiện có bất kỳ sự gian lận nào tôi xin hoàn toàn chịu trách nhiệm
về nội dung luận văn của mình. Trường đại học Tôn Đức Thắng không liên quan đến
những vi phạm tác quyền, bản quyền do tôi gây ra trong quá trình thực hiện (nếu có).
TP. Hồ Chí Minh, ngày 14 tháng 03 năm
2022 Tác giả
(ký tên và ghi rõ họ tên)
Chien
Võ Văn Chiến
1
TÓM TẮT
Tóm tắt các vấn đề nghiên cứu:
- Các khái niệm cơ bản về mật mã.
- Tìm hiểu về Monoalphabetic substitution ciphe.
- Tìm hiểu về Frequency analysis.
2
MỤC LỤC
LỜI CẢM ƠN.................................................................................................................i
TÓM TẮT...................................................................................................................... 1
MỤC LỤC...................................................................................................................... 2
DANH MỤC KÍ HIỆU VÀ CHỮ VIẾT TẮT................................................................4
DANH MỤC CÁC BẢNG BIỂU, HÌNH VẼ, ĐỒ THỊ.................................................5
CHƯƠNG 1 – GIỚI THIỆU..........................................................................................6
1. Các khái niệm cơ bản về mật mã.......................................................................6
1.1 Mã hóa và mã hóa.......................................................................................6
1.2 Hệ thống mật mã đối xứng..........................................................................6
1.3 Hệ thống mật mã bất đối xứng....................................................................7
CHƯƠNG 2 – MONOALPHABETIC SUBSTITUTION CIPHER...............................8
1. Khái quát...........................................................................................................8
2. Phương pháp và ví dụ........................................................................................9
3. Thuật toán..........................................................................................................9
4. Nhận xét..........................................................................................................10
CHƯƠNG 3 – FREQUENCY ANALYSIS.................................................................10
1. Khái quát.........................................................................................................10
2. Phương pháp và ví dụ......................................................................................11
3. Thuật toán........................................................................................................15
4. Nhận xét..........................................................................................................15
3
Mã hóa có vai trò rất quan trọng, đặc biệt là trong giao dịch điện tử bằng cacs loại tiền
mã hóa như Bitcoin chẳng hạn. Nó giúp đảm bảo bí mật, toàn vẹn của thông tin, khi thông
tin đó được truyền trên mạng. Mã hóa cũng là nền tảng của kỹ thuật chũ ký điện tử, hệ
thống PKI, …. Một cách khái quát, ta có thể thấy mật mã có các ứng dụng như sau:
- Bảo vệ truyền tin mật trong quân sự và ngoại giao, bảo vệ thông tin các lĩnh vực
tầm cỡ lợi ích quốc gia.
- Bảo vệ các thông tin nhạy cảm trong giao dịch như hồ sơ pháp lý hay y tế, các giao
dịch tài chính, …
- Bảo vệ các thông tin nhạy cảm, riêng tư trong liên lạc với thế giới qua các giao dịch
sử dụng máy tính và kết nối mạng.
Ưu điểm: tính đơn giản, vì nó sử dụng một khóa duy nhất cho cả mã hóa và giải
mã. Do đó, các thuật toán mã hóa đối xứng nhanh hơn đáng kể so với các thuật toán
không đối xứng và yêu cầu ít sức mạnh xử lý hơn.
Nhược điểm: lỗ hỏng. Việc phải chuyển khóa cho bên kia là một lỗ hổng bảo mật vì
nếu rơi vào tay kẻ xấu, thông tin sẽ được giải mã. Do đó, cần đặc biệt chú ý đến các
cách có thể để đánh chặn khóa và tăng cường bảo mật đường truyền.
Ưu điểm: tính bảo mật của nó vì khóa riêng tư không cần phải được chuyển cho bất
kỳ ai. Điều này giúp đơn giản hóa đáng kể việc quản lý khóa trong các mạng lớn hơn.
Nhược điểm: Độ phức tạp cao hơn, tốc độ thấp hơn và nhu cầu cao hơn về tài
nguyên tính toán.
Có rất nhiều monoalphabetic substitution cipher khác nhau, trên thực tế là rất nhiều, vì
mỗi chữ cái có thể được mã hóa thành bất kỳ ký hiệu nào, không chỉ là một chữ cái khác.
Lịch sử của monoalphabetic substitution cipher có thể được bắt nguồn từ những nền
văn minh sớm nhất, và trong thời gian dài.
Số lượng hoán vị của 26 chữ cái là 26! = 4x10 26 (số khóa). Phương pháp này còn
được gọi là phương pháp mã hóa an toàn trong suốt 1000 năm trước công nguyên.
9
2. Phương pháp và ví dụ.
- Viết ra bảng chữ cái A, B, C, D … theo thứ tự.
- Chọn hoán vị ngẫu nhiên được chọn của các chữ cái trong bảng chữ cái.
- Bên dưới của bảng chữ cái , viết hoán vị của các chữ cái trong bảng chữ cái. Thay
thế từng ký tự bản rõ bằng cách thay thế ký tự hoán vị nằm bên dưới nó trong bảng.
Ví dụ: FAR ABOVE CAYUGA’S WATERS được coi là OCVCA NWYIC QPBCE
LCGYE.
Để giải mã một bản rõ nhận được từ thuật toán mật mã , người có bản mã ciphertext
cần biết khóa, do đó yêu cầu một giao thức về trao khoá.
Đơn giản nhất có thể thực hiện là người gửi tin ghi khoá ra đĩa và chuyển đĩa cho
người nhận. Rõ ràng cách làm này đơn giản nhưng thực tế không an toàn. Trong thực tế
người ta sử dụng nhiều giao thức phức tạp và tinh vi hơn.
3. Thuật toán.
import random
mess_text = input("Enter the mess: ")
alpha = 'abcdefghijklmnopqrstuvwxyz'
key = 7
encrypt = ''
decrypt = ''
for i in mess_text:
poss = alpha.find(i)
newposs = (poss + 7)%26
encrypt += alpha[newposs]
print(encrypt)
for i in mess_text:
pos = alpha.find(i)
newpos = (pos - 7)%26
decrypt += alpha[newpos]
10
print(decrypt)
4. Nhận xét.
A monoalphabetic substitution cipher có số lượng khóa rất lớn (26!) nên việc phá mã
rất lâu và khó. Và hiện nay, các hệ thống máy tính hiện đại cũng chưa đủ mạnh để có thể
tấn công bạo lực nằm phá vỡ hệ thống .
Tuy nhiên, monoalphabetic substitution cipher có thiết kế đơn giản và nó dễ có sai xót
trong thiết kế nên hệ thống mật mã có thể dẽ bị phá vỡ.
Frequency analysis (còn được gọi là counting letters) là nghiên cứu về tần suất của các
chữ cái hoặc nhóm chữ cái trong một bản mã. Phương pháp này được sử dụng như một
biện pháp hỗ trợ để phá vỡ classical ciphers.
Vào thế kỉ 19, Al-Kindi một nhà hiền triết người Ả Rập đã tìm ra cách giải mã khả
thi khác. Dựa trên các vấn đề:
- Trong ngôn ngữ Anh, tần suất xuất hiện của các chữ cái là không đồng đều, chữ
E là chữ cái đucợ xuất hiện nhiều nhất, còn chữ Z, Q, J là những chữ cái thường
ít được sử dụng.
- Nếu chữ E được thay thế bằng chữ K thì tần suất xuất hiện của chữ K trong bản
mã là 13.05%.
11
Mỗi ngôn ngữ có một chuỗi ký tự điển hình và phổ biến. Trong tiếng Anh, có các
bigrams thông dụng, như tr, er, on, an, ss, tt và ee.
Phân tích tần số được sử dụng để phá vỡ mật mã thay thế. Tìm các chữ cái phổ biến
trong bản mã và cố gắng thay thế chúng bằng các chữ cái phổ biến trong ngôn ngữ được sử
dụng.
Kẻ tấn công thường kiểm tra một số khả năng và thực hiện một số thay thế các chữ cái
trong bản mã. Tìm kiếm những từ có thể xuất hiện và dựa vào đó để thay thế nhiều hơn. Sử
dụng máy tính, có thể thử rất nhiều tổ hợp trong thời gian tương đối ngắn.
Ví dụ, nếu trong bản mã được phân tích, chữ cái phổ biến nhất là v , người ta có thể
dự đoán rằng v thay thế e hoặc o (một trong những chữ cái phổ biến nhất trong tiếng Anh)
từ bản rõ.
- Tìm tần số của các chữ cái xuất hiện trong bảng sẽ nhận được các giá trị.
- Chúng ta có thể thấy tần số xuất hiện trong bảng mã. Ở đây có các ký tự phổ biến
nhất là “S”, tiếp theo là “O”. Chúng đại diện cho “e” và “t”. Tiếp theo chúng ta
thay thế tất cả các ký tự “S” và “O” lần lượt là “e” và “t”.
- Trong bảng mã có chuỗi ký tự “tle” xuất hiện thường xuyên. Trong tiếng Anh, 3 ký
tự phổ biến nhất là “the”. Điều này có nghĩa là, chúng ta sẽ thay thế ký tự “l” được
giải mã thành “h”.
- Trong bảng mã thấy tần số xuất hiện của ký tự “G” là có tần suất xuất hiện nhiều
nhất và có chuỗi ký tự “tG” có nghĩa duy nhất là “to”, vì vậy chọn “G” là “o”.
- Có chuỗi ký tự “oFe”, xét vơi sự xuất hiện của “theF”, chúng ta sẽ chọn “F” là “n”.
- Trong bảng mã chuỗi ký tự “Lheet” rất có thể là “sheet”, vì vậy chúng ta sẽ thay
thế “L” bằng “s”.
- Có cụm ký tự “soDVe”, có thể chuyển thành “solve” và sẽ biến đổi “D” và “V”
thành “l” và “v”.
- Cụm từ “one sheet oK so” và biến đổi “K” thành “r”.
- Cụm từ “enoQRh” biến đổi thành “enough” và biến đổi “Q” và “R” thành “u” và
“g”.
- Chúng ta biến đổi “Nount” và “EessMge” thành “count” và “message” và biến đổi
“N”, “E” và “M” thành “c”, “m” và “a”.
- Biến đổi “W”, “X”, “Y” và “Z” thành “w”, “x”, “y” và “z”.
- Biến đổi cụm từ “occurrPng” và “sYmAol” thành “occurring” và “symbol”.
- Biến đổi “C” -> “f”, “B” -> “k”, “U” -> “d”, “J” -> “q” và “H” -> “p”.
“one way to solve an encrypted message, if we know its language, is to find a different
plaintext of the same language long enough to fill one sheet or so, and then we count the
occurrences of each letter. we call the most frequently occurring letter the 'first', the next
most occurring letter the 'second' the following most occurring letter the 'third', and so on,
until we account for all the different letters in the plaintext sample. then we look at the
cipher text we want to solve and we also classify its symbols. we find the most occurring
symbol and change it to the form of the 'first' letter of the plaintext sample, the next most
common symbol is changed to the form of the 'second' letter, and the following most
common symbol is changed to the form of the 'third' letter, and so on, until we account for
15
all symbols of the cryptogram we want to solve.” (Trích từ “Bản thảo về giải mã thông điệp
mật mã”, của Al-Kindi)
3. Thuật toán.
from collections import Counter
import collections
mess = 'GFS WMY OG LGDVS MF SFNKYHOSU ESLLMRS GC SMNI OG LGDVS.'
alpha = 'abcdefghijklmnopqrstuvwxyz'
abc = mess.replace(' ','')
def fre_analysis(mess):
mes = mess.upper()
letter = {}
for f in alpha:
letter[f] = 0
for f in mess:
if f in alpha:
letter[f] += 1
return letter
def saf(mess):
letter = fre_analysis(mess)
print(letter)
saf(mess)
print(collections.Counter(abc).most_common(1)[0])
def decr(text, jump):
decryption = ''
for char in text.lower():
ind = alpha.find(char)
decryption += alpha[ind-jump]
return decryption
print(decr(mess, 4))
4. Nhận xét.
Frequency analysis hoạt động cho mọi monoalphabetic substitution cipher và nó có thể
sử dụng bất kì ngôn ngữ nào bạn muốn.
Nhược điểm: đối với các đoạn mã ngắn, việc phân tích mật mã không có đủ dữ liệu để
phân tích liên quan đến các tần số của ký tự. Khi đó các tần số trong đoạn mã sẽ bị bóp
méo rất nhiều.
Sự xuất hiện của các ký tự khác nhau tùy thuộc vào ngữ cảnh của đoạn mã. Mức độ khó
tăng thêm này có thể làm cho quá trình giải đoạn mã tốn rất nhiều thời gian (cũng như loại
bỏ các dấu chấm câu.)
16
PHỤ LỤC