Chữ ký mù đƣợc David Chaum giới thiệu vào năm 1983, nó là một loại chữ kýsố, trong đó nội dung của thông điệp cần đƣợc ký bị “che” đi trƣớc khi nó đƣợc ký.
Chữ ký thu đƣợc có thể đƣợc xác thực nhƣ là đối với chữ ký số thông thƣờng. Chữ ký mù thƣờng đƣợc dùng trong các vấn đề đòi hỏi sự nặc danh nhƣ trong các ứng dụng tiền điện tử, bỏ phiếu điện tử,….
Chữ ký mù là chữ ký mà ngƣời ký không biết mình đang ký trên nội dung gì. Vì vậy mà ngƣời tagọi là “mù”.Làmđƣợc nhƣ vậy vì nội dung X trƣớc khi đƣa cho ngƣời ký đã đƣợc làm mù thành X‟. Ngƣời ký ký trên X‟ chứ không phải ký trên X.
Ví dụ: Alice cần Bob ký cho một chữ ký trên nội dung X, Alice không đƣa X cho Bob ký mà làm mù X thành X‟. Sau đó Alice đƣa X‟ cho Bob ký. Sau khi nhận đƣợc chữ ký trên X‟, A xóa mù để thu đƣợc chữ ký trên X. Nhƣ vậy Alice vẫn có chữ ký Bob của trên X mà Bob không hề biết thông tin gì về X.
2.1.2. Sơ đồ chữ ký RSA 1/. Sơ đồ 1/. Sơ đồ
- Tạo cặp khóa (bí mật, công khai) (a, b) :
Chọn bí mật 2 số nguyên tố lớn p, q, tínhn = p * q, công khai n, đặt P= A= Zn
Tính bí mật (n) = (p-1).(q-1). Chọn khóa công khai b <(n), nguyên tố cùng nhau với (n).
Khóa bí mật a là phần tử nghịch đảo của b theo mod (n): a*b 1(mod (n)).
Tập cặp khóa (bí mật, công khai) K = {(a, b)/ a, b Zn , a*b 1 (mod (n))}. - Ký: Chữ ký trên x P là y = Sigk (x) = xa (mod n), y A.
2/. Ví dụ
- Tạo cặp khóa (bí mật, công khai) (a, b):
Chọn bí mật số nguyên tố p = 13, q = 23, tính n = p * q = 13*23 = 299, công khai n.
Đặt P = A = Zn . Tính bí mật (n) = (p-1).(q-1) = 12 * 22 = 264 Chọn khóa công khai b = 23<(n), nguyên tố với (n).
Khóa bí mật a = 23, là phần tử nghịch đảo của b theo mod (n): a * b 1 (mod (n)).
- Ký số: Chữ ký trên x = 12là:
y = Sig k (x) = xa (mod n)=1223 (mod 299) = 416, y A.
- Kiểm tra chữ ký: Verk (x, y) = đúng x=ya(mod n)12= 41623 (mod 299).
2.1.3. Sơ đồ chữ ký mù RSA 1/. Sơ đồ 1/. Sơ đồ
Mục đích là Alicecần có đƣợc chữ ký của Bob trên văn bản x theo sơ đồ chữ ký RSA nhƣng không để cho Bob biết giá trị x thực sự. Chữ ký đó là giá trị xamod n. Lúc này Alice và Bob phải thực hiện một số bƣớc sau:
- Alice làm mù x (che x) thành u: u = Blind(x) = x.rb(mod n), với n và b đƣợc lấy từ khóa công khai của Bob, r là ngẫu nhiênZn và r nguyên tố cùng nhau với n. (r phải nguyên tố cùng nhau với n để tồn tại phần tử nghịch đảo r-1 mod n).
- Alice gửi u cho Bob, Bob ký trên u, đƣợc chữ ký là v = Sig(u) sau đó gửi lại cho A:
v = Sig(Blind(x)) = Sig(x*rb(mod n)) = xa. (rb)a(mod n) - Alice xóa mù trên v, sẽ nhận đƣợc chữ ký trên x
z = Unblind(v) = v/r mod n = xa.(rb)a /r(mod n) = xa.r/r mod n = xa mod n
Nhƣ vậy Alice đã nhận đƣợc chữ ký của Bob: xa mod n, mà Bob không biết nội dung của văn bản x. Bởi vì nội dung của thông điệp x đã đƣợc làm mù thành u thông qua việc nhân với rb, cho dù b là số công khai lấy từ Bob, nhƣng r là số ngẫu nhiên mà Bob khó có thể biết đƣợc.Sau khi Bob ký xong, Alice xóa mù (nhân với r-1) chữ ký trên u để nhận đƣợc chữ ký của Bob trên x. [6]
2/. Ví dụ minh họa
Sơ đồ chữ ký mù RSA với K = (n, p, q, r, b, a) trong đó: p = 113, q = 23, n = p * q = 2599
(n) = ( p -1 ) * (q – 1 ) = 2464
Chọn khóa công khai b = 23<(n), nguyên tố cùng nhau với (n). Khóa bí mật a là phần tử nghịch đảo của b theo mod (n): a =1607. Giả sử thông điệp cần ký là x = 1607.
-Alice chọn số ngẫu nhiên r = 13 nguyên tố cùng nhau với n. Alice che dấu định danh x bằng bí danh u:u = Blind(x) = x.rb(mod n) = 1067 *1323(mod 2599) =2164629.
- Alice gửi bí danh u cho Bob, nhận đƣợc chữ ký v:
v = Sig(u) = x a .(rb)a= uamod n = 216462923 ( mod 2599 ) = 2261.
- Sau khi nhận đƣợc v, Alicetiến hành xóa mù trên v sẽ nhận đƣợc chữ ký trên định danhx:
Unblind(v) = v/r mod n = xa.(rb)a /r(mod n) = xa mod n = 160723 ( mod 2599) =2573.
2.2. CHỮ KÝ NHÓM
2.2.1. Khái niệm về chữ ký nhóm(Groups Signature)
Chữ ký nhóm đƣợc David Chaum và Van Heyst giới thiệu lần đầu tiên vào năm 1991.Kể từ đó đến nay đã có nhiều nhà khoa học nghiên cứu và đƣa ra một số sơ đồ chữ ký nhóm khác nhƣ sơ đồ chữ ký nhóm của Chen và Pedersen năm 1994, sơ đồ chữ ký nhóm của Camenisch và Stadler năm 1997.
Chữ ký nhóm là chữ ký số đại diện cho một nhóm ngƣời hoặc một tổ chức xã hội nào đó.
Các thành viên của một nhóm ngƣời đƣợc phép ký trên thông điệp với tƣ cách là ngƣời đại diện cho nhóm.
2.2.2. Những đặc điểm của chữ ký nhóm
+ Chỉ có thành viên trong nhóm mới có thể ký tên vào bản thông báo đó
+ Ngƣời nhận thông điệp có thể kiểm tra xem chữ ký đó có đúng là của nhóm đó hay không, nhƣng ngƣời nhận không thể biết đƣợc ngƣời nào trong nhóm đã ký vào thông điệp đó.
+ Trong trƣờng hợp cần thiết chữ ký có thể đƣợc “mở” (có hoặc là không có sự giúp đỡ của thành viên trong nhóm) để xác định ngƣời nào đã ký vào thông điệp đó.
2.2.2.1. Hiệu quả của chữ ký nhóm
Khi đánh giá hiệu quả của một sơ đồ chữ ký nhóm ta cần quan tâm đến các thông số sau:
+ Độ lớn của khóa công khai nhóm (số bit) + Độ lớn của chữ ký trên một thông điệp (số bit)
+ Hiệu quả của các thủ tục: Setup, Join, Sign, Verify, Open
+Tính ƣu việt của chữ ký nhóm chính là khả năng cho phép những nhóm ngƣời, những tổ chức giao tiếp với nhau, mà trong đó việc xác thực các thông tin gửi cho nhau thông qua các khóa công khai của mỗi nhóm. Nhờ đó những thành viên của nhóm có thể ký nặc danh đại diện cho nhóm của mình mà không thể để lộ thông tin cá nhân của mình, và chỉ có ngƣời quản trị mới có thể xác định đƣợc ngƣời ký.
2.2.2.2. Việc đảm bảo an ninh đối với chữ ký nhóm.
+ Không thể giả mạo: Chỉ có các thành viên trong nhóm mới có thể đại diện cho nhóm ký trên thông điệp của nhóm.
+ Ngƣời ký nặc danh có thể tính toán đƣợc: Bất kỳ ai cũng có thể xác thực chữ ký một cách dễ dàng nhƣng không thể biết đƣợc ai là ngƣời ký (Trừ ngƣời quản lý nhóm và ngƣời ký).
+ Không thể chối bỏ: Một thành viên ký trên một thông điệp thì không thể chối bỏ chữ ký đó đƣợc. Ngƣời quản lý nhóm có thể xác định đƣợc ai đã ký vào thông điệp đó.
+ Không thể phân tích quan hệ: Việc phân tích xem hai chữ ký của một thành viên trong nhóm khác nhau nhƣ thế nào là khó đối với các thành viên của nhóm trừ ngƣời quản lí nhóm.
+ Ngăn chặn framing Attacks: Khi một số thành viên liên kết với nhau cũng không thể giả mạo chữ ký của thành viêc khác trong nhóm.
+ Ngăn chặn sự liên minh: Khi một số thành viên liên kết với nhau cũng không thể tạo ra một chữ ký hợp lệ mà không xác định đƣợc ngƣời ký.
2.2.3. Các sơ đồ chữ ký nhóm
2.2.3.1. Sơ đồ chữ ký nhóm thứ nhất
Do David Chaum và Van Heyst sáng tác
1/. Tạo khóa và quản lý khóa
- Z là ngƣời quản lý nhóm hoặc là ngƣời tin cậy đƣợc ủy nhiệm chọn một hệ thống khóa bí mật và đƣa cho mỗi thành viên một danh sách các khóa bí mật (các danh sách này là khác nhau) và công bố một danh sách đầy đủ các khóa công khai tƣơng ứng (theo thứ tự ngẫu nhiên) trong một thƣ mục công khai tin tƣởng (trusted public directory – TPD).Chọn p là một số nguyên tố.
- Nếu mỗi ngƣời có cùng một số lƣợng các khóa bí mật, thì chiều dài của khóa công khai của nhóm là tuyến tính với số thành viên, nhƣng số thông điệp của mỗi thành viên ký là không đổi.
- Thành viên thứ i có thể ký một thông điệp bằng một khóa bí mật sitrong danh sách khóa của anh ta. Mỗi khóasi chỉ đƣợc sử dụng một lần, nói cách khác các chữ ký đã đƣợc tạo bằng khóa này đƣợc liên kết.
- Z biết danh sách khóa bí mật của mỗi thành viên, vì thế trong trƣờng hợp cần thiết, anh ta biết đƣợc ai đã tạo ra chữ ký đó. Để làm đƣợc điều này, Z “mở” một chữ ký. [6, 12]
2/. Ký số và kiểm tra chữ ký
Việc ký số và kiểm tra chữ ký hoàn toàn có thể sử dụng sơ đồ chữ ký Elgamal.
* Sơ đồ chữ ký Elgamal :
Sinh khóa (a,h):
Chọn số nguyên tố p sao cho bài toán logarit rời rạc trong Zp là khó giải.
Chọn phần tử nguyên thủy g𝑍𝑝∗. Đặt P =𝑍𝑝∗, A = 𝑍𝑝∗ ∗ 𝑍𝑝−∗ 1.
Chọn khóa bí mật là a 𝑍𝑝∗. Tính khóa công khai h ga mod p. Định nghĩa tập khóa: K = {(p, g, a, h): h ga mod p).
Các giá trị p, g, h đƣợc công khai, phải giữ bí mật a.
Ký số:Dùng 2 khóa ký: khóa a và khóa ngẫu nhiên bí mật r 𝑍𝑝−∗ 1
(Vì r 𝑍𝑝−∗ 1, nên nguyên tố cùng nhau với p-1, do đó tồn tại r-1 mod (p-1)). Chữ ký trên x P là y = Sigk (x,r) = (, ), y A
Trong đó: 𝑍𝑝∗, 𝑍𝑝−1:
=ga mod p, = (x-a*)* r-1mod(p-1)
Kiểm tra chữ ký:
Verk (x, , ) = đúng h * gx mod p. Nếu chữ ký đƣợc tính đúng, kiểm thử sẽ thành công vì: h* g a** g r* mod p g(a* +r* ) mod p gx mod p.
Ví dụ:
1/. Sinh khóa :
Tạo cặp khóa bí mật công khai (a, h): Chọn số nguyên tố p =463.
Chọn phần tử nguyên thủy g=2 𝑍𝑝∗. Đặt P =𝑍𝑝∗, A = 𝑍𝑝∗∗ 𝑍𝑝−∗ 1.
Chọn khóa bí mật là a =211𝑍𝑝∗. Tính khóa công khai h ga mod p = 2211mod463 =249.
Định nghĩa tập khóa: K = {(p, g, a, h): h ga mod p). Các giá trị p, g, h đƣợc công khai, phải giữ bí mật a.
Ký số:Dùng 2 khóa ký: khóa a và khóa ngẫu nhiên bí mật r 𝑍𝑝−∗ 1
Chọn ngẫu nhiên r= 235 (Vì r 𝑍𝑝−∗ 1, nên nguyên tố cùng nhau với p-1, do đó tồn tại r-1 mod (p-1) =235-1mod462 =289).
Chữ ký trên x=112 P là y = Sigk (x,r) = (, ), y A Trong đó: 𝑍𝑝∗, 𝑍𝑝−1:
=ga mod p=2211mod 463= 16,
= (x-a*)* r-1mod(p-1)= (112-211*16)*289 mod462=108
Kiểm tra chữ ký:
Verk (x, , ) = đúng h * gx mod p. Kiểm thử :
h*= 24916* 16108 mod 463 =132. gx mod p= 2112mod463 =132.
Do hai giá trị h* mod p =gx mod p =132 nên chữ ký là đúng.
3/. Hạn chế:Một vấn đề đối với sơ đồ này là Z biết tất cả các khóa bí mật của các thành viên và có thể giả mạo chữ ký. Điều này có thể đƣợc giải quyết hai cải biên sau: sử dụng các khóa công khai “mù” hoặc có thể không sử dụng trƣởng nhóm.
+ Sử dụngkhóa công khai“mù”.
- Chọn p là số nguyên tố, g là phần tử sinh của nhóm nhân Z*p.
Thành viên i tự chọn khóa bí mật “thực sự” của mình là si,khóa công khai “thực sự” là hi = g s i mod p.
- Trƣởng nhóm Z chỉ có danh sách các khóa công khai hi (khác nhau), tƣơng ứng với tên của các thành viên trong nhóm. Zkhông quản lý các khóa bí mật của mỗi thành viên.
- Mỗi tuần Z đƣa cho thành viên i một số ngẫu nhiên riZ*p, trong tuần này thành viên i dùng si*ri mod (p-1) làm khóa bí mật “mù”. (Khóa mật si đã bị che giấu bởi ri).Khóa công khai “mù” tƣơng ứng là hi -mù = g s i . r i = (gs i ) r i.
- Z “khó”giả mạo chữ ký, vì không biết khóa mật “thực sự” si (của mỗi thành viên i). Tham số ri có thể bị lộ, nhƣng si vẫn không bị lộ bí mật.
Trƣởng nhóm Zcó thể dùng ri để kiểm tra i có phải là ngƣời trong nhóm hay không.
+ Không sử dụng trưởng nhóm
- Không cần phải có nhóm trƣởng Z.
- Mỗi thành viên i trong nhóm tự tạo ra cặp khóa bí mật, công khai (si , hi). - Mỗi thành viên gửi các khóa công khai của mình vào danh sách khoá công khai của nhóm và chỉ những thành viên của nhóm mới có thể gửi các khóa công khai vào danh sách này [6, 12].
2.2.3.2. Sơ đồ chữ ký nhóm thứ hai
Do David Chaum và Van Heyst xây dựng, áp dụng theo sơ đồ chữ ký RSA.
1/. Tạo khóa và quản lý khóa
- Trƣởng nhóm Z chọn hai số nguyên tố lớn p, q khác nhau và tính N=p*q.
Z đƣa cho thành viên thứ i một khóa bí mật si,là một số nguyên tố lớn ngẫu nhiên thuộc tập hợp ={ 𝑁 ,…, 2 𝑁 -1}, và tính v = ∏si, công khai N và v.
- Thành viên i ký vào thông điệp m, chữ ký của anh ta sẽ là$ = msi mod N.
- Khi ngƣời nhận chữ ký cần xác minh ngƣời ký i là thành viên của nhóm, có khóa công khai là v. Thì ngƣời ký cần phải chứng minh cho ngƣời nhận rằng si là ƣớc của v, và si∈ mà không để lộ bất kì thông tin nào về si.
Ngƣời nhận chữ ký có thể xác minh ngƣời ký bằng giao thức xác nhận, hoặc giao thức chống chối bỏ với mỗi thành viên nhóm, mà không cần sự giúp đỡ của trƣởng nhóm Z.
2/. Giao thức xác nhậnngƣời ký
Trong giao xác nhận ngƣời ký sử dụng phƣơng pháp chứng minh không tiết lộ thông tin.
- Ngƣời ký P sẽ phải chứng minh rằng $ = m s (mod N) là chữ ký của anh ta trên thông điệp m với ngƣời nhận V mà không để lộ thông tin nào về khóa bí mật s của anh ta. Sử dụng giao thức 1 và giao thức 2.Trong hai giao thức có sử dụng tính toán Blob an toàn (B)(computationally secure blobs).
Z chọn phần tử sinh gpcủa Z*p , hq của Z*q và tính
g mod 1 mod p g p q và h 1 mod mod q p h q (định lý số dƣ Trung Quốc).
P chọn r1, r2 (1,…,N) và tính Blob an toàn B ($) =$.𝑔𝑟1 .ℎ𝑟2(modN).
* Giao thức 1:P chứng minh với V rằng $ = m s (mod N) là chữ ký của anh ta trên thông điệpm.
a/. P chọn r ∈ (0, …, β). Tính các blob trên z1 ≡ mr (mod N) và z2 ≡ mr-β (mod N), và gửi không theo thứ tự {B(z1), B(z2)} cho V.
b/. V chọn ngẫu nhiên b ∈ (0, 1) và gửi cho P
c/. P gửi lại cho V các thông tin ứng với 2 giá trị của b mà P nhận đƣợc: Nếu P nhận b= 0, thì P gửi cho V giá trị r và mở các Blob B(z1), B(z2).
Nếu P nhận b= 1, thì P gửi cho V giá trị r là (s+r) hoặc (s +r - ), và tƣơng ứnggiá trị z là z1 hoặc z2.
d/. V kiểm tra trong trƣờng hợp:
b = 0: kiểm tra r ∈( 0, …, β) và các blob của mrvà mr-β theo thứ tự nào đó b = 1: kiểm tra 𝑟 ∈ Ω và một trong các blob chứa 𝑧 và 𝑧 thỏa mãn
𝑚𝑟 𝑧 $ (mod N).
Nếu P có thể trả lời đúng cả hai yêu cầu khi V gửi b thì chữ ký $ trên thông điệp m đúng là của P. Còn nếu một trong hai câu có kết quả sai hoặc cả hai câu đều sai thì chữ ký $ trên thông điệp m không phải là chữ ký của P.
* Giao thức 2:V kiểm tra P là thành viên của nhóm: Bằng cáchkiểm tra rằng s là
ước số của v.
a/. Chứng minh tồn tại s sao cho ms≡ $(mod N) và s ∈Ω bằng giao thức 1,thực hiện k lần.
b/. Chứng minh rằng s|v chi tiết trong hình 2.1:
Hình 2.1. Giao thức 2
Trong đó: y x v / s ($ r ) v / s ((m s)r ) v / s m v r 3/. Giao thức chối bỏ
Nếu P muốn chứng minh choV rằng $ không phải là chứ ký của anh ta trên thôngđiệp m, thì P có thể sử dụng giao thức 3, và giao thức 4.
* Giao thức 3: Chứng minh: $ m s(mod N) với khóa ký sΩ và s|v.
- Trƣởng nhóm Z tính và công khai (𝑔 ,ℎ ) đƣợc sinh trong nhóm 𝑍𝑁∗(cách tính𝑔 vàℎ ) nhƣ sau:
Chọn các sốnguyên a1, a2, b1, b2 thỏa mãn gcd(a1, b1, p-1) = gcd(a2, b2, q-1) = 1, g, h là các phần tử sinh của 𝑧𝑃∗ và 𝑧𝑞∗.
𝑔 ≡𝑔𝑎1ℎ𝑎1,ℎ ≡𝑔𝑏1ℎ𝑏1
Lấy t là một hằng số rất nhỏ đểviệc tìm kiếm toàn diện trên (0, …,t) là khả thi. Chú ý rằng nếu $≡ ms, thì P khôngthể tính a từ (ms/$)a, vì khi đó (ms/$)a= 1. Khi đó anh ta sẽ phải đoán a chi tiết trong hình 2.2.
Hình 2.2. Giao thức 3
Giao thức 4:
Do chữ ký đƣợc tạo ra là chữ ký không thể chối bỏ, ta có thể sử dụng giao thức chối bỏ của sơ đồ chữ ký không thể chối bỏ của David Chaum để thƣc hiện việc chứng minh chữ ký S không phải là chữ ký của P trên thông điệp m.
- Trƣởng nhóm Z công khai𝑔 và 𝑔 𝑠𝑖(mod N), 𝑆𝑖−1 (mod (N)) tƣơng ứng từng thành viên.
+ Bƣớc 1: V chọn ngẫu nhiên 2 số nguyên x1, x2 ∈Ф, tính c = 𝑆𝑥1 𝑔 𝑠 𝑥2mod N, sau đó gửi cho P.
+ Bƣớc 2: P tính d =(𝑐)𝑠−1mod N, gửi d cho V
+ Bƣớc 3: V thử điều kiện d ≠ 𝑚𝑥1𝑔 𝑥2mod N. Nếu đúng thì tiếp tục bƣớc 4. Nếu sai thì chữ ký đúng là của P.
+ Bƣớc 4: V chọn ngẫu nhiên 2 số nguyên tố𝑥1′, 𝑥2′∈Ф tínhc' = 𝑆𝑥1′ 𝑔 𝑠 𝑥2′mod N,sau đó gửi c‟ cho P .
+ Bƣớc 5: P tính d‟= 𝑐′ 𝑠−1mod N, sau đó gửi d‟ cho V
+ Bƣớc 6: V thử điều kiện d‟ ≠ 𝑚𝑥1′𝑔 𝑥2′mod N. Nếu đúng thì tiếp tục bƣớc 7. Nếu