Chƣơng 3 : PHÂN TÍCH ĐÁNH GIÁ MỘT SỐ HỆ MÃ HOÁ
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à MAC.OutLen(λ).
Để định nghĩa tính an toàn của MAC, ta định nghĩa một kịch bản tấn công sau (attack game):
Một thám mã A là giải thuật thời gian đa thức, có đầu vào là {0, 1}λ trong đó λ Z, λ ≥ 0 là tham số an toàn. Thám mã A đầu tiên chọn chuỗi bit α, và gửi α tới máy tư vấn. Máy tư vấn tạo ngẫu nhiên khoá là chuỗi bit {0, 1}MAC.KeyLen(λ) , sau đó tính MAC(λ, {0, 1}MAC.KeyLen(λ) , α ) = β và gửi trả β cho A.
Thám mã A biết cặp (α , β ) nhưng không biết khóa {0, 1}MAC.KeyLen(λ)
. Thám mã A sau đó cho đầu ra là một danh sách những cặp chuỗi bit:
((α1, β1), …, (αk, βk)
Ta nói rằng A đã tạo ra một sự giả mạo, nếu tồn tại một i nào đó [1, k] mà αi ≠ α và MAC(λ, {0, 1}MAC.KeyLen(λ) , αi) = βi.
Ta ký hiệu AdvForgeMAC,A(λ) là xác xuất mà A tạo ra một sự giả mạo như trường hợp trên.
Ta nói rằng MAC là an toàn nếu:
Với tất cả những thám mã A sử dụng giải thuật thời gian đa thức, AdvForgeMAC,A(λ)có giá trị không đáng kể.
MAC an toàn như trên, có thể được xây dựng bằng việc dùng một họ hàm băm TCR, mà không cần dựa trên giả thuyết toán học “khó” nào. Cũng đã có nhiều cách xây dựng MAC trong thực tế, nhưng độ an toàn của những cách này chưa được chứng minh đầy đủ.
Bây giờ ta trình bày cách kết hợp SKE và MAC, để tạo ra SKE2. Đầu tiên SKE2.KeyLen(λ) của SKE2 sẽ được tính như sau:
SKE2.KeyLen(λ) = SKE.KeyLen(λ) + MAC.KeyLen(λ). Khoá lúc này là cặp (K1, K2), trong đó K1 là chuỗi bit có độ dài SKE.KeyLen(λ) và K2 là chuỗi bit có độ dài MAC.KeyLen(λ).
Thuật toán mã hoá như sau:
Để mã hoá thông tin m dưới khoá (K1, K2), giải thuật SKE2.Encrypt tính:
SKE.Encrypt({0, 1}λ , K1, m) χ; MAC(λ, K2 , χ) tag; χ‟ ← χ || tag;
Ký hiệu || có nghĩa là ghép chuỗi. Đầu ra là bản mã χ‟ .
Thuật toán giải mã như sau:
Để giải mã χ‟ dưới khoá (K1, K2), giải thuật SKE2.Decrypt phân tích χ‟ thành χ‟ = χ || tag, trong đó tag là chuỗi bit có độ dài MAC.OutLen(λ).
Nếu sự phân tích này thất bại (độ dài χ‟ quá ngắn), giải thuật cho đầu ra là reject.
Ngược lại giải thuật tiếp tục tính:
MAC(λ, K2 , χ) tag‟ Nếu tag ≠ tag‟, thì giải thuật cho đầu ra là reject. Ngược lại giải thuật tính:
SKE.Decrypt({0, 1}λ, K1, χ) m Đầu ra là bản rõ m.
Định lý 3.2 (Ronald Cramer - Victor Shoup):
Nếu SKE là an toàn trước kiểu tấn công bị động và MAC là (mã xác thực thông tin một lần) (one-time message authentication code) an toàn, thì SKE2 đạt an toàn IND-CCA2.
Từ định lý trên ([2]) ta thấy với SKE và MAC được xây dựng như trên, thì ta có được một hệ mã đối xứng SKE2 đạt an toàn IND-CCA2.
3.4.3. Hệ mã hoá công khai lai (Hybrid public-key encryption : HPKE) 3.4.3.1. Hệ HPKE cơ sở
Với KEM và SKE như miêu tả ở trên, và chúng ta yêu cầu KEM và SKE là tương thích với nhau, có nghĩa là KEM.KeyLen(λ) = SKE.KeyLen(λ) với mọi λ Z, λ ≥ 0.
Ta mô tả hệ mã HPKE như sau:
Tạo khóa:
Giải thuật tạo khoá của HPKE tương tự như của KEM, khoá công khai và khoá bí mật cũng như trong KEM.
Mã hoá:
Để mã hoá thông tin m, đầu tiên chạy KEM.Encrypt, để tạo ra khoá đối xứng K và bản mã ψ của K.
Sau đó mã hoá m dưới khoá K, bằng giải thuật mã hoá SKE.Encrypt, để tạo ra bản mã χ.
Đầu ra của giải thuật mã hoá của HPKE là ψ‟ = (ψ , χ).
Giải mã:
Đầu tiên giải mã ψ bằng giải thuật giải mã KEM.Decrypt. Nếu nhận được kết quả là reject, thì giải thuật mã hoá của HPKE cho kết quả là reject và dừng.
Ngược lại ta nhận được khoá đối xứng K. Sau đó tiếp tục giải mã χ dưới khoá K, bằng giải thuật giải mã SKE.Decrypt.
Đầu ra chính là đầu ra của giải thuật giải mã HPKE, kết quả là bản rõ m hoặc là reject.
Định lý3.3 (Ronald Cramer - Victor Shoup):
Nếu KEM và SKE đạt an toàn IND-CCA2, thì HPKE được tạo bởi KEM và SKE đó, cũng đạt an toàn IND-CCA2.
Từ định lý trên ([2]) ta thấy để xây dựng được hệ mã hoá lai HPKE đạt an toàn IND-CCA2, thì ta phải xây dựng được KEM và SKE cùng đạt an toàn IND-CCA2. Đến nay cũng chưa có cách nào để xây dựng được một hệ mã KEM như vậy (chỉ mới xây dựng được SKE theo cách ta đã trình bày trên).
Nhưng gần đây (năm 2004), Kaoru Kurosawa và Yvo Desmedt đã đề xuất một hệ mã HPKE cải tiến rất có hiệu quả trong thực tế, có thể chứng minh đạt an toàn IND-CCA2, mà không cần KEM phải đạt an toàn IND- CCA2.
3.4.3.2. HPKE cải tiến (Kaoru Kurosawa và Yvo Desmedt)
Trong hệ mã HPKE của Kaoru Kurosawa và Yvo Desmedt (2004) đề xuất, yêu cầu SKE phải đạt an toàn IND-CCA2, và an toàn ε-rejectionvới bất kỳ chuỗi bit χ nào.
SKE đạt an toàn ε-rejectioncó nghĩa là xác xuất
Pr(SKE.Decrypt({0, 1}λ, K, χ ) = reject ) ≥ 1 – ε
Trong đó ε là lượng không đáng kể.
Hệ mã HPKE do Kaoru Kurosawa và Yvo Desmedt đề xuất như sau: Cho G là nhóm Abelian như trên, q là số nguyên tố lớn,
H là một hàm băm TCR.
Trong thực tế ta có thể dùng H bằng SHA-1.
Tạo khoá:
Tạo ngẫu nhiên g1 và g2 G .
Chọn (x1, x2, y1, y2) Zq4 ngẫu nhiên. Tính:
c g1x1g2x2 , d g1y1g2y2
Chọn ngẫu nhiên chỉ số j, để xác định hàm băm TCR trong họ hàm băm TCR. Khóa công khai là pk =(g1, g2, c, d, j), khoá bí mật là sk = (x1, x2, y1, y2).
Mã hoá:
Để mã hoá bản rõ m, chọn r Zq ngẫu nhiên và tính:
u1 = g1r , u2 = g2r , α = TCR (j, u1, u2),
v = cr dr α , K = H(v) , χ = SKE.Encrypt({0, 1}λ , K , m). Bản mã là (u1, u2, χ ).
Trong đó u1, u2 là bản mã của khoá K hay chính là ψ = (u1, u2).
Giải mã: Với bản mã C = (u1, u2, χ ), tính: α = TCR (j, u1, u2), v = * 2 * 1 2 2 1 1 y x y x u u , K = H(v).
Sau đó giải mã χ với khoá K, bằng SKE.Decrypt. Đầu ra là bản rõ m, hoặc là ký hiệu reject.
Định lý 3.4 (Kaoru Kurosawa - Yvo Desmedt ):
Hệ mã HPKE trên đạt an toàn IND-CCA2 dưới giả thuyết DDH, nếu SKE đạt an toàn IND-CCA2 và đạt an toàn ε-rejection với ε là lượng không đáng kể .
Từ định lý trên ([3]) và từ chính hệ mã, ta có thể thấy rằng độ an toàn của hệ mã HPKE do Kaoru Kurosawa - Yvo Desmedt đề xuất không phụ thuộc vào KEM nữa.
Ngoài ra tính hiệu quả của nó so với hệ mã HPKE cũ, và Cramer - Shoup còn cao hơn nhiều.
Hiệu quả vì : Thứ nhất trong hệ mã HPKE cũ và Cramer - Shoup còn có thành phần v G nằm trong bản mã C dùng để kiểm tra sự hợp lệ của C, thì sang hệ mã này v không còn nằm trong bản mã, mà chỉ được dùng để lấy về khoá K, ngoài ra trong hệ mã mới này thành phần h không cần thiết nữa. Dẫn đến việc tính toán được giảm đi, giải thuật lập mã và giải mã nhanh hơn.
Thứ hai so với những hệ mã hóa lai (HPKE) khác thì hệ mã của Kaoru Kurosawa - Yvo Desmedt đề xuất không cần thành phần KEM nữa.
Cho đến nay trong tất cả những hệ mã hoá lai (HPKE) được đề xuất, thì hệ mã do Kurosawa và Yvo Desmedt đề xuất là có tính hiệu quả và dễ dàng cài đặt trong thực tế nhất.
3.5. HỆ MÃ HOÁ OAEP (Optimal Asymmetric Encryption Padding) 3.5.1. Mô hình máy tƣ vấn ngẫu nhiên (Random Oracle Model) 3.5.1.1. Giới thiệu
Thực tế chúng ta biết lý thuyết mật mã đã mang lại những lợi ích vô giá cho việc cài đặt các hệ thống bảo đảm an toàn thông tin. Nhưng giữa lý thuyết và thực tế luôn có một khoảng cách, mà ta gọi đó là vấn đề chi phí và tính hiệu quả. Ví dụ như hệ mã Non-Malleable của Naor-Young ([23]), được chứng minh là có tính bảo mật cực cao (chống lại được kiểu tấn công mạnh nhất CCA2), nhưng rất tiếc là lại không có tính hiệu quả trong thực tế, vì phải xây dựng khá phức tạp và phải dựa vào NIZK Proof (Non-Interactive Zero- Knowleadge Proof) (chứng minh không lộ tri thức không tương tác).
Mô hình máy tư vấn ngẫu nhiên (Random Oracle Model) mang lại giải pháp cho vấn đề này, nó như là cầu nối giữa lý thuyết và thực tế. Trong mô hình này, giả thiết cho phép tất cả các thực thể tham gia (bao gồm cả thám mã) truy cập được vào một máy tư vấn ngẫu nhiên chung (Public Random Oracle), và thiết kế được giao thức mà chứng minh là đúng đắn, hiệu quả cho mô hình máy tư vấn ngẫu nhiên này Sau đó thay thế sự truy cập vào máy tư vấn ngẫu nhiên chung bằng tính toán của hàm h được chọn trước thích hợp (thông thường h là hàm băm). Việc cài đặt hàm h này cho đến nay vẫn là heuristic, sự thành công của nó dựa vào kinh nghiệm, chưa có cách xây dựng hàm h kiểu này bằng công thức toán học cụ thể.
Kết luận:
Mô hình máy tư vấn ngẫu nhiên sẽ lý tưởng hóa hàm băm như một máy tư vấn ngẫu nhiên, trong đó đầu ra của hàm băm là ngẫu nhiên, và hàm băm được truy cập thông qua máy tư vấn (Oracle).
Việc có được hàm băm có tính chất như thế vẫn đang còn tranh cãi và tiếp tục được nghiên cứu, xây dựng. Người ta còn gọi hàm băm đó là Magic Hash Function, ở các lược đồ mã hóa sẽ giới thiệu sau đây, đó chính là các hàm G và H.
Máy tư vấn ngẫu nhiên (Ramdom Oracle - RO) là một máy mà cứ cho input thì sẽ nhận được output. Ngoài ra máy này là public, ai dùng cũng được, kể cả kẻ thám mã, việc thiết kế giao thức trên mạng làm sao để có được tính chất public này ta không bàn đến ở đây.
Thông thường trong thực tế ta cài đặt RO bằng một hàm băm, đầu ra của hàm băm hoàn toàn ngẫu nhiên, có nghĩa là cho trước output thì “khó” thể tìm được input tương ứng. Tương đương với khái niệm hàm một phía, có input thì dùng hàm băm có được ouput, nhưng có ouput thì “khó” thể tìm lại được input.
3.5.1.2. Cài đặt cụ thể
Xem xét đầu tiên là hàm băm MD5, đây không là thay thế thích hợp cho máy tư vấn ngẫu nhiên, vì ([21]) với mỗi x có một y, để cho với mọi z, MD5(xyz) có thể dễ dàng được tính toán nếu cho trước |x|, MD5(x), và z. Kết quả trong ([21]) chỉ ra rằng MD5(ax) không thể được dùng như sự mã hóa xác thực thông tin của chuỗi x dưới khóa a.
Khắc phục khó khăn trên, người ta dùng hàm : {0, 1}640 → {0,1}128 . Nhưng đây cũng không phải là sự thay thế thích hợp cho máy tư vấn ngẫu nhiên vì kết quả trong ([22]) đã chứng minh rằng những va chạm là hoàn toàn có khả năng xảy ra.
Mặc dù các hàm băm chuẩn (MD5, SHA-1, …) là không thích hợp, nhưng những sự biến đổi sau lại mang lại hiệu quả:
1. Một hàm băm với đầu ra bị rút gọn theo một cách nào đấy, ví dụ như h1(x) = 64 bit đầu tiên của MD5(x).
2. Một hàm băm với độ dài đầu vào được giới hạn một cách thích