Giao thức thỏa thuận khóa

Một phần của tài liệu Thỏa thuận khóa trong an toàn và bảo mật thông tin (Trang 60 - 67)

CHƯƠNG 2: MỘT SỐ KỸ THUẬT THỎA THUẬN KHÓA

2.2 Giao thức thỏa thuận khóa

2.2.1 Giao thức thỏa thuận khóa Diffie-Hellman

Để giải quyết vấn đề phân phối và thoả thuận khoá của mật mã khoá đối xứng, Diffie và Hellman đã đưa ra khái niệm về hệ mật mã khoá công khai và một phương pháp trao đổi công khai để tạo ra một khoá bí mật chung mà tính an toàn được bảo đảm bởi độ khó của một bài toán toán học cụ thể.

Đây là giao thức đơn giản nhất cung cấp một chìa khóa chung cho U và V để hai bên có thể sử dụng hệ mã khóa đối xứng nào đó.

2.2.1.1. Sơ đồ

Giả sử rằng p là số nguyên tố,  là phần tử nguyên thuỷ Z*p và chúng đều công khai.

1. U chọn au ngẫu nhiên, bí mật (0  au  p – 2).

2. U tính : au modp và gửi nó đến V.

3. V chọn av ngẫu nhiên, bí mật (0  av  p – 2).

4. V tính : av modp và gửi nó đến U.

5. U tính khoá: K = (av)au mod p.

6. V tính khoá: K = (au)av mod p.

Cuối giao thức, U và V tính ra cùng một khoá: K = auav mod p. Giao thức này cũng tương tự với sơ đồ phân phối trước khoá của Diffie-Hellman đã được mô tả. Sự khác nhau ở chỗ các số mũ au, av của U và V đều được chọn lại mỗi lần thực hiện giao thức này thay vì cố định. Như vậy cả U và V đều được đảm bảo khoá tươi vì khoá session phụ thuộc vào cả hai số ngẫu nhiên bí mật au và av.

2.2.1.2. Sự an toàn của sơ đồ

Giao thức này dễ bị tổn thương trước đối phương tích cực – những người sử dụng cách tấn công “kẻ xâm nhập vào giữa cuộc”. Đó là tình tiết của vở “The Lucy show”, trong đó nhân vật Vivian Vance đang dùng bữa tối với người bạn, còn Lucille Ball đang trốn dưới bàn. Vivian và người bạn của cô đang cầm tay nhau dưới bàn. Lucy cố tránh bị phát hiện đã nắm lấy tay của cả hai người, còn hai người trên bàn vẫn nghĩ rằng họ đang cầm tay nhau.

Cuộc tấn công kiểu “kẻ xâm nhập vào giữa cuộc“ trên giao thức trao đổi khoá Diffie-Hellman hoạt động cũng như vậy. W sẽ ngăn chặn các bức điện trao đổi giữa U và V và thay thế bằng các bức điện của anh ta.

2.2.1.3. Bổ sung xác thực danh tính

Điều cơ bản đối với U và V là bảo đảm rằng, họ đang trao đổi khoá cho nhau mà không có W. Trước khi trao đổi khoá, U và V có thể thực hiện những giao thưc tách bạch để thiết lập danh tính cho nhau. Tuy nhiên, điều này có thể đưa đến việc không bảo vệ được trước tấn công “kẻ xâm nhập giữa cuộc” nếu W vẫn duy trì một cách đơn giản sự tấn công thụ động cho đến khi

U và V đã chứng minh danh tính của họ cho nhau. Vì thế giao thức thoả thuận khoá tự nó cần xác thực được các danh tính của những người tham gia cùng lúc khoá được thiết lập. Giao thức như vậy được gọi là giao thức thoả thuận khoá đã xác thực.

2.2.2 Giao thức thoả thuận khoá trạm tới trạm STS

Ðây là giao thức thỏa thuận khóa có xác thực (Xác thực thực thể và xác thực khóa) dựa trên trao đổi khóa Diffie-Hellman, nó khắc phục vấn đề tấn công giữa dòng trong giao thức trên.

Phần này sẽ mô tả một giao thức thoả thuận khoá là cải tiến của sơ đồ trao đổi khoá Diffie-Hellman, bổ sung xác thực danh tính C(U).

2.2.2.1. Sơ đồ

Giả sử p là số nguyên tố,  là phần tử nguyên thuỷ Z*p. Trong đó p,

 công khai và nó dùng với các dấu xác nhận.

Mỗi người sử dụng U sẽ có một sơ đồ chữ ký với thuật toán xác minh veru. trung tâm cũng có sơ đồ chữ ký với thuật toán xác minh công khai verTT.

Mỗi người sử dụng U có dấu xác nhận: C(U) = (ID(U), veru, sigTT(ID(U), veru)). Trong đó ID(U) là thông tin định danh cho U.

1. U chọn số ngẫu nhiên au, bí mật ( 0  au  p – 2).

2. U tính: aumod p và gửi nó đến V.

3. V chọn số ngẫu nhiên av, bí mật ( 0  av  p – 2).

4. V tính:av mod p

K = (au)av mod p yv = sigv(av, au) 5. V gửi (C(V), av, yv) đến U.

6. U tính:K = (av)au mod p

U dùng verv để xác minh yv và xác minh C(V) nhờ verTT.

7. U tính:yu = sigu(au, av) và gửi (C(U), yu) đến V.

8. V xác minh yu bằng veru và xác minh C(U) bằng verTT.

2.2.2.2. Sự an toàn của sơ đồ

Như trước, W sẽ chặn bắt auvà thay nó bằng au

 ' . Sau đó W nhận được

av

 , sigv(av, au

 ' ) từ V. Anh ta cũng muốn thay av bằng av

 ' như trước đây.

Tuy nhiên điều này có nghĩa anh ta cũng phải thay sigv(av, au

 ' ) bằng sigv( av

 ' ,au). Đáng tiếc là đối với W, anh ta không thể tính chữ ký của V trên ( av

 ' , au) vì không biết thuật toán ký sigv của V. Tương tự, W không thể thay sigu(au , av

 ' ) bằng sigv( au

 ' ,av) do anh ta không biết thuật toán ký của U.

Giao thức, như mô tả không đưa ra sự khẳng định khoá. Tuy nhiên, dễ dàng biến đổi để thực hiện được điều đó bằng cách: Trong bước 4 mã hoá yv bằng khoá session K: yv = eK(sigv(av,au )) = eK(yv). Trong bước 7 mã hoá yu bằng khoá session K: yu = eK(sigu(au,av)) = eK(yu).

2.2.3 Giao thức thoả thuận khoá MTI

Matsumoto, Takashima và Imai đã xây dựng giao thức thoả thuận khoá đáng chú ý, bằng cách biến đổi giao thức trao đổi khoá của Diffie-Hellman.

Giao thức này gọi là MTI.

Giao thức không đòi hỏi U và V phải tính bất kỳ chữ ký nào. Chúng là các giao thức hai lần vì chỉ có hai lần truyền thông tin riêng biệt (một từ U đến V và một từ V đến U). Giao thức STS là giao thức ba lần truyền tin.

2.2.3.1. Sơ đồ

Giả thiết p là số nguyên tố,  là phần tử nguyên thuỷ  Z*p. Các giá trị này công khai. Mỗi người sử dụng U đều có định danh ID(U), số mũ bí mật au (0au p -2) và giá trị công khai tương ứng: bu = au mod p. TA có sơ đồ chữ ký với thuật toán xác minh (công khai) verTT và thuật toán ký mật sigTT. Mỗi người sử dụng U sẽ có dấu xác nhận: C(U) = (ID(U), bu, sigTT (ID(U), bu)).

1. U chọn ngẫu nhiên ru, 0  ru  p – 2 và tính:su = ru mod p.

2. U gửi (C(U), su) đến V.

3. V chọn ngẫu nhiên rv, 0  rv  p – 2 và tính: sv = rv mod p.

4. V gửi (C(V), sv) đến U.

5. U tính khoá: K = svau *bvru mod p. U nhận được giá trị bv từ C(V).

6. V tính khoá: K = suav*burv mod p. V nhận được giá trị bu từ C(U).

Cuối giao thức U và V đều tính cùng một khoá : K = ru*avrv*au mod p.

2.2.3.2. Sự an toàn của sơ đồ

Độ mật của giao thức MTI trước tấn công thụ động đúng bằng bài toán Diffie-Hellman. Cũng như nhiều giao thức, việc chứng minh tính an toàn trước tấn công chủ động không phải đơn giản.

Khi không dùng chữ ký trong suốt quá trình thực hiện giao thức, có thể xuất hiện tình huống không có sự bảo vệ nào trước tấn công xâm nhập vào điểm giữa. Hãy xét giao thức MTI, W có thể tráo đổi các giá trị mà U và V gửi cho nhau.

Ví dụ: Giao thức thoả thuận khoá MTI: Giả sử số nguyên tố p = 27803,

 = 5 là phần tử nguyên thuỷ  Z*p.

 U chọn bí mật au = 21131. Sau đó tính: bu = 5 21131 mod 27803 = 21420. Được đặt trên giấy xác nhận của U. V chọn bí mật av = 17555. Sau đó tính: bv = 5 17555 mod 27803 = 17100. Được đặt trên giấy xác nhận của V.

 Giả sử rằng U chọn ru = 169, tính: su = 5 169 mod 27803 = 6268.

Sau đó U gửi giá trị su đến V. Giả sử rằng V chọn rv = 23456, tính: sv = 5 23456 mod 27803 = 26759. Sau đó V gửi giá trị sv đến U.

 U tính khoá: Ku, v = u u

r v a

v b

s * mod p = 26759 21131 17100 169 mod

27803 = 21600. V tính khoá: Ku, v = v v

r u a

u b

s * mod p = 626817555 21420 23456 mod 27803 = 21600.

Như vậy U và V đã tính cùng một khoá.

2.2.4. Giao thức Girault trao đổi khóa không chứng chỉ 2.2.4.1. Giao thức thỏa thuận khóa tự xác thực

Theo [9], giao thức thỏa thuận khóa không chứng chỉ do Girault đưa ra, là sự kết hợp giữa RSA và thuật toán rời rạc. Sở dĩ giao thức có tên như thế là do nó cho phép người dùng “tự xác thực” khóa, theo nghĩa là chỉ có chính họ mới biết khóa bí mật, trái ngược với những giao thức mà bên uỷ quyền cũng biết khóa bí mật của mỗi người.

Với n = pq, trong đó p = 2p1 + 1, q = 2q1 + 1, p, q, p1, q1 là những số nguyên tố lớn. Nhóm nhân Zn* đẳng cấu vớiZ*pxZq* . Do đó bậc cao nhất của phần tử nào đó trong Zn* sẽ là bội số chung nhỏ nhất của p-1 và q-1, tức là 2p1q1. Giả sử α là phần tử bậc2 p1q1. Khi đó nhóm con cyclic của Zn*sinh bởi α là cài đặt phù hợp với bài toán logarit rời rạc.

Trong sơ đồ Girault, n, α là các giá trị công khai, còn p, q, p1, q1 chỉ có TA biết. Số mũ mã hóa RSA e công khai do TA lấy, giữ bí mật d=e-1 mod Φ(n).

ID(U) là định danh của cá thể U. TA sẽ cấp cho U khóa công khai tự xác thực pUbằng giao thức dưới đây:

1. U sinh ngẫu nhiên aU, rồi tính bU=αau mod n 2. U gửi aU và bU cho TA.

3. TA xác định pU = (bU - ID(U))d mod n và gửi pU cho U Từ công thức xác định pU ta thấy có thể tính bU =

e

Pu

+ ID(U) mod n từ

các giá trị công khai pU, ID(U).

Sơ đồ Girault được trình bày như dưới đây:

1. U sinh ngẫu nhiên rU rồi tính sU=αru mod n 2. U gửi ID(U), pU, và sU choV

3. V lấy rV ngẫu nhiên và tính sV=αru mod n 4. V gửi ID(V), pV, và sV choU.

5. Khi đó U tính khóa chung K= sVau( +ID(V))ru mod n = αruaV+ rv au

mod n

và V cũng tính được K= sUaV( +ID(U))rV mod n = αruaV+ rv au

mod n

2.2.4.2. Mức độ an toàn

Hãy xem khả năng các khóa tự xác thực có thể bảo vệ giao thức trước một tấn công nào đó. Vì TA không ký trên các giá trị bU, pU, và ID(U), nên người khác không thể kiểm thử được tính chính xác của các giá trị đó một cách trực tiếp. Nếu kẻ tấn công W giả mạo các thông tin của U (tức là các giá trị này không phải là những giá trị được sinh ra bởi quá trình truyền tin với TA). W giả mạo giá trị bU thành bU, nhưng nếu bài toán logarit rời rạc vẫn còn khó giải được thì W không thể tính được aU, mà khi không có bU, W không thể tính được khóa K. Tấn công thụ động không thể xảy ra.

Tình huống này tương tự với việc W là kẻ tấn công chủ động. W có thể làm cho U và V không tính cùng một giá trị khóa chung, nhưng cũng không thể xác định được những giá trị mà U, V có. Do đó, giống như MTI, sơ đồ cung cấp tính xác thực khóa ẩn.

Ở đây có thể ta sẽ đặt câu hỏi là tại sao TA lại yêu cầu U gửi cả giá trị aU trong khi đó TA có thể tính được pU mà chỉ cần sử dụng bU. Lý do của nó là TA phải tin chắc rằng U thực sự biết aU trước khi TA tính pU cho U. Chúng ta sẽ phân tích kỹ hơn để thấy được sự cần thiết của điều này.

Nếu kẻ tấn công W chọn một giá trị a’U nào đó, rồi tính: αa’u mod n và lấy ID(U) + ID(W) sau đó gửi bwID(W) cho TA. TA tính khóa công khai ID(W))d mod n cho W. Ta thấy rằng

ID(W) ID(U) (mod n) hay

Một phần của tài liệu Thỏa thuận khóa trong an toàn và bảo mật thông tin (Trang 60 - 67)

Tải bản đầy đủ (PDF)

(75 trang)