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 saithì chữ ký đúng là của P.
+ Bƣớc 7: V kiểm tra dg−x2 x1′≡ d′g−x2′ x1
mod N? Nếu đồng dƣ thức đùng thì kết luậnchữ ký không phải là của P. [6, 12]
Ví dụ:
Một ví dụ về sơ đồ chữ ký nhóm dựa trên hệ mật mã RSA
+ Thành lập một nhóm có 5 thành viên, quá trình cài đặt nhóm do ngƣờiquản lý nhóm thực hiện nhƣ sau :
Z chọn p = 101, q = 113, N = p.q = 11413, (N) = (p-1)(q-1) = 11200;
Zchọn khóa bí mật của Z là Sz = 149, gp = 3, hq = 2 là các phần tử sinh của𝑍𝑝∗ và
𝑍𝑞∗
Chọn a1 = 3, a2 = 7, b1 = 11, b2 = 13.
Tính 𝑔 = 𝑔𝑎1ℎ𝑎2mod N = 3456 và ℎ = 𝑔𝑏1ℎ𝑏2mod N = 2448 Các khóa bí mật của các thành viên nhƣ sau :
s1= 107,s2 = 113, s3 = 123, s4 = 129, s5 = 137
Khóa công khai của các thành viên (là nghịch đảo của khóa bímật của các thành viên trong trƣờng mod (N)) đƣợc gửi lên TPD nhƣsau không theo thƣ tự): 5443, 2577, 3187, 8769, 10873. Các khóa côngkhai này sẽ đƣợc ngƣời nhận thông điệp dùng để xác minh có đúng haykhông.
Khóa công khai của nhóm là:N = 11413v =Sz*ΠSi=3916191121461.
* Ký văn bản:
Ký văn bản m = 1234 thì chữ ký của từng thành viên lần lƣợt là: 278, 6093, 6541, 6528, 8331
* Xác nhận chữ ký (sử dụng giao thức 1)
Thành viên 1 muốn xác nhận chữ ký S = 278 đúng là của anh ta (gọi làP) trên văn bản m = 1234 với ngƣời xác nhận (gọi là V) thì anh tathực hiện giao thức xác nhận (giao thức 1) + Bƣớc 1: P chọn β = 57, chọn r = 23. Tính z1 = 123423 mod 11413 = 4016, z2 = 123423-57 = mod 11413= (1234-1)34 mod 11413 = 951734 mod 11413 = 2429. Tính các blobs: g = 1922, h = 4748, chọn r1 = 5,r2 = 7.
B(z1)= 4016.19225.47487mod 11413 = 8712 B(z2) = 2429.19225.47487mod 11413 = 1518
+ Bƣớc 2: V chọn b = 0 hoặc b = 1 rồi gửi cho P
+ Bƣớc 3: P gửi cho V
- Nếu b = 0 thìr = 23, β = 57,mở các blob g = 1922, h = 4748,r1 = 5,r2= 7, z1 = 4016, z2 = 2429
- Nếu b = 1 thì r = 107 + 23 = 130, z = 4016
+ Bƣớc 4: V xác định
- Nếu b = 0 thì r ∈(0, …, β) và kiểm tra z1= 4016, z2= 3418 sauđó kiểm tra B(4016) = 8712 và B(3418) = 5505 theo thứ tự nào đómà P đã gửi ở bƣớc 1. Nếu kiểm tra thỏa mãn thì chữ ký làđúng.
- Nếu b = 1 thì kiểm tra 1234130≡ 4016.278 (mod 11413) ↔9387 ≡9387. Do đó chữ ký là đúng.
* Chối bỏ chữ ký (sử dụng giao thức 4).
Giả sử thành viên thứ 1 ký thôngđiệp m = 1234, chữ ký S = 278, thành viên thứ ba muốn chứng minh rằngđó không phải là chữ ký của anh ta. Khi đó ngƣời quản lý nhóm công bố: N = 11413, 𝑔 = 1299,𝑔 𝑠= 4528 (mod N),s-1= 3187(mod(N)) (cho thành viên cần phải chứng minh biết P).
+ Bƣớc 1: V chọn x1 = 3, x2 = 5. Tính c = 2783.45285 (mod N) = 6595. Gửi c cho P.
+ Bƣớc 2: P tính d = 65953187(mod N) = 5172. Rồi gửi cho V
+ Bƣớc 3: V thử 5172 ≡ 12343.12995 (mod 11413)? →5172 4285
+ Bƣớc 4: V tính c‟ = 2784.45286 (mod N) = 1236 rồi gửi c‟ cho P
+ Bƣớc 5: P tính d‟ = 12363187 (mod N) = 6038 rồi gửi cho V
+ Bƣớc 6: V thử 6038 ≡ 12344.12996(mod 11413)? →6038694
+ Bƣớc 7: V kiểm tra 6038.1299−6 3 𝑚𝑜𝑑𝑁 =2682
5172.1299−5 4 𝑚𝑜𝑑𝑁 =2682
4/. Vấn đề“ mở ” chữ ký
Trong trƣờng hợp cần thiết, ngƣời quản lý nhóm có thể xác định một chữ ký là dothành viên nào trong nhóm ký bằng cách thực hiện giao thức chối bỏ với từng thànhviên trong nhóm.
Bởi vì chữ ký, mà mỗi thành viên ký là một chữ ký không thể chối bỏ, do đó nếusử dụng giao thức chối bỏ (giao thức 3) thì một thành viên sẽ không thể phủ nhận chữký mà mình đã ký. Và khi đó ngƣời quản lý nhóm sẽ biết đƣợc chữ ký đó là của ai.
5/. Nhận xét
Các sơ đồ chữ ký nhóm của David Chaum đều dựa trên hệ mã RSA và việc tính logaritrời rạc đối với một số nguyên tố lớn là khó. Các thông tin về ngƣời ký là an toàn,không ai trong nhóm có thể biết đƣợc (tất nhiên là trừ ngƣời đã ký).
Chữ ký đƣợc tạo ra là chữ ký không thể chối bỏ.
Độ dài của khóa công khai tuyến tính với số ngƣời trong nhóm, số ngƣời trong nhóm luôn cố định.