3.2.1. Hệ mã ELGAMAL đảm bảo an toàn ngữ nghĩa
Sơ đồ hệ mã Elgamal:
Tập bản rõ P = Z*p , tập bản mã C = Z*p Z*p , p là số nguyên tố.
Khóa công khai là bộ (p, , ), khóa bí mật là a, trong đó a
mod p, Z*p là phần tử sinh của Z*p .
Thuật toán lập mã:
Chọn r ngẫu nhiên thuộc Zp-1 c = E(m, r) = (c1 = r
, c2 = m.r
= m. a.r
) Thuật toán giải mã:
m = (c1a)-1 . c2
Hệ mã Elgamal có tính chất xác suất (do việc chọn r ngẫu nhiên thuộc Zp-1), tức là một bản rõ có thể có nhiều bản mã tùy thuộc vào việc ta chọn số ngẫu nhiên r.
Do p là số nguyên tố lớn, nên việc chọn ngẫu nhiên r bằng nhau giữa hai lần lập mã của cùng một bản rõ là xảy ra với xác xuất không đáng kể, vì vậy việc biết bản mã cũng không mang lại chút thông tin gì về bản rõ, nếu như giả thiết toán học của hệ mã là đúng đắn.
Độ khó của hệ mã dựa trên độ khó của bài toán Logarit rời rạc, hay giả thuyết Diffe-Hellman, cho đến nay cũng như bài toán RSA, vẫn chưa có lời giải với thời gian chấp nhận được. Theo định nghĩa, hệ Elgamal đảm bảo an toàn ngữ nghĩa.
3.2.2. Hệ mã ELGAMAL an toàn trƣớc tấn công KPA, COA, CPA
ELGAMAL là hệ mã hóa công khai, nên hiển nhiên mô hình tấn công CPA (Chosen plaintext attack) là luôn luôn thỏa mãn, và thám mã có thể mã hóa bất kỳ bản rõ nào mà họ chọn.
Việc giải mã để tìm bản rõ tương đương với việc giải bài toán Logarit rời rạc, mà ta đã biết cho đến nay vẫn chưa có phương pháp để giải bài toán Logarit rời rạc trong thời gian chấp nhận được.
Đến nay người ta vẫn tin rằng, hệ mã ELGAMAL là an toàn trong mô hình tấn công CPA, và do vậy kéo theo là an toàn trong các mô hình tấn công yếu hơn như COA (Ciphertext only attack) và KPA (Known plaintext attack).
3.2.3. Hệ mã ELGAMAL không đạt an toàn trƣớc tấn công CCA
Nhận xét:
Xét hai bản rõ m1 và m2 , theo hệ mã Elgamal ta có E(m1) = (r1
, m1 r1
), E(m2) = (r2
, m2 r2). Với r1 , r2 là hai số ngẫu nhiên. E(m1) E(m2) = (r1 , m1 r1 ) (r2 , m2 r2 ) = (r1 + r2 , m1m2 r1 + r2 ) = (r , m1m2r ) = E(m1m2), với r = r1 + r2.
E(m1m2) chính là một sự mã hóa của bản rõ m1m2 dưới số ngẫu nhiên r = r1 + r2 .
Nói cách khác giải mã bản mã E(m1) E(m2) ta sẽ thu được bản rõ là m1m2 .
Nếu thám mã nhận bản mã c = (c1 , c2) trong mô hình tấn công CCA, nó có thể chọn một bản rõ m‟ và bằng cách gửi bản mã c E(m‟) = E(m) E(m‟) tới máy tư vấn giải mã (trong mô hình tấn công CCA thám mã hoàn toàn có quyền này, vẫn thỏa điều kiện không truy vấn máy tư vấn giải mã trực tiếp trên bản mã c). Máy tư vấn giải mã sẽ trả kết quả về bản rõ mm‟. Rõ ràng thám mã có thể thu về bản rõ m cần tìm, tức là hệ mã đã bị phá.
3.3. HỆ MÃ HOÁ CRAMER-SHOUP (1998)
Những hệ mã có thể đạt an toàn trước tấn công mạnh nhất hiện nay CCA2 (có nghĩa là hệ mã đạt an toàn IND-CCA), hầu hết là những hệ mã không khả thi trong thực tế (vì sử dụng những giả thiết phức tạp và khó cài đặt trong thực tế).
Ta sẽ giới thiệu hệ mã Cramer-Shoup (do Ronald Cramer và Victor
Shoup đưa ra) là hệ mã đầu tiên có cả hai tính chất, vừa đạt an toàn IND-CCA, vừa có tính khả thi trong thực tế. Yêu cầu duy nhất là độ an toàn
3.3.1. Vấn đề Decisionnal Diffie-Hellman
Cho G là nhóm Abelian cấp q, trong đó q là số nguyên tố lớn. G4 là tập G G G G.
Ta xét hai phân bố sau:
Phân bố R của nhóm 4 phần tử ngẫu nhiên (g1, g2, u1, u2) G4 ; Phân bố D của nhóm 4 phần tử (g1, g2, u1, u2) G4 , trong đó g1, g2 là ngẫu nhiên, và u1 = g1r và u2 = g2r với r ngẫu nhiên thuộc Zq.
Vấn đề Decisionnal Diffie-Hellman là bài toán phân biệt hai nhóm : (g1, g2, u1, u2) G4 trong đó g1, g2, u1, u2 là ngẫu nhiên G.
Và (g1, g2, u1, u2) G4 trong đó g1, g2 là ngẫu nhiên thuộc G và u1 = g1r và u2 = g2r với r ngẫu nhiên thuộc Zq.
Nếu ta thay thế như sau:
g1 → g, g2 → gx , u1 → gy , u2 → gxy,
Ta thấy rằng nó tương đương với sự phân biệt bộ ba Diffie-Hellman (gx , gy , gxy) từ bộ ba bất kỳ (gx
, gy, gz).
Có nghĩa là nó cũng liên hệ với vấn đề Diffie-Hellman (cho trước g, gx và gy
tính gxy ), hay vấn đề logarithm rời rạc (cho trước g và gx tính x).
Có sự quy dẫn thời gian đa thức từ giả thuyết Decisionnal Diffie- Hellman tới giả thuyết Diffie-Hellman và từ giả thuyết Diffie-Hellman tới bài toán Logarithm rời rạc, nhưng quy dẫn theo chiều ngược lại thì cho đến nay vẫn chưa được biết.
Có nhiều chứng minh Heuristic cho độ khó của cả ba giả thuyết này ([12]). Quả thực cho đến nay vẫn chưa có giải thuật thời gian đa thức để giải quyết cả ba giả thuyết trên, vì thế ta vẫn tin rằng hệ mã xây dựng dựa trên độ khó của một trong ba giả thuyết trên là an toàn.
Hệ mã Cramer-Shoup có độ „khó‟ dựa trên giả thuyết Decisionnal Diffie-Hellman.
3.3.2. Sơ đồ hệ mã
Một họ hàm băm được gọi là không va chạm mạnh, nếu cho trước hàm băm H ngẫu nhiên từ họ hàm băm, thì thám mã „khó„ có thể tìm được hai đầu vào x và y khác nhau mà H(x) = H(y).
Một khái niệm yếu hơn là họ hàm băm không va chạm yếu, nếu cho phép thám mã chọn truớc x, và H được chọn một cách ngẫu nhiên, thì thám mã „khó‟ thể tìm được y sao cho H(x) = H(y).
Một trường hợp đặc biệt của họ hàm băm không va chạm yếu này được gọi là „target collision resistant‟(TCR) : x được chọn ngẫu nhiên trước, sau đó chọn ngẫu nhiên tiếp hàm băm H, thì thám mã "khó" thể tìm được y sao cho H(x) = H(y).
Ví dụ SHA-1, MD5 đều thỏa mãn là hàm băm TCR .
Giả sử rằng G là nhóm Abelian cấp q, q là số nguyên tố lớn. Giả sử rằng bản rõ là một phần tử thuộc G. Dùng họ hàm băm TCR, ánh xạ những chuỗi bit dài tới những phần tử của Zq .
Tạo khóa:
Chọn ngẫu nhiên g1 , g2 G và
x1 , x2 , y1 , y2 , z Zq . Tính:
c g1x1g2x2, d g1y1g2y2 , h = g1z
Hàm băm H được chọn từ họ hàm băm TCR.
Khoá công khai là (g1, g2, c, d, h, H), khoá bí mật là (x1 , x2 , y1 , y2 , z).
Mã hoá:
Cho bản rõ m G. Chọn r ngẫu nhiên Zq. Tính
u1 = g1r , u2 = g2r , e = hrm , α = H(u1, u2, e), v = cr dr.α . Bản mã là (u1, u2, e, v).
Giải mã:
Cho bản mã (u1, u2, e, v). Tính α = H(u1, u2, e), và kiểm tra * 2 * 1 2 2 1 1 y x y x u u = v
Nếu điều kiện kiểm tra là sai, thì giải thuật cho kết quả đầu ra là thông báo không có kết quả (reject) . Ngược lại, giải thuật cho đầu ra là
m = e / u1z
Chúng ta kiểm tra đây đúng là một hệ mã, có nghĩa giải mã bản mã sẽ cho kết quả là bản rõ. Vì u1 = g1r và u2 = g2r nên: u1x1 u2x2 = g1r*x1g2r*x2 = cr Mặt khác 1 2 2 1 y y u
u = dr và u1z = hr. Vì thế điều kiện kiểm tra thoả
mãn, và đầu ra sẽ là m = e / hr
Ví dụ : Chọn q = 23, G = Zq = {1, ..., 23}, g1 = 2, g2 =1, x1 = 2, x2 = 3, y1 = 1, y2 = 2, z = 3. Tính : 1 2 2 1 x x g g c = 22 * 13 = 4, d g1y1g2y2= 21 * 12 = 2, h = g1z = 23 = 8. H là SHA-1.
Khoá công khai là (g1=2, g2=1, c=4, d=2, h=8, SHA-1), khoá bí mật là (x1=2, x2 =3, y1 =1, y2 =2, z=3).
Mã hóa : bản rõ m = 5, thành phần ngẫu nhiên r = 2.
Tính : u1 = g1r =22 = 4, u2 = g2r = 1, e = hrm =82. 5=320, α = SHA-1(4, 1, 320)=11, v = cr dr.α = 42. 22.11 = 16 . 67108864 = 1073741824.
Bản mã là (u1=4, u2=1, e=320, v=1073741824).
Giải mã : Tính α = SHA-1(4, 1, 320)=11, và kiểm tra * 2 * 1 2 2 1 1 y x y x u u = v = 42+1.11. 12+2.11 = 1073741824 đúng. Vậy bản rõ là m = e / u1z = 320/43 = 320/64 = 5.
3.3.3. Độ an toàn của hệ mã hoá
Định lý 3.1 (Ronald Cramer - Victor Shoup):
Hệ mã trên là đạt an toàn IND-CCA2 với giả thuyết rằng H là hàm băm TCR và giả thuyết Decisionnal Diffie-Hellman là „khó‟ trong nhóm G (G là nhóm Abelian cấp q, q là số nguyên tố lớn).
Từ định lý trên ([6]) ta thấy rõ hệ mã Cramer – Shoup đạt an toàn IND- CCA2, vì cho đến nay vẫn chưa có giải thuật thời gian đa thức nào giải quyết được vấn đề Decisionnal Diffie-Hellman.
Do vậy kéo theo hệ mã an toàn trước các mô hình tấn công KPA, COA, CPA cũng như đảm bảo an toàn ngữ nghĩa.
3.3.4. Cài đặt hệ mã hoá
Để cài đặt hệ mã trong thực tế, có thể chọn p là số nguyên tố lớn sao cho p – 1 = 2q, trong đó q cũng là số nguyên tố lớn.
Nhóm G là nhóm con cấp q trong Z*
p . Ta giới hạn bản rõ là một phần tử nằm trong tập {1, …, q}, và có thể thay đổi (encode) nó bằng cách bình phương bản rõ theo modulo p, sẽ cho kết quả là một phần tử trong nhóm G. Ta có thể khôi phục lại bằng cách lấy căn bậc hai theo modulo p để được một phần tử duy nhất nằm trong tập {1, …, q}.
Ví dụ : p = 11, q = (11-1)/2 = 5.
Bản rõ m là một phần tử nằm trong tập {1, 2, 3, 4, 5}, bây giờ ta tính tập G, bằng cách bình phương từng phần tử trong tập {1, 2, 3, 4, 5} theo modulo 11, ta được tập G ={1, 4, 9, 5, 3}.
Bây giờ nếu ta muốn mã hóa bản rõ m thuộc tập {1, 2, 3, 4, 5}, ví dụ m = 4, ta tính tương ứng với nó trong tập G là 42
mod 11 = 5. Ta lấy giá trị m‟= 5 đi mã hóa.
Còn sau khi giải mã ta nhận lại được m‟ = 5, ta tính ngược lại bản rõ m ban đầu của ta bằng cách, lấy căn bậc hai của nó theo mod 11, để được một phần tử nằm trong tập {1, 2, 3, 4, 5}. Công thức là 5k*11 , vấn đề là chọn k phù hợp để được một giá trị nằm trong tập {1, 2, 3, 4, 5}, ở trường hợp này k = 1, nên giá trị của m = 4.
Thông thường ta có thể đơn giản chọn G = {1, 2, 3, 4, 5}. Nhưng bằng cách trên thì ta thấy có ưu điểm là, giá trị được đem đi mã hóa là một phần tử nằm trong tập Zp , lớn hơn giá trị thực của bản rõ là một phần tử nằm trong tập Zq ( p = 2q+1), và do đó độ an toàn lớn hơn.
3.3.5. Hệ mã hoá không dùng hàm băm
Shoup và Cramer đi xa hơn, đề xuất không dùng hàm băm.
Giả sử rằng những chuỗi ta cần băm trong hệ mã có dạng (a1, a2, …, ak), trong đó 0 ≤ ai ≤ p . Trong hệ mã ta thay thế phần tử d trong khoá công khai bằng nhóm d1, …, dk. Với 1 ≤ i ≤ k , ta đặt 1 2 2 1 i i y y i g g d , trong đó 1 i y và 2 i
y là những phần tử ngẫu nhiên của Zq và nằm trong khóa bí mật. Khi mã hoá, ta tính v = cr k d i r i a i 1 *
Khi giải mã, ta kiểm tra điều kiện
v = k i i i y a x u 1,..., 1 1 * 1 . k i i i y a x u 1,..., 2 2 * 2
Nếu không thoả mãn điều kiện kết quả là thông báo không có kết quả (reject). Nếu thoả mãn điều kiện kết quả là bản rõ m = e / u1z.
Độ an toàn của hệ mã cũng được chứng minh là tương đương với hệ mã trên, độ an toàn của hệ mã chỉ phụ thuộc duy nhất vào giả thuyết Decisionnal Diffie-Hellman.
Trong thực tế hệ mã không cần đạt an toàn IND-CCA2, chỉ cần đạt an toàn IND-CCA1, ta có thể thay đổi hệ mã để có thể cài đặt đơn giản và ít tốn kém hơn bằng cách khử đi các phần tử d, y1, y2 và hàm băm H.
Lúc này khi mã hoá ta chỉ tính v = cr
và khi giải mã ta kiểm tra điều kiện là v = 1 2 2 1 x x u u .
Sơ đồ hệ mã : Tạo khóa: Chọn ngẫu nhiên g1 , g2 G và x1 , x2 , z Zq . Tính: 1 2 2 1 x x g g c , h = g1z
Hàm băm H được chọn từ họ hàm băm TCR. Khoá công khai là (g1, g2, c, h), khoá bí mật là (x1 , x2 , z).
Mã hoá:
Cho bản rõ m G. Chọn r ngẫu nhiên Zq. Tính u1 = g1r , u2 = g2r , e = hrm , v = cr . Bản mã là (u1, u2, e, v).
Giải mã:
Cho bản mã (u1, u2, e, v). Kiểm tra u1x1 u2x2= v
Nếu điều kiện kiểm tra là sai, thì giải thuật cho kết quả đầu ra là thông báo không có kết quả (reject) . Ngược lại, giải thuật cho đầu ra là
m = e / u1z
Chúng ta kiểm tra đây đúng là một hệ mã, có nghĩa giải mã bản mã sẽ cho kết quả là bản rõ.
Vì u1 = g1r và u2 = g2r nên:
u1x1 u2x2 = g1r*x1g2r*x2 = cr = v.
Vì thế điều kiện kiểm tra thoả mãn, và đầu ra sẽ là m = e / u1z.
Độ an toàn của hệ mã trước cách tấn công CCA1 cũng tương đương với độ khó của giả thuyết Decisionnal Diffie-Hellman ([6]).
3.4. HỆ MÃ HOÁ LAI (Hybrid Encryption)
Hệ mã Cramer và Shoup ở trên yêu cầu giới hạn bản rõ là một phần tử G, nhưng trong thực tế bản rõ có thể là tuỳ ý. Để đạt điều này chính Cramer và Shoup đã đưa ra hệ mã mới dựa vào chính hệ mã trên, gọi là mã hoá lai (Hybrid Encryption).
Trong hệ mã hoá lai cơ bản gồm hai phần, phần thứ nhất là hệ mã hoá công khai, tạm gọi là "cơ chế đóng gói khoá" (key encapsulation mechanism) viết tắt là KEM.
Phần thứ hai ta tạm gọi là hệ mã hoá khoá đối xứng một lần (one-time symmetric-key encryption scheme) viết tắt là SKE.
3.4.1. Hệ mã hoá KEM 3.4.1.1. Sơ đồ mã hoá 3.4.1.1. Sơ đồ mã hoá
Về cơ bản KEM bao gồm những giải thuật sau:
Một giải thuật xác xuất thời gian đa thức để tạo khóa KEM.KeyGen. Đầu vào là chuỗi {0, 1}λ với λ Z và λ ≥ 0.
Đầu ra là cặp khoá công khai và bí mật (Pk, Sk). Cấu trúc của Pk và Sk phụ thuộc vào từng hệ mã cụ thể.
Một giải thuật mã hoá xác xuất thời gian đa thức KEM.Encrypt. Đầu vào là {0, 1}λ với λ Z và λ ≥ 0, và khoá công khai Pk.
Đầu ra là cặp (K, ψ), trong đó K là khoá mã hoá trong hệ mã hoá đối xứng SKE, và ψ là bản mã của K.
Khoá K là chuỗi bit có độ dài là KEM.KeyLen (λ),trong đó KEM.KeyLen (λ ) là tham số khác của KEM.
Một giải thuật giải mã đơn định thời gian đa thức KEM.Decrypt. Đầu vào là {0, 1}λ với λ Z và λ ≥ 0, bản mã ψ của K, và khoá bí mật Sk.
3.4.1.2. Xây dựng sơ đồ mã hoá
Ta ví dụ về cách xây dựng KEM như sau bằng việc thay đổi một chút hệ mã ElGamal:
Gọi G và q như ở trên, g là phần tử sinh của tập G. Đặt H là hàm băm (như SHA-1 chẳng hạn).
Giải thuật thứ nhất của KEM :
Khoá công khai là h = gz
, trong đó z Zq được chọn ngẫu nhiên, khoá bí mật là z.
Giải thuật thứ hai của KEM :
Để tạo khoá công khai K cho hệ mã SKE và bản mã của K ta làm như sau: