1
CHƯƠNG 3
MẬT MÃBẤTĐỐI XỨNG
I-TỔNG QUAN
I.1- Mật mãbấtđối xứng
Mậtmãbấtđối xứng (asymmetric cryptography) còn có tên gọi khác là mậtmã khóa
công khai (public key cryptography) hoặc mậtmã hai khóa (two-key cryptography). Tài liệu
này thống nhất dùng thuật ngữ mậtmãbấtđối xứng để chỉ tất cả các thuật toán mậtmã trong
đó dùng hai khóa khác nhau cho quá trình mã hóa và quá trình giải mã.
Đặc trưng của kỹ thuật mậtmãbấtđối xứng là dùng 2 khóa riêng biệt cho hai việc mã
hóa và giải mã. Một trong hai khóa được phổ biến công khai gọi là khóa công khai (public
key hay PU), khóa còn lại được giữ bí mật gọi là khóa riêng (private key hay PR). Nếu quá
trình mã hóa dùng khóa PU thì quá trình giải mã phải dùng khóa PR và ngược lại.
Nói chung, mậtmã hóa bấtđối xứng không phải là một kỹ thuật mậtmã an tòan hơn
so với mậtmãđối xứng, mà độ an tòan của một thuật toán mã nói chung phụ thuộc vào 2 yếu
tố: Độ dài của khóa và mức độ phức tạp khi thực hiện thuật tóan (trên máy tính). Hơn nữa,
mặc dù được ra đời sau nhưng không có nghĩa rằng mậtmãbấtđối xứng hòan tòan ưu điểm
hơn và sẽ được sử dụng thay thế cho mậtmãđối xứng. Mỗi kỹ thuật mã có một thế mạnh
riêng và mậtmãđối xứng vẫn rất thích hợp cho các hệ thống nhỏ và đơn giản. Ngoài ra, vấn
đề phân phối khóa trong mậtmãbấtđối xứng cũng được đánh giá là một trong những vấn đề
phức tạp khi triển khai kỹ thuật mậtmã này trong thực tế.
I.2- Nguyên tắc hoạt động
Các thành phần của một hệ thống mậtmãbấtđối xứng tương tự như một hệ thống mật
mã quy ước, chỉ khác nhau ở chi tiết dùng hai khóa K khác nhau cho hai bước mã hóa và giải
mã. Khi user muốn gởi thông tin cho một user khác thì phải có khóa PU của user nhận, do
vậy, mỗi user phải lưu trữ sẵn một danh sách các khóa công khai của nhiều user khác có quan
hệ trao đổi dữ liệu. Một cơ chế để quản lý các khóa công khai này trên máy tính được gọi là
key ring.
Các bước cơ bản của một hệ thống mậtmã dùng khóa công khai bao gồm:
• Mỗi thực thể thông tin (user) tạo ra một cặp khóa (public/private) để dùng cho
việc mã hóa và giải mã.
• Mỗi user thông báo một trong hai khoá của mình cho các user khác biết, khóa
này được gọi là khóa công khai (public key). Khóa còn lại được giữ bí mật, và
gọi là khóa riêng (private key).
• Nếu một user A muốn gởi thông tin cho user B, user A sẽ thực hiện mã hóa
thông tin cần gởi bằng khóa công khai của user B.
• Khi nhận được thông tin đã mã hóa từ user A, user B thực hiện giải mã thông
tin đó bằng khóa riêng của mình. Do khóa riêng không phổ biến công khai nên
chỉ có một mình user B có khả năng giải mã được.
I.3- Ứng dụng của mậtmãđối xứng:
Mật mã hóa bấtđối xứng được sử dụng cho các mục đích sau đây:
-Bảo mật thông tin (message confidentiality)
2
-Xác thực nguồn gốc thông tin bằng chữ ký số (digital signature)
-Trao đổi khóa trong các thuật toán mãđối xứng (key exchange).
I.4- Tấn công mậtmãbấtđối xứng:
Các thuật toán mậtmãbấtđối xứng dựa trên cơ sở lý thuyết số và các phép tính số học
trên số nguyên rất lớn, do đó, độ an toàn của hệ thống mã phụ thuộc vào các yếu tố sau đây:
-Các thao tác tạo cặp khóa, mã hóa và giải mã phải dễ thực hiện khi có đầy đủ thông
tin (khóa công khai, khóa riêng, thông tin gốc, thông tin mật) tùy theo từng tình huống.
-Các thao tác tìm khóa riêng từ khóa công khai hoặc giải mã bằng khóa công khai
không thể thực hiện được
.
User E
User C
User B
User D
Khoá công khai
của user B
Khoá bí mật của
user B
T
ập khoá
công khai
Thông
tin gốc
Thu
ật toán m
ã hoá
(thực hiện bởi user A)
Thu
ật toán giải m
ã
(thực hiện bởi user B)
Thông tin mật
Thông
tin gốc
a- Ứng dụng bảo mật thông tin
Thông
tin gốc
Thông
tin gốc
Thu
ật toán m
ã hoá
(thực hiện bởi user A)
Thu
ật toán giải m
ã
(th
ực hiện bởi user B)
b- Ứng dụng xác thực thông tin
User D
User A
User C
User E
T
ập khoá
công khai
Khoá bí mật
của user A
Khoá công khai
của user A
Thông tin mật
Hình 3.1: Cấu trúc hệ thống mật mãbấtđối xứng
3
Một số kỹ thuật tấn công hệ thống mật mãbấtđối xứng:
-Tấn công bằng cách dò khóa (brute – force): thử lần lượt các khóa giống như tấn công
hệ thống mã quy ước. Thách thức đối với hacker cũng chính là thời gian thực hiện tấn công,
được xác định bởi số lần thử, và số lần thử lại được xác định bởi chiều dài khóa. Ngoài ra, độ
phức tạp tính toán của mãbấtđối xứng cao hơn nhiều so với mãđối xứng, công chiều dài
khóa lên đến hàng ngàn bit thì kiểu tấn công này xem như không thực hiện được.
-Tấn công bằng cách phân tích mã: dùng các công cụ toán để tìm khóa riêng sau khi
biết khóa công khai. Cho đến nay, chưa tồn tại một chứng nào cho thấy có thể tìm được PR từ
PU, do đó nguy cơ này xem như là rất thấp.
-Một kỹ thuật tấn công đặc thù của mậtmãđối xứng được sử dụng khi thông tin cần
truyền đi có kích thước nhỏ (ví dụ khóa DES 56 bit), thì quá trình dò khóa chuyển thành dò
khóa DES.
II- THUẬT TOÁN MẬTMÃ RSA
II.1- Cơ chế hoạt động
RSA là thuật toán mật mãbấtđối xứng được xây dựng bởi Ron Rivest, Adi Shamir và
Len Adleman tại viện công nghệ Massachusetts (MIT), do đó được đặt tên là Rivest – Shamir
– Adleman hay RSA. Thuật toán này ra đời năm 1977 và cho đến nay đã được ứng dụng trong
nhiều lĩnh vực. Cũng như các thuật toán mậtmãbấtđối xứng khác, nguyên lý của RSA dựa
chủ yếu trên lý thuyết số chứ không dựa trên các thao tác xử lý bit.
RSA là một thuật toán mậtmã khối, kích thước khối thông thường là 1024 hoặc 2048
bit. Thông tin gốc của RSA được xử lý như các số nguyên. Ví dụ, khi chọn kích thước khối
của thuật toán là 1024 bit thì số nguyên này có giá trị từ 0 đến 2
1024
– 1, tương đương với số
thập phân có 309 chữ số. Chú ý rằng đây là những số nguyên cực lớn, không thể xử lý được
bằng cách sử dụng các cấu trúc dữ liệu có sẵn của các ngôn ngữ lập trình phổ biến.
Thuật toán RSA được mô tả như sau:
1-Để tạo ra một cặp khóa RSA, trước hết, chọn hai số nguyên tố đủ lớn p và q. Gọi N
là tích của p và q (N = pq).
2-Tiếp theo, chọn một số e sao cho e và (p-1)(q-1) là hai số nguyên tố cùng nhau. Sau
đó tìm số d sao cho ed = 1 mod (p-1)(q-1). Ký hiệu mod m biểu diễn phép modulo trên cơ số
m.
3-Bây giờ, bỏ qua vai trò của p và q. Với 3 thành phần còn lại là N, e và d, ta đó:
-Khóa công khai (public key) là tổ hợp (N, e)
-Khóa bí mật (private) là tổ hợp (N, d).
4-Việc mã hóa một khối thông tin gốc M được thực hiện theo công thức:
C = M
e
mod N (với M là số nguyên nhỏ hơn N)
5-Và quá trình giải mã C được thực hiện theo công thức:
M = C
d
mod N
Cơ sở lý thuyết của thuật toán RSA dựa trên lý thuyết về số nguyên tố, phép toán
modulo và định lý Euler như sau:
Hàm Euler: Cho một số nguyên dương n, định nghĩa φ(n) là số các số nguyên dương
nhỏ hơn n và là số nguyên tố cùng nhau với n. Ví dụ: cho n = 8, các số nguyên dương nhỏ hơn
4
8 và là số nguyên tố cùng nhau với 8 là các số 1, 3, 5, 7, do đó φ(8) = 4. φ(n) được gọi là hàm
Euler của n.
-Quy ước φ(1) = 1.
-Nếu n là số nguyên tố thì tất cả các số nguyên dương nhỏ hơn n đều là số nguyên tố
cùng nhau với n, khi đó φ(n) = n -1.
-Nếu p và q là hai số nguyên tố và N = pq. Khi đó φ(N) = φ(p) . φ(q). Thật vậy, trong
N-1 hay (pq-1) số nguyên dương nhỏ hơn N: các số p, 2p, …, (q-1)p và các số q, 2q, …, (p-
1)q là các số không phải nguyên tố cùng nhau với N. Như vậy:
φ(N) = (pq – 1) – [(p – 1 ) + (q – 1)]
= pq – (p + q) + 1
= (p – 1) (q – 1)
= φ(p) . φ(q)
Định lý Euler: cho a và n là hai số nguyên tố cùng nhau, ta có a
φ(n)
= 1 mod n.
Ta chấp nhận định lý này mà không phải chứng minh.
Với những cơ sở này, ta có thể kiểm chứng thuật toán RSA như sau:
Cho trước khối thông tin mật C = M
e
mod N, cần kiểm chứng rằng M = C
d
mod N. Ta
có:
C
d
mod N = (M
e
)
d
mod N = M
ed
mod N
Xét quá trình tạo cặp khoá của RSA, ta có:
ed = 1 mod (p – 1) (q – 1)
Hơn nữa, N = pq nên φ(N) = (p – 1) (q – 1) với p, q là các số nguyên tố.
Như vậy:
ed – 1 = k φ(N) với một số nguyên k nào đó.
Hay ed = kφ(N) + 1
Trước hết, ta chứng minh rằng M
k(p - 1)(q - 1) + 1
mod p = M mod p. Thật vậy, xét hai
trường hợp:
-Nếu M và p không phải cặp số nguyên tố cùng nhau, tức M chia hết cho p (vì p là số
nguyên tố), hay:
M mod p = 0 ⇒ M
k(p-1)(q-1) + 1
mod p = M mod p
-Nếu M và p là cặp số nguyên tố cùng nhau, theo định lý Euler, ta có M
φ(p)
mod p = 1
hay M
φ(p - 1)
mod p = 1. Ta lại có:
M
k(p - 1)(q - 1) + 1
mod p = [(M)M
k(p - 1)(q - 1)
] mod p
= [(M)(M
p - 1)
)
k(q - 1)
] mod p
= [(M)(M
φ(p)
)
k(q - 1)
] mod p
= (M mod p) * [(M
φ(p)
) mod p]
k(q - 1
)
= (M mod p) * (1)
k(q - 1)
= M mod P
Vậy, M
k(p-1)(q-1)+1
mod p = M mod p
5
Xét [M
k(p - 1)(q - 1)+1
- M] mod p = [M
k(p - 1)(q - 1)+1
mod p] - [M mod p] = 0
Cho thấy [M
k(p - 1)(q - 1) + 1
- M] chia hết cho p. Lý luận tương tự như vậy, ta cũng có
[M
k(p - 1)(q - 1) + 1
- M] chia hết cho q. Mà p và q là hai số nguyên tố phân biệt nên tồn tại một số
nguyên r sao cho [M
k(p - 1)(q - 1)+1
- M] = (pq)r = Nr. Do đó:
[M
k(p - 1)(q - 1) + 1
- M] mod n = 0
(M
kφ(N)+ 1
mod N) - (M mod N) = 0
(M
kφ(N)+ 1
mod N) = M mod N = M
Ví dụ: Cặp số nguyên tố p = 11 và q = 3 được chọn để tạo ra cặp khoá RSA cho user
A.
Khi đó, N = pq = 3*11 = 33
(p-1) (q-1) = (11 – 1) (3 – 1) = 20
Tiếp theo, chọn e = 3 thoả điều kiện 3 và 20 là cặp số nguyên tố cùng nhau.
Với e = 3, ta xác định được d = 7 vì ed = 3*7 = 1 mod 20. Thật ra, có nhiều giá trị d
thỏa mãn yêu cầu này, nhưng để cho đơn giản, ta chọn giá trị nhỏ nhất.
Khi đó, ta xác định được cặp khóa như sau:
Khóa công khai: (N, e) = (33, 3)
Khóa bí mật: (N, d) = (33, 7)
Giả sử, user B muốn gởi đọan thông tin M = 15 cho user A, dựa trên khóa công khai
của A, B thực hiện như sau:
C = M
e
mod N = 15
3
mod 33 = 3375 mod 33 = 9 mod 33.
Khi đó, thông tin mật gởi cho A là C = 9.
Khi nhận được thông tin này, A giải mã bằng khóa riêng của mình (d = 7) như sau:
M = C
d
mob N = 9
7
mod 33 = 4.782.969 mod 33 = 15 mod 33.
Như vậy, thông tin giải mã được là M = 15, đúng với thông tin gốc ban đầu.
Tóm lại, thuật toán mậtmã RSA được thực hiện gồm 3 quá trình tách rời: tạo khoá,
mã hoá và giải mã được tóm tắt như sau:
1-Tạo khoá:
• Chọn p, q (p và q là số nguyên tố, p
≠
q)
• Tính N = p.q
• Tính
φ
φφ
φ
(N) = (p – 1) (q – 1)
• Chọn e sao ước số chung lớn nhất của e và
φ
φφ
φ
(N) là 1
• Chọn d sao cho e.d mod
φ
φφ
φ
(N) = 1
• Cặp khoá RSA được tạo ra là PU = (N, e), PR = (N, d)
2- Mã hoá:
• C = M
e
mod N (M là số nguyên nhỏ hơn N)
3- Giải mã:
• M = C
d
mod N
6
II.2- Cải thiện tốc độ của RSA
Trong thực tế, để đạt được độ an tòan cao, cặp khóa phải được chọn trên các số p và q
đủ lớn (N nhỏ nhất phải là 1024 bit), do vậy, vấn đề thực thi RSA bao gồm các phép tóan lũy
thừa trên các số rất lớn. Vấn đề giảm chi phí tính tóan và tăng tốc độ thực hiện thuật tóan
RSA là một trong những vấn đề quan trọng cần phải giải quyết.
-Phép lũy thừa trên số lớn:
Phép lũy thừa thực chất là phép nhân được thực hiện nhiều lần. Trong thuật toán RSA, các
phép lũy thừa bậc cao được rút gọn dựa vào tính chất sau đây của số học modulo:
[(a mod n) * (b mod n)] mod n = (a * b) mod n
Kết hợp với nguyên tắc của phép lỹ thừa: x
y
*x
y
= x
2y
và x*x
y
= x
y+1
, ta xây dựng cách
tính bằng cách thực hiện các phép lũy thừa liên tục như sau:
• Biểu diễn số mũ của lũy thừa dưới dạng số nhị phân
• Tách số mũ dạng nhị phân thành nhiều số mũ trung gian bằng cách thêm dần
từng bit, bắt đầu từ bit đầu tiên.
• Thực hiện phép lũy thừa modulo n ứng với các số mũ trung gian vừa tạo.
Ví dụ: cần tính 5
20
mod 35. Nếu thực hiện theo cách thông thường, ta phải thực hiện
19 phép nhân và 1 phép chia lấy dư với kết quả như sau:
5
20
mod 35 = 95.367.431.640.625 mod 35 = 25
Mặc dù biết kết quả chắc chắn là một số nguyên có giá trị từ 0 đến 34, nhưng ta phải
tính các giá trị trung gian là các số nguyên lên đến 14 chữ số. Áp dụng cách tính ở trên cho ví
dụ này:
-Biểu diễn số mũ dưới dạng nhị phân
20 = 10100
-Tách số mũ thành nhiều số mũ trung gian:
1 10 101 1010 10100 (nhị phân)
1 2 5 10 20 (thập phân)
-Thực hiện các phép lũy thừa modulo n với các số mũ trung gian vừa tạo
5
1
mod 35 = 5 mod 35 = 5
5
2
mod 35 = (5
1
)
2
mod 35 = 25
5
5
mod 35 = (5
2
)
2
* 5
1
mod 35 =25 * 5 mod 35 = 10
5
10
mod 35 = (5
5
)
2
mod 35 = 10 * 10 mod 35 = 30
5
20
mod 35 = (5
10
)
2
mod 35 = 30 * 30 mod 35 = 25
-Chọn khóa công khai (e): Với cách tính lũy thừa như trên, ta thấy rằng nếu số mũ sau
khi chuyển thành số nhị phân có số bit 1 càng ít thì thao tác thực hiện càng đơn giản. Do đó,
để tăng tốc độ mã hóa, trong thực tế thường chọn e là các giá trị phổ biến như 3, 17 (tức 2
4+1
)
hoặc 65537 (tức 2
16+1
), dĩ nhiên là với N khác nhau (tạo thành từ các cặp p và q khác nhau).
Tuy nhiên, các giá trị này nếu sử dụng không đúng cách sẽ tạo ra các lỗ hổng bảo mật quan
trọng của RSA, có thể tấn công dùng định lý số dư Trung hoa (CRT)
1
.
1
Xem thêm về định lý số dư Trung hoa (Chinese Remainder Theorem)
7
-Tăng tốc độ giải mã: Khác với khóa công khai, khóa riêng (d) cần phải là số lớn và có
tính ngẫu nhiên cao. Tuy nhiên d càng lớn thì tốc độ giải mã càng chậm. Có thể áp dụng kết
quả của định lý CRT để tăng tốc độ giải mã như sau:
Tính trước các biến trung gian như sau:
X
p
= q * (q
-1
mod p)
X
q
= p * (p
-1
mod q)
Sau đó, khi có C, ta tiếp tục tính
V
p
= C
d
mod p
V
q
= C
d
mod q
Khi đó, M = (V
p
X
p
+ V
q
X
q
) mod N là kết quả giải mã của C
Ngoài ra, còn có thể áp dụng định lý Fermat để đơn giản hóa cách tính V
p
và V
q
như
sau:
V
p
= C
d
mod p = C
d mod (p - 1)
mod p
V
q
= C
d
mod q = C
d mod (q - 1)
mod q
Các giá trị Xp và Xq được tính trước, một lần duy nhất ứng với một giá trị của khóa
riêng d. Quá trình giải mã áp dụng CRT để tăng tốc độ thực thi, thì cũng đồng thời tăng thêm
cơ hội tấn công RSA cho hacker. Một số phân tích đã chỉ ra được điểm yếu này của thuật
toán.
-Tìm số nguyên tố lớn, ngẫu nhiên: việc tìm một số nguyên tố ngẫu nhiên thường
được tiến hành theo cách: sinh ra một số ngẫu nhiên, kiểm tra xem số đó có phải nguyên tố
không. Nếu là số nguyên tố thì dùng, nếu không phải thì chọn số ngẫu nhiên khác. Do p và q
là các số lớn, việc tạo số ngẫu nhiên và kiểm tra nguyên tố đều là những thao tác chiếm nhiều
thời gian. Nhiều phương pháp đưa ra nhằm giảm thời gian tìm kiếm này, chủ yếu dựa vào
nguyên tắc gần đúng: chọn một số lẻ n, kiểm tra xem n có khả năng là số nguyên tố hay
không, nếu chắc chắn không phải thì bỏ n chọn số khác, ngược lại, n có thể là nguyên tố. Lặp
lại thao tác này nhiều lần, thì xác suất n là nguyên tố có thể lên đến 100%. Miller-Rabin là
một thuật toán như vậy.
-Độ an toàn của RSA:
Theo lý thuyết, hệ thống RSA có thể bị tấn công bằng những phương thức sau đây:
• Brute-force attack: tìm lần lượt khoá riêng PR
• Mathematical attack: xác định p và q bằng cách phân tích N thành tích của các
thừa số nguyên tố rồi từ đó xác định e và d.
• Timing attack: dựa trên thời gian thực thi của thuật toán giải mã.
• Chosen ciphertext attack: sử dụng các đọan thông tin mật (ciphertext) đặc biệt
để khôi phục thông tin gốc.
Tuy nhiên trong thực tế, nguy cơ tấn công các hệ thống mậtmã RSA là rất thấp, do
RSA là một thuật toán linh động, kích thước khối dữ liệu gốc và chiều dài khoá dễ dàng được
thay đổimà không ảnh hưởng đến thuật toán mã.
III- THUẬT TOÁN TRAO ĐỔI KHÓA DIFFIE-HELLMAN
III.1- Thủ tục trao đổi khóa dùng Diffie-Hellman
8
Diffie-Hellman là một thuật toán dùng để trao đổi khóa (key exchange) chứ không
dùng để mậtmã hóa (che giấu) dữ liệu. Tuy nhiên, Deffie-Hellman lại có ích trong giai đọan
trao đổi khóa bí mật của các thuật toán mậtmãđối xứng. Như đã trình bày ở phần mậtmãđối
xứng, một trong những vấn đề quan trọng liên quan trực tiếp đến tính an toàn của các thuật
toán mậtmãđối xứng là vấn đề thống nhất khoá bí mật giữa các thực thể thông tin.
Thuật toán trao đổi khoá Diffie-Hellman dựa trên phép logarit rời rạc (discrete log).
Cho trước một số g và x = g
k
, để tìm k, ta đơn giản thực hiện phép logarit: k = log
g
(x). Tuy
nhiên, nếu cho trước g, p và (g
k
mod p), thì quá trình xác định k được thực hiện theo cách
khác với cách ở trên và được gọi là logarit rời rạc. Việc tính logarit rời rạc nói chung rất phức
tạp, gần như không thực hiện với chi phí thời gian chấp nhận được.
Thuật tóan Diffie-Hellman khá đơn giản như sau:
-Gọi p là một số nguyên tố và g là một số nguyên thoả điều kiện với mọi x ∈ {1, 2, …,
p - 1}, ta luôn tìm được số n sao cho x = g
n
mod p. Như vậy, tập các nguyên từ 0 đến p – 1 tạo
thành một nhóm cyclic với phần tử sinh g.
-Giá trị p và g được phổ biến công khai giữa các thực thể trao đổi khoá.
-User A tạo ra một số bí mật X
a
< p, tính giá trị Y
a
= (g
Xa
mod p) và gởi cho B.
-User B cũng tạo ra một số bí mật X
b
< p, tính giá trị Y
b
= (g
b
mod p) và gởi lại cho A.
-User B xác định giá trị K
B
= (Y
a
)
Xb
mod p = (g
Xa
mod p)
Xb
= (g
XaXb
mod p).
-User A xác định giá trị K
A
= (Y
b
)
Xa
mod p = (g
Xb
mod p)
Xa
= (g
XaXb
mod p).
-Do K
A
= K
B
, ta nói hai bên A và B đã trao đổi thành công khóa K.
-Giả sử trong quá trình trao đổi các giá trị (g
Xa
mod p) và (g
Xb
mod p), một người thứ
3 nào nó bắt được thông tin này thì cũng không xác định được Xa và Xb vì độ phức tạp của
phép tóan logarit rời rạc là rất cao.
Ví dụ:
Cho p = 353 và g = 3. Có thể kiểm chứng được rằng với một số nguyên n bất kỳ sao
cho 0 < n < 353, ta luôn xác định được một số nguyên i thoả 3
i
= n.
Giả sử, user A chọn giá trị bí mật X
a
= 97 và user B chọn giá trị bí mật X
b
= 233.
User A tính được Y
a
= (3
97
mod 353) = 40 và gởi cho B.
User B tính được Y
b
= (3
233
mod 353) = 248 và gởi cho A.
User A tính được khoá bí mật K = (Y
b
)
Xa
mod 353 = 248
97
mod 353 = 160
User B tính được khoá bí mật K = (Y
a
)
Xb
mod 353 = 40
97
mod 353 = 160
Chọn số bí mật X
a
< p
Tính Y
a
= (g
Xa
mod p)
và gởi cho B
Tính K = (Y
b
)
Xa
mod p
Chọn số bí mật X
b
< p
Tính Y
b
= (g
Xb
mod p)
và gởi cho A
Tính K = (Y
a
)
Xb
mod p
User A User B
Hình 3.2: Thuật toán trao đổi khoá Diffie-Hellman
9
III.2- Độ an toàn của thuật toán trao đổi khoá Diffie-Hellman
Tính an toàn của Diffie-Hellman dựa trên độ phức tạp của phép toán logarit rời rạc.
Nói chung, việc xác định các giá trị X
a
, X
b
từ các giá trị p, g, Y
a
và Y
b
là không thể thực hiện
được trên các số nguyên đủ lớn. Tuy nhiên, thuật toán này không ngăn chặn được các tấn
công theo phương thức xen giữa Man-In-The-Middle (MITM) như sau:
• Để thực hiện tấn công MITM trên kết nối giữa user A và user B, user C cũng
chọn cho mình hai số nguyên X
C1
và X
C2
thoả điều kiện X
C1
< p và X
C2
< p,
sau đó cũng tính hai giá trị tương ứng Y
C1
= (g
Xc1
mod p) và Y
C2
= (g
Xc2
mod
p).
• Khi user A gởi Y
a
cho user B, user C sẽ chặn lấy thông tin này, đồng thời mạo
danh A để gởi cho B giá trị Y
C1
. User B xác định khoá K
1
dựa trên Y
C1
, và gởi
lại cho A giá trị Y
b
. User C lại chặn lấy giá trị này và mạo danh B để gởi cho A
giá trị Y
C2
.
• User A xác định khoá K
2
dựa trên Y
C2
. Bắt đầu từ đây, các thông tin trao đổi
giữa A và B đều được C chặn bắt và thay đổi bằng cách sử dụng cặp khoá K
1
và K
2
.
Thuật toán Diffie-Hellman không giải quyết được vấn đề này do không có cơ chế xác
thực giữa các thực thể trao đổi khoá. Điểm yếu này được khắc phục bằng cách sử dụng kết
hợp với các thuật toán xác thực đầu cuối.
. 1 CHƯƠNG 3 MẬT MÃ BẤT ĐỐI XỨNG I-TỔNG QUAN I.1- Mật mã bất đối xứng Mật mã bất đối xứng (asymmetric cryptography) còn có tên gọi khác là mật mã khóa công khai (public. được Y a = (3 97 mod 35 3) = 40 và gởi cho B. User B tính được Y b = (3 233 mod 35 3) = 248 và gởi cho A. User A tính được khoá bí mật K = (Y b ) Xa mod 35 3 = 248 97 mod 35 3 = 160 User. mod 35 = 5 mod 35 = 5 5 2 mod 35 = (5 1 ) 2 mod 35 = 25 5 5 mod 35 = (5 2 ) 2 * 5 1 mod 35 =25 * 5 mod 35 = 10 5 10 mod 35 = (5 5 ) 2 mod 35 = 10 * 10 mod 35 = 30 5 20 mod 35 =