Giao thức trao đổi khóa và khả năng chống tấn công DoS

15:02 | 05/04/2010

Giao thức trao đổi khóa xác thực kèm xác nhận khóa (AKAKC – Authenticated Key Agreement with Key Confirmation) có khả năng chống lại tấn công từ chối dịch vụ (DoS) đã được đề cập trong một số tài liệu [3]. Bài viết này phân tích và làm sáng tỏ một số tính chất của giao thức AKAKC như chống tấn công DoS, xác thực khóa hai chiều, xác nhận khóa hai chiều và tính an toàn đầy đủ hai phía (PFS).

Các tính chất của giao thức trao đổi khóa
Giao thức trao đổi khóa đầu tiên được đưa ra bởi Diffie - Hellman vào năm 1976, nó được gọi là giao thức Diffie - Hellman nguyên thủy. Tuy nhiên, giao thức này cùng với một số giao thức khác dựa trên nó vẫn còn tồn tại nhiều thiếu sót xem [2]. Trong phần này chúng tôi sẽ mô tả một số tính chất của giao thức trao đổi khóa này, trong đó giả thiết rằng A và B là hai thực thể tham gia truyền thông được tin cậy, cùng sử dụng một giao thức trao đổi khóa.
- Chống tấn công người đứng giữa (MITM - Man-in-the-middle Attack)
Tấn công người đứng giữa là một kiểu nghe trộm chủ động, người tấn công chặn bắt các thông báo giữa hai thực thể A và B và làm cho họ tin rằng họ đang trực tiếp trao đổi với nhau trên một kết nối riêng, trong khi thực tế toàn bộ các kết nối giữa A và B đã bị điều khiển bởi kẻ tấn công. Tấn công người đứng giữa chỉ thành công khi kẻ tấn công giả mạo được là A hoặc B. Để chống lạ kiểu tấn công này, hầu hết các giao thức trao đổi khóa phải sử dụng tính chất xác thực hai chiều hoặc dùng hệ thống Cơ sở hạ tầng khóa công khai (PKI).
- Chống tấn công từ chối dịch vụ (DoS - Denial DoS Attack)
Tấn công từ chối dịch vụ là một kiểu tấn công hay gặp nhất hiện nay và hầu như chưa có cách phòng chống triệt để. Kiểu tấn công server và làm cho server không còn tài nguyên cũng như năng lực tính toán để xử lý dẫn đến “treo” hệ thống.
- Tính an toàn đầy đủ về phía trước (PFS – Perfect Forward Secrecy)
Nếu một khóa bí mật dài hạn của một hoặc nhiều thực thể bị thỏa hiệp (compromise), thì độ an toàn của các khóa phiên được tạo ra trước đó không bị ảnh hưởng.
- Chống mạo danh khóa - thỏa hiệp (Resilience - Key Compromise Impersonation)
Một giao thức thỏa thuận khóa là kháng mạo danh khóa nếu sự thỏa hiệp khóa bí mật dài hạn của một thực thể tin cậy không cho phép kẻ tấn công thiết lập một khóa phiên với thực thể này bằng cách giả mạo như một thực thể khác.
- Tấn công không biết khóa /chia sẻ (Unknown key - share attack)
Khi B tin tưởng một khóa được chia sẻ với thực thể C nào đó khác A, thì A lại tin tưởng chắc chắn rằng khóa đó được chia sẻ với B. Giao thức STS bị ảnh hưởng bởi tấn công này, trong khi đó giao thức SIGMA của Krawczyk và giao thức trong Tiêu chuẩn ISO 11770 - 3 thì không. Việc thêm định danh của người kiểm tra chữ ký không phải là cách duy nhất để chống lại tấn công này. Chẳng hạn, sử dụng Chữ ký người kiểm tra được xác định (designated verifier signature) có thể nhận được phương pháp phòng chống tốt hơn mà không cần thêm vào định danh của người kiểm tra chữ ký.
- Xác thực khoá ẩn (Implicit key authentication)
Giao thức thoả thuận khoá được gọi là có tính xác thực khoá ẩn của B đối với A nếu A chắc chắn rằng không có đối tượng nào khác ngoài B có khả năng biết giá trị của khoá bí mật chia sẻ.
- Xác nhận khoá hiện (Explicit key confirmation)
Giao thức thoả thuận khoá được gọi là đảm bảo tính xác nhận khoá hiện của B đối với A nếu A chắc chắn rằng B thực sự đã tính được khoá chia sẻ.
- Xác nhận khoá ẩn (Implicit key confirmation)
Giao thức đảm bảo xác nhận khoá ẩn nếu A đảm bảo rằng B có thể tính được khoá chia sẻ.
- Xác thực khoá hiện (Explicit key authentication)
Một giao thức thoả thuận khoá được gọi là có tính xác thực khoá hiện của B đối với A nếu đồng thời có hai tính chất xác thực khoá ẩn và xác nhận khoá hiện của B đối với A.
- Một giao thức thoả thuận khoá đảm bảo tính xác thực khoá ẩn cho cả hai đối tượng tham gia được gọi là giao thức thoả thuận khoá được xác thực (authenticated key agreement - AKA).
Trong khi đó một giao thức thoả thuận khoá đảm bảo tính xác thực khoá hiện cho cả hai đối tượng tham gia được gọi là giao thức thoả thuận khoá được xác thực cùng xác nhận khoá (authenticated key agreement with key confirmation -  AKAKC).

2. Giao thức AKAKC cải tiến chống tấn công DoS
2.1. Giao thức AKAKC cải tiến     

Với mục đích bảo vệ chống lại tấn công kẻ đứng giữa, khắc phục các điểm yếu của một số giao thức trao đổi khóa dựa trên bài toán Diffie - Hellman, vào năm 1997, Blake - Wilson và các cộng sự đã thay đổi giao thức Diffie - Hellman nguyên bản bằng cách cung cấp cơ chế xác thực khóa và xác nhận khóa cho các đối tượng tham gia, đưa ra giao thức thỏa thuận khóa an toàn AKAKC [1].
Tuy nhiên, AKAKC nguyên bản lại không chống được tấn công DoS, vì vậy các tác giả Lu Haining và Gu Dawu đã đề xuất lược đồ thỏa thuận khóa cải tiến của AKAKC có xác thực và xác nhận khóa đồng thời chống được tấn công từ chối dịch vụ (DoS) [3]. Trong phần này sẽ mô tả giao thức cải tiến và phân tích khả năng chống tấn công DoS của nó.
Một số ký hiệu:
- A và B là hai thực thể tham gia truyền thông (được tin cậy).
- p, q là các số nguyên tố lớn, trong đó q là ước số của (p - 1).
- g là phần tử bậc q trong Z*p.
- a và b là hai khóa bí mật dài hạn tương ứng của A và B (các số nguyên ngẫu nhiên trong [1, q - 1], ngoại trừ một vài giá trị đặc biệt như 1 và q - 1).
- CertA, CertB là hai chứng chỉ chứa thông tin định danh, khóa công khai dài hạn YA, YB  của A và B, YA = ga mod p, YB = gb mod p.
- H1, H2 là hai hàm băm độc lập.
- MAC là thuật toán Mã xác thực thông báo (ví dụ: là một hàm băm mật mã có khóa).
x0R [1, q - 1] : Lấy x ngẫu nhiên trong đoạn [1, q - 1].
Hình sau biểu diễn giao thức AKAKC đã được cải tiến.
Quá trình tính toán được mô tả như sau:
Bước tính toán trước: B chọn các cặp t, y liên tiếp ngẫu nhiên trong [1, q - 1] và tính gt, gy.
(1) A chọn một số x 0R [1, q - 1] và tính RA= gx.
(2) A gửi bản tin yêu cầu (I) gồm RA và CertA cho B.
(3) Sau khi nhận được bản tin (I):
a) B kiểm tra 1 < RA< p và (RA)q = 1 (mod p). Nếu B thấy không thỏa mãn thì ngắt liên lạc.
b) B chọn một cặp (gt, gy) được sinh ra trong bước tính toán trước, để kB=gt  và tính toán eB = MAC kB(2, B, A, gy, gx) và wB=t / (y + b.eB) mod q
(4) B gửi bản tin trả lời (II) gồm RB = gy, CertB, eB , wB cho A.
(5) Sau khi nhận được bản tin (II):
a) A kiểm tra 1 < RB < p và (RB)q = 1 (mod p). Nếu A thấy không thỏa mãn thì ngắt liên lạc.
b) A tính toán k’B= gy.wB.gb.wB.eB
và e’B= MAC k,B(2, B, A, gy, gx) sau đó kiểm tra e’B = eB.
c) A chọn s 0R [1, q - 1] và tính toán hA =H1 (k’B, gy, gx) (hA là nguyên liệu báo nhận), kA= gs, eA= MACkA (3, A, B, gx, gy) và wA=s/(x + a.eA) mod q. (wA­ là nguyên liệu ngẫu nhiên dùng cho việc xác thực)
(6) A gửi bản tin xác thực (III) gồm hA, eA , wA  cho B.
(7) Sau khi nhận được bản tin (III):
a) B tính toán h’A = H1(kB, gy, gx) và kiểm tra h’A = hA . Bước này nhằm kiểm tra nguyên liệu báo nhận của A, xác nhận rằng A đã tính được khóa k’B.
b) B tính toán k’A= gx.wA.ga.wA.eA và e’A= MACk’A(3, A, B, gx, gy) rồi kiểm tra e’A = eA.
(8) Khóa phiên là k=H2(gab||gxy)

2.2. Một số tính chất cơ bản của giao thức AKAKC cải tiến
-  Chống tấn công DoS
Trước tiên, ta giả sử rằng tài nguyên tính toán của kẻ tấn công là tương đương với B. Sau khi nhận được một yêu cầu (bản tin (I) chẳng hạn), B chỉ cần thực hiện tính toán hàm xác thực thông báo MAC và một số phép tính số học modulo đơn giản rồi gửi trả lại bản tin (II). Đến khi nhận được bản tin (III), đầu tiên B tính toán giá trị hàm băm h’A, và kiểm tra h’A = hA. Nếu kiểm tra thành công, có nghĩa là A đã tính toán được k’B bằng phép tính mũ hóa modulo. Chỉ sau khi việc kiểm tra thành công, B mới tiếp tục thực hiện giao thức và tính toán mũ hóa modulo để kiểm tra bản tin và tính ra khóa phiên. Như vậy, nếu một kẻ tấn công muốn B thực hiện phép mũ hóa modulo cuối cùng, kẻ tấn công phải thực hiện việc tính toán phức tạp sau khi nhận được bản tin (II). Và như vậy kẻ tấn công sẽ rơi vào bước tính toán tốn nhiều tài nguyên thời gian và công sức, cuối cùng kẻ tấn công  sẽ bị thất bại.
Hơn nữa, giả sử trong bước thứ ba ở hình nêu trên (bản tin III), kẻ tấn công (đóng vai trò là người khởi tạo A) không thực hiện hai phép tính lũy thừa modulo tốn nhiều tài nguyên và năng lực CPU (khóa  k’B và WA) mà chọn ngẫu nhiên (một cách phỏng đoán) các giá trị  hA, eA, wA để gửi sang cho B, khi đó dường như kẻ tấn công đã tránh được các phép tính toán phức tạp để thực hiện thành công cuộc tấn công. Trong trường hợp này, B chỉ phải thực hiện một phép tính đơn giản (hàm Hash) để tính h’A và sẽ phát hiện ra giá trị không có thật h’A. Bởi vì, để có giá trị hA đúng, kẻ tấn công phải thực hiện tính khóa k’B  trước, mà đây lại là phép tính modulo kẻ tấn công đang muốn tránh. Còn trong trường hợp kẻ tấn công sinh giá trị hA ngẫu nhiên trùng với giá trị  hA thật thì có nghĩa rằng bài toán logarit rời rạc đã bị phá.
- Cung cấp xác thực khóa hai chiều
Nếu người nào đó muốn tính toán khóa phiên k=H2(gab||gxy), anh ta cần phải có được a hoặc b và x hoặc y ngoài các giá trị  gx, gy, ga và gb có thể nhận được từ những bản tin truyền thông. Một thực thể bất kỳ ngoài A và B chỉ có thể tính (a, b, x, y) từ các giá trị gx, gy, ga, gb và eA, eB, wA, wB, hA. Trong biểu thức của wA và wB tương ứng có ba đại lượng chưa biết là (t, y, b) và (s, x, a), nếu q là rất lớn thì sẽ có rất nhiều lời giải thích hợp. Do đó, không ai ngoài A và B có thể biết được các giá trị (x, a) và (y, b) để tính được khóa phiên k.
- Cung cấp tính xác nhận khóa hai chiều
Trong bước thứ (5-b), sau khi A tính toán e’B và so sánh với eB nhận được, nếu e’B = eB thì A hoàn toàn có thể rằng chắc chắn B đã nhận được chính xác gx. Tương tự như vậy, B có thể xác định chắc chắn rằng nếu e’A = eA thì A đã nhận được chính xác gy trong bước (7-  b). Như vậy cả A và B có thể chắc chắn rằng mỗi bên có thể tính toán được khóa phiên k=H2(gab||gxy) bởi vì chỉ có A mới có giá trị bí mật a và chỉ có B mới có giá trị bí mật b.
- Cung cấp tính chất an toàn đầy đủ về phía trước (PFS)
Giả sử các khóa bí mật dài hạn a của A (hoặc b của B) bị thỏa hiệp. Khi đó, tính bí mật của các khóa phiên trước đó không bị ảnh hưởng, bởi vì kẻ tấn công khi có được khóa bí mật a của A (hoặc b của B) thì chỉ có thể lấy được khóa tức thời x hoặc y từ các giá trị gx hoặc gy. Tuy nhiên, ở  đây lại phải giải bài toán logarit rời rạc trên trường hữu hạn (DLP), do đó khóa bí mật tức thời không bị lộ dẫn đến các khóa phiên trước đó cũng không bị lộ.

3. Kết luận

Trong lĩnh vực bảo mật thông tin, các giao thức thỏa thuận khóa đóng một vai trò hết sức quan trọng. Lược đồ trao đổi khóa Diffie- Hellman được sử dụng trong hầu hết các giao thức trao đổi khóa hiện nay như MIKEY, SSL/TLS, IKE,... Việc nghiên cứu, tìm hiểu và khắc phục các lỗ hổng trong các giao thức dựa trên Diffie- Hellman vẫn đang được nhiều nhà khoa học trên thế giới thực hiện. Bài báo này phân tích một số tính chất của giao thức AKAKC [3] với mục đích có thể áp dụng và cài đặt một giao thức an toàn, có khả năng chống tấn công DoS cho các ứng dụng bảo mật cụ thể