ĐẠI HỌC QUỐC GIA TP.HCM
ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
UDTT & ANTT
Mã hóa dữ liệu
và bảo mật
Giáo viên hướng dẫn: Thầy Tô Nguyễn Nhật Quang
Sinh viên thực hiện: Nhóm 9
08520004 Lê Đỗ Trường An
08520011 Lý Tuấn Anh
08520036 Lê Hoàng Chánh
08520088 Vũ Trọng Đắc
08520100 Nguyễn Chí Duy Đức
Mã hóa và bảo mật dữ liệu
Contents
2
Mã hóa và bảo mật dữ liệu
MÃ HÓA VÀ BẢO MẬT DỮ LIỆU
1 A. LỊCH SỬ MẬT MÃ
Khóa và chìa khóa
Trong thế giới hiện đại, không đơn giản chỉ sử dụng một bức tranh và hi vọng một vài người có thể tìm ra
được nghĩa tiềm ẩn của nó. Thay vì đó, chúng ta cần một phương pháp phức tạp của việc khóa và mở
khóa dữ liệu với những chìa khóa mà chỉ có người ủy quyền được giữ. Những khóa và chìa khóa này thì
giữ thông tin bí mật.
Hai người đang gởi thông điệp cho nhau là Alice và Bob (giả sử là A và B). Người thứ ba đang cố gắng
để đánh chặn dữ liệu được biết như là Eve.
Nếu Alice và Bob quyết định trao đổi thông điệp bằng cách sử dụng các khóa và chìa khóa bảo mật, câu
hỏi là: các khóa và chìa khóa đó đến từ đâu?
Hãy tưởng tượng có một thợ làm khóa thiên tài đã phát triển ra một hệ thống khóa bảo mật mới, và ông ta
rất tự tin trong thiết kế rằng những người trong nghề khóa đều được phổ biến. Thợ làm khóa tuyên bố
rằng chức năng của khóa thì rất bảo mật đến nổi không có nguy cơ của bất cứ việc giải mã nào, ngay cả
khi mọi chi tiết được mô tả.
Plaintext: CRYPTOGRAPHY
Ciphertext: HWDUYTLWFUMD (Shift 5)
Plaintext: ENCRYPTION
Ciphertext: HQFUBSWLRQ(Shift 3)
Ta có thể đặt phương pháp mã hóa này trong một biểu thức toán học:
4
Mã hóa và bảo mật dữ liệu
Ta gán gán một số đến mỗi chữ cái của bảng chữ cái tiếng Anh. Ví dụ: a = 1, b = 2, c = 3, … Ta gọi
ciphertext là C, và gọi plaintext là p. Ta có:
C = (p + 4) mod (26)
Biểu thức trên có nghĩa là ciphertext bằng chữ cái plaintext cộng với một giá trị shift, và mod 26.
Mặc dù phương pháp thay thế đơn giản này đã được dùng trong vài năm, nhưng cuối cùng nó cũng trở
thành không bảo mật. Một vài kỹ thuật của người giải mã đã có thể giải mã được mật mã Caesar cipher.
Breaking the Caesar Cipher
Vấn đề đối với mật mã Caesar là nó chỉ dùng 26 ký tự và người ta có thể biết vị trí sắp xếp của 26 ký tự
đó.
Giả sữ một thông điệp được nhận và người phân tích nghi ngờ mật mã Caesar đã được sử dụng. Người
phần tích có thể nhận biết được mật mã bằng kinh nghiệm, hoặc thử tấn công bằng phương pháp thủ
công. Phương pháp tấn công thủ công thì không mất nhiều thời gian và người phân tích biết được mật mã
chỉ là một Caesar Shift đơn lẽ. Khi chỉ có 26 chữ cái, và một trong các cách shift đã được sử dụng để mã
hóa thông điệp, người phân tích có 25 khóa để thử trước khi bẻ khóa mật mã.
Ví dụ, ciphertext là BKZOVMQFLK với khóa thì không được biết trước, bằng phương pháp thủ công ta
liệt kê được các plaintext như sau:
Dựa vào bảng trên ta đoán được plaintext là: ENCRYPTION. Qua đó ta thấy mật mã Caesar thì không
bảo mật. Sự không bảo mật này là do người phân tích đã biết được một vài vấn đề sau:
1. Thuật toán mã hóa và giải mã đã được biết đến một cách phổ biến.
2. Ngôn ngữ trong plaintext được ẩn thì được biết và có thể dễ dàng để nhận ra.
3. Chỉ có 25 khóa có thể dùng được để thử tấn công bằng phương pháp thủ công.
Biết được những điều này, người phân tích có thể dễ dàng giải mã được ciphertext và lấy được plaintext.
IVJXTSMSXTEJOEBSVAFQNXCEVIVJJSAFQNXCEV
THE ETH E T E T
Bây giờ chỉ còn lại 4 kí tự E, V, I, F, J tương đương với R, N, I, O, A
Giả sử: E = R, V = N, ta được như sau:
XEJIQYSIFSKECVKXECVPSOXCKIXSXTS
TR E E R N TR N E T TETHE
XTSEFCSOIVJAEVASNXOEBAFQNXEKFINTQ
THER E N R E T R TR H
IVJXTSMSXTEJOEBSVAFQNXCEVIVJJSAFQNXCEV
N E ETH R E T R E T RN
Giả sử: C = I, E = O:
XEJIQYSIFSKECVKXECVPSOXCKIXSXTS
TO E E OIN TOIN E TI TETHE
XTSEFCSOIVJAEVASNXOEBAFQNXEKFINTQ
THEO IE N ON E T O TO H
IVJXTSMSXTEJOEBSVAFQNXCEVIVJJSAFQNXCEV
N THE ETHO OEN TION N E TION
Còn lại 3 kí tự I, F, J tương đương R, A, S. S là kí tự được lấy them từ biểu đồ
Giả sử: I = R
XEJIQYSIFSKECVKXECVPSOXCKIXSXTS
7
Mã hóa và bảo mật dữ liệu
TO E E OIN TOIN E TI RTETHE
XTSEFCSOIVJAEVASNXOEBAFQNXEKFINTQ
THEO IE N ON E T O TO H
IVJXTSMSXTEJOEBSVAFQNXCEVIVJJSAFQNXCEV
RN THE ETHO OEN TION N E TION
Ta thấy RTE và RN là những digram và trigram không thấy trong tiếng Anh. Vì vậy ta giả sử:
I = A
XEJIQYSIFSKECVKXECVPSOXCKIXSXTS
Polyalphabetic Ciphers
Điển hình là mật mã Vigenere
Plaintext: TODAY WE MOVE BE PREPARED
9
Mã hóa và bảo mật dữ liệu
Ta chọn keyword là MOVE. Keyword được đặt phía trên plaintext và lặp lại cho đến khi hết đoạn
plaintext:
Key: MOVEM OV EMOV EM OVEMOVEM
Plaintext: TODAY WE MOVE BE PREPARED
=> Ciphertext: FCYEK KZ QAJZ FQ DMIBOMIP
Transposition Ciphers
Giữ lại nguyên bản các chữ cái và dịch chuyển vị trí của chúng.
Ví dụ: caesar shift -> sarshi ftcae (dịch trái 3 bước)
Đơn giản hơn:
caesar shift -> saesat chifr (chữ cái đầu và cuối của mỗi từ sẽ hoán đổi vị trí cho nhau )
The Split Rail Cipher
Còn gọi là Rail Fence Cipher, là một hình thức của mã chuyển vị.
Ví dụ với thông điệp: So far there has been little math, which makes me happy!
Ta có đoạn Plaintext như sau:
SOFARTHEREHASBEENLITTLEMATHWHICHMAKESMEHAPPY
Chia đôi đoạn Plaintext này ra làm 2 dòng, một dòng chứa kí tự ở vị trí chẵn, một dòng chứa kí tự ở vị trí
lẽ:
Line 1: SFRHRHSENITEAHHCMKSEAP
Line 2: OATEEABELTLMTWIHAEMHPY
Kết hợp lại ta được đoạn ciphertext:
SFRHRHSENITEAHHCMKSEAPOATEEABELTLMTWIHAEMHPY
Transposition Table
Nhằm tăng độ phức tạp cho Split Rail Cipher.
Ví dụ ta dung lại đoạn Plaintext cũ:
SOFARTHEREHASBEENLITTLEMATHWHICHMAKESMEHAPPY
Plaintext: 22 15 52 12 13 25
Line 1: 2 1 5 1 1 2
Line 2: 2 5 2 2 3 5
=> Ciphertext: 21 51 12 25 22 35
The one-time pad
Sử dụng một khóa có cùng chiều dài với thông điệp plaintext và sử dụng khóa này chỉ một lần. Khóa
được tạo một cách random. Với phương pháp này mật mã sẽ rất khó bị giải vì mỗi khóa chỉ được dung 1
lần.
13
Mã hóa và bảo mật dữ liệu
Rotor Machines
Cấu tạo: gồm 3 rotor mỗi rotor có cấu tạo như hình vẽ, mỗi rotor gồm 2 dãy số, dãy thứ nhất được sắp xếp
theo trình tự, dãy thứ 2 được sắp xếp một cách random.
Hoạt động: ví dụ khi ta ấn chữ A, đầu ra sẽ cho chữ B, nhấn chữ A một lần nữa thì đầu ra sẽ cho chữ Y.
Khi đầu vào được nhấn 1 lần thì fast rotor sẽ dịch chuyển 1 vị trị, khi fast rotor dịch chuyển được 24 vị trí
thì medium rotor sẽ dịch chuyển 1 vị trí, khi medium rotor dịch chuyển được 24 vị trí thì slow rotor sẽ
dich chuyển 1 vị trí… cứ như vậy.
1B. CHỨC NĂNG CỦA TOÁN HỌC TRONG MÃ HÓA
Toán học, toán học, toán học. chính điều nãy cũng đủ làm cho người ta phải rùng mình. Nhiều người nói
rằng: “chúng tôi biết, chúng tôi sử dụng khóa, những khóa ấy phải mạnh, chúng tôi biết sử dụng khóa để
mã hóa và giải mã dữ liệu ”. Tuy nhiên, để đưa toán học vào mật mã, thì câu hỏi đặt ra ở đây là: “Làm
thế nào thuật toán làm việc? làm thế nào mã hóa khóa thật sự?”
Câu trả lời đó là toán học và thuật toán. Chúng ta hãy cùng nhìn vào các kỹ thuật mã hóa cổ điển. chẳng
hạn như Caesar, Transpotions, Enigma and Polybius. Tuy nhiên, các kỹ thuật mã hóa hiện đại nó phức tạp
hơn nhiều so với việc chỉ đơn giản là chuyển đổi ký tự thành các ký tự khác. Thuật toán mã hóa hiện đại
sử dụng toán học.
Bên trong, máy tính xủ lý mọi thứ bằng các chỗi nhị phân 1 và 0.
14
Mã hóa và bảo mật dữ liệu
Gần như tất cả các công thức toán học trong mã hóa bao gồm chữ và số. Nó ko phải là chữ giống như các
Sau đây là ví dụ về số nguyên tố cùng nhau:
Số 17 là số nguyên tố. vì nó có 2 ước số là 1 và 17
16
Mã hóa và bảo mật dữ liệu
Số 24 không phải là số nguyên tố, vì nó có ước khác ngoài 1 và 24
Cặp số 39 và 21 ko phải là cặp số nguyên tố cùng nhau vì nó có chung 2 ước là 1 và 3
Cặp số 39 và 25 là cặp số nguyên tố cùng nhau, vì chúng chỉ có 1 ước là 1, và số 25 là số nguyên tố.và 1
là ước chung lớn nhất của nó.
Vậy cặp số nguyên tố cùng nhau là 1 số là số nguyên, nó với số còn lại có ước chúng lớn nhất là 1.
Math Called Mod: (chia lấy dư)
Một vài ví dụ:
9 mod 3 = 0
40 mod 10 = 0
40 mod 9 = 4
(2+4) mod 3 = 0
(2 +4) mod 5 = 1
Modular operations:
Trong mã hóa, phép chia lấy dư được sử dụng rất thường xuyên. Không đơn giản đơn giản là x mod y. mà
là một chỗi phức tạp:
[(a mod n) + (b mod n)] mod n = (a + b) mod n
[(a mod n) - (b mod n)] mod n = (a - b) mod n
[(a mod n) * (b mod n)] mod n = (a * b) mod n
Binary and hex values:
17
Mã hóa và bảo mật dữ liệu
XOR operations:
OR operations:
Phép tính OR được sử dụng trong mã hóa:
XOR operations:
Phép tính XOR được sử dụng trong mã hóa:
phải tự tạo ra được số ngẫu nhiên để sử dụng Pseudo-Random Number Generator (PRNG).
- PRNG là phần mềm tạo ra các số ngẫu nhiên giả. Gọi là ngẫu nhiên giả bởi vì nó luôn tạo ra các
số giống nhau ở mỗi lần chạy. Vì thế cần một chức năng để cho các số được tạo ra là duy nhât.
Cách giải quyết ở đây là việc tạo số từ các giá trị nhập vào khác nhau gọi là seed. Seed có thể là
mọi con số trong máy tính ví dụ như ngày giờ được tính đến mili giây, hoặc tọa độ con trỏ chuột
…
- Các seed trước khi trở thành giá trị đầu vào của PRNG sẽ được kết hợp với nhau để tăng độ phức
tạp. Việc này sẽ giúp PRNG tránh việc tạo ra các con số giống nhau.
The Block, the Stream and the Feistel
1. The Block Cipher
- Là thuật toán mã hóa khóa đối xứng mã hóa từng block dữ liệu thay vì từng bit. Các block thường
là bội số của 8 hoặc 64 bit.
- Nếu từng block giống nhau thì sẽ cho ra các kết quả mã hóa giống nhau. Việc này làm giảm độ
bảo mật của thuật toán. Để giải quyết việc giống nhau của các block ta sử dụng feedback mode
gọi là Cipher Block Channing (CBC).
- CBC thực hiện phép toán XOR giữ plaintext và cipher text. Ví dụ như một plaintext được đưa
vào mã hóa thì đã được XOR với kết quả của block trước đó. Đối với block đầu tiên, kết quả sẽ
được XOR với giá trị Initial Value (IV).
- IV cũng là một giá trị seed và người mã hóa lẫn giải mã đều biết giá trị này. IV được bảo mật và
gởi từ người mã hóa đến người giải mã cùng với khóa.
- Dưới đây là sơ đồ của CBC
20
Mã hóa và bảo mật dữ liệu
The Stream Cipher
- Mã hóa từng bit dữ liệu.
- Ưu điểm là mã hóa nhanh nhưng khóa không có giá trị sử dụng lại.
Feistel Cipher
- Sửa đổi nhiều lần một đoạn dữ liệu đơn giản có thể làm cho nó trở nên phức tạp hơn. Dựa trên
nguyên tắc thay thế nhiều lần, làm rối những đoạn văn bản mã hóa đơn giản tạo nên thuật toán mã
hóa Feistel.
nhau:
- Khoá công khai (Public key) được sử dụng để mã hoá những thông tin mà bạn muốn chia sẽ với
bất cứ ai. Chính vì vậy bạn có thể tự do phân phát nó cho bất cứ ai mà bạn cần chia sẻ thông tin ở
dạng mã hoá.
- Khoá riêng (Private key) khoá này thuộc sở hữu riêng tư của người được cấp và nó được sử dụng
để giải mã thông tin.
- Nguyên lý hoạt động của hệ mã hoá công cộng do các ông Whitfield Diffie và Martin Hellman
nghĩ vào ra năm 1977. Khi hai bên trao đổi thông tin phải biết khoá công khai (e
k
) của nhau. Việc
biết khoá công khai (e
k
) không cho phép tính ra được khoá riêng (d
k
). Như vậy trong hệ thống mỗi
23
Mã hóa và bảo mật dữ liệu
cá thể k khi đăng ký vào hệ thống được cấp 1 cặp khóa (e
k
,d
k
). Trong đó e
k
là chìa khóa lập mã,
d
k
là chìa khoá giải mã .
- Mô hình hoạt động khi bên A muốn gửi cho bên B một văn bản m thì Bên A phải dùng khoá
công khai của bên B để mã hoá thông tin, văn bản đã mã hóa được ký hiệu là T= e
k
Thiết lập Diffie-Hellman
- Các bên thống nhất với nhau các tham số chung :
• q là một số nguyên tố đủ lớn.
• α là một số nguyên căn của q
• α mod q, α
2
mod q, …, α
q-1
mod q là các số nguyên giao hoán của các số từ 1 đến q -1.
- Bên A
o Chọn ngẫu nhiên làm khóa riêng X
A
<q`
o Tính khóa công khai Y
A
= α
XA
mod q
- Bên B
o Chọn ngẫu nhiên làm khóa riêng X
B
<q
o Tính khóa công khai Y
B
= α
XB
mod q
Trao đổi khóa Diffie-Hellman
- Bên A biết khóa riêng X
A
XBXA
mod q
24
Mã hóa và bảo mật dữ liệu
= (α
XB
mod q)
XA
mod q
= Y
B
XA
mod q
Ví dụ :
Ví dụ: Giả sử A và B chọn p = 11 và α = 2
Nhóm nhân xyclic sinh bởi α:
{ αi , i=0, ,9}={1,2,4,8,5,10,9,7,3,6}
(Các phần tử sinh của nhóm này bao gồm các phần tử sau: α =2, α^3 = 8, α^7 =7, α^9 = 6)
Giả sử A chọn giá trị ngẫu nhiên x = 4 và gửi cho B giá trị 2^4mod 11 = 5.
Giả sử B chọn giá trị ngẫu nhiên y = 7 và gửi cho A giá trị 2^7mod 11 = 7
B nhận được 5 và tính khoá chung k = 5^7 mod 11 =3
A nhận được 7 và tính khoá chung k = 7^4 mod 11 =3
RSA :
Khái niệm
RSA được Rivest, Shamir và Adleman phát triển, là một thuận 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 hóa 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 khai. 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.
Thuật toán được Ron Rivest, Adi Shamir và Len Adleman mô tả lần đầu tiên vào năm 1977 tại Học viện