II. Hàm Hash
3. Giao thức ký:
Giao thức này nhằm để cho Simon ký thông báo và thuyết phục Rita rằng chữ ký là tin cậy. Đểđơn giản, Simon sẽ sử dụng lược đồ chữ ký RSA với modun khóa công khai n và số mũ 3. Khóa công khai của Colin sẽ là: h=gz, trong đó z là khóa riêng của Colin, g là căn nguyên thủy (có bậc cao nhất) của n. Khóa công khai này và tất cả những tính toán trong giao thức là trong nhóm bậc nguyên tố mà ở đó bài toán logarit rời rạc được giả thiết là khó.
3.1. Tạo khóa:
Simon chọn n = p.q với p,q là các số nguyên tố lớn khác nhau, φ(n) = (p - 1)(q - 1). Cho P = A = Zn và xác định:
K = {(n, p, q, 3-1, 3): n = p.q; p,q nguyên tố: 3-1.3 ≡ 1 mod(φ(n))} Các giá trị n,3 công khai; các giá trị p, q, 3-1 bí mật.
3.2. Tạo chữ ký:
Simon tiến hành ký thông báo m như sau:
1. Simon chọn x ngẫu nhiên và tính: a = gx
b = hx
2. Với K = (n, p, q, 3-1, 3) Simon tính chữ ký RSA trên H(a,b) ⊕ F(m)
α = (H(a, b) ⊕ F(m))3−1 modn
Trong đó H(a, b) là hàm tổ hợp để khử cấu trúc nhân nhưng lại rất dễ dàng tính ngược; F là hàm Hash thích hợp.
Sau đó Simon gửi a, b, α cho Rita.
Ở giao thức này, Simon đã tạo ra chữ ký chống chối bỏ như thể được ký bởi Colin. Ta dễ dàng chứng minh được điều này.
Ta có: a = gx b = hx
mà h = gz
⇒ b = (gz)x = (gx)z = az Mặt khác: z là khóa riêng của Colin.
Do đó: b = (gx)z là chữ ký chống chối bỏ của Colin, với g là căn nguyên thủy có bậc cao nhất của n và z là khóa bí mật.
3.3. Giao thức kiểm tra:
Ởđây ta giả thiết người ký tham gia vào giao thức kiểm tra, chưa cần sự có mặt của người xác nhận. Giao thức kiểm tra diễn ra với sự cộng tác của Simon (người ký) và Rita (người nhận). Giao thức tiến hành như sau:
1. Rita chọn s, t ngẫu nhiên và tính c = gsht, rồi gửi c cho Simon. 2. Simon chọn q ngẫu nhiên và tính:
d = gq; e = (c.d)x
Simon gửi d,e cho Rita. 3. Rita gửi s,t cho Simon
4. Simon kiểm tra gsht = c thì Simon gửi q cho Rita
5. Rita kiểm tra nếu d = gq, e.a−q = asbt, H(a, b) ⊕ F(m) = α3 modn thì chữ ký là tin cậy. Ngược lại, chữ ký là không tin cậy.
Trong bước 5, Rita kiểm tra đẳng thức e.a−q = asbt tức là kiểm tra b = az. Thật vậy: Từ asbt = e.a−q ⇒ bt = e.a−q.a-s (1) mà e = (c.d)x c = gsht d = gq ⇒ e = (gs.ht.gq )x = gs.x.ht.x.gq.x = (gx)s.ht.x.(gx)q = as.htx.aq (2) Từ (1) và (2) ⇒ bt = as.htx.aq . a−q.a-s = ht.x ⇒ b = hx = (gz)x = (gx)z = az.
Điều này thuyết phục Rita rằng chữ ký này do Simon tạo ra và có thểđược kiểm tra bởi Colin. Nhưng Rita không thể dùng kết quả này để chứng minh nó với những người khác.
4. Giao xác thức nhận:
Giao thức này để cho người kiểm tra bị thuyết phục rằng chữ ký là phù hợp nhưng cũng không cho phép người kiểm tra đi thuyết phục người khác.
Giao thức như sau:
1. Người kiểm tra Veron chọn u, v ngẫu nhiên và tính: k = gu .av . Rồi gửi k cho Colin.
2. Colin chọn p ngẫu nhiên và tính:
l = gp, n = (k.l)z. Rồi gửi l, n cho Veron. 3. Người kiểm tra gửi u, v cho Colin.
4. Colin kiểm tra nếu k= gu .av thì Colin gửi q cho người kiểm tra Veron.
5. Người kiểm tra Veron sẽ kiểm tra nếu gp = l và n.hp = hu.bv thì chữ ký là tin cậy. Ngược lại, chữ ký là không tin cậy.
Ở bước 5, người kiểm tra Veron kiểm tra đẳng thức: n.hp = hu.bv cũng chính là kiểm tra b = az. Ta có: n.hp = hu.bv ⇒ bv = n. hp. h-u (1) Mặt khác: n = (k.l)z k = gu.av l = gp ⇒ n = (gu.av.gp)z (2) Từ (1) và (2) ⇒ bv = (gu.av.gp)z. hp. h-u = guz.avz.gzp.g-uz.g−zp ⇒ bv = av.z⇒ b = az. 5. Giao thức chuyển đổi:
Đây là một giao thức xác nhận khác của Colin, giao thức này là cách để Colin chuyển chữ ký người xác nhận được chỉ định thành chữ ký số tự xác thực.
Ở đây, Colin lập nên một chứng minh không tương tác rằng một người nào đó biết cách biểu diễn b như lũy thừa của a.
Ý tưởng cơ bản của sự chuyển đổi này là phải biết cách biểu diễn b như lũy thừa của a để thành lập cặp (r, y) sao cho ay = r.bF(a,r), trong đó F là hàm một chiều thích hợp. Ta thấy rằng khóa công khai h của Colin không xuất hiện ở đây, h chỉ xuất hiện trong giao thức ký. Do vậy, sau khi Colin thực hiện giao thức chuyển đổi thì bất kỳ người nào cũng có thể kiểm tra chữ ký mà không cần sự có mặt của người ký hay người xác nhận. Giao thức tiến hành như sau:
1. Colin chọn ngẫu nhiên w rồi tính: r = aw
Sau đó gửi r, y cho người kiểm tra Veron.
2. Người kiểm tra Veron kiểm tra nếu ay = r. bF(a, r) thì chữ ký là tin cậy. Ngược lại là chữ ký không tin cậy.
Chứng minh: ay = r. bF(a, r) thì chữ ký là tin cậy. Ta có: ay = r. bF(a, r) ⇔ aw + z.F(a, r) = aw.bF(a, r) ⇔ aw.az.F(a, r) = aw.bF(a, r) ⇒ az.F(a, r) = bF(a, r) ⇒ az = b hay b = az ⇒ chữ ký là tin cậy. 6. Tổng quát:
Lược đồ chữ ký cơ sở có thể được tổng quát hóa bằng cách bao gồm nhiều người xác nhận. Hơn một khóa công khai của người xác nhận có thể được tổ hợp trong chữ ký chống chối bỏ (như lấy tích của khóa công khai), sao cho sự cộng tác của tất cả những người xác nhận sẽ là cần thiết cho sự xác nhận bất kỳ. Càng yêu cầu nhiều người xác thực thì càng khó khăn để nhận sự xác thực và theo một nghĩa trực quan thì lược đồ chữ ký càng tiếp cận gần hơn với giao thức tri thức không.
Chương 5
CHỮ KÝ NGƯỜI XÁC NHẬN
KHÔNG THỂ CHỐI BỎ
1.Giới thiệu:
Ở các chương trước chúng ta đã làm quen với khái niệm về chữ ký chống chối bỏ và chữ ký người xác nhận. Lược đồ chữ ký người xác nhận đã giải quyết được một số yếu điểm của lược đồ chữ ký chống chối bỏ. Trong lược đồ chữ ký chống chối bỏ gồm 2 thành phần tham gia là người ký và người xác nhận (hoặc người kiểm tra). Do vậy, nếu người ký từ chối cộng tác đồng nghiã với chữ ký không được kiểm tra. Trong lược đồ chữ ký người xác nhận, khả năng kiểm tra các chữ ký là người đại diện được thêm vào thực thể gọi là người xác nhận. Sự kiểm tra của người xác nhận chính xác hơn của người ký, cô ta (anh ta) có khả năng xác nhận hoặc từ chối độ tin cậy của chữ ký nhưng cô ta (anh ta) không có khả năng giả mạo chữ ký.
Trong nhiều lược đồ chữ ký người xác nhận, người ký không thể xác nhận chữ ký của mình là tin cậy. Nếu người xác nhận từ chối cộng tác dẫn đến chữ ký không thể kiểm tra. Trong thực tế, sự tin cậy của những người tham gia giữ vai trò rất quan trọng, vì vậy giảm tình trạng rắc rối của bất kỳ người tham gia nào là mong muốn cao dựa vào cả các lý do kỹ thuật và các lý do tiết kiệm. Điều này được thực hiện nếu chữ ký có thể kiểm tra với sự cộng tác của người ký hoặc người xác nhận. Sau đó người sử dụng có thể trả lời người ký sự kiểm tra chữ ký. Như một sự bảo vệ an toàn, người xác nhận còn có thể kiểm tra chữ ký nếu người ký cộng tác.
Chương này giới thiệu lược đồ chữ ký người xác nhận không thể chối bỏ, đưa ra chức năng kiểm tra chữ ký của người ký và người xác nhận. Lược đồ này là sự biến đổi của chữ ký người xác nhận. Lược đồ cung cấp một cách linh hoạt đối với người ký và người sử dụng cũng như bao hàm các biến đổi của người xác nhận được chỉ định – người thường được tin tưởng trong thực tế. Sự bổ sung vào lược đồ nhằm mục đích đánh lạc hướng nghĩa là các chữ ký người xác nhận không thể chối bỏ có thể sinh ra với mục đích đánh lừa. Các chữ ký người xác nhận không thể chối bỏ mù quáng có lợi ích trong nhiều ứng dụng như các hệ thống trả tiền trước với mạng lớn của các dịch vụ nơi mà quyền riêng tư của mỗi người sử dụng mạng nên được bảo vệ trong khi kiểm duyệt sự mua bán.
2. Mô hình của chữ ký người xác nhận không thể chối bỏ:
Phần này cung cấp một kiểu đặc trưng của các chữ ký người xác nhận không thể chối bỏ. Nó cung cấp sựđịnh nghĩa không đổi cho các giao thức giải mã, sử dụng các khái niệm chuẩn của máy Turing tương tác, hệ thống chứng minh tương tác và tri thức không.
Để đơn giản, chúng ta dùng S chỉ người ký, C chỉ người nhận và V là người kiểm tra. Lược đồ chữ ký người xác nhận không thể chối bỏ bao gồm các thuật toán và các giao thức sau:
- Thuật toán tạo khóa: Tạo 2 khóa GENS và GENC nhận 1l là đầu vào ( 11 nghĩa là một dãy số có một số 1), trong đó 1 là tham số an toàn và lần lượt 2 cặp đầu ra (SS, PS) và (SC, PC). Thuật toán GENS thực hiện bởi S, GENC thực hiện bởi C. (SS, PS), (SC, PC) lần lượt là các cặp khóa bí mật và công khai của S và C. Khóa bí mật S được sử dụng để tạo ra chữ ký. Ngoài ra SS, SC được lần lượt sử dụng bởi người ký và người xác nhận trong giao thức xác nhận trong và giao thức chối bỏ.
- Thuật toán ký đa thức theo xác suất SIGN nhận khóa bí mật SS, thông báo m và các đầu ra của chữ ký σ.
- Giao thức kiểm tra chữ ký tương tác (CVer , VVer). Đây là cặp đầu vào của máy Turing thời gian đa thức tương tác giữa người xác nhận và người kiểm tra:
( CVer (SC), VVer ())(m, σ, PS, PC) → v
Đầu vào chung gồm thông báo m, chữ ký σ, 2 khóa công khai PS, PC.
Người xác nhận có SC là đầu vào riêng. Sự trả về của giao thức là giá trị logic v. Nếu đầu ra là 1 nghĩa là chữ ký σ tin cậy trên thông báo m, đầu ra là 0 thì ngược lại.
- Giao thức kiểm tra chữ ký tương tác (SVer , VVer). Đây là cặp đầu vào của máy Turing thời gian đa thức tương tác giữa người ký và người kiểm tra:
(SVer(SS), VVer())(m, σ, PS, PC) → v
Đầu vào chung gồm thông báo m, chữ ký σ và 2 khóa công khai PS, PC. Người ký có SS là đầu vào riêng. Sự trả về của giao thức là giá trị logic v. Nếu đầu ra là 1 có nghĩa là chữ ký σ tin cậy trên thông báo m, đầu ra là 0 thì ngược lại.
+ Các yêu cầu trong giao thức:
Tính không thể phân biệt của chữ ký: Chữ ký mô phỏng SIGNsim được tạo bằng thuật toán thời gian đa thức theo xác suất, nó nhận thông báo m, 2 khóa công khai PS, PC là đầu vào cho ra một phần tử được gọi là chữ ký mô phỏng trong không gian ký. Chữ ký mô phỏng này không thể phân biệt so với chữ ký thực với bất kỳ người nào mà chỉ cần hiểu các thông tin công khai. Dựa vào một thông báo và một chữ ký có nghĩa, một người nào đó không thể tự mình xác định được chữ ký là tin cậy.
Tính không thể giả mạo của chữ ký: Không tồn tại thuật toán thời gian đa thức nhận khóa công khai PS của người ký; khóa bí mật SC, khóa công PC của người nhận và
truy cập đến chữ ký người tin cậy SIGN, cho ra một thông báo – chữ ký (m’, σ’) không được tạo bởi SIGN với xác suất đáng kể.
Tính chính xác của sự kiểm tra: không lưu ý tới sự dính líu của một trong 2 người ký hoặc người xác nhận, các giao thức kiểm tra là nhất quán. Ngoại trừ xác suất không đáng kể, giao thức kiểm tra trả về 1 như là đầu ra của người kiểm tra nếu gặp thông báo – chữ ký (m, σ) tin cậy, hoặc 0 nếu (m, σ) là không tin cậy.
3. Các lược đồ chữ ký và phép chứng minh tương tác:
3.1. Ký hiệu:
+ Kí hiệu || biểu thị sự nối của 2 dãy nhị phân.
+ Lấy p, q là các số nguyên tố lớn và xem rằng p – 1 chia hết cho q. + Cho g là phần tử sinh của nhóm nhân G của Z*p bậc q.
+ Hàm Hash chịu đựng sự va chạm mạnh H: {0, 1}* Z*p (k = | q |, k > 160).
3.2. Lược đồ chữ ký Schnorr:
Định nghĩa: Cho y = gx mod p, chữ ký Schnorr trên thông báo m kiểm tra sử dụng khóa công khai (g, y) là cặp (u, v) ∈ Z*
q × Z* q thỏa mãn u = H(m⎜⎜y⎜⎜g⎜⎜gvyu). Chữ ký như vậy có thểđược tính nếu biết khóa bí mật x bằng cách chọn r ∈R Z* q (chọn r ngẫu nhiên thuộc Z*p ) rồi tính: u = H(m ||y ||g ||gr ) và v = r – ux mod q.
Đểđơn giản, ta dùng S(x, y)(m) biểu thị chữ ký Schnorr trên thông báo m đã được tạo với khóa bí mật x và có kiểm tra với khóa công khai y.
3.3. Chữ ký Chaum – Petersen dựa vào đẳng thức toán rời rạc:
Định nghĩa 2: Cho y1 = gx1 và y2 = gx2, chữ ký Chaum – Petersen dựa vào đẳng thức của thuật toán rời rạc y1, y2 với cơ số là g1, g2 trên thông báo m là cặp (u, v) ∈ Z*
q × Z * qthỏa mãn: u = H(m⎜⎜y1⎜⎜y2⎜⎜g1⎜⎜g2⎜⎜gv 1yu 1 ⎜⎜gv 2yu 2)
Dưới mô hình Oracle ngẫu nhiên, chữ ký như thế có thểđược thành lập nếu biết khóa bí mật x thỏa mãn y1 = g1xvà y2 = g2x. Chữ ký sai đó được tính bằng cách chọn r ∈R Z * q, tính: u = H(m⎜⎜y1⎜⎜y2⎜⎜g1⎜⎜g2⎜⎜gv 1yu 1⎜⎜gv 2yu 2) và r = r – ux mod q. Ta có thể viết lại như sau: Từ v = r – ux mod q => r = v + ux mod q. Theo giả thiết : y1 = g1x Ö gv 1yu 1 = gv 1(gx 1 )u = gv+ux 1 = gr 1 Tương tự: y2 = gx 2
⇒ gv 2yu 2= gv 2(gx 2)u = gv+ux 2 = gr 2 Vậy: u = H(m⎜⎜y1⎜⎜y2⎜⎜g1⎜⎜g2⎜⎜gr 1⎜⎜gr 2)
Đểđơn giản, ta dùng CP(x, y1, y2, g1, g2 )( m ) biểu thị chữ ký Chaum – Petersen trên thông báo m đã được tạo ra với khóa bí mật x thỏa mãn đẳng thức của thuật toán rời rạc y1, y2 với cơ số lần lượt là g1, g2.
3.4. Phép chứng minh tương tác Fujioka – Okamoto – Ohta đẳng thức:
Phép chứng minh đẳng thức logg1(y1) ≡ logg2(y2)là giao thức hoặc chứng minh log 1
g (y1) ≡ logg2(y2) hoặc chứng minh logg1(y1) ≠ logg2(y2). Giao thức của Fujioka – Okamoto – Ohta chứng minh đẳng thức (hoặc không là đẳng thức) của thuật toán rời rạc y1, y2 với cơ số lần lượt là g1, g2. Giao thức như sau:
V (Người kiểm tra) C (Người xác nhận)
u, v ∈R Zq a = gu 1yv 1modp ⎯→ ⎯a k, k’, w ∈R Zq r1 = gk 1 ; r2 = gk 2 r' 1 = g1k' ; r' 2= g2k' ⎯ ⎯ ⎯ ⎯ ⎯ ←r,r,r ,r',w 2 2 ' 1 1 ⎯→ ⎯u,v a = gu 1yv 1mod p? z = k – (v + w) c z’ = k’ – (v + w) k ⎯⎯ ←z,z' gz 1yv+w 1 = r1 g ' 1 z rv+w 1 = r' 1 g2z'rv+w 2 = r' 2 γ = ( g2z yv+w 2 ≡ r2)
Ta có thể diễn giải giao thức trên thành các bước sau: 1. Người kiểm tra V chọn u,v ngẫu nhiên ∈ Zq và tính
a = gu
1yv
1modp, rồi gửi a cho người xác nhận C 2. Người xác nhận C chọn k, k’, ngẫu nhiên ∈ Zq và tính r1 = gk 1 ; r2 = gk 2; r' 1 = g ' 1k ; r' 2= g ' 2 k Sau đó gửi r1, r2, r1’, r2’ cho V
3. Khi nhận được r1, r2, r1’, r2’ do C gửi, V gửi lại hai giá trị u, v 4. Người xác nhận, nhận được u, v thì kiểm tra đẳng thức
a = gu
1yv
1modp.
Nếu đúng, C gửi lại cho V hai giá trị z, z’ được tính như sau: z = k – (v + w) c
z’ = k’ – (v + w) k
5. Người kiểm tra V sẽ kiểm tra xem các đẳng thức sau có xảy ra hay không? gz 1yv+w 1 = r1 g1z'rv+w 1 = r' 1 g ' 2z rv+w 2 = r' 2 γ = ( g2z yv+w 2 ≡ r2)
Kết thúc giao thức đầu ra của người kiểm tra là γ . Phép chứng minh trả về 1 nếu logg1(y1) ≡ logg2(y2) và trả về 0 nếu logg1(y1) ≠ logg2(y2).