Tài liệu này thống nhất dùng thuật ngữ mật mã bất đối xứng để chỉ tất cả các thuật toán mật mã trong đó dùng hai khóa khác nhau cho quá trình mã hóa và quá trình giải mã.. Nói chung, mật
Trang 11
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 key cryptography) hoặc mật mã hai khóa (two-key cryptography) Tài liệu này thống nhất dùng thuật ngữ mật mã bất đối xứng để chỉ tất cả các thuật toán mật mã 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ật mã 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ật mã hóa bất đối xứng không phải là một kỹ thuật mật mã an tòan hơn
so với mật mã đố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ật mã bất đối xứng hòan tòan ưu điểm hơn và sẽ được sử dụng thay thế cho mật mã đối xứng Mỗi kỹ thuật mã có một thế mạnh
riêng và mật mã đố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ật mã 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ật mã 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ật mã 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ật mã 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ật mã đố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)
Trang 22
-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ật mã bất đối xứng:
Các thuật toán mật mã 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
Trang 33
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ật mã đố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ẬT MÃ 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ật mã 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ật mã 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 21024 – 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:
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
Trang 48 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 = Me mod N, cần kiểm chứng rằng M = Cd mod N Ta có:
Cd mod N = (Me)d mod N = Med 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 ⇒ Mk(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ó:
Mk(p - 1)(q - 1) + 1 mod p = [(M)Mk(p - 1)(q - 1)] mod p
= [(M)(Mp - 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
Trang 55
Xét [M - M] mod p = [M mod p] - [M mod p] = 0
Cho thấy [Mk(p - 1)(q - 1) + 1 - M] chia hết cho p Lý luận tương tự như vậy, ta cũng có [Mk(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 [Mk(p - 1)(q - 1)+1 - M] = (pq)r = Nr Do đó:
[Mk(p - 1)(q - 1) + 1 - M] mod n = 0
(Mkφ(N)+ 1 mod N) - (M mod N) = 0
(Mkφ(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 = Me mod N = 153 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 = Cd mob N = 97 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ật mã 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
Trang 6II.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: xy *xy = x2y và x*xy = xy+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 520 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:
520 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)
-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
51 mod 35 = 5 mod 35 = 5
52 mod 35 = (51)2 mod 35 = 25
55 mod 35 = (52)2 * 51 mod 35 =25 * 5 mod 35 = 10
510 mod 35 = (55)2 mod 35 = 10 * 10 mod 35 = 30
520 mod 35 = (510)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 24+1) hoặc 65537 (tức 216+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)
Trang 77
-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:
Xp = q * (q-1 mod p)
Xq = p * (p-1 mod q) Sau đó, khi có C, ta tiếp tục tính
Vp = Cd mod p
Vq = Cd mod q Khi đó, M = (VpXp + VqXq) 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 Vp và Vq như sau:
Vp = Cd mod p = Cd mod (p - 1) mod p
Vq = Cd mod q = Cd 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ật mã 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 đổi mà 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
Trang 8Diffie-Hellman là một thuật toán dùng để trao đổi khóa (key exchange) chứ không dùng để mật mã 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ật mã đối xứng Như đã trình bày ở phần mật mã đố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ật mã đố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 = gk , để tìm k, ta đơn giản thực hiện phép logarit: k = logg(x) Tuy nhiên, nếu cho trước g, p và (gk 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 = gn 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 Xa < p, tính giá trị Ya = (gXa mod p) và gởi cho B
-User B cũng tạo ra một số bí mật Xb < p, tính giá trị Yb = (gb mod p) và gởi lại cho A -User B xác định giá trị KB = (Ya)Xb mod p = (gXa mod p)Xb = (gXaXb mod p)
-User A xác định giá trị KA = (Yb)Xa mod p = (gXb mod p)Xa = (gXaXb mod p)
-Do KA = KB, 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ị (gXa mod p) và (gXb 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ả 3i = n
Giả sử, user A chọn giá trị bí mật Xa = 97 và user B chọn giá trị bí mật Xb = 233 User A tính được Ya = (397 mod 353) = 40 và gởi cho B
User B tính được Yb = (3233 mod 353) = 248 và gởi cho A
User A tính được khoá bí mật K = (Yb)Xa mod 353 = 24897 mod 353 = 160
User B tính được khoá bí mật K = (Ya)Xb mod 353 = 4097 mod 353 = 160
Chọn số bí mật X a < p
Tính Y a = (gXa 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 = (gXb mod p)
và gởi cho A
Tính K = (Y a )Xb mod p
Hình 3.2: Thuật toán trao đổi khoá Diffie-Hellman
Trang 99
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ị Xa, Xb từ các giá trị p, g, Ya và Yb 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 XC1 và XC2 thoả điều kiện XC1 < p và XC2 < p, sau đó cũng tính hai giá trị tương ứng YC1 = (gXc1 mod p) và YC2 = (gXc2 mod p)
• Khi user A gởi Ya 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ị YC1 User B xác định khoá K1 dựa trên YC1, và gởi lại cho A giá trị Yb User C lại chặn lấy giá trị này và mạo danh B để gởi cho A giá trị YC2
• User A xác định khoá K2 dựa trên YC2 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á K1
và K2
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