Professional Documents
Culture Documents
IE105.N22.1 Lab4 DataEncryption
IE105.N22.1 Lab4 DataEncryption
Lớp: IE105.N22.1
MỤC LỤC
Chương 1. Cơ Sở Lý Thuyết
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:
Đặ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.
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.
- 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.
4
Hình 1.3.1 Bảng mật mã của Vigenere
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.
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
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.
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 :
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
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).
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ể:
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.
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
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.
ShiftRows():
Mix Columns()
58 47 08 8B 15 B6 1C BA 59 D4 E2 E8 CD 39 DF CE
29 C3 50 5F 57 14 20 F6 40 22 99 B3 1A 02 D7 3A
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:
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.
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
n = pq = 3233
Khóa bí mật là d.
Để mã hóa văn bản có giá trị 123, ta thực hiện phép tính:
Để giải mã văn bản có giá trị 992, ta thực hiện phép tính:
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ã 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.
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á
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
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”
17
- Sau đó, ta sẽ tiến hành nhập keyword để thực hiện mã hoá.
19
Hình 2.2.1 Đoạn plaintext
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.
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”.
22
Hình 2.2.7 Kết quả sau khi Decrypt
23
Hình 2.3.2 Chọn thuật toán AES
24
- Đầu tiên ta chọn Encrypt/Decrypt => Symmetric (modern) =>
AES(CBC).
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ế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
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”.
28
Hình 2.5.3. Nhập key và chọn kích thước cho ma trận.
29
- Tiếp theo nhập kích thước ma trận và key.
30
- Chọn Encrypt/Decrypt => Symmetric (classic) => Permutation.
31
Hình 2.6.4 Kết quả sau khi Encrypt
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.
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.
34
[3] Geekforgeeks, "Substitution Cipher," [Online]. Available:
https://www.geeksforgeeks.org/substitution-cipher/. [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].
35