1/. Trao đổi khoá 3 bƣớc của Shamir
Vấn đề lớn nhất trong việc mã hoá đối xứng là quản trị khoá. Để quá trình truyền thông diễn ra ở cùng một chế độ mã hoá, mỗi thành viên phải có cùng khoá mã hoá, giải mã. Nhƣng làm thế nào để khoá đƣợc truyền cho thành viên khác một cách an toàn trừ các hệ mật mã khoá công khai? Giao thức trao đổi khoá 3 bƣớc của Shamir là một giải pháp cho vấn đề này.
Shamir đã đƣa ra một giao thức trao đổi khoá 3 bƣớc. Nó không bao giờ đƣợc chính thức công bố, vì nó có tính bảo mật hạn chế. Giao thức dựa trên việc mã hoá giao hoán nhau. Sau đây là giao thức:
Alice chọn một khoá K mà cô ta muốn trao đổi với Bob. Cô ta mã hoá nó bằng một khoá A nào đó mà chỉ cô ta biết, và chuyển cho Bob A(K)
Bob mã hoá lại bức điện bằng khoá B nào đó mà chỉ anh ta biết, và gửi cho Alice B(A(K)).
Đây là lúc sử dụng tính chất giao hoán của việc mã hoá. Alice giải mã bằng khoá A, nhận đƣợc – A(B(A(K))), trong đó – A thể hiện việc giải mã. Nếu luật mã hoá có tính chất giao hoán thì kết quả sẽ là B(K), cái mà cô ta gửi lại cho Bob, ngƣời có thể giải mã bằng khoá B.
Điều kiện cần cho luật mã hoá giao hoán là việc giải mã đƣợc thực hiện cùng thủ tục nhƣ việc mã hoá thay vì theo thứ tự ngƣợc lại.
Kẻ tấn công sẽ làm cho giao thức trở nên không an toàn nếu hắn lấy đƣợc cả 3 bức điện và biết đƣợc thuật toán mã hoá. Chỉ cần có bức điện thứ nhất và thứ hai để tìm ra B, sau đó dùng B cùng với bức điện thứ 3 để tính ra K. Cũng vậy, có bức điện 2 và 3 có thể tính đƣợc A. Việc có đƣợc A và B hay không cũng không có tầm quan trọng lắm vì chúng sẽ bị loại bỏ sau phiên trao đổi K. Nhƣng giả sử K đƣợc giữ bí mật, giao thức vẫn không an toàn. Lời khuyên là bạn hãy dùng nó một cách thận trọng. Một giải pháp có thể chấp nhận đƣợc là sử dụng các kênh truyền khác nhau cho 3 bức điện và việc lấy K đòi hỏi các phần phải đƣợc tổ hợp theo các thứ tự đúng, đó là yêu cầu lớn hơn việc chỉ cần có 3 bức điện.
Giao thức trao đổi khoá 3 bƣớc của Shamir đơn giản, dễ thực hiện. Trong những điều kiện truyền tin không cần tối mật thì nó là một phƣơng pháp khả thi. Để làm cho giao thức an toàn hơn, ta nên sử dụng các kênh truyền khác nhau nhƣ đã phân tích ở trên.
2/. Sơ đồ Blom
- Giả sử mạng có n ngƣời dùng, khoá đƣợc chọn thuộc miền xác định Zp với phân phối là số nguyên tố (p ≥ n).
- k là một số nguyên 1 k n-2 biểu thị cho số lƣợng ngƣời dùng lớn nhất chống lại sự liên kết của k ngƣời dùng mà sơ đồ vẫn còn giữ đƣợc tính bảo mật.
- TA sẽ truyền k+1 phần tử của Zp tới mỗi ngƣời dùng qua kênh an toàn (trong sơ đồ phân phối khoá trƣớc cơ bản là n-1). Mỗi cặp ngƣời dùng U và V có thể tính khoá KU,V = K U,V . Điều kiện an toàn nhƣ sau: tập bất kỳ gồm nhiều nhất k ngƣời dùng không liên kết từ {U,V} không thể xác định bất kỳ thông tin nào về khoá KU,V. - Xét trƣờng hợp đặc biệt của sơ đồ Blom khi k =1. TA sẽ truyền hai phần tử thuộc Zp cho mỗi ngƣời dùng qua kênh an toàn và bất kỳ ngƣời sử dụng riêng W sẽ không thể xác định bất kỳ thông tin nào về KU,V nếu W khác U,V.
Sơ đồ phân phối khoá trƣớc Blom (k =1)
Số nguyên tố p đƣợc chọn công khai, còn với mỗi ngƣời sử dụng U chọn một phần tử rU Zp là công khai. Các phần tử rU phải khác biệt nhau.
TA chọn 3 phần tử ngẫu nhiên,bí mật a, b, c Zp (không cần khác biệt) và thiết lập đa thức bí mật: f(x,y) = a+ b(x+y)+cxy (mod p).
Với mỗi ngƣời dùng U, TA tính: gU(x) = f(x,ru) mod p và truyền gU(x)đến ngƣời dùng U trên kênh an toàn. Vì gU(x) là đa thức tuyến tính theo x nên có thể đƣợc viết nhƣ sau: gU(x)= aU + bU x (mod p)
trong đó: aU = a + brU mod p bU= b + crU mod p
Nếu U và V muốn liên lạc với nhau, họ sẽ dùng khoá chung: KU,V = KV,U = f(rU,rV) = a + b(rU + rV) + crUrV (mod p)
U tính KU,V nhƣ sau: f(rU,rV) = gU(rV) Còn V tính KV,U nhƣ sau: f(rU,rV) = gV(rU)
Ví dụ:
Giả sử có 3 ngƣời dùng U, V, W, p = 7, các phần tử công khai là rU = 12, rV = 7, rW=1.
Giả sử rằng TA chọn a = 8, b = 7, c = 2. Khi đó, ta có đa thức f nhƣ sau: f(x,y) = 8 + 7(x+y) + 2xy
gU(x) = 7 + 14x gV (x) = 6+ 4x gW(x) = 15+ 9x
KU,V = 3, KU,W = 4, KV,W = 10
+ U tính KU,V nhƣ sau: KU,V = gU(rV) = 7 + 14*7 mod 17 = 3 + V tính KV,U nhƣ sau: KV,U = gV(rU) = 6 + 4*12 mod 17 = 3
Khi có sự liên kết của hai ngƣời dùng {W,X} thì có thể xác định bất kỳ khoá KU,V mà {W,X}khác {U,V}. Bởi vì W và X cùng biết:
aW = a + brW mod p bU= b + crU mod p aX = a + brX mod p bX= b + crX mod p
Với 4 phƣơng trình 3 ẩn trên ta có thể dễ dàng tính a, b, c. Một khi biết a, b, c họ có thể thiết lập đa thức f(x,y) và tính khoá KU,V bất kỳ mà họ muốn.
Để tạo ra đƣợc sơ đồ vẫn còn an toàn chống lại sự liên minh của k ngƣời dùng, TA sẽ sử dụng hàm f(x,y) có dạng: f(x,y) = k i 0 k j 0 ai,jxi yj mod p
3/. Phân phối khoá trƣớc của Diffie – Hellman
Sơ đồ phân phối khoá trƣớc của Diffie – Hellman
Số nguyên tố p và phần tử nguyên thuỷ α Zp* công khai
V tính: KU,V = αauav mod p = bUav mod p
nhờ dùng giá trị bU công khai nhận từ dấu xác nhận của U và giá trị aV mật riêng của anh ta.
U tính: KU,V = αauav mod p = bVau mod p
nhờ dùng giá trị bV công khai nhận từ dấu xác nhận của V và giá trị aU mật riêng của anh ta.
- Sơ đồ phân phối khoá trƣớc của Diffie – Hellman an toàn về mặt tính toán vì nó liên quan bài toán logarithm rời rạc khó giải.
- Sơ đồ xét trên Zp với p là số nguyên tố, α là phần tử nguyên thuỷ thuộc Zp, giá trị của p và α là công khai với mọi ngƣời trong mạng, ID(U) là thông tin định danh cho mỗi ngƣời sử dụng U trên mạng (ví dụ tên, địa chỉ email, số điện thoại …). Mỗi ngƣời sử dụng U có một số mũ mật aU(0≤ aU ≤ p-2) (TA không biét giá trị này) và giá trị công khai tƣơng ứng bU = αau mod p.
- TA sẽ có một sơ đồ chữ ký với thuật toán xác minh (công khai ) verTA và thuật toán ký mật sigTA
- Mỗi ngƣời sử dụng U khi tham gia mạng sẽ có một dấu xác nhận: C(U) = (ID(U),bU, sigTA (ID(U),bU))
Các dấu xác nhận có thể đƣợc lƣu trữ trong cơ sở dữ liệu công khai hoặc mỗi ngƣời dùng tự lƣu dấu xác nhận của chính mình. Chữ ký của TA trên dấu xác nhận cho phép bất kỳ ai trên mạng đều có thể xác minh đƣợc thông tin trên nó.
U và V rất dễ dàng tính ra khoá chung:
KU,V = αauav
mod p Ví dụ:
p= 25307, α = 2 là những tham số công khai. Giả sử U chọn aU = 3578 và tính:
bU = αau mod p = 23578 mod 25307 = 6113 sau đó U đặt bU vào dấu xác nhận của cô ta. Giả sử V chọn aV = 19956 và tính:
bV = αav mod p = 219956 mod 25307 = 7984 sau đó V đặt bV vào dấu xác nhận của anh ta. Bây giờ U có thể tính khoá:
KU,V = bVau mod p = 79843578 mod 25307 = 3694 Còn V cũng có thể tính khoá:
KU,V = bUav mod p = 611319956 mod 25307 = 3694
Nhờ chữ ký của TA trên dấu xác nhận của ngƣời sử dụng nên ta có thể ngăn cản một cách hiệu quả sự xâm nhập của ngƣời sử dụng khác W.
Câu hỏi đặt ra là: liệu W có thể tính KU,V nếu W khác U, V hay không? Hoặc nếu W biết bU, bV thì có thể xác định KU,V hay không? Bài toán này đƣợc gọi là bài toán Diffie – Hellman.
Bài toán: I = (p, α, β, γ) trong đó p là số nguyên tố, α Zp* là phần tử nguyên thuỷ, còn β, γ Zp*
Mục tiêu: tính βlog αγ mod p( = γlog αβ mod p)
Sơ đồ Diffie – Hellman là an toàn với đối phƣơng bị động nếu và chỉ nếu bài toán Diffie–Hellman là khó giải. Tuy nhiên, giả định cho rằng thuật toán bất kỳ giải đƣợc bài toán Diffie – Hellman thì cũng có thể giải đƣợc bài toán logarithm vẫn chƣa đƣợc chứng minh.
4/. Hệ phân phối khoá Kerberos
Do vấn đề không an toàn khi sử dụng cùng một khoá trong một thời gian dài nên ngƣời ta thƣờng sử dụng một phƣơng pháp trực tiếp, trong đó khoá của phiên làm việc chỉ đƣợc tạo ra khi hai ngƣời sử dụng muốn liên lạc với nhau.
Nếu dùng phân phối khoá trực tiếp thì ngƣời sử dụng trong mạng không cần lƣu các khoá khi muốn liên lạc với những ngƣời sử dụng khác (Tuy nhiên mỗi ngƣời sử dụng đều đƣợc chia sẻ khoá với TA). Khoá của phiên làm việc (khoá phiên) sẽ đƣợc truyền đi theo yêu cầu của TA. Đó là sự đáp ứng của TA để đảm bảo khoá tƣơi.
Kerberos là hệ thống dịch vụ khoá phổ biến dựa trên hệ mật mã khoá bí mật. Mỗi ngƣời sử dụng U sẽ chia sẻ khoá bí mật (DES) KU cho TA. Trong phiên bản gần đây nhất của Kerberos (phiên bản 5) mọi thông báo cần truyền đƣợc mã theo chế độ xích khối (CBC – Cipher Block Chain).
Khi có yêu cầu khoá phiên gửi đến TA, TA sẽ tạo ra một khoá phiên mới ngẫu nhiên K. TA sẽ ghi lại thời gian khi có yêu cầu T và khoảng thời gian mà tại đó khoá còn có giá trị sử dụng L (từ T đến T+L). Tất cả thông tin này đƣợc mã hoá và đƣợc truyền tới U và V. Giao thức truyền khoá phiên nhƣ sau:
U yêu cầu TA khoá phiên để liên lạc với V.
TA chọn một khoá phiên ngẫu nhiên K, thời gian hệ thống T và thời gian tồn tại L.
TA tính: m1 = eKU (K, ID(V), T, L)
m2 = eKV (K, ID(V), T, L). Gửi m1, m2 đến U.
U dùng hàm giải mã dKu để tính K,T,L và ID(V) từ m1.
Sau đó tính: m3 = eK ( ID(U), T) và gửi m3 đến V cùng với bức điện m2 mà cô ta nhận đƣợc từ TA.
V dùng hàm giải mã dKv để tính K,T,L và ID(U) từ m2. Sau đó anh ta dùng dK để tính T và ID(U) từ m3. Anh ta kiểm tra xem 2 giá trị của T và 2 giá trị của ID(U) có giống nhau không.
Nếu đúng thì V tính: m4 = eK (T+1) và gửi nó đến U.
U giải mã m4 bằng dK và xác minh thấy kết quả bằng T+1. Nếu đúng thì K đã đƣợc truyền thành công tới V.
Trong đó:
+ KU,KV : khoá chia sẻ của U và V với TA.
+ U (và V) sử dụng khoá của mình để giải mã eKu (và eKv). + m1, m2:cung cấp sự an toàn trong khi truyền khoá K. + m3, m4: cung cấp sự xác nhận khoá.
Mục đích của T và L là nhằm ngăn cản đối phƣơng chủ động từ việc lƣu trữ khoá cho việc tái sử dụng ở lần sau. Các khoá sẽ không đƣợc coi là hợp lệ một khi chúng hết hạn.
Một trong những nhƣợc điểm của Kerberos là tất cả ngƣời dùng trong mạng phải có đồng hồ đồng bộ vì cần có thời gian hiện tạ để xác định khoá sesion K cho trƣớc là hợp lệ. Thực tế, rất khó có đƣợc sự đồng bộ hoàn hảo nên phải cho phép có khoảng thay đổi nào đó về thời gian.
Chương 2. SƠ ĐỒ CHIA SẺ BÍ MẬT
Chƣơng này giới thiệu các vấn đề chia sẻ khoá bí mật: khái niệm, các sơ đồ, hƣớng cải tiến các sơ đồ, cũng nhƣ nêu ra việc áp dụng các sơ đồ trên vào ứng dụng thực tế.