You are on page 1of 38

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN

KHOA KHOA HỌC VÀ KỸ THUẬT THÔNG TIN

NHẬP MÔN BẢO ĐẢM VÀ AN NINH THÔNG TIN


BÁO CÁO THỰC HÀNH LAB04 – TÌM HIỂU VÀ
MÔ PHỎNG CÁC THUẬT TOÁN MÃ HOÁ

Giảng viên hướng dẫn:

TS. Nguyễn Tấn Cầm

CN. Phạm Nhật Duy

Lớp: IE105.N22.1

Sinh viên thực hiện:

Vũ Phạm Ngọc Tân MSSV: 19520930

Nguyễn Thanh Ngân MSSV: 20520250

Nguyễn Hoàng Huy MSSV: 20520542

Huỳnh Sinh Trường MSSV: 21521600

Trần Ngô Gia Bảo MSSV: 21521864

Nguyễn Võ Hoàng Huy MSSV: 21522162


TP. Hồ Chí Minh – 05/2023

MỤC LỤC

Chương 1. Cơ Sở Lý Thuyết

1.1. Giới thiệu các loại thuật toán mã hóa dữ liệu

1.2. Phân loại các thuật toán mã hoá dữ liệu

1.2.1. Mã hóa cổ điển

1.2.2. Mã hóa một chiều

1.2.3. Mã hóa đối xứng

1.2.4. Mã hóa bất đối xứng

1.3. Một số thuật toán mã hoá phổ biến

1.3.1. Thuật toán Vigenere

1.3.2. Thuật toán Substitution

1.3.3. Thuật toán AES(Advanced Encryption Standard)

1.3.4. Thuật toán RSA

1.3.5. Thuật toán Hill

1.3.6. Thuật toán Permutation(Hoán vị)

Chương 2. Thực Hiện Thuật Toán Trên Cryptool

2.1. Thuật toán Vigenere

2.2. Thuật toán Substitution

2.3. Thuật toán AES

2.4. Thuật toán RSA

2.5. Thuật toán Hill

2.6. Thuật toán Permutation

Chương 3. Kết Luận

Tài Liệu Tham Khảo


NỘI DUNG THỰC HIỆN

STT Thuật toán Đánh giá

1 Vigenere Hoàn thành

2 Substitution Hoàn thành

3 AES Hoàn thành

4 RSA Hoàn thành

5 Hill Hoàn thành

6 Permutation Hoàn thành


Chương 1. Cơ Sở Lý Thuyết
1.1. Giới thiệu các loại thuật toán mã hóa dữ liệu
Mã hóa thực chất là một phương pháp biến đổi thông tin dưới dạng
bình thường trở nên không thể hiểu được nếu không có phương tiện giải
mã. Hay nói một cách đơn giản và dễ hiểu hơn thì mã hóa chính là cách
xáo trộn dữ liệu một cách lộn xộn mà chỉ 2 bên trao đổi thông tin mới có
thể hiểu.

Về mặt kỹ thuật, mã hóa là quá trình chuyển đổi cấu trúc văn bản thuần
túy mà con người có thể dễ dàng đọc được nhưng không thể hiểu được nội
dung là gì. Cấu trúc này nếu hiểu theo thuật ngữ kỹ thuật gọi là bản mã.
Lúc này toàn bộ thông tin văn bản ban đầu sẽ chuyển sang một dạng ngôn
ngữ khác không giống với văn bản ban đầu.

Dữ liệu mã hóa có thể được thay đổi xuất hiện một cách ngẫu nhiên
với các cấu trúc khác nhau. Dữ liệu này chỉ có người sở hữu phương tiện
mã hóa mới có thể hiểu được. Mã hóa dữ liệu muốn thực hiện phải sử
dụng khóa mã hóa. Khóa mã hóa có thể là một tập hợp các giá trị toán học
mà người gửi và người nhận tin nhắn được mã hóa đều biết.

Thuật toán mã hóa là một thuật toán để mã hóa thông tin của chúng ta,
biến đổi thông tin từ dạng rõ sang dạng mờ, để ngăn cản việc đọc trộm nội
dung của thông tin. Thông thường các thuật toán sử dụng một hoặc nhiều
key (Một chuỗi chìa khóa để mã hóa và giải mã thông tin) để mã hóa và
giải mã (Ngoại trừ những thuật toán cổ điển). Bạn có thể coi key này như
một cái password để có thể đọc được nội dung mã hóa. Người gửi sẽ dùng
key mã hóa để mã hóa thông tin, và người nhận sẽ sử dụng key giải mã để
giải mã thông tin. Chỉ những người nào có key giải mã mới có thể đọc
được nội dung. Nhưng đôi khi "kẻ thứ ba" không có key giải mã vẫn có
thể đọc được thông tin, bằng cách phá vỡ thuật toán. Và có một nguyên tắc
là bất kỳ thuật toán mã hóa nào cũng đều có thể bị phá vỡ. Do đó không có
bất kỳ thuật toán mã hóa nào được coi là an toàn mãi mãi.

1
1.2. Phân loại các thuật toán mã hoá dữ liệu
Có thể phân chia các thuật toán mã hóa thành 4 loại:

1.2.1. Mã hóa cổ điển


Đây là phương pháp mã hóa cổ xưa nhất, và hiện nay nó ít thông dụng
hơn so với các phương pháp khác. Ý tưởng của phương pháp này rất đơn
giản đó là bên A mã hóa thông tin bằng thuật toán mã hóa cổ điển, và bên
B giải mã thông tin dựa vào thuật toán của bên A mà không dùng đến bất
kì key nào. Do đó, độ an toàn của thuật toán sẽ chỉ dựa vào độ bí mật của
thuật toán, vì chỉ cần ta biết được thuật toán mã hóa, ta sẽ có thể giải mã
được thông tin.

Hình 1.2.1 Mô hình mã hóa cổ điển

1.2.2. Mã hóa một chiều


Đôi khi ta chỉ cần mã hóa thông tin chứ không cần giải mã thông tin,
khi đó ta sẽ dùng đến phương pháp mã hóa một chiều (Chỉ có thể mã hóa
chứ không thể giải mã). Thông thường phương pháp mã hóa một chiều sử
dụng một hàm băm (hash function) để biến một chuỗi thông tin thành một
chuỗi hash có độ dài nhất định. Ta không có bất kỳ cách nào để khôi phục
(hay giải mã) chuỗi hash về lại chuỗi thông tin ban đầu.

Đặc điểm của hash function là khi thực hiện băm hai chuỗi dữ liệu như
nhau, dù trong hoàn cảnh nào thì nó cũng cùng cho ra một chuỗi hash duy
nhất có độ dài nhất định và thường nhỏ hơn rất nhiều so với chuỗi gốc, và
hai chuỗi thông tin bất kỳ dù khác nhau rất ít cũng sẽ cho ra chuỗi hash

2
khác nhau rất nhiều. Do đó hash function thường được sử dụng để kiểm
tra tính toàn vẹn của dữ liệu.

Hình 1.2.2 Mô hình mã hóa một chiều

1.2.3. Mã hóa đối xứng


Mã hóa đối xứng (Hay còn gọi là mã hóa khóa bí mật) là phương
pháp mã hóa mà key mã hóa và key giải mã là như nhau (Sử dụng
cùng một secret key để mã hóa và giải mã). Đây là phương pháp
thông dụng nhất hiện nay dùng để mã hóa dữ liệu truyền nhận giữa
hai bên. Vì chỉ cần có secret key là có thể giải mã được, nên bên gửi
và bên nhận cần làm một cách nào đó để cùng thống nhất về secret
key.
Các thuật toán mã hóa đối xứng thường gặp: DES, AES…

Hình 1.2.3 Mô hình mã hóa đối xứng

1.2.4. Mã hóa bất đối xứng


Mã hóa bất đối xứng (Hay còn gọi là mã hóa khóa công khai) là
phương pháp mã hóa mà key mã hóa (lúc này gọi là public key –
khóa công khai) và key giải mã (lúc này gọi là private key – khóa bí

3
mật) khác nhau. Nghĩa là key ta sử dụng để mã hóa dữ liệu sẽ khác
với key ta dùng để giải mã dữ liệu. Tất cả mọi người đều có thể biết
được public key (kể cả hacker), và có thể dùng public key này để
mã hóa thông tin. Nhưng chỉ có người nhận mới nắm giữ private
key, nên chỉ có người nhận mới có thể giải mã được thông tin.

Để thực hiện mã hóa bất đối xứng thì:

- Bên nhận sẽ tạo ra một cặp khóa (public key và private key). Bên nhận sẽ giữ
lại private key và truyền cho bên gửi public key. Vì public key này là công khai
nên có thể truyền tự do mà không cần bảo mật.
- Bên gửi trước khi gửi dữ liệu sẽ mã hóa dữ liệu bằng thuật toán mã hóa bất đối
xứng với key là public key từ bên nhận.
- Bên nhận sẽ giải mã dữ liệu nhận được bằng thuật toán được sử dụng ở bên gửi,
với key giải mã là private key.
1.3. Một số thuật toán mã hoá phổ biến
1.3.1. Thuật toán Vigenere
Mật mã Vigenere là một phương pháp mã hóa văn bản bằng cách sử
dụng xen kẽ một số phép mã hoá caesar khác nhau dựa trên các chữ
cá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.

Để mã hoá, ta dùng một hình vuông Vigenere. Nó gồm 26 hàng, mỗi


hàng dịch về bên trái một bước so với hàng phía trên, tạo thành 26 bảng
mã caesar.

4
Hình 1.3.1 Bảng mật mã của Vigenere

Ta sẽ xét một ví dụ để hiểu rõ hơn

Cho một chuỗi Plaintext P: “INFORMATION TECHNOLOGY”.


Hãy mã hoá chuỗi biết rằng Keyword là “UNIVERSITY”.

Bước 1: Điền Keyword “UNIVERSITY” dưới chuỗi P và viết nó


lặp đi lặp lại nhiều lần cho đến hết chuỗi.

I N F O R M A T I O N T E C H N O L O G Y

U N I V E R S I T Y U N I V E R S I T Y U
Hình 1.3.2 Minh hoạ cách tạo khoá từ từ khoá

Bước 2: Lấy một chữ cái ở hàng 2 ứng với chữ cái ở hàng 1 và dựa
vào bảng mật mã Vigenere(Hình 1.3.1) để tìm ra chữ cái tương ứng.

- I-U(cột I-hàng U) => C


- N-N(cột N-hàng N) => A
- F-I(cột F-hàng I) => N
- O-V(cột O-hàng V) => J
- R-E(cột R-hàng E) => V
- M-R(cột M-hàng R) => D

5
- A-S(cột A-hàng S) => S
- T-I(cột T-hàng I) => B
- I-T(cột I-hàng T) => B
- O-Y(cột O-hàng Y) => M
- N-U(cột N-hàng U) => H
- T-N(cột T-hàng N) => G
- E-I(cột E-hàng I) => M
- C-V(cột C-hàng V) => X
- H-E(cột H-hàng E) => L
- N-R(cột N-hàng R) => E
- O-S(cột O-hàng S) => G
- L-I(cột L-hàng I) => T
- O-T(cột O-hàng T) => H
- G-Y(cột G-hàng Y) => E
- Y-U(cột Y-hàng U) => S

Bước 4: Kết luận

Plaintext: INFORMATION TECHNOLOGY

Ciphertext: CANJVDSBBMH GMXLEGTHES

1.3.2. Thuật toán Substitution


Mã thay thế (Substitution Cipher) là hệ mã trong đó mỗi kí tự của bản
rõ được thay thế bởi một ký tự tương ứng trong bản mã theo một cách nào
đó.

Ta sẽ xét một ví dụ để hiểu rõ hơn

Cho một chuỗi Plaintext P: “INFORMATION TECHNOLOGY”.


Hãy mã hoá chuỗi biết rằng keyword là “UIT”.

Để mã hoá ta cần sử dụng bảng mixed alphabets có dạng như sau:

Plaintext alphabet ABCDFGHIJKLMNOPQRSTUVWXYZ

Ciphertext alphabet

6
Ciphertext alphabet: được tạo bằng cách viết từ khoá keyword ra
trước tiên, loại bỏ các chữ cái bị lặp lại, sau đó viết các chữ cái còn lại
trong bảng chữ cái theo thứ tự tăng dần.

Ở đâu ta có keyword là “UIT” => Ciphertext alphabet là:


UITABCDEFGHJKLMNOPQRSVWXYZ.

Ta có mixed alphabets như sau:

Plaintext ABCDEFGHIJKLMNOPQRSTUVWXYZ
alphabet

Ciphertext UITABCDEFGHJKLMNOPQRSVWXYZ
alphabet

Dựa vào bảng này ta sẽ so sánh với đoạn message cần mã hoá:

INFORMATION TECHNOLOGY

Thay thế:

I=F, N=L, F=C, O=M, R=P, M=K, A=U, T=R, E=B, C=T, H=E,
N=L, L=J, G=D, Y=Y

Kết luận :

Plaintext: INFORMATION TECHNOLOGY

Ciphertext: FLCMPKURFML RBTELMJMDY

1.3.3. Thuật toán AES(Advanced Encryption Standard)


Thuật toán AES(advanced encryption standard) hay tiêu chuẩn mã hoá
tiến tiến.

AES làm việc với các khối dữ liệu 128bit và độ dài khóa 128bit, 192bit
hoặc 256bit. Các khóa mở rộng sử dụng trong chu trình được tạo ra bởi
thủ tục sinh khóa Rijndael.

Hầu hết các phép toán trong thuật toán AES đều thực hiện trong một trường
hữu hạn của các byte. Mỗi khối dữ liệu đầu vào 128bit được chia thành 16 byte,
có thể xếp thành 4 cột, mỗi cột 4 phần tử hay một ma trận 4x4 của các byte, nó
gọi là ma trận trạng thái.
7
Tùy thuộc vào độ dài của khóa khi sử dụng 128bit, 192bit hay 256bit mà
thuật toán được thực hiện với số lần lặp khác nhau.

- Vòng lặp chính của AES thực hiện các hàm sau:
- SubBytes(): Thay thế các byte dữ liệu (trạng thái).
- ShiftRows(): Dịch vòng dữ liệu (trạng thái).
- MixColumns(): Trộn cột dữ liệu (trạng thái vào).
- AddRoundKey(): Chèn khoá vòng

Hình 1.3.3. Mô hình Mã hoá và Giải mã của AES chi tiết

SubBytes() hàm này sẽ thay thế mỗi byte riêng rẽ của state Sr, c bằng
một giá trị mới S’r, c sử dụng bảng thay thế (S-box).

Hình 1.3.4. Hình minh hoạ SubBytes()

8
Hình 1.3.5 Bảng S-box

Bảng S-box: bảng thay thế phi tuyến, được sử dụng trong một số phép
thay thế byte và trong quy trình mở rộng khóa, nhằm thực hiện một phép
thay thế 1-1 đối với giá trị mỗi byte.

ShiftRow() các byte trong ba hàng cuối cùng của state được dịch
chuyển theo chu kỳ các byte trong mỗi hàng theo một offset(độ lệch) nhất
định. Cụ thể:

- Hàng đầu tiên sẽ không bị thay đổi.


- Hàng thứ 2 dịch qua trái 1 lần.
- Hàng thứ 3 dịch qua trái 2 lần.
- Hàng thứ 4 dịch qua trái 3 lần

Hình 1.3.6 Hình minh hoạ ShiftRows

MixColumns() tính toán trên từng cột của state. Trong hàm này mỗi
cột được biến đổi bằng cách sử dụng một ma trận cố định (ma trận trái
được nhân với một cột sẽ cho giá trị mới của cột trong state).

9
Hình 1.3.7 Hình minh hoạ MixColumns

AddRoundKey() trong hàm này, mỗi byte của state được kết hợp với
một byte của round subkey bằng phép toán XOR.

Hình 1.3.8. Hình minh hoạ AddRoundKey

Ta sẽ xét một ví dụ để hiểu rõ hơn

Plaintext: Tow One Nine Tow

Chuyển sang mã Hex: 54 77 6F 20 4F 6E 65 20 4E 69 6E 65 20 54


77 6F

Key: That’s my Kung Fu

Chuyển sang mã Hex: 54 68 61 74 73 20 6D 79 20 4B 75 6E 67 20


46 75

10
Như ta thấy chuỗi ký tự có 128bit nên sẽ có 10 round vòng lặp và các
khoá được tạo sau mỗi vòng lặp là:

Round 0: 54 68 61 74 73 20 6D 79 20 4B 75 6E 67 20 46 75

Round 1: E2 32 FC F1 91 12 91 88 B1 59 E4 E6 D6 79 A2 93

Round 2: 56 08 20 07 C7 1A B1 8F 76 43 55 69 A0 3A F7 FA

Round 3: D2 60 0D E7 15 7A BC 68 63 39 E9 01 C3 03 1E FB

Round 4: A1 12 02 C9 B4 68 BE A1 D7 51 57 A0 14 52 49 5B

Round 5: B1 29 3B 33 05 41 85 92 D2 10 D2 32 C6 42 9B 69

Round 6: BD 3D C2 B7 B8 7C 47 15 6A 6C 95 27 AC 2E 0E 4E

Round 7: CC 96 ED 16 74 EA AA 03 1E 86 3F 24 B2 A8 31 6A

Round 8: 8E 51 EF 21 FA BB 45 22 E4 3D 7A 06 56 95 4B 6C

Round 9: BF E2 BF 90 45 59 FA B2 A1 64 80 B4 F7 F1 CB D8

Round 10: 28 FD DE F8 6D A4 24 4A CC C0 A4 FE 3B 31 6F 26

Tiếp theo ta sẽ thực thi 4 hàm cho từng round:

AddRoundKey():

Hình 1.3.9 AddRoundKey.

11
SubByte(): chuyển các phần tử qua bảng S-box 16x16 để có được một
mảng trạng thái hoàn toàn mới.

Hình 1.3.10 SubByte.

ShiftRows():

Hình 1.3.11 ShiftRows.

Mix Columns()

Hình 1.3.12 MixColumns.

Add Round Key():


12
Hình 1.3.13 Kết quả

Output sau khi kết thúc round 1 là:

58 47 08 8B 15 B6 1C BA 59 D4 E2 E8 CD 39 DF CE

Và tương tự sau khi chạy 10 round thì chúng ta sẽ có Ciphertext là:

29 C3 50 5F 57 14 20 F6 40 22 99 B3 1A 02 D7 3A

1.3.4. Thuật toán RSA


Trong mật mã học, RSA là một thuật toán mật mã hóa khóa công khai.
Đây là thuật toán đầu tiên phù hợp với việc tạo ra chữ ký điện tử đồng thời
với việc mã hóa. Nó đánh dấu một sự tiến bộ vượt bậc của lĩnh vực mật
mã học trong việc sử dụng khóa công cộng. RSA đang được sử dụng phổ
biến trong thương mại điện tử và được cho là đảm bảo an toàn với điều
kiện độ dài khóa đủ lớn.

Với thuật toán RSA ta cần tạo ra cho mình cặp khoá là public key và
private key theo các bước sau:

1. Chọn 2 số nguyên tố lớn p và q với p ≠ q, lựa chọn ngẫu nhiên


và độc lập.
2. Tính n = pq, n sẽ được dùng làm modulus trong cả public key
và private key.

13
3. Tính giá trị hàm Euler ∅(𝑛) = (𝑝 − 1)(𝑞 − 1). - Chọn số tự nhiên
e sao cho 1 < e < ∅(𝑛) và có số nguyên tố cùng nhau với ∅(𝑛).
Số nguyên tố cùng nhau tức là ước chung lớn nhất của 2 số là 1.
4. Tính d sao cho de≡1 (mod ∅(𝑛)), d được gọi là số nghịch đảo
modulo của e.

Giả sử ta có plaintext là M, ta cần chuyển nó thành một số tự nhiên m


trong khoảng (0, n) sao cho m,n nguyên tố cùng nhau. Tiếp theo, ta sẽ mã
hoá m thành c theo công thức sau:

c = me mod n

Sau đó giá trị c sẽ được chuyển cho người nhận. Ở phía người nhận, có
thể giải mã từ c để lấy được m khi biết khoá private d:
d
c ≡ ( m ) ≡ m (mod n)
d e ed

Ta sẽ xét một ví dụ để hiểu rõ hơn

Ta có: p = 61, q = 53 và m có giá trị là 123 , d = 2753

n = pq = 3233

Chọn e = 17 vì UCLN (3233, 17) = 1

Public key là cặp (e, n).

Khóa bí mật là d.

Hàm mã hóa là: encrypt(m) = me mod n =m17 mod 3233 với m là


plaintext.

Hàm giải mã là: decrypt(c) = c d mod n = c 2753mod 3233 với c là


ciphertext.

Để mã hóa văn bản có giá trị 123, ta thực hiện phép tính:

encrypt(123) = 12317 mod 3233 = 885

Để giải mã văn bản có giá trị 992, ta thực hiện phép tính:

decrypt(885) = 8852753 mod 3233 = 123

14
1.3.5. Thuật toán Hill
Tác giả mã này là Lester S. Hill năm 1929. Mã này cũng được thực
hiện trên từng bộ m ký tự, mỗi ký tự trong bản mã là tổ hợp của m ký tự
trong bản rõ. Cụ thể là tổ hợp tuyến tính này là một ma trận k ∈Z26m×m.
Để dịch ngược lại mã từ bản mã sang bản rõ, thì ma trận k phải có ma trận
nghịch đảo, tức là khi và chỉ khi định thức của k, ký hiệu là det(k) nguyên
tố cùng nhau với m.

Mã Hill là một mật mã thay thế đa đồ thị(polygraphic substitution


cipher) dựa trên đại số tuyến tính(linear algebra). Mỗi chữ cái được biểu
diễn bằng một số theo modulo 26.

Để mã hóa một tin nhắn, mỗi khối gồm n chữ cái (được coi là một
vectơ n thành phần) được nhân với ma trận n × n khả nghịch, theo modulo
26. Để giải mã tin nhắn, mỗi khối được nhân với nghịch đảo của ma trận
được sử dụng cho mã hóa.

Ta sẽ xét một ví dụ để hiểu rõ hơn

Ta sẽ mã hoá một đoạn message là ‘ACT’ (n=3), có Key


GYBNQKURP.

- Đầu tiên ta sẽ chuyển key về số theo modulo 26 ta có 6 24 1 13 16


10 20 17 15
- Ta có n = 3, ta sẽ lập ma trận 3x3(nxn) với key phía trên ta được:

- Tiếp theo từ đoạn message ‘ACT’ ta có vectơ:

- Nhân ma trận 3x3 với vectơ. Vectiơ được mã hoá ra là :

15
- Từ bảng modulo 26 ta sẽ có ciphertext là ‘POH’.
- Để giải mã ta sẽ biến ciphertext thành một vectơ rồi nhân với nghịch
đảo ma trận khoá

- Lúc này ta đã có đoạn message ban đầu là ‘ACT’.


1.3.6. Thuật toán Permutation(Hoán vị)
Ký hiệu S(m) là tập hợp tất cả các hoán vị của tập hợp {1, 2, ..., m}.
Khi đó mã hoán vị sẽ thay đổi ký tự trong từng đoạn độ dài m.

Mã hoá chuỗi plaintext: “THIS IS PERMUTATION” với khoá Key


“CIPHER”

Ta có key CIPHER có độ dài là 6 và hoán vị được xác định theo thứ tự


bảng chữ cái của các chữ cái trong từ khoá. Trong trường hợp này , thứ tự
sẽ là 1 4 5 3 2 6, từ đó ta lập bảng như sau :

C I P H E R

1 4 5 3 2 6

T H I S I S

P E R M U T

A T I O N

In các cột theo thứ tự 123456 ta được ciphertext:

TPA HET IRI SMO IUN ST

16
Chương 2. Thực Hiện Thuật Toán Trên Cryptool
2.1. Thuật toán Vigenere
Ta có một đoạn Plaintext P là : “INFORMATION TECHNOLOGY”
được lưu trong file Plaintext.txt và keyword là “UNIVERSITY”

Hình 2.1.1 Đoạn plaintext

Tiến hành mã hoá:

- Mở file cần mã hoá(Plaintext.txt).


- Tiếp theo ta chọn Encrypt/ Decrypt => Symmetric (classic) =>
Vigenere.

Hình 2.1.3 Chọn thuật toán Vigenere

17
- Sau đó, ta sẽ tiến hành nhập keyword để thực hiện mã hoá.

Hình 2.1.4 Nhập Keyword để mã hoá

- Chọn encrypt để mã hoá đoạn text.


- Kết quả sau khi mã hoá bằng thuật toán Vigenere trên phần
mềm Cryptool. Ta sẽ có được chuỗi Ciphertext như sau.

Hình 2.1.5 Kết quả sau khi Encrypt

Tiến hành giải mã:

- Đầu tiên ta chọn Encrypt/ /Decrypt => Symmetric (classic) =>


Vigenere.

Hình 2.1.6 Chọn thuật toán Vigenere


18
- Sau đó, ta sẽ tiến hành nhập keyword để thực hiện giải mã.
- Ở đây ta sẽ nhập keyword như ban đầu là “UNIVERSITY”.

Hình 2.1.7 Nhập Keyword để giải mã

- Sau đó ta chọn Decrypt để lấy lại được chuỗi lúc đầu.


- Ta sẽ có kết quả giống với như chuỗi ban đầu trước khi thực
hiện mã hoá.

Hình 2.1.8 Kết quả sau khi Decrypt

2.2. Thuật toán Substitution


Ta có một đoạn Plaintext P là : “INFORMATION TECHNOLOGY”
được lưu trong file Plaintext.txt và keyword là “UIT”

19
Hình 2.2.1 Đoạn plaintext

Tiến hành mã hoá:

- Mở file cần mã hoá(Plaintext.txt).


- Tiếp theo ta chọn Encrypt/ Decrypt => Symmetric (classic) =>
Substitution/Atbash.

Hình 2.2.2 Chọn thuật toán Substitution.

- Sau đó, ta sẽ tiến hành nhập keyword để thực hiện mã hoá.

20
Hình 2.2.3 Nhập keyword để mã hoá
- Chọn encrypt để mã hoá đoạn text.
- Kết quả sau khi mã hoá bằng thuật toán Substitution trên phần
mềm Cryptool. Ta sẽ có được chuỗi Ciphertext như sau.

Hình 2.2.4 Kết quả sau khi Encrypt

Tiến hành giải mã:

- Đầu tiên ta chọn Encrypt/ Decrypt => Symmetric (classic) =>


Substitution/Atbash.

21
Hình 2.2.5 Chọn thuật toán Substitution

- Sau đó, ta sẽ tiến hành nhập keyword để thực hiện giải mã.
- Ở đây ta sẽ nhập keyword như ban đầu là “UIT”.

Hình 2.2.6 Nhập keyword để giải mã

- Sau đó ta chọn Decrypt để lấy lại được chuỗi lúc đầu.


- Ta sẽ có kết quả giống với như chuỗi ban đầu trước khi thực
hiện mã hoá.

22
Hình 2.2.7 Kết quả sau khi Decrypt

2.3. Thuật toán AES


Ta có một đoạn Plaintext P là : “Two One Nine Two” được lưu trong
file Plaintext.txt và keyword là “That’s my Kung Fu”.

Keyword có mã hex(128 bit) là: 54 68 61 74 73 20 6D 79 20 4B 75 6E


67 20 46 75

Hình 2.3.1 Đoạn plaintext

Tiến hành mã hoá:

- Mở file cần mã hoá(Plaintext.txt).


- Tiếp theo ta chọn Encrypt/ Decrypt => Symmetric (modern) =>
AES(CBC).

23
Hình 2.3.2 Chọn thuật toán AES

- Tiếp theo ta nhập mã hex và độ dài key

Hình 2.3.3 Chọn độ dài và nhập key

- Sau khi nhập key xong ta chọn Encrypt để mã hoá chuỗi


plaintext.
- Kết quả ta có chuỗi ciphertext là:

Hình 2.3.4 Kết quả sau khi Encrypt.

Tiến hành giải mã:

24
- Đầu tiên ta chọn Encrypt/Decrypt => Symmetric (modern) =>
AES(CBC).

Hình 2.3.5 Chọn thuật toán AES

- Nhập key mà ban đầu đã dùng để mã hoá.

Hình 2.3.6 Chọn độ dài và nhập key

- Sau đó chọn Decrypt để giải mã


- Kết quả ta sẽ có được chuỗi plaintext như ban đầu:

Hình 2.3.7 Kết quả sau khi Decrypt

25
2.4. Thuật toán RSA
Ta có plaintext m = 123, số nguyên tố p = 61, q =53 và chọn e là 17

Tiến hành mã hoá:

- Chọn Indiv.Procedures => RSA Cryptosystem => RSA


Demonstration.

Hình 2.4.1 Chọn thuật toán RSA

- Nhập số nguyên tố p, d và Public key e.

Hình 2.4.2. Nhập số nguyên tố p, q và public key e

- Tiếp theo ta chỉ cần chọn input as “text” hoặc “number” tuỳ
thuộc vào plaintext, sau đó nhập m cần mã hoá.

26
Hình 2.4.3. Nhập plaintext m

- Sau đó chọn Encrypt để tiến hành mã hoá. Ta có kết quả sau.

Hình 2.4.4 Kết quả sau khi Encrypt

Tiến hành giải mã:

- Để giải mã từ ciphertext là c = 855 thì ta sẽ nhập c vào phần


“plaintext code in number of base 10”, sau đó chọn Decrypt để
giải mã. Ta có kết quả như sau:

Hình 2.4.5 Kết quả sau khi Decrypt

27
2.5. Thuật toán Hill
Ta có: đoạn message là “ACT” được lưu trong file Plaintext.txt và có
key là “GYBNQKURP”.

Hình 2.5.1 Đoạn plaintext

Tiến hành mã hoá:

- Chọn Encrypt/Decrypt => Symmetric (classic) => Hill.

Hình 2.5.2. Chọn thuật toán Hill

- Tiếp theo nhập kích thước ma trận và key.

28
Hình 2.5.3. Nhập key và chọn kích thước cho ma trận.

- Sau đó chọn Encrypt để tiến hành mã hoá. Ta có kết quả sau.

Hình 2.5.4 Kết quả sau khi Encrypt

Tiến hành giải mã:

- Chọn Encrypt/Decrypt => Symmetric (classic) => Hill.

Hình 2.5.5 Chọn thuật toán Hill

29
- Tiếp theo nhập kích thước ma trận và key.

Hình 2.5.6 Nhập key và chọn kích thước cho ma trận.

- Chọn Encrypt để tiến hành giải mã. Ta có kết quả sau.

Hình 2.5.7 Kết quả sau khi Decrypt

2.6. Thuật toán Permutation


Ta có Plaintext là: “THIS IS PERMUTATION” được lưu trong file
Plaintext.txt và key “CIPHER”.

Tiến hành mã hoá:

30
- Chọn Encrypt/Decrypt => Symmetric (classic) => Permutation.

Hình 2.6.2 Chọn thuật toán Permutation.

- Tiếp theo nhập key ở dòng “1st Permutation”

Hình 2.6.3 Nhập key để tiến hành mã hoá

- Sau đó chọn Encrypt => Display ciphertext để tiến hành mã


hoá. Ta được kết quả như sau.

31
Hình 2.6.4 Kết quả sau khi Encrypt

Tiến hành giải mã:

- Chọn Encrypt/Decrypt => Symmetric (classic) => Permutation.

Hình 2.6.5 Chọn thuật toán Permutation.

- Tiếp theo nhập key ở dòng “1st Permutation”

32
Hình 2.6.6 Nhập key để tiến hành giải mã

- Sau đó chọn Decrypt => Display cleartext để tiến hành giải mã.
Ta được kết quả như sau.

Hình 2.6.7 Kết quả sau khi Decrypt

33
Chương 3. Kết Luận
Trong thời đại 4.0, môi trường internet tiềm ẩn rất nhiều nguy cơ và rủi
ro, vì thế việc mã hóa dữ liệu là cần thiết để bảo vệ tốt thông tin người
dùng. Các ứng dụng ngày nay hầu như đã hỗ trợ đầy đủ các phương pháp
bảo mật. Tuy nhiên, không ít người dùng vẫn sử dụng các giao thức không
an toàn, rất dễ bị rò rỉ thông tin. Bên cạnh đó bài báo cáo làm rõ hơn về
mã hóa và các phương pháp mã hóa đang được sử dụng và phát triển trong
tương lai.

Trong bài báo cáo này, chúng ta đã tìm hiểu về lý thuyết thuật toán, từ
đó sử dụng công cụ mã hoá có sẵn để mã hoá dữ liệu sử dụng các thuật
toán Hill, RSA, Vigenère, ... Kết quả cho thấy rằng các công cụ này hoạt
động tốt và có thể giúp chúng ta bảo vệ thông tin một cách hiệu quả.

Ngoài ra, cũng cần lưu ý rằng mỗi thuật toán mã hoá có ưu và nhược
điểm riêng, phải chọn thuật toán phù hợp với nhu cầu của mình. Ví dụ,
thuật toán RSA có độ bảo mật cao nhưng tốc độ mã hoá chậm, trong khi
thuật toán Vigenere có tốc độ nhanh nhưng độ bảo mật thấp hơn.

Tổng kết, bài thực hành sử dụng công cụ mã hoá đã giúp chúng ta hiểu
rõ hơn về các công cụ mã hoá có sẵn và cách sử dụng chúng, cần tìm hiểu
và chọn thuật toán phù hợp với nhu cầu của mình để bảo vệ thông tin một
cách tốt nhất.

Tài Liệu Tham Khảo

[1] Wikipedia, "Mật mã Vigenère," [Online]. Available:


https://vi.wikipedia.org/wiki/M%E1%BA%ADt_m
%C3%A3_Vigen%C3%A8re. [Accessed 30 4 2023].

[2] Wikipedia, "Substitution cipher," [Online]. [Accessed 30 4


2023].

34
[3] Geekforgeeks, "Substitution Cipher," [Online]. Available:
https://www.geeksforgeeks.org/substitution-cipher/. [Accessed
30 4 2023].

[4] B. K. Jena, "What Is AES Encryption and How Does It Work?,"


[Online]. Available:
https://www.simplilearn.com/tutorials/cryptography-tutorial/aes
-encryption. [Accessed 30 4 2023].

[5] B. Q. Hoat, "Tìm hiểu thuật toán mã hóa khóa đối xứng AES,"
[Online]. Available: https://viblo.asia/p/tim-hieu-thuat-toan-ma-
hoa-khoa-doi-xung-aes-gAm5yxOqldb. [Accessed 30 4 2023].

[6] Wikipedia, "RSA (mã hóa)," [Online]. Available:


https://vi.wikipedia.org/w/index.php?title=RSA_(m%C3%A3_h
%C3%B3a)&veaction=edit&section=7. [Accessed 30 4 2023].

[7] manhhomienbienthuy, "Hệ mã hóa RSA và chữ ký số,"


[Online]. Available: https://viblo.asia/p/he-ma-hoa-rsa-va-chu-
ky-so-6J3ZgkgMZmB. [Accessed 30 4 2023].

[8] Wikipedia, "Hill cipher," [Online]. Available:


https://en.wikipedia.org/wiki/Hill_cipher. [Accessed 30 4
2023].

35

You might also like