You are on page 1of 16

ĐẠI HỌC QUỐC GIA TPHCM

TRƯỜNG ĐẠI HỌC BÁCH KHOA


Môn học: ĐẠI SỐ TUYẾN TÍNH

BÁO CÁO BÀI TẬP LỚN


Chủ đề 12: MẬT MÃ HILL TRONG BÀI TOÁN MÃ HOÁ

GVHD: Nguyễn Hữu Hiệp


Vũ Thị Bích Trâm
Lớp: L01
Nhóm số: 12
Danh sách thành viên:
STT Họ tên MSSV
1. Nguyễn Thị Minh Thư 2213405
2. Phùng Thị Ngọc Thư 2213409
3. Dương Gia Thuận 2213350
4. Thân Thiên Thanh Thuỵ 2213387
5. Hoàng Minh Tiến 2213451
6. Nguyễn Quang Trí 2213651
7. Huỳnh Hữu Trúc 2213717
8. Nguyễn Anh Trường 2213740
MỤC LỤC
PHẦN MỞ ĐẦU……………………………………………………………..2

NỘI DUNG CHÍNH…………………………………………………………3

I/MỘT SỐ VẤN ĐỀ CẦN LÀM RÕ LIÊN QUAN ĐẾN MÃ HILL…….3

1. Một số khái niệm liên quan…………………………………………..3


2. Ma trận khả nghịch trên vành Z27………………………………….3
3. Các bước để mã hoá và giải mã thông tin………………………...3-4
4. Các ví dụ………………………………………………………………4

II/MẬT MÃ HILL TRONG PHẦN MỀM MATLAB…………………….9

1. Sơ lược về phần mềm MATLAB…………………………………….9


2. Chương trình mật mã Hill trên MATLAB………………………...10
2.1 Các hoạt động của chương trình code………………………….10
2.2 Chương trình code MATLAB…………………………………..10
2.3 Chạy ví dụ trên phần mềm MATLAB………………………….11
2.4 Ứng dụng của mật mã trong cuộc sống………………………....11

III/KẾT LUẬN:……………………………………………………………..14

IV/TÀI LIỆU THAM KHẢO:……………………………………………..14

L01 | N12 |
1
PHẦN MỞ ĐẦU
Mã hoá Hill (được phát minh bởi Lester S. Hill năm 1929) là mật mã cổ điển
cho phép mã hoá hai, hay ba, hoặc nhiều hơn các ký tự (theo lý thuyết) tại cùng
thời điểm. Mã hoá Hill sử dụng hai lý thuyết toán hác cực kì quan trọng trong
ngành mật mã là Đại số Tuyến Tính và Số phức Mô-Đun.
Trong bài báo cáo này nhóm em sẽ trình bày tạo ra bản mã và giải bản mã bằng
phần mềm MATLAB

L01 | N12 |
2
NỘI DUNG CHÍNH
I/ MỘT SỐ VẤN ĐỀ CẦN LÀM RÕ LIÊN QUAN ĐẾN MÃ HILL
1. Một số khái niệm liên quan.
- Định hướng của thuật toán là lấy m tổ hợp tuyến tính (trên vành Z27) của m kí
tự chữ cái trong thông điệp khác (bản rõ), theo đó biến đổi thành m kí tự chữ
cái trong thông điệp đã được mã hoá (bản mã).
- Quá trình chuyển đổi từ bản rõ sang bản mã qua khoá gọi là mã hoá.
- Quá trình chuyển đổi ngược lại gọi là giải mã.
- Khoá sẽ được cho bởi một ma trận vuông cấp n khả nghịch.
- Số nguyên tố cùng nhau: hai số nguyên tố a và b được gọi là hai số nguyên
cùng nhau nếu ước chung lớn nhất của chúng bằng 1(UCLN(a,b)=1).
- Điều kiện cần và đủ để ma trận vuông A khả nghịch là det(A) khác 0. Khi đó
1
ma trận nghịch đảo của A là: 𝐴−1 = 𝑃 với 𝑃𝐴 là ma trận phù hợp của ma
det⁡(𝐴) 𝐴

trận A.
2. Ma trận khả nghịch trên vành Z27
Gọi A là tập các ma trận chìa khoá vuông cấp n khả nghịch trên Z27 khi định
thức của ma trận A sẽ là số nguyên tố cùng nhau với 27 hay nói cách khác là
det (A)≠0 và UCLN [det(A,27]=1.
3. Các bước để mã hoá và giải mã thông tin
* Để mã hoá thông tin:
Đầu tiên, ta chọn một ma trận chìa khoá A (là một ma trận vuông n×n khả
nghịch mà người gửi và người nhận đều biết trước. Lưu ý, định thức của ma
trận này phải là số nguyên tố cùng nhau với số 27.
Tiếp theo, chuyển đoạn tin nhắn cần gửi thành dãy số theo bảng quy ước như
sau:
a b c d e f g h i j k l m
1 2 3 4 5 6 7 8 9 10 11 12 13

L01 | N12 |
3
n o p q r s t u v w x y z -
14 15 16 17 18 19 20 21 22 23 24 25 26 0

Sau đó, chia dãy số thành từng nhóm n số và lập thành ma trận tin nhắn ta gọi
đó là ma trận B.
Thực hiện phép nhân: A×B=M
Ta có thể dùng máy tính bỏ túi để thực hiện phép nhân bằng cách chia ma trận
B thành những ma trận con có số cột nhỏ hơn hoặc bằng , rồi thực hiện phép
nhân ma trận A cho các ma trận con này. Thay thế các số ngoài giới hạn [0,26]
bởi các dãy dư của nó theo modun 27 (tức là ta chia cho 27 lấy phần dư và số
này luôn dương), ta thu được ma trận C.
Thay thế mỗi số trong ma trận C vừa tìm được bởi các kí tự trong bảng quy ước
trên, ta được thông điệp đã mã hoá.
*Giải mã thông tin:
Đầu tiên người nhận dùng bảng qui ước tìm lại ma trận mã hoá
Tiếp theo, thực hiện phép toán 𝑀 = 𝐴−1 × 𝐶
Cuối cùng, thay thế các số hạng nằm ngoài giới hạn [0,26] bởi các dãy dư của
nó theo modun 27, ta thu được ma trận M. Sử dụng bảng quy ước cho ma trận
M, ta tìm lại được thông tin ban đầu.
4. Các ví dụ
Để dễ hiểu hơn, ta xem các ví dụ dưới đây:
*Ví dụ 1: Mã hoá chữ GO_TO_CINEMA trình tự các bước thực hiện như
sau:
• Tách chữ GO_TO_CINEME thành các cụm có n kí tự ở đây ta chọn n=3
vì vậy có thể tách ra thành 4 cụm GO_, TO_, CIN, EMA
• Chuyển chữ GO_TO_CINEMA về dạng ma trận các kí tự cần được mã
hoá

L01 | N12 |
4
𝐺 𝑇 𝐶 𝐸
(𝑂 𝑂 𝐼 𝑀)
− − 𝑁 𝐴
• Theo bảng quy ước ta chuyển ma trận tin nhắn trên về dạng ma trận M
7 20 3 5
M= (15 15 9 13)
0 0 14 1
• Chọn ma trận chìa khoá A cần đáp ứng đủ các điều kiện:
• Phải là ma trận vuông cấp n để có thể nhân với ma trận M ở đây ta có n=3
• DET (A) ≠0. UCLN[DET(A),27]=1
1 2 3
• Ta chọn ma trận chìa khoá ở đây là ma trận 𝐴 = ( 2 5 7 ) đã đáp
−1 −3 −5
ứng đủ các điều kiện trên.
• Nhân ma trận chìa khoá với ma trận tin nhắn: B=A.M
37 50 63 34
B=⁡( 89 115 149 82 )
−52 −65 −100 −49
• Thay thế các số ngoài giới hạn [0,26] trong ma trận B bằng các dãy dư
10 23 9 7
của nó theo modun 27 ta thu được ma trận 𝐵1 = ( 8 7 14 1)
2 16 8 5
• Ta chuyển ma trận 𝐵1 về dạng chữ ta thu được ma trận các kí tự trong bản

𝐽 𝑊 𝐼 𝐺
(𝐻 𝐺 𝑁 𝐴)
𝐵 𝑃 𝐻 𝐸
• Ta gửi cho người nhận bản mã JHBWGPINHGAE và ma trận chìa khoá
• Để giải mã người nhận thực hiển các bước sau
- Dùng bản quy ước tìm lại ma trận 𝐵1
- Nhân ma trận 𝐴−1 với ma trận 𝐵1 : 𝐴−1 . 𝐵1 = 𝐶

34 101 30 32
C= (−12 −39 9 −14)
0 0 −13 1

L01 | N12 |
5
- Thay thế các số ngoài giới hạn [0,26] bằng các dãy dư của nó
theo modun 27 ta thu được ma trận M và hoàn tất việc giải
mã, ta tìm lại được thông tin ban đầu :
- GO_TO_CINEME
1 3
*Ví dụ 2: Mã hoá bản rõ LOVE_YOU bằng mật mã hill sử dụng khoá ( ),
2 5
sau đó giải mã.

• Ta có khoá K là ma trận 2×2 -> n=2


• Bản rõ LOVE_YOU được chia làm các cụm 2 chữ cái: LO, VE, _Y, OU
• Chuyển chữ LOVE_YOU về dạng ma trận các kí tự cần được mã hoá
𝐿 𝑉 − 𝑂
( )
𝑂 𝐸 𝑌 𝑈
• Theo bảng quy ước ta chuyển ma trận tin nhắn trên về dạng ma trận
12 22 0 15
𝑀=( )
15 5 25 21
• Nhân ma trận chìa khoá với Ma trận tin nhắn:
57 37 75 78
B=A.M=( )
99 69 125 135
• Thay thế các số ngoài giới hạn [0,26] trong ma trận B bằng các dãy dư
3 10 21 24
của nó theo modun 27 ta thu được ma trận 𝐵1 = ( )
18 15 17 0
• Ta chuyển ma trận 𝐵1 về dạng chữ ta thu được ma trận các kí tự trong bản

𝐶 𝐽 𝑈 𝑋
( )
𝑅 𝑂 𝑄 −
• Ta thu được mật mã CRJOUQX_
- Để giải mã, dùng bản quy ước tìm lại ma trận 𝐵1
- Nhân ma trận 𝐴−1 với ma trận 𝐵1 :
39 −5 −54 −120
- 𝐴−1 . 𝐵1 = 𝐶 = ( )
−12 5 25 48
- Thay thế các số ngoài giới hạn [0,26] bằng các dãy dư của nó theo
modun 27 ta thu được ma trận M và hoàn tất việc giải mã, ta tìm lại
được thông tin ban đầu :
- LOVE_YOU

L01 | N12 |
6
*Ví dụ 3: Mã hoá bản rõ SAI_GON_ bằng hệ mã Hill sử dụng khoá A là
1 3
( ) Sau đó giải mã thu được
2 5
• Mã hoá dòng SAI_GON_
• Ta có khoá K là ma trận 2×2 -> n=2
• Bản rõ SAI_GON_ được chia làm các cụm 2 chữ cái: SA, I_, GO, N_
• Dùng bảng quy ước để chuyển đoạn thông tin SAI_GON_ về dạng ma
trận các kí tự mã hoá:
𝑆 𝐼 𝐺 𝑁
M=( )
𝐴 − 𝑂 −
• Theo bảng quy ước ta chuyển ma trận tin nhắn trên về dạng ma trận
19 9 7 14
( )
1 𝑂 15 𝑂
• Nhân ma trận chìa khoá với Ma trận tin nhắn: B=A.M
22 9 52 14
𝐵=( )
43 18 89 28
• Thay thế các số ngoài giới hạn [0,26] trong ma trận B bằng các dãy dư
của nó theo modun 27 ta thu được ma trận
22 9 25 14
𝐵1 = ( )
16 18 8 1
• Ta chuyển ma trận 𝐵1 về dạng chữ ta thu được ma trận các kí tự trong bản

𝑉 𝐼 𝑌 𝑁
( )
𝑃 𝑅 𝐻 𝐴
• Ta thu được mật mã: VPIRYHNA
• Để giải mã, người nhận thực hiện các bước sau
- Dùng bản quy ước tìm lại ma trận 𝐵1
- Nhân ma trận 𝐴−1 với ma trận 𝐵1

1 3 −1 5 9 25 13
𝐴−1 . 𝐵1 = ( ) ( )
2 5 16 18 8 1

23 9 −101 −62
=⁡( )
−6 0 42 25
• Thay thế các số ngoài giới hạn [0,26] bằng các dãy dư của nó theo modun
27 ta thu được ma trận M. Sử dụng bảng quy ước cho ma trận M, ta tìm lại
được thông tin ban đầu : SAI_GON_

L01 | N12 |
7
*Ví dụ 4: Mã hoá bản rõ BK_FAN_CLUB_ bằng mật mã Hill sử dụng khoá
1 2 3
A= ( 2 5 7 ), sau đó giải mã.
−1 −3 −5
• Ta có khoá A là ma trận 3x3 -> n=3
• Bản rõ BK_FAN_CLUB_ được chia thành các cụm 3 chữ cái: BK_,
FAN, _CL, UB_
• Chuyển chữ BK_FAN_CLUB_ về dạng ma trận các kí tự cần được mã
hoá
𝐵 𝐹 − 𝑈
(𝐾 𝐴 𝐶 𝐵 )
− 𝑁 𝐿 −
• Theo bảng quy ước ta chuyển ma trận tin nhắn trên về dạng ma trận M
2 6 0 21
M= (11 1 3 2)
0 14 12 0
• Nhân ma trận chìa khoá với ma trận tin nhắn : B=A.M
24 50 42 25
𝐵 = ( 59 115 99 52 )
−35 −75 −69 −27
• Thay thế các số ngoài giới hạn [0,26] bằng các dãy dư của nó theo modun
24 23 15 25
27 ta thu được ma trận 𝐵1 =( 5 7 18 25)
19 6 12 0
• Ta chuyển ma trận 𝐵1 về dạng chữ ta thu được ma trận các kí tự trong bản
𝑋 𝑊 𝑂 𝑌
mã (𝐸 𝐺 𝑅 𝑌 )⁡
𝑆 𝐹 𝐿 −
• Ta thu được mật mã XESWGFORLYY_
• Để giải mã dùng bản quy ước để tìm lại ma trận 𝐵1
• Nhân ma trận 𝐴−1 với ma trận 𝐵1 : 𝐴−1 . 𝐵1 = 𝐶
110 91 54 75
𝐶 = (−43 −49 3 −25)
0 10 −15 0
• Thay thế các số ngoài giới hạn [0,26] bằng các dãy dư của nó theo modun
27 ta thu được ma trận M và hoàn tất việc giải mã.

L01 | N12 |
8
II/ MẬT MÃ HILL TRONG PHẦN MỀM MATLAB
1.Sơ lợc về phần mềm Matlab
- Matlab (viết tắt của matrix laborary) là phần mềm
cung cấp môi trường tính toán số và lập trình
- Nó cho phép theo tác với ma trận, vẽ biểu đồ với
hàm và số liệu, hiện thực thuật toán, tạo ra giao
diện người dùng, bao gồm C,C++, Java và Fortan;
phân tích dữ liệu, phát triển thuật toán, tạo các kiểu
mẫu và ứng dụng.
- Nó là công cụ hỗ trợ đắc lực cho bạn trong việc tính toán, vẽ các hình, vẽ biểu
đồ thông dụng cả thực thi các phương pháp tính toán.
- Trên nền tảng và các thuật toán có trong Matlab, ta ứng dụng vào việc tạo một
chương trình mã hoá mật mã Hills (Phiên bản Matlab được sử dụng)

L01 | N12 |
9
2. Chương trình mật mã Hill trên Matlab.
2.1. Cách hoạt động của chương trình code

2.2. Chương trình code Matlab


2.2.1. Một số lệnh được dùng trong bản code
Lệnh Ý nghĩa

Double Chuyển đổi chuỗi sang số thập phân với độ chính xác kép (ASCII)

Reshape Sửa lại cấu trúc của một ma trận (sửa lại số hàng, cột,…)

Strrep Tìm kiếm và thay thế chuỗi string

Mod Thay thế phần dư theo modul X

Char Chuyển đổi số thập phân (ASCII) về lại dạng chuỗi kí tự

Inv Tính ma trận nghịch đảo của ma trận X

L01 | N12 |
10
For Thực hiện lặp lại một hay nhiều câu lệnh với số lần định trước

Clc Xoá cửa sổ lệnh

Clear all Xoá tất cả các biến trong workspace

Close all Đóng tất cả các cửa sổ

Input Nhập dữ liệu từ bàn phím cho biến

fprintf Hiển thị đối tượng

disp Hiển thị các biến

2.2.2. Bản code đầy đủ:


clc
clear all
close all
msg_letterfirst = input('Nhap thong diep can ma hoa: ', 's');
msg_letter = strrep(msg_letterfirst,'_','@');
i=1;
j=1;
R=input(sprintf('Ma trận chìa khoá cấp: ')); %hàng
C=R; %cột
for i=1:R
for j=1:C
x(i,j)=input(sprintf('Nhập thành phần [%d][%d]=',i,j));
end
end
Matrix=reshape(x,R,C);
K= Matrix;
a_vector = double(msg_letter)-64;
b_vector = reshape(a_vector,R,length(msg_letter)/R);
k1_vector=K*b_vector; k2_vector=mod(k1_vector,27)+64;
C2 = reshape(k2_vector,1,length(msg_letter));
C3=char(C2); C4= strrep(C3,'@','_');
fprintf('Bản mã hóa:');
disp(C4);
msg_letterafter = input('Nhập thông điệp cần giải mã: ', 's');
msg_letternext = strrep(msg_letterafter,'_','@');

L01 | N12 |
11
Kn = inv(K); c_vector = double(msg_letternext)-64;
d_vector = reshape(c_vector,R,length(msg_letter)/R);
g1_vector = Kn*d_vector; g2_vector = mod(g1_vector,27)+64;
D2 = reshape(g2_vector,1,length(msg_letternext));
D3 = char(D2); D4 = strrep(D3,'@','_');
fprintf('Thông điệp nhận được:');
disp(D4);

2.3 Hình ảnh đoạn code trong Matlab


VD1: Mã hoá thông điệp : GO_TO_CINEMA

L01 | N12 |
12
VD2: Mã hoá thông điệp: LOVE_YOU

VD3: Mã hoá thông điệp: SAI_GON_

L01 | N12 |
13
VD4: Mã hoá thông điệp: BK_FAN_CLUB_

L01 | N12 |
14
2.4. Ứng dụng của mật mã trong đời sống
• Ứng dụng mật mã Hill trong phương tiện hình văn bản rất được khuyến khích
vì tốc độ mã hoá và giải mã nhanh. Phương pháp này rất tốt trong việc bảo
mật giữ liệu được truyền trên một mạng mở
• Trong quân sự:
- Hỗ trợ việc giao tiếp liên lạc giữa các đơn vị
- Tiện cho việc giữ bí mật chiến lực
• Trong trao đổi thư tín:
- Tránh để bị lộ những thông tin tuyệt mật
- Là công cụ ngôn ngữ hữu dụng
• Trong bảo mật an ninh:
- Tránh để những thông tin tuyệt mật rơi vào tay kẻ có mưu đồ xấu
- Nâng cao hiệu suất bảo mật
• Trong bảo mật cá nhân:
- Tránh những tài liệu mật thông tin cá nhân bị lộ ra ngoài.
- Tránh các tình trạng mạo danh lừa gạt người khác.
• Trong việc bảo mật tin nhắn văn bản:
Bảo mật tin nhắn văn bản giúp người dùng:
- Ngăn chặn gian lận hoặc phát hiện gian lận trong một hệ thống dựa
trên thông tin
- Các thông tin phải được bảo mật để không bị đe doạ
- Kĩ thuật mật mã có thể ngăn chặn hành vi trộm cắp dữ liệu.
III/ KẾT LUẬN
• Môn Đại số tuyến tính có tính thiết thực, được ứng dụng trong nhiều lĩnh
vực khác nhau.
• Mật mã Hill có nhiều ứng dụng trong đời sống và trong mã hoá thông tin.
• Dựa vào phần mềm MATLAB có thể viết chương trình mã hoá và giải mã
thông điệp.
IV/ TÀI LIỆU THAM KHẢO
1/ Giáo trình Đại số tuyến tính- Đặng Văn Vinh, NXBĐHQGTPHCM, 2019
2/ Tham khảo bài giảng trên Youtube của cô Bùi Thị Thuỳ
3/ Ngôn ngữ lập trình khác :https//www.geeksforgeeks.org/hill-cipher/
4/ Tham khảo các thuật toán tại: https//www.mathworks.com

L01 | N12 |
15

You might also like