HỆ MÃ HOÁ CRAMER-SHOUP (1998)

Một phần của tài liệu Phân tích đánh giá một số hệ mã hóa (Trang 44)

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:

cg1x1g2x2, dg1y1g2y2 , 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, dg1y1g2y2= 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à 5k*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: Zq R u (chọn u ngẫu nhiên thuộc Zq) ; gu  a; hu  b; H(b)  K;

Bản mã của K là ψ = a.

Giải thuật cuối cùng của KEM :

Để giải bản mã ψ = a, nhằm tìm ra khoá K, ta làm như sau: az b; H(b)  K;

3.4.2. Hệ mã hoá SKE 3.4.2.1. Sơ đồ mã hoá 3.4.2.1. Sơ đồ mã hoá

Về cơ bản SKE gồm hai giải thuật sau:

 Một giải thuật mã hoá đơn định thời gian đa thức SKE.Encrypt. Đầu vào là {0, 1}λ với λ  Z và λ ≥ 0, khoá K và bản rõ m.

Đầu ra là bản mã χ.

Khoá K là chuỗi bit có độ dài là SKE.KeyLen(λ).

Ở đây SKE.KeyLen(λ) là tham số khác của lược đồ, có thể tính bằng một giải thuật đơn định thời gian đa thức với đầu vào là {0, 1}λ .

Bản rõ m là chuỗi bit ngẫu nhiên, không giới hạn độ dài (đây chính là ưu điểm so với hệ mã Cramer-Shoup đã trình bày trước đây).

Bản mã χ là chuỗi bit có độ dài tuỳ ý.

 Một giải thuật giải mã đơn định thời gian đa thức SKE.Decrypt. Đầu vào là {0, 1}λ với λ  Z và λ ≥ 0, khóa K và bản mã χ.

Đầu ra là bản rõ m hay ký hiệu „reject‟.

Khoá K là chuỗi bit có độ dài là SKE.KeyLen(λ). Bản mã χ là chuỗi bit có độ dài tuỳ ý.

Tất nhiên ta yêu cầu rằng SKE phải thoả mãn điều kiện đúng đắn của hệ mã hoá, tức là phải thoả mãn:

Với mọi λ  Z, λ ≥ 0, Với mọi K  {0, 1}SKE.KeyLen(λ), Với mọi m  {0, 1}* (có nghĩa là m có độ dài tuỳ ý) luôn có:

3.4.2.2. Xây dựng sơ đồ mã hoá

Vì SKE là hệ mã hoá đối xứng, như ta biết hệ mã hoá đối xứng thì bị phá bởi kiểu tấn công CPA (Chosen plaintext attack). Nhưng SKE là hệ mã hoá đối xứng mã hoá một lần, tức là khoá K chỉ được dùng để mã hoá một lần, (chỉ được dùng một lần trên bản rõ m cụ thể), khả năng dùng lại khoá K là rất nhỏ (ví dụ như cách cài đặt trên do ta chọn z, u ngẫu nhiên  Zq), cho nên khả năng bị phá bởi kiểu tấn công CPA là không xảy ra.

Ta nói một tấn công là "bị động" đối với một hệ mã, nếu hệ mã đó đạt an toàn IND (2.2.3) trước tấn công này.

Việc xây dựng SKE để an toàn trước kiểu tấn công bị động là đơn giản và có nhiều cách. Ví dụ như để mã hoá bản rõ m, ta có thể khai triển khoá K bằng việc dùng bộ tạo bit giả ngẫu nhiên, để tạo ra chuỗi α có độ dài |m|, và sau đó tính bản mã χ = m  α .

Bộ tạo bit giả ngẫu nhiên có thể được xây dựng từ hàm một phía ([9], [10], [11])

Hệ mã SKE như trên an toàn với kiểu tấn công bị động, nhưng không an toàn trước kiểu tấn công CCA2. Do vậy Cramer và Shoup đã đề xuất hệ mã cải tiến của SKE gọi là SKE2, bằng cách kết hợp SKE như trên và MAC (one – time message authentication code) (mã xác thực thông tin một lần).

MAC bao gồm các thành phần sau:

 Với mọi λ  Z, λ ≥ 0, MAC.KeyLen(λ) là tham số độ dài khoá, và MAC.OutLen(λ) là tham số độ dài đầu ra.

Ta giả sử rằng MAC.KeyLen(λ) có thể được tính toán bằng giải thuật đơn định thời gian đa thức, với đầu vào cho trước là {0, 1}λ .

 Một họ những hàm được đánh chỉ mục (phân biệt) bởi λ  Z, λ ≥ 0 và chuỗi {0, 1}MAC.KeyLen(λ) , trong đó mỗi hàm MAC(λ, {0, 1}MAC.KeyLen(λ) , α ) ánh xạ chuỗi bit α có độ dài tuỳ ý tới chuỗi bit có độ dài xác định là

Một phần của tài liệu Phân tích đánh giá một số hệ mã hóa (Trang 44)

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

(91 trang)