Lời Nói Đầu
Thế giới của chúng ta luôn sôi sục trong muôn vàn biến động được tạo ra bởi con
người. Và trong thế kỷ 20 này, máy tính là một trong những sản phẩm vó đại nhất. Cùng với
thời gian, người ta không muốn sử dụng một máy tính đơn lẻ nữa mà sẽ kết nối các máy
này lại thành một mạng máy tính nhằm tăng khả năng làm việc, hiểu biết, trao đổi, cập
nhật các thông tin … Mạng Internet là xu hướng phát triển của thế giới ngày nay. Hiện nay,
Internet đã trở nên rất phổ biến trên toàn thế giới. Thông qua mạng Internet mọi người có
thể trao đổi thông tin với nhau một cách nhanh chóng thuận tiện. Những công ty phát triển
và kinh doanh trên môi trường Intranet/Internet họ phải đối diện với khó khăn lớn là làm
thế nào để bảo vệ những dữ liệu quan trọng, ngăn chặn những hình thức tấn công, truy
xuất dữ liệu bất hợp pháp từ bên trong (Intranet), lẫn cả bên ngoài (Internet). Khi một
người muốn trao đổi thông tin với một người hay một tổ chức nào đó thông qua mạng máy
tính thì yêu cầu quan trọng là làm sao để đảm bảo thông tin không bò sai lệch hoặc bò lộ do
sự xâm nhập của kẻ thứ ba. Trước các yêu cầu cần thiết đó, một số giải thuật mã hóa đã
dược xây dựng nhằm đảm bảo tính an toàn dữ liệu tại nơi lưu trữ cũng như khi dữ liệu được
truyền trên mạng, như các giải thuật mã hóa đối xứng ( ),DES giải thuật mã hóa công
khai , ... Việc tìm hiểu và xây dựng chương trình các giải thuật này cũng không nằm ngoài
mục đích của bản luận văn này. Luận văn có nhiệm vụ tìm hiểu lý thuyết về mật mã hoá
thông tin, xây dựng server tạo khóa cho user trong vấn đề bảo mật dữ liệu.
Do thời gian và khả năng có hạn, trong khi phạm vi đề tài lại rộng, những người
thực hiện chỉ có thể tìm hiểu được một số giải thuật chính như : DES, ECB, CBC, RSA,
MD5 và qua đó đưa ra mô hình server tạo khóa cho các user, cụ thể là làm thế nào để quản
lý và phân phối khóa một cách an toàn, hiệu quả. Chắc chắn rằng tập thuyết minh này sẽ
không tránh khỏi những thiếu sót, người thực hiện mong nhận được sự góp ý, chỉ dẫn thêm
của các Thầy Cô, bạn bè để bản thuyết minh được hoàn thiện hơn. Chúng tôi xin chân
thành cảm ơn Thầy hướng dẫn, các Thầy Cô trong khoa đã tạo điều kiện thuận lợi
để bản thuyết minh này có thể hoàn thành đúng thời hạn.
Chương 1: Các hệ mật mã
1. Hệ mật mã đối xứng:
1.1. Giới thiệu:
Các giải thuật mật mã đối xứng là các giải thuật sử dụng cùng một khóa bí mật cho
tác vụ mã hóa và tác vụ giải mã. Ví du ïnhư các giải thuật thay thế và hoán vò, giải thuật
DES,…. Ở đây ta chỉ tìm hiểu giải thuật DES (Data Encryption Standard) là giải thuật mật
mã đối xứng được sử dụng phổ biến nhất.
1.2. Giải thuật DES (Data Encryption Standard) :
Vào năm 1977, "National Bureau of standard" đã đưa ra chuẩn DES để sử dụng cho
các ứng dụng ở Mỹ. DES mã hóa các khối data 64 bits với khóa 56 bits. Giải thuật dùng
để mã hóa lẫn giải mã được mô tả tóm tắt như hình 1.
Trước tiên 64 bit input T được hoán vò bởi phép hoán vò hoán vò khởi động IP, với To
= IP(T). Sau khi qua 16 vòng lặp (mỗi vòng sử dụng một khóa 48 bit được tạo ra từ khóa
input 56 bits) với tác động của hàm F, nó được hoán vò bằng phép hoán vò đảo IP
-1
để tạo ra
64 bit output cuối cùng. IP và IP
-1
được cho trong các bảng (bảng 1a và bảng 1b). Các bảng
này được đọc từ trái sang phải, từ trên xuống dưới theo dạng:
T = t
1
t
2
…..t
64
T
0
= t
58
t
50
…….t
7
Đầu tiên khối T
được tách thành hai khối trái và phải (mỗi khối 32 bits):
T = L
0
R
0
với L
0
= t
1
…..t
32
, R
0
= t
33
…..t
64
.
Ở vòng lặp thứ i (0 < i < 16) : L
i
= R
i-1
, R
i
= L
i-1
⊕ F(R
i-1
, K
i
) trong đó ⊕ là phép
cộng exclusive_or và K
i
là khóa 48 bits. Ở vòng lặp cuối cùng các nhánh trái và phải không
đổi chỗ cho nhau vì vậy input của IP
-1
là R
16
L
16
.
Hàm F và S_boxes: (hình 3)
Trước tiên R
i-1
được mở rộng thành khối 48 bits E(R
i-1
) với E là bảng lựa chọn bit
được cho trong bảng 2. Sau đó thực hiện phép XOR E(R
i-1
) với K
i
và kết quả được tách
thành 8 khối 6 bit từ B
1
tới B
8
:
E(R
i-1
) ⊕ K
i
= B
1
B
2
...B
8
Mỗi khối B
j
sau đó được đưa vào một hàm S
j
(S - box) : S
j
(B
j
) trả về một khối 4 bit
(bảng 4). Các khối này được nối lại và khối kết quả 32 bit được hoán vò bằng phép P (bảng
3).
F(R
i-1
, K
i
) = P(S
1
(B
1
) …. S
8
(B
8
))
Hoạt động của S-box: số nguyên tương ứng với b
1
b
6
sẽ chọn Row trong bảng, còn số
nguyên tương ứng với b
3
b
4
b
5
b
6
sẽ chọn Column. Giá trò của S
j
(B
j
) được chọn sẽ là một số
nguyên 4 bit ở vò trí Row và Column đó.
Tính khóa: (hình 2)
DES tạo ra 16 khóa, mỗi khóa chiều dài 48 bit từ một khóa input 56 bit, dùng cho 16
vòng lặp. Lưu đồ tính toán khóa được cho trong hình 2:
Khóa input là một khối 64 bit, với 8bit parity tại các vò trí 8, 16,.…, 64. Permutation
PC-1 sẽ loại bỏ các bit parity và sẽ hoán vò 56 bit còn lại theo bảng 5. Kết quả, PC-1(K) sau
đó được chia thành hai phần C
0
và D
0
mỗi phần 28 bit. Khóa K
i
dùng trong vòng thứ i được
tạo ra từ C
i-1
và D
i-1
theo quy tắc như sau: trong các vòng 1, 2, 9 và 16, C
i-1
và D
i-1
được quay
vòng một bít qua trái, trong các vòng còn lại thì được quay vòng hai bít qua trái. Qua phép
quay vòng này C
i-1
và D
i-1
sẽ được biến đổi thành C
i
và D
i
. Hoán vò C
i
và D
i
theo bảng 6.
Sau khi hoán vò C
i
bỏ qua các bít 9, 18, 22, 25 tạo thành nữa trái của K
i
(24 bít), còn D
i
bỏ đi
các bít 35, 38, 43, 54 tạo ra nữa phải của K
i
(24 bít). Ghép nữa trái và nữa phải tạo ra khóa
K
i
48 bít.
Giải mã:
Quá trình giải mã được thực hiện theo cùng giải thuật này theo thứ tự ngược lại như
sau: IP
-1
là đảo của IP và ở vòng lặp thứ i sử dụng khóa K
17-i
(K
16
ở vòng lặp đầu tiên, K
1
ở
vòng lặp cuối cùng) và:
R
i-1
= L
i
L
i-1
= R
i
⊕ F(L
i
, K
i
)
I n p u t
K h ô ûi t a ïo h o a ùn v ò
L
1
= R o
R o
+
F
+
F
+
F
Ñ a ûo k h ô ûi t a ïo h o ùa n v ò
O u t p u t
L o
R
1
= L o + F ( R
1
, K
1
)
L
1 5
= R
1 4
R
2
= L
1
+ F ( R
1
, K
2
)L
2
= R
1
R
1 5
= L
1 4
+ F ( R
1 4
, K
1 5
)
+
F
R
1 6
= L
1 5
+ F ( R
1 5
, K
1 6
)
L
1 6
= R
1 5
1 , 2 , 3 , . . . 6 4
1 , 2 , 3 , . . . 6 4
1 , 2 , 3 , . . . 3 2
K
1
K
2
K n
K
1 6
H ì n h 1 : E n c r y p t i o n c o m p u t a t i o n
1 , 2 , 3 , . . . 3 2
C h o ïn h o ùa n v ò 1
L e f t S h i f t L e f t S h i f t
L e f t S h i f tL e f t S h i f t
L e f t S h i f t L e f t S h i f t
C h o ïn h o ùa n v ò 2
C h o ïn h o a ùn v ò 2
C h o ïn h o a ùn v ò 2
1 , 2 , 3 , . . . . . 6 4
1 , 2 , 3 , . . . . . 2 8 1 , 2 , 3 , . . . . . 2 8
K
1
K n
K
1 6
H ì n h 2 :
K e y S c h e d u l e C a l c u l a t i o n
K e y
K e y K e y
C
1
D
1
C n D n
C
1 6
D
1 6
S
1
S
2
S
3
S
6
S
5
S
7
S
4
S
8
P
3 2 b i t s
+
E
4 8 b i t s
K (
4 8 b i t s
)
R
( 3 2 b i t s )
H ì n h 3 : C a l c u l a t i o n o f f ( R , K )
6
4
Bảng 1a: Bảng hoán vò đầu tiên IP Bảng 1b: Bảng hoán vò cuối cùng IP
-1
Bảng 2: Bảng chọn bít E Bảng 3: Bảng hoán vò P
Bảng 5: Bảng hoán vò khóa PC-1 Bảng 6: Bảng hoán vò khóa PC-2
58 50 42 34 26 18 10 2
60 52 44 36 28 20 12 4
62 54 46 38 30 22 14 6
64 56 48 40 32 24 16 8
57 49 41 33 25 17 9 1
59 51 43 35 27 19 11 3
61 53 45 37 29 21 13 5
63 55 47 39 31 23 15 7
40 8 48 16 56 24 64 32
39 7 47 15 55 23 63 31
38 6 46 14 54 22 62 30
37 5 45 13 53 21 61 29
36 4 44 12 52 20 60 28
35 3 43 11 51 19 59 27
34 2 42 10 50 18 58 26
33 1 41 9 49 17 57 25
32 1 2 3 4 5
4 5 6 7 8 9
8 9 10 11 12 13
12 13 14 15 16 17
16 17 18 19 20 21
20 21 22 23 24 25
24 25 26 27 28 29
28 29 30 31 32 1
16 7 20 21
29 12 28 17
1 15 23 26
5 18 31 10
2 8 24 14
32 27 3 9
19 13 30 6
22 11 4 25
57 49 41 33 25 17 9
1 58 50 42 34 26 18
10 2 59 51 43 35 27
19 11 3 60 52 44 36
63 55 47 39 31 23 15
7 62 54 46 38 30 22
14 6 61 53 45 37 29
21 13 5 28 20 12 4
14 17 11 24 1 5
3 8 15 6 21 10
23 19 12 4 26 8
16 7 27 20 13 2
41 52 31 37 47 55
30 40 51 45 33 48
44 49 39 56 34 53
46 42 50 36 29
32
Column
Row 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Box
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
0
1
2
3
14
0
4
15
15
3
0
13
10
13
13
1
7
13
10
3
2
14
4
11
12
10
9
4
4
13
1
6
13
1
7
2
4
15
1
12
1
13
14
8
0
7
6
10
13
8
6
15
12
11
2
8
1
15
14
3
11
0
4
11
2
15
11
1
13
7
14
8
8
4
7
10
9
0
4
13
14
11
9
0
4
2
1
12
10
4
15
2
2
11
11
13
8
13
4
14
1
4
8
2
14
7
11
1
14
9
9
0
3
5
0
6
1
12
11
7
15
2
5
12
14
7
13
8
4
8
1
7
2
14
13
4
6
15
10
3
6
3
8
6
0
6
12
10
7
4
10
1
9
7
2
9
15
4
12
1
6
10
9
4
15
2
6
9
11
2
4
15
3
4
15
9
6
15
11
1
10
7
13
14
2
12
8
5
0
9
3
4
15
3
12
10
11
13
2
1
3
8
13
4
15
6
3
8
9
0
7
13
11
13
7
2
6
9
12
15
8
1
7
10
11
7
14
8
8
1
11
7
4
14
1
2
5
10
0
7
10
3
13
8
6
1
8
13
8
5
3
10
13
10
14
7
1
4
2
13
3
10
15
5
9
12
5
11
1
2
11
4
1
4
15
9
8
5
15
6
0
6
7
11
3
14
10
9
10
12
0
15
10
6
12
11
7
0
8
6
13
8
1
15
2
7
1
4
5
0
9
15
13
1
0
14
12
3
15
5
9
5
6
12
6
12
9
3
2
1
12
7
12
5
2
14
8
2
3
5
3
15
12
0
3
13
4
1
9
5
6
0
3
6
0
9
12
11
7
14
13
10
6
12
7
14
12
3
5
12
14
11
15
10
5
9
4
14
10
7
7
12
8
15
14
11
13
0
5
9
3
10
12
6
9
0
11
12
5
11
11
1
5
12
13
3
6
10
14
0
1
6
5
2
0
14
5
0
15
3
9
5
10
0
0
9
3
5
4
11
10
5
12
10
2
7
0
9
3
4
7
11
13
0
10
15
5
2
0
14
3
6
0
3
5
6
5
11
2
14
2
15
14
2
4
14
8
2
14
8
0
5
5
3
11
8
6
8
9
3
12
9
5
5
7
8
0
13
10
5
15
9
8
1
7
12
15
9
4
14
9
6
14
3
11
8
6
13
1
6
2
12
7
2
8
11
S
1
S
2
S
3
S
4
S
5
S
6
S
7
S
8
Baûng 4: Baûng choïn (S-boxex)
1.2.1. DES In Electronic CodeBook Mode (ECB) :
Ở mode này, các khối data dưới dạng rỏ (clear text) được đưa vào input của DES.
Các khối kết quả dưới dạng mật mã (ciphertext) có thể được sử dụng cho các ứng dụng
khác. Quá trình biến đổi diễn ra như sau: (hình 4)
Clear text Input block DES Output block Ciphertext.
ECB encryption ECB decription
Hình 4: Electronic Codebook Mode (ECB)
1.2.2. DES In Cipher Block Chaining Mode (CBC) :
Khối data cần mã hóa được chia thành các khối B
1
, B
2
, … B
n
với kích thước mỗi khối
là 64 bits. Vectơ khởi tạo IV (64 bits) được chọn. Sơ đồ mật mã đưọc cho trong hình 5:
+ Quá trình mã hóa:
(1) IV ⊕ B
1
C
1
(2) C
1
⊕ B
2
C
2
. .
Clear text
(D
1
, D
2
, ... D
64
)
Input block
(I
1
, I
2
, … I
64
)
DES encrypt
Output block
(O
1
, O
2
, … O
64
)
Cipher text
(C
1
, C
2
, … C
64
)
Clear text
(D
1
, D
2
, ... D
64
)
Cipher text
(C
1
, C
2
, … C
64
)
Input block
(I
1
, I
2
, … I
64
)
DES decrypt
Output block
(O
1
, O
2
, … O
64
)
Mã hóa
(n) C
n-1
⊕ B
n
C
n
+ Quá trình giải mã:
C
1
IV ⊕ B
1
, (IV ⊕ B
1
) ⊕ IV = B
1
C
2
C
1
⊕ B
2
, (C
1
⊕ B
2
) ⊕ C
1
= B
2
. .
C
n
C
n-1
⊕ B
n
, (C
n-1
⊕ B
n
) ⊕ C
n-1
= B
n
Hình 5: Cipher Block Chaining (CBC) mode
2. Hệ mật mã bất đối xứng
2.1. Giới thiệu:
Giải mã
IV B
1
B
2
B
n
=Time 1 =Time 2 ..................... =Time n
+ + +
I I I
DES encry DES encry DES encry
C
1
C
2
C
n
........
I I I
DES decry DES decry DES decry
IV
+ + +
B
1
B
2
B
n
.........
Mã hóa
Giải mã
- Sự phát triển của mật mã khóa công khai là rất lớn và có lẽ chính nó tạo ra cuộc
cách mạng trong toàn bộ lòch sử của mật mã khóa.
- Những giải thuật khóa công khai đều dựa trên những hàm toán học hơn là những
phép thay thế và hoán vò trong mật mã khóa cổ điển. Quan trọng hơn mật mã khóa công
khai có tính chất bất đối xứng, bao gồm việc sử dụng 2 khóa riêng biệt tương phản với mã
hóa qui ước có tính đối xứng mà chỉ sự dụng 1 khóa. Việc sử dụng 2 khóa có tầm quan
trọng sâu sắc trong lónh vực cần tính bí mật, phân bố khóa và sự chứng thực.
- Một số quan niệm sai liên quan đến mã hóa khóa công khai :
+ Mã hóa khóa công khai thì bảo mật đối với nhà phân tích mật mã hơn là mã hóa
qui ước. Thật ra, tính bảo mật của bất kỳ sơ đồ mã hóa nào đều phụ thuộc vào chiều dài
của khóa và việc tính toán để giải quyết việc bẻ khóa.
+ Mã hóa khóa công khai có mục tiêu chung, kỹ thuật được thực hiện bằng mã
hóa qui ước lỗi thời. Ngược lại, bời vì việc tính toán được đặt hàng đầu trong sơ đồ mã hóa
khóa công khai, cho nên dường như không thể thấy trước khả năng xảy ra rằng mã hóa qui
ước sẽ bò bỏ rơi. Một trong những người đã khám phá ra mã hóa khóa công khai đã phát
biểu : “Hạn chế của mật mã khóa công khai để quản lý khóa và sử dụng chữ ký là hầu
như được chấp nhận phổ biến”.
+ Có cảm giác rằng sự phân bố khóa thì không quan trọng trong khi sử dụng mã
hóa khóa công khai, so sánh thì cơ chế bắt tay trở ngại hơn, bao gồm những trung tâm phân
bố khóa cho mã hóa qui ước. Thật ra, 1 vài khuôn dạng giao thức là cần thiết, nói chung
bao gồm 1 tác nhân trung tâm và những thủ tục liên quan thì không đơn giản mà cũng
không hiệu quả hơn yêu cầu cho việc mã hóa khóa công khai này.
2.2. Lý thuyết về mật mã khóa công khai:
- Khái niệm mật mã khóa công khai đã tạo ra sự cố gắng để giải quyết 2 vấn đề khó
khăn nhất trong mã khóa qui ước, đó là sự phân bố khóa và chữ ký số:
+ Trong mã hóa qui ước sự phân bố khóa yêu cầu hoặc là hai người truyền thông
cùng (share) tham gia một khóa mà bằng cách nào đó đã được phân bố tới họ hoặc là sử
dụng chung một trung tâm phân bố khóa. Whitfield Diffie, một trong những người khám
phá ra mật mã khóa công khai (cùng với Martin Hellman) đã giải thích rằng yêu cầu này đã
phủ đònh bản chất của mật mã: khả năng bảo vệ tính bí mật hoàn hảo qua việc truyền thông
riêng của bạn: “Nó sẽ làm tốt như thế nào sau mọi sự phát triển, hệ thống không thể xuyên
qua được nếu các user bò bắt buộc tham gia (share) các khóa của nó với một KDC mà có
thể được thỏa hiệp bởi kẻ trộm?”.
+ Nếu việc sử dụng mật mã đã trở nên phổ biến, không chỉ trong quân đội mà còn
trong thương mại và những mục đích cá nhân thì những đoạn tin và tài liệu điện tử sẽ cần
những chữ ký tương đương đã sử dụng trong các tài liệu giấy. Tức là, một phương pháp có
thể được nghó ra có quy đònh làm hài lòng tất cả những người tham gia khi mà một đoạn tin
số được gởi bởi một cá nhân đặc biệt hay không?.
- Trong sơ đồ mã hóa quy ước, các khóa được dùng cho mã hóa và giải mã một đoạn
tin là giống nhau. Đây là một điều kiện không cần thiết. Thay vì nó có thể phát triển giải
thuật mã hóa dựa trên một khóa cho mã hóa và một khóa khác (có quan hệ với khóa trên)
cho giải mã. Hơn nữa các giải thuật này có những đặc điểm quan trọng sau:
+ Đó là việc tính toán một cách không khả thi để xác đònh khóa giải mã trong khi
chỉ biết giải thuật mật mã và khóa mã hóa.
+ Trong giải thuật RSA còn có đặc điểm hoặc một trong hai khóa quan hệ có thể
được sử dụng cho mã hóa còn khóa kia được dùng cho giải mã.
- Các bước cần thiết trong quá trình mã hóa khóa công khai:
+ Mỗi hệ thống cuối trong mạng tạo ra một cặp khóa để dùng cho mã hóa và giải
mã đoạn tin mà nó sẽ nhận.
+ Mỗi hệ thống công bố rộng rãi khóa mã hóa bằng cách đặt khóa vào một thanh
ghi hay một file công khai. Đây là khóa công khai, khóa còn lại được giữ riêng.
+ Nếu A muốn gởi một đoạn tin tới B thì A mã hóa đoạn tin bằng khóa công khai
của B.
+ Khi B nhận đoạn tin mã hóa, nó giải mã bằng khóa bí mật của mình. Không một
người nào khác có thể giải mã đoạn tin mã này bởi vì chỉ có mình B biết khóa bí mật đó
thôi.
Khóa công khai của B
khóa bí mật của B
đoạn tin mật mã đoạn tin
Giải thuật
mã hóa
Giải thuật
giải mã
User B
User A
Với cách tiếp cận này, tất cả những người tham gia có thể truy xuất khóa công khai.
Khóa bí mật được tạo ra bởi từng cá nhân, vì vậy không bao giờ được phân bố. Ở bất kỳ
thời điểm nào, hệ thống cũng có thể chuyển đổi cặp khóa để đảm bảo tính bảo mật.
- Bảng sau tóm tắt một số khía cạnh quan trọng về mã hóa quy ước và mã hóa công
khai: để phân biệt giữa hai loại, chúng ta sẽ tổng quát hóa liên hệ khóa sử dụng trong mã
hóa quy ước là khóa bí mật, hai khóa sử dụng trong mã hóa công khai là khóa công khai và
khóa bí mật.
Mã hóa quy ước Mã hóa công khai
* Yêu cầu:
- Giải thuật tương tự cho mã hóa và giải
mã.
- Người gởi và người nhận phải tham gia
cùng giải thuật và cùng khóa.
* Tính bảo mật:
- Khóa phải được giữ bí mật.
- Không thể hay ít nhất không có tính
thực tế để giải mã đoạn tin nếu thông tin
khác không có sẵn.
- Kiến thức về giải thuật cộng với các
mẫu về mật mã không đủ để xác đònh
khóa.
* Yêu cầu:
- Một giải thuật cho mã hóa và một giải
thuật cho giải mã.
- Người gởi và người nhận , mỗi người phải
có cặp khóa cho riêng mình.
* Tính bảo mật:
- Một trong hai khóa phải được giữ bí mật.
- Không thể hay ít nhất không có tính thực
tế để giải mã đoạn tin nếu thông tin khác
không có sẵn.
- Kiến thức về giải thuật cộng với một
trong các khóa, cộng với các mẫu về mật
mã không đủ để xác đònh khóa kia.
- Các sơ đồ mật mã quy ước và mật mã khóa công khai: xem sơ đồ bên
2.3. Ứng dụng của mật mã khóa công khai:
- Tùy thuộc vào ứng dụng, người gởi sử dụng hoặc khóa bí mật của người gởi hoặc
khóa công khai của người nhận hoặc cả hai mà hình thành một số kiểu chức năng của mật
mã khóa. Có 3 chiến lược sau:
+ Mã hóa/giải mã: người gởi mã hóa đoạn tin bằng khóa công khai của người
nhận, người nhận giải mã bằng khóa bí mật của mình.
+ Chữ ký số: người gởi mã hóa đoạn tin (ký tên) bằng khóa bí mật của mình, người
nhận giải mã bằng khóa công khai của người gởi. Chữ ký được áp dụng tới đoạn tin hay tới
một khối dữ liệu nhỏ mà được liên kết trong một số phương thức tới đoạn tin.
+ Chuyển đổi khóa: người gởi mã hóa đoạn tin hai lần, lần 1 sử dụng khóa bí mật
của bản thân, lần 2 sử dụng khóa công khai của người nhận. Người nhận giải mã đoạn tin
nhận được bằng khóa bí mật của bản thân và khóa công khai của người gởi.
- Một số giải thuật cho mật mã khóa công khai: RSA, ECC, LUC, DSS,
Diffie_Hellman…. Trong đồ án này, chỉ trình bày giải thuật RSA.
2.4. Các yêu cầu của mật mã khóa công khai:
- Công việc tính toán thì dễ dàng cho người nhận B tạo cặp khóa: khóa công khai
KU và khóa bí mật KR.
- Công việc tính toán thì dễ dàng cho người gởi A biết khóa công khai và đoạn tin
cần mã hóa M, để tạo mật mã tương ứng: C=E
KUb
(M).
- Công việc tính toán thì dễ dàng cho người nhận B sử dụng khóa bí mật để giải
mã đoạn tin mã hóa C, khôi phục lại đoạn tin đầu:
M= D
KRb
(C)= D
KRb
[E
KUb
(M)]
- Công việc tính toán không thể thấy trước đối với đòch thủ biết khóa công khai
KUb, để xác đònh khóa bí mật KRb.
- Công việc tính toán không thể thấy trước đối với đòch thủ biết khóa công khai KUb
và một mật mã C, để khôi phục đoạn tin ban đầu M.
- Chức năng mã hóa và giải mã có thể được áp dụng theo thứ tự:
M= D
KRb
[E
KUb
(M)]
M= E
KUb
[D
KRb
(M)]
Có thể nhận thấy rằng việc tính Y=f(X) thì dễ dàng trong khi tính X=f
–1
(Y) là
không thể thấy trước. Nói chung từ “dễ dàng” được xác đònh bởi 1 bài toán là nó có thể
được giải quyết trong thời gian nhất đònh (hàm của chiều dài input). Nếu chiều dài input là
n bít thì thời gian để tính hàm đó tỉ lệ với n
a
(a=const). Để đảm bảo tính bảo mật, phải sử
dụng khóa có kích thước đủ lớn (thường trên 100 chữ số thập phân). Ví dụ kích thước khóa
và thời gian bẻ khóa (MIPS năm) trong các giải thuật RSA/DSS và ECC như sau:
RSA (bít) ECC (bít) MIPS năm
512
768
1024
106
132
160
10
4
10
8
10
12
2.5. Giải thuật RSA (Rivest, Shamir và Adleman – 1977):
2.5.1. Mô tả giải thuật:
- Sơ đồ RSA là sơ đồ mã hóa khối: đoạn tin được mã hóa từng khối, với mỗi khối có
giá trò nhỏ hơn n. Việc mã hóa và giải mã theo hình thức sau, cho khối văn bản M và khối
bảo mật C:
C = M
e
mod n
M = C
d
mod n = (M
e
)
d
mod n = M
de
mod n
- Cả hai người gởi và nhận phải biết giá trò n, người gởi biết e và chỉ có người nhận
biết d. Cho nên đây là giải thuật mã hóa với khóa công khai KU=[e,n] và khóa bí mật
KR=[d,n]. Vì giải thuật này thỏa giải thuật mật mã khóa công khai nên các yêu cầu sau
phải được đáp ứng:
+ Có thể tìm thấy giá trò d,e,n để M=M
de
mod n với mọi M<n hay không?
+ Một cách tương đối dễ dàng tính M
e
và C
d
với mọi M<n
hay không?
+ Không thể xác đònh d khi biết e và n.
- Theo lí thuyết của Euler: cho 2 số nguyên tố p và q, 2 số nguyên n và m (n=p*q ,
0<m<n) và số nguyên k. Ta có:
m
k0 (n) + 1
= m
k (p-1) (q-1) + 1
= m mod n
0(n) = 0(pq) = (p-1)(q-1)
Do đó:
nếu: de = k0(n) +1 và gcd(0(n),e) = 1 (gcd: ước số chung)
thì : de mod 0(n) = 1 và d mod 0(n) = e
-1
- Sơ đồ RSA:
+ Giả sử user A đã công bố khóa công khai e của nó và user B muốn gởi đoạn tin
M tới A. Khi đó B tính C = M
e
mod n và truyền C. Khi nhận được đoạn tin C này, user A
giải mã bằng cách tính C
d
mod n. Có thể thấy rằng M = C
d
mod n vì:
de mod 0(n) = 1 hay de = k0(n) + 1
M
k0 (n) + 1
= M
k (p-1) (q-1) + 1
= M mod n = (M
de
mod n) mod n = M
de
mod n
C
d
mod n = (M
e
)
d
mod n = M
de
mod n = M
+ Có thể tóm tắt giải thuật RSA như bảng sau:
Tạo khóa Độ phức tạp
Tạo 2 số nguyên tố lớn p và q
Tính n = p*q, 0(n) = (p-1)*(q-1)
Chọn 1 số ngẫu nhiên 1<e<0(n): gcd(0(n), e) = 1
Tính d: d = e
-1
mod 0(n) (giải thuật Extended Euclidean)
Khóa công khai KU = [e, n]
Khóa bí mật KR = [d, n]
0((logn)
2
)
0((log(0(n))
2
)
0((logn)
3
)
Mã hóa
Đoạn tin : M < n
Mã hóa : C = M
e
mod n
Giải mã
Đoạn tin mã: C
Giải mã : M = C
d
mod n
- Độ phức tạp:
+ Cộng 2 số k bít: 0(k)
+ Nhân 2 số k bít: 0(k
2
)
+ 2 k bít mod n : 0(k
2
)
+ x
c
mod n : 0(k
3
)
Để tính x
c
mod n cần c-1 phép nhân modulus không hiệu quả (do c lớn) sử
dụng giải thuật square_multiply để giảm số phép nhân mod nhiều nhất 2l (l là số bít nhò
phân của c, l<=k với k là số bít nhò phân của x)
- Tốc độ mã hóa trong RSA:
Tốc độ và hiệu quả của nhiều phần mềm thương mại có sẵn và công cụ phần cứng
của RSA đang gia tăng 1 cách nhanh chóng. Với pentium 90Mhz, bộ toolkit BSAFE 3.0 của
cơ quan bảo mật dữ liệu RSA đạt tốc độ tính khóa bí mật là 21,6Kbps với khóa 512 bít và
7,4Kbps với khóa 1024 bít. Phần cứng RSA nhanh nhất đạt hơn 300 Kbps với khóa 512 bít,
nếu được xử lý song song thì đạt 600 Kbps với khóa 512 bít và 185Kbps với khóa 970 bít.
Người ta mong đợi rằng tốc độ RSA sẽ đạt 1Mbps vào cuối năm1999. So sánh với giải thuật
DES và các giải thuật mã khối khác thì RSA chậm hơn: về phần mềm DES nhanh hơn RSA
100 lần, về phần cứng DES nhanh hơn RSA từ 1000 tới 10000 lần tùy thuộc công cụ
(implementation) sử dụng (thông tin này được lấy từ ).
- Kích thước khóa trong RSA:
Tùy thuộc vào tính bảo mật cần thiết của mỗi người và thời gian sống của khóa mà
khóa có chiều dài thích hợp:
+ Loại Export : 512 bít
+ Loại Personnal : 768 bít
+ Loại Commercial: 1024 bít
+ Loại Militery : 2048 bít
- Chu kỳ sống của khóa phụ thuộc:
+ Việc đăng ký và tạo khóa.
+ Việc phân bố khóa.
+ Việc kích hoạt hoặc không kích hoạt khóa.
+ Việc thay thế hoặc cập nhập khóa.
+ Việc hủy bỏ khóa.
+ Việc kết thúc khóa bao gồm sự phá hoại hoặc sự lưu trữ.
2.5.2. Tính bảo mật của giải thuật RSA:
- Vì khóa là công khai, nên người giải mã thường dựa vào cặp khóa này để tìm cặp
khóa bí mật. Điều quan trọng là dựa vào n để tính hai thừa số p, q của n từ đó tính được d.
Có nhiều giải thuật như thế, đầu tiên ta xét trường hợp đơn giản nhất là người giải mã biết
được Φ(n) . Khi đó tính p, q đưa về việc giải hai phương trình sau:
n = p.q
Φ(n) = (p-1)(q-1)
Thay q=n/p ta được phương trình bậc hai:
p
2
– (n - Φ(n) + 1)p + n = 0
Hai nghiệm của phương trình bậc hai này sẽ là p, q. Tuy nhiên vấn đề có được Φ(n)
còn khó hơn tính hai thừa số của n nhiều.
2.5.2.1. Phương pháp p-1:
Chúng ta biết rằng nếu n<10
12
thì việc tìm hai thừa số của n không mấy khó khăn,
bởi việc chia n cho các số từ 1 đến √ n . Giải thuật p-1 được đưa ra vào năm 1974 : số nhập
số lẻ n , và một số B ràng buột. Giải thuật :
Nhập n và B
1. a=2
2. For j=2 to B
A=a
j
mod n
3. d=gcd(a-1, n)
4. if 1<d<n then
d is factor of n (succcess)
else no factor of n is found (failure)
Nội dung của giải thuật này như sau: giả sử n=p.q (p, q chưa biết) và B là 1 số
nguyên đủ lớn, với mỗi thừa số nguyên tố k , k<=B mà k | (p-1) , ta phải có:(p-1) | B!
Tại cuối của vòng lặp bước 2 : a=2
B!
(mod n)
Vì thế : a= 2
B!
(mod p)
Vì p | n. Theo đònh lý Fermat , ta có: 2
p-1
=1 (mod p)
Do (p-1) | B! , nên chúng ta có : a=1 (mod p) (trong bước 3).
Vì thế ở bước 4 : p | (a-1) và p | n, nên nếu d=gcd(a-1, n) thì d=p
Trong giải thuật này có B-1 phép tính modular bằng lũy thừa, mỗi phép đòi hỏi
2log
2
B phép modular, phép tính USCLN cần thời gian O((log)
3
), giải thuật Euclidean cần
thực hiện trong thời gian O((log n)
3
). Nên độ phức tạp của giải thuật là O(BlogB(logn)
2
+
(logn)
3
)
Tuy nhiên xác xuất thành công trong việc chọn B là rất nhỏ, mặt khác nếu gia tăng
kích thước B rất lớn chẳng hạn sqrt(n) thì giải thuật sẽ thành công , nhưng không nhanh hơn
giải thuật chia dần như trình bày trên . Điều rút ra từ giải thuật này là: n có thừa số nguyên
tố p mà (p-1) chỉ có các ước số nguyên tố “nhỏ” . Rất dễ dàng để xây dựng mã hóa công
khai mà không bò tấn công của phương pháp này. Cách đơn giản nhất là tìm môt số nguyên
tố p1 lớn , mà p=2p1+1 cũng là số nguyên tố, tương tự tìm q1 nguyên tố lớn và q=2q1+1
nguyên tố (sử dụng giải thuật Monte _ Carlos).
2.5.2.2. Bẻ khóa khi biết được số mũ d của hàm giải mã:
- Việc tính số d không dễ dàng, bởi vì đây là khóa bí mật nên nếu biết nó thì có thể
giải mã được mọi đoạn tin tương ứng . Tuy nhiên giải thuật này mang nhiều ý nghóa lý
thuyết, nó cho chúng ta biết rằng nếu có d thì ta có thể tính các thừa số của n .Nếu điều này
xảy ra thì người sở hữu khóa này không thể thay đổi khóa công khai, mà phải thay luôn số
n.
- Giải thuật này dựa trên cơ bản là nếu n=pq với p, q là hai số nguyên tố lẻ và x
2
=1
(mod n) có kết quả chỉ là x=1 hay –1 (mod n), tương tự x
2
=1 (mod n) có lời giải như thế.
Ta có x
2
=1 (mod n) tương đương x
2
= 1 (mod p) và x
2
= 1 (mod q). Vì thế có bốn căn
bậc hai của 1 modulo n, chúng ta có thể sử dụng lý thuyết số dư Trung Hoa.
- Giải thuật như sau :
+ Chúng ta có thể phân tích giải thuật, đầu tiên nếu may mắn chọn w là bội số của
n thì tìm ra p, q ngay. Nếu w nguyên tố cùng nhau với n thì chúng ta tính w
r
, w
2r
, w
4r,
…
modulo n cho đến khi tồn tại t sao cho:
w
2r T
=1 (mod n)
và ab –1 =2
s
r=0(mod Φ(n))
+ Cuối cùng, tại cuối vòng lặp while chúng ta tìm thấy v
o
sao cho v
2
o
=1 (mod n)
nhưng v
o
<> 1 (mod n). Bước 12 tìm USCLN(v
o
+1,n) ta tìm được p hay q.
1. chọn w bất kỳ mà 1<= w<=n
2. tính x=uscln(w,n)
3. if 1<x<n then quit (thành công nếu x=p hay x=q)
4. tính a=A(b)
5. đặt ab-1=2
s
r , r lẻ
6. tính v=w
r
mod n
7. if v=1 (mod n)then quit (thất bại)
8 8. while v<>1 (mod n) do
9. v
0
=v
9 v=v
2
mod n
10 10. if v
o
=-1 (mod n) thenquit (thất bại)
11 11. else tính x=uscln(v
o
+1,n) ( thành công x=p;x=q)
2.5.2.3. Bẻ khóa dựa trên các attack lặp lại:
Siimons và Norris đã chỉ ra rằng hệ thống RSA có thể bò tổn thương khi sử dụng tấn
công lặp liên tiếp (iteration attack). Đó là khi đối thủ biết cặp khóa công khai {n,e} và mật
mã C thì anh ta có thể tính chuỗi các mật mã sau:
C
1
= C
e
(mod n)
C
2
= C
1
e
(mod n)
………………………………..
C
i
= C
i-1
e
(mod n)
Nếu có một phần tử C
j
trong chuỗi C
1
, C
2
, …, C
i
, … sao cho C
j
= C thì khi đóanh ta sẽ
tìm được M = C
j-1
bởi vì:
C
j
= C
j-1
e
(mod n)
C = M
e
(mod n)
Ví dụ: giả sử đối thủ biết {n, e, C} = {35, 17, 3} và anh ta tính:
C
1
= C
e
(mod n) = 3
17
(mod 35) = 33
C
2
= C
1
e
(mod n) = 33
17
(mod 35) = 3
Vì C
2
= C nên M = C
1
= 33.
2.5.3. Sự che dấu thông tin trong hệ thống RSA
Hệ thống RSA có một đặc điểm đặc trưng là thông tin không phải luôn luôn được
che dấu. Giả sử người gởi có e = 17, n = 35. Nếu anh ta muốn gởi bất cứ data nào thuộc tập
sau:
{1, 6, 7, 8, 13, 14, 15, 20, 21, 22, 27, 28, 29, 34}
thì mọi mật mã cũng chính là data ban đầu. Nghiã là: M = M
e
mod n. Còn khi p=109, q=97,
e=865 thì hệ thống hoàn toàn không có sự che dấu thông tin , bởi vì:
M = M
865
mod (109*97) với mọi M
Với mỗi modulus n, không che dấu được ít nhất là 9 message:
M = M
e
mod n (1)
Hay: M = M
e
mod p và M = M
e
mod q (2)
Với mỗi e, (2) có ít nhất 3 giải pháp thuộc tập {0, 1, -1}. Do đó tất cả message thỏa
(1) là:
{M = [M (mod p), M (mod q)] / M (mod p), M (mod q) ∈ {0, 1, -1}}
Để xác đònh chính xác số message không được che dấu (không bò thay đổi sau khi
mã hóa) ta sử dụng đònh lý sau:
“ Nếu các message được mã hóa trong hệ thống RSA được xác đònh bởi số modulus
n = pq (p, q la nguyên tố) và khóa công khai e thì có:
m = [1 + gcd(e-1, p-1)][1 + gcd(e-1), q-1]
message không bò che dấu”.
2.5.4. Các giải thuật toán học được sử dụng trong RSA:
2.5.4.1. Giải thuật Euclidean – tìm USCLN của hai số nguyên:
Cho hai số nguyên r
o
và r
1
, giải thuật Euclidean gồm những phép tính sau:
r
o
= q
1
.r
1
+ r
2
r
1
= q
2
.r
2
+r
3
. .
.
r
m-2
= q
m-1
.r
m-1
+ r
m
r
m
= q
m
.r
m
Thì gcd(r
o
,r
1
) = r
m
2.5.4.2. Lý thuyết số dư Trung Hoa:
Giả sử m
1
,m
2
, …m
r
có từng cặp nguyên tố cùng nhau và giả sử a
1,
a
2,
…a
r
là những số
nguyên . Cho r phương trình x= a
I
(mod m
i
) (1<= I<=r) có một lời giải duy nhất
x=Σ a
i
M
i
y
i
i=1
trong đó M
i
=M/m
I
và y
I
=M
I
-1
mod m
I
, M=m
1*
m
2*
…m
r
2.5.4.3. Giải thuật Euclidean mở rộng:
n
0
=n
b
o
=b
t
o
=t
t=1
q=[n
o
/b
o
]
r= n
o
– q.b
o
while r>0 do
temp=t
o
–q.t
if temp>=0 then temp=temp mod n
if temp<0 then temp =n-((-temp) mod n)
t
o
=t
t=temp
n
o
=b
o
b
o
=r
q=[n
o
/b
o
]
r= n
o
–q.b
o
if b
o
<>1 then
b has no inverse modulo n
else b
-1
= t mod n
2.5.4.4. Giải thuật Miller –Rabin kiểm tra số nguyên tố lẻ:
1. Write n-1 =2
k
m ,
where m is odd
2 2. Chose a random integer a , 1<=a<=n-1
3 3. Compute b=a
m
mod n
4. If b=1 (mod n) then anwser “n is prime “ and quit
4 5. for i=0 to k-1 do
if b=-1(mod n) then anwser “n is prime “ and quit
else b=b
2
mod n
6. answer “n is composite”
2.5.4.5. Giải thuật tính x
b
mod n:
Đầu tiên ta phân tích số nguyên b dưới dạng nhò phân b=Σ b
I
2
I
(I=0 đến l)
z=1
for i=l-1 downto do
z=z
2
mod n
if b
I
=1 then z=z .z mod n
3. Giải thuật băm MD5
- Để kiểm tra tính toàn vẹn của một khối data lớn, người ta sử dụng chữ ký số để đại
diện cho khối data đó (giống như chữ ký trên văn bản) bằng cách dùng hàm băm: với input
là một message bất kỳ, output là một chuỗi bít có chiều dài xác đònh trước, chuỗi bít này
được gọi là message_digest.
- Các tính chất cơ bản của hàm băm:
+ Là hàm một chiều, không thể thực hiện phép biến đổi ngược như trong quá trình
mã hóa và giải mã, nghóa là với một message_digest cho trước, khó có thể tìm được một
message nào mà có hàm băm bằng message_digest này.
+ Khó có thể tìm được hai message mà có cùng một message_digest.
- Các giải thuật băm được sử dụng hiện nay là: MD2, MD4, MD5, SHS. Trong đó
MD5 là giải thuật băm được sử dụng phổ biến và nó sẽ được trình bày trong phần dưới.
- Giải thuật MD5 được phát triển bởi Ron Rivest ở MIT: nhận đầu vào là một khối
data (message) có chiều dài bất kỳ, xử lý nó thành các khối 512 bít, tạo đầu ra là một
message_digest 128 bít. Quá trình bao gồm các bước sau:
* Bước 1: message ban đầu được thêm (padding) một số bít (bắt đầu là bít 1, kế tiếp
là các bít 0, số bít thêm vào từ 1 tới 512 bít) sao cho tổng số bít sau khi thêm vào cộng với
64 (chiềi dài của message ban đầu) là bội số của 512.
K bít
Bội số của 512 bít
1..512 bít Chiều dài message