- Mã hóa thay thế đơn bản Monoalphabetic Substitution Cipher là mã hóa được tiến hành bằng cách thay thế các chữ cái trong bảng chữ cái của văn bản... Với từng chữ cái trong văn bản gố
Trang 1BÁO CÁO GIỮA KỲ MÔN XÁC SUẤT THỐNG KÊ VÀ ỨNG DỤNG CHO CÔNG
Trang 2BÁO CÁO GIỮA KỲ MÔN XÁC SUẤT THỐNG KÊ VÀ ỨNG DỤNG CHO CÔNG
Trang 3LỜI CẢM ƠN
Để hoàn thành báo cáo thực tập này em xin gửi lời cảm ơn chân thành và tri ânđến quý thầy, cô khoa Công Nghệ Thông Tin của trường Đại học Tôn Đức Thắng đãquan tâm, tạo điều kiện thuận lợi và hỗ trợ em trong quá trình thực hiện bài báo cáocuối kì này
Đặc biệt, em xin gửi lời biết ơn sâu sắc đến thầy Trần Lương Quốc Đại, ngườithầy đã giảng dạy môn Xác suất thống kê trong học kì này, đồng thời là người hướngdẫn, tận tình chỉ dạy em trong suốt quá trình thực hiện bài báo cáo cuối kì
Đây là bài báo cáo đầu tiên em thực hiện còn nhiều hạn chế và bỡ ngỡ, đồngthời do tình hình phức tạp của dịch Covid-19, nó cũng một phần ảnh hưởng đến quátrình học tập và quá trình tiếp thu kiến thức của em ở bộ môn này nên không thể tránhkhỏi những thiếu sót Em rất mong nhận được những ý kiến đóng góp quý báu của quýthầy cô để em học thêm được những kinh nghiệm và sẽ hoàn thành tốt hơn các bài báocáo sắp tới
Lời nói cuối cùng em xin kính chúc sức khỏe quý thầy, cô và chúc quý thầy cô
có được những thành công cao quý trong sự nghiệp của mình
Em xin chân thành cảm ơn!
TP Hồ Chí Minh, ngày 17 tháng 4 năm 2022
Tác giả (Ký tên và ghi rõ họ tên)
Phạm Hùng Phát
Trang 4ĐỒ ÁN ĐƯỢC HOÀN THÀNH TẠI TRƯỜNG ĐẠI HỌC TÔN ĐỨC THẮNG
Tôi xin cam đoan đây là sản phẩm đồ án của riêng tôi và được sự hướng dẫn củaTS.Trần Lương Quốc Đại Các nội dung nghiên cứu, kết quả trong đề tài này là trungthự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ácbả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 đồ án còn sử dụng một số nhận xét, đánh giá cũng như số liệucủ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 đồ á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 17 tháng 4 năm 2022
Tác giả (ký tên và ghi rõ họ tên)
Phạm Hùng Phát
Trang 5PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN
Phần xác nhận của GV hướng dẫn
_
Tp Hồ Chí Minh, ngày 17 tháng 4 năm 2022
(kí và ghi họ tên)
Phần đánh giá của GV chấm bài
_
Tp Hồ Chí Minh, ngày 17 tháng 4 năm 2022
(kí và ghi họ tên)
Trang 6TÓM TẮT
Bài báo cáo được thực hiện áp dụng các kiến thức đã được học trong học
kỳ vừa qua, gồm có 4 phần chính được trình bày trong bài báo cáo này:
Phần 1: Giới thiệu sơ lược
Phần 2: MONOALPHABETIC SUBSTITUTION CIPHER(mãhóa thay thế đơn bảng)
Phần 3: FREQUENCY ANALYSIS (phân tích tần số)
Phần 4: Thực hành code thuật toán
- Bài báo cáo là cơ sở để xem xét tổng kết lại những gì ta đã được học vàcũng góp phần củng cố kiến thức để chuẩn bị cho phần thi cuối kỳ
Trang 7MỤC LỤC
LỜI CẢM ƠN i
PHẦN XÁC NHẬN VÀ ĐÁNH GIÁ CỦA GIẢNG VIÊN iii
TÓM TẮT iv
MỤC LỤC 1
DANH MỤC BẢNG, HÌNH ẢNH 2
PHẦN 1: GIỚI THIỆU 3
1 Văn bản gốc (plaintext) 3
2 Văn bản mã hóa (ciphertext) 3
3 Khóa (key) 3
4 Mã hóa (Encryptio) 3
5 Giải mã (Decryption) 4
PHẦN 2: MONOALPHABETIC SUBSTITUTION CIPHER (MÃ HÓA THAY THẾ ĐƠN BẢNG) 4
PHẦN 3: FREQUENCY ANALYSIS (PHÂN TÍCH TẦN SỐ) 6
PHẦN 4: THỰC HÀNH CODE THUẬT TOÁN 7
1 Mã hóa dựa theo phương pháp mã hóa đơn bản (Encryption using Monoalphabetic Substitution Cipher) 7
2 Giải mã dựa theo phương pháp phân tích tần số (Decryption using Frequency Analysis) 11
TÀI LIỆU THAM KHẢO 19
Trang 8DANH MỤC BẢNG, HÌNH ẢNH
Bảng 1: Thống kê các chữ cái được sử dụng nhiều trong Tiếng Anh 6
Hình 1: Hàm Encryption 8
Hình 2: Kiểm tra và tìm khóa(key) 8
Hình 3: Mã hóa văn bản 9
Hình 4: Hàm main() nhận giá trị và in kết quả 9
Hình 5: Kết quả mã hóa văn bản 100 ký tự 10
Hình 6: Kết quả mã hóa văn bản 500 ký tự 11
Hình 7: Hàm decryption giải mã văn bản đã mã hóa 12
Hình 8: Kết quả khi đếm tần số xuất hiện từng chữ trong văn bản đã mã hóa 12
Hình 9: Tìm chữ cái tương ứng với tần số xuất hiện nhiều hay ít của từng chữ cái 13
Hình 10: Kết quả tìm chữ cái tương ứng 13
Hình 11: Giải mã văn bản đã mã hóa 14
Hình 12: Hàm main nhận giá trị và in kết quả 14
Hình 13: Kết quả giải mã văn bản 100 ký tự 15
Hình 14: Kết quả giải mã văn bản 500 ký tự 17
Trang 9PHẦN 1: GIỚI THIỆU
1 Văn bản gốc (plaintext).
- Là văn bản ban đầu có nội dung có thể đọc được và cần được bảo vệ
2 Văn bản mã hóa (ciphertext).
- Là văn bản sau khi mã hóa, nội dung không thể đọc được
3 Khóa (key).
- Là khóa được sử dụng trong quá trình mã hóa và giải mã
- Do các thuật toán hầu như được công khai nên tính an toàn của mã hóa giờ đây phụ thuộc vào khóa (key)
- Khóa này có thể là bất kì một giá trị chữ, số nào
4 Mã hóa (Encryptio).
- Mã hóa là một phương pháp bảo mật dữ liệu kỹ thuật số bằng một hoặc nhiềuthuật toán để nó chỉ có thể đọc hoặc giải mã thông qua khóa (key), hướng giải
mã hoặc mật mã chính xác
- Nói cách khác, mã hóa là quá trình chuyển văn bản gốc thành văn bản mã hóa
- Quá trình mã hóa thông tin bằng cách sử dụng một thuật toán làm cho thông tingốc không thể đọc được ngoài trừ người tạo nên
- Mã hóa rất quan trọng trong thời đại công nghệ hiện nay, giúp bảo mật cácthông tin cá nhân, tin nhắn, giao dịch tài chính, tài liệu quân sự một cách riêng
tư và an toàn nhất
- Phân loại mã hóa:
Hệ thống mã hóa đối xứng (Symmetric cryptosystem) là hệ thống mã
hóa sử dụng một khóa bí mật chia sẻ (shared-secret-key) cho cả hai quátrình mã hóa và giải mã
Trang 10 Hệ thống mã hóa bất đối xứng (Asymmetric cryptosystem) là hệ
thống mã hóa sữ dụng một khóa công khai (public key) và một khóa bímật (private key) cho quá trình mã hóa và giải mã
- Mã hóa cổ điển là một dạng mã hóa được sử dụng trong lịch sử phát triển của
con người Mã hóa cố điển hoạt động trên cở sở bảng chữ cái, được thực hiệnbằng tay hoặc một số máy móc cơ khí đơn giản Nhưng ngày nay đã bị lạc hậu
vì phương thức mã hóa này quá đơn giản và dễ dàng bị tấn công bẻ khóa đượcthông qua nhiều phương thức khác nhau như:
Tấn công vét cạn (Sử dụng máy tính thử hết tất cả các trường hợp có thểxảy ra)
Phương pháp tấn công thống kê (Dựa vào tần suất xuất hiện của các chữcái)
5 Giải mã (Decryption).
- Giải mã là quá trình chuyển đổi thông tin được mã hóa thành định dạng ban đầu
của nó hay nói cách khác là chuyển đổi thông tin từ văn bản mã
hóa(ciphertext) thành văn bản gốc(plaintext)
- Về cơ bản nó là phương pháp mã hóa ngược, đòi hỏi dữ liệu mã hóa để tất cảmọi người không thể đọc, nhưng chỉ những người có khóa (Key) giải mã mộtcách phù hợp mới có thể đọc
- Việc giải mã có thể thực hiện thủ công, tự động, sử dụng phần mềm Nó đượcthực hiện với khóa (key) hoặc mật khẩu
- Những lý do quan trọng của việc nên sử dụng giải mã:
PHẦN 2: MONOALPHABETIC SUBSTITUTION CIPHER (MÃ
HÓA THAY THẾ ĐƠN BẢNG).
- Mã hóa thay thế đơn bản (Monoalphabetic Substitution Cipher) là mã hóa
được tiến hành bằng cách thay thế các chữ cái trong bảng chữ cái của văn bản
Trang 11gốc thành một chữ cái khác trong bảng chữ cái mật mã (khóa (key)) Bảng chữcái mật mã được xây dựng từ dựa trên 26 chữ cái, lấy ngẫu nhiên 1 trong 26!hoán vị của 26 chữ cái làm khóa (key) hoặc do người dùng tự cho khóa(key).
- Với số lượng hoán vị của 26 chữ cái là 26!, đây cũng chính là số khóa (key) củaphương pháp này Con số 26! là một con số khá lớn nên việc tấn công phá mãbằng phương pháp vét cạn là bất khả thi Vì vậy mã hóa đơn bản đã được xem làmột phương pháp mã hóa an toàn nhất hiện nay
“ABCDEFGHIJKLMNOPQRSTUVWXYZ” hay không
Tiếp theo ứng với mỗi chữ cái trong bảng chữ cái ALPHABET thì cókhóa (key) tương ứng
Với từng chữ cái trong văn bản gốc, ta sẽ tìm vị trí của chữ đó trong bảnchữ cái ALPHABET và từ đó sẽ lấy chữ cái làm khóa(key) thay thế để
mã hóa Cứ như vậy cho hết văn bản gốc
Ví dụ: Ta có bảng chữ cái 26 chữ cái ALPHABET và lấy ngẫu nhiên bảng mật
mã làm khóa key thay thế tương ứng cho từng chữ cái như bảng dưới đây:
Trang 1213 14 15 16 17 18 19 20 21 22 23 24 25
Với văn bản gốc(plaintext): “INFORMATION TECHNOLOGY”
Dựa vào bảng mật mã suy ra được văn bản mã hóa(ciphertext):
“HEAPCTFMHPE MLNQEPYPVO”
PHẦN 3: FREQUENCY ANALYSIS (PHÂN TÍCH TẦN SỐ).
- Phân tích tần số (frequency analysis) là đếm số lần xuất hiện, tần số của các
chữ cái hoặc nhóm chữ cái trong một văn bản Phương pháp phân tích tần sốđược sử dụng dùng để hỗ trở giải mã các mật mã thay thế từ văn bản mã hóa
- Phân tích tần số dựa theo ngôn ngữ Tiếng Anh do vậy trong bất kỳ văn bảnTiếng Anh nào thì các chữ cái, tổ hợp nhất định xảy ra với tần số khác nhau
- Trong Tiếng Anh các chữ cái ‘E’, ‘T’, ‘A’, ‘O’,… là được dùng phổ biến nhất,trong khi đó các chữ cái ‘Z’, ‘Q’, ‘X’ không được sử dụng thường xuyên Ta cótập hợp bảng mã các chữ cái được sắp xếp theo tính được sử dụng thường xuyên
là ‘ETAOINSHRDLCUMWFGYPBVKJXQZ’
Bảng 1: Thống kê các chữ cái được sử dụng nhiều trong Tiếng Anh.
- Phương pháp:
Trang 13 Từ văn bản mã hóa, ta đếm tần số xuất hiện của từng chữ cái và sắp xếpcác chữ cái theo thứ tự giảm dần vào một tập hợp.
Từ đó, ứng với chữ cái xuất hiện nhiều nhất trong văn bản mã hóa thìnhận được chữ cái trong bảng mã Căn cứ vào số lần xuất hiện mà giải
mã chữ cái đó theo tập hợp bản mã các chữ cái được sắp xếp theo tínhđược sử dụng thường xuyên
Ví dụ: Ta có đoạn văn bản mã hóa : ‘PEI PHMH PEMH’ thì chữ ‘P’ làchữ có tần số xuất hiện nhiều nhất trong văn bản mã hóa Suy ra tất cảcác chữ cái ‘P’ trong văn bản sẽ được thay thế bằng chữ ‘E’
Tiếp theo chữ ‘H’ là chữ có tần số xuất hiện nhiều thứ hai trongvăn bản mã hóa Suy ra tất cả các chữ cái ‘H’ trong văn bản sẽđược thay thế bằng chữ ‘T’
Chữ ‘M’ là chữ có tần số xuất hiện thứ ba trong văn bản mã hóa.Suy ra tất cả các chữ cái ‘M’ trong văn bản sẽ được thay thế bằngchữ ‘A’
Chữ ‘E’ là chữ có tần số xuất hiện thứ tư trong văn bản mã hóa.Suy ra tất cả các chữ cái ‘E’ trong văn bản sẽ được thay thế bằngchữ ‘O’
Chữ ‘I’ là chữ có tần số xuất hiện thứ năm trong văn bản mã hóa.Suy ra tất cả các chữ cái ‘I’ trong văn bản sẽ được thay thế bằngchữ ‘I’
Từ đó ta có văn bản giải mã: ‘EOI ETAT EOAT’
Qua phương pháp phân tích tần số (frequency analysis) nhận thấy rằng
phương pháp hỗ trợ giải mã chỉ mang tính tương đối, độ chính xác khônghoàn toàn là hoàn hảo
Trang 14PHẦN 4: THỰC HÀNH CODE THUẬT TOÁN.
1 Mã hóa dựa theo phương pháp mã hóa đơn bản (Encryption using Monoalphabetic Substitution Cipher).
Hình 1: Hàm Encryption
- Hàm Encryption(plain_text, key=None) nhận hai giá trị là văn bản gốc cần
mã hóa và khóa(key) dùng để mã hóa văn bản và trả về văn bản mã hóa thànhcông
- Ta bắt đầu code bằng việc tạo một biến để chứa văn bản mã hóa và kiểm trahàm có nhận được khóa(key) từ người dùng hay không, nếu chưa có khóa(key)thì ta phải tạo, lấy ngẫu nhiên 1 trong 26! Hoán vị của 26 chữ cái ALPHABET
bằng thuật toán random.shuffle(List_key).
Hình 2: Kiểm tra và tìm khóa(key).
Trang 15- Tiếp theo ta chạy vòng for để duyệt tất cả các ký tự trong văn bản gốc(plain_text) Do các chữ cái ALPHABET chúng ta nhập vào là các chữ cái inhoa nên ta sẽ in hoa các giá trị trong văn bản gốc và tiếp theo xét duyệt các ký tựtrong văn bản gốc có phải là các chữ cái ALPHABET không.
Nếu đúng thì sẽ duyệt tiếp tìm vị trí phần tử đó trong ALPHABET Từ
đó sẽ xác định được chữ cái mã hóa trong khóa(key) đồng thời nếu chữcái đó trong văn bản gốc là in hoa thì ta vẫn phải in hoa nó hoặc nếuchữ cái đó trong văn bản gốc không in hoa thì ta cho nó về dạng viếtthường, và thêm nó vào biến rỗng chứa văn bản mã hóa bằng thuật toán
In hoa: Encryp += key[ALPHABET.find(alpha)].upper().
Không in hoa: Encryp += key[ALPHABET.find(alpha)].lower().
Ngược lại nếu không là các ký tự ALPHABET thì vẫn thêm vào biếnchứa văn bản mã hóa Thường sẽ là các ký tự đặc biệt như ‘#’, ‘!’, ‘-’,
‘.’, ‘,’,… Cuối cùng sẽ trả về biến chứa văn bản mã hóa Encryption
Trang 16- Kết quả chạy code theo các trường hợp:
Trường hợp plaintext có độ dài là 100 ký tự
Hình 5: Kết quả mã hóa văn bản 100 ký tự.
Trường hợp plaintext có độ dài là 500 ký tự
Trang 17Hình 6: Kết quả mã hóa văn bản 500 ký tự.
2 Giải mã dựa theo phương pháp phân tích tần số (Decryption using Frequency Analysis).
Trang 18Hình 7: Hàm decryption giải mã văn bản đã mã hóa.
- Hàm Decryption_Frequency(message) nhận giá trị văn bản mã hóa và thực hiệnviệc giải mã thông qua phương pháp Frequency Analysis (phân tích tần số)
- Đầu tiên ta sẽ thực hiện đếm tần số xuất hiện của các chữ cái trong văn bản đã
mã hóa và sắp xếp theo thứ tự giảm dần qua dòng code:
frequency = collections.Counter(message.upper()).most_common()
- Dòng code sẽ cho ta kết quả ví dụ:
Hình 8: Kết quả khi đếm tần số xuất hiện từng chữ trong văn bản đã mã hóa.
- Tiếp theo, tạo một biến key rỗng để chứa các chữ cái sẽ thay thế và ta thực hiệnvòng lặp for để xét đối với các chữ đã đếm từ biến frequency thì sẽ có chữ cái
Trang 19tương ứng thay thế dựa theo biến MostCommon (chứa các chữ cái được xuấthiện thường xuyên trong văn bản Tiếng Anh)
- Dòng for sẽ duyệt hết các phần tử trong frequency, kiểm tra letter[0] (chứ cácchữ cái đã đếm và sắp xếp) có thuộc ALPHABET không,
Nếu đúng là ALPHABET thì letter[0] sẽ được thay thế theo thứ tự sắpxếp của các chữ cái trong biến MostCommon
Nếu không phải là ALPHABET thì sẽ không thực hiện
Hình 9: Tìm chữ cái tương ứng với tần số xuất hiện nhiều hay ít của từng chữ cái
- Kết quả:
Hình 10: Kết quả tìm chữ cái tương ứng.
- Tiếp theo sẽ tạo biến temp để tạo dictionary chứa khóa và giá trị tương ứng củakey hỗ trợ thuận tiện cho những công việc tiếp theo, qua dòng code:
temp = dict(zip(key.values(), key.keys())).
- Ta tạo một biến decry rỗng để chứa văn bản giải mã và chạy vòng lặp for duyệtcác phần tử trong message đã được in hoa lên, kiểm tra các phần tử đó có làALPHABET hay không:
Nếu đúng là ALPHABET thì tiếp tục kiểm tra ký tự đó có thuộc trongtemp.keys() (chứa các chữ cái khóa ví dụ theo các kết quả đã chạy trênthì temp.key() chứa [‘G’, ‘A’, ‘B’, ‘H’, ‘T’])
Nếu đúng là thuộc trong temp.keys() thì sẽ thêm vào decry giá
trị của chữ cái đó qua dòng code: decry.append(temp[char])
Nếu không đúng thì không thực hiện
Trang 20 Nếu không đúng là ALPHABET thì ta thêm nó decry qua dòng code:
decry.append(char)
Cuối cùng kết quả trả về biến decry chứa văn bản đã được giải mã
Hình 11: Giải mã văn bản đã mã hóa.
Hàm main() để nhận các giá trị đầu vào như plain_text và in ra kết quả chạy của quá trình mã hóa
Hình 12: Hàm main nhận giá trị và in kết quả.
- Kết quả chạy code theo các trường hợp:
Trường hợp cipher text có độ dài là 100 ký tự:
ciphertext: Jyd hnrds zod bugrhbgm cjzrdrjd kommxc ugmx yrdsxc Nohn bjym
bokx mxh r hnruc cop nxowxd foprds, suxxd hnxz fxof ixofh, hnxux wjrc couedxff gdhj couedxff forc iujgsnh brmm pxouf Fxxc Fj Copf bruzozxdh srwxd hjsxhnxu brfn hnoh mrsnhf yrhnjgh yrhnjgh rzosx Bugrh oijwx oaaxou bjuhn bjguhn kod'h bugrhbgm kuxxards mrsnhf bju rh hj Kommxc.
Yrhnjgh gf bujz brmm omfj o kohhmx zod fxh jdx ixofh foy bxzomx oru fxh jaxd kommxc suxohxu huxx gf pjg'mm yof prxmcrds jwxu erdc nxowxd fhouf.