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 công khai 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 Trusted Public Directory – TPD
Mỗi thành viên có thể ký một thông điệp bằng một khóa bí mật trong danh sách của anh ta, và người nhận có thể kiểm tra chữ ký bằng một khóa công khai tương ứng từ danh sách khóa công khai. Mỗi khóa 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 tất cả các danh sách khóa bí mật, vì thế trong trường hợp cần thiết, Z có thể biết được ai đã tạo ra chữ ký đó. Để
làm được điều này Z phải “mở” chữ ký.
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.
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 bằng việc sử dụng các khóa công khai mù. Lấy g là phần tử sinh của nhóm nhân Z*
p với p là một số nguyên tố. Thành viên thứ I lấy khóa bí mật của mình là si và tính gsi mod p rồi gửi cho Z, Z có một danh sách các khóa công khai khác nhau này cùng với tên của các thành viên. Mỗi tuần Z đưa cho thành viên I một số ngẫu nhiên ri ∈ {1,2,..., p−1} và công bố danh sách tất cả các khóa công khai mù là ( )si ri
g . Trong suốt tuần này thành viên I sẽ sử
dụng siri mod (p-1) làm khóa bí mật.
Ưu điểm của việc cải biên này là Z không thể giả mạo chữ ký, và mỗi thành viên sẽ có một “ khóa bí mật thực sự ”. Nếu ri chẳng may bị lộ thì vẫn không có một thông tin nào về khóa bí mật si bị lộ.
Trong một cải biên khác, không cần phải có người ủy quyền tin cậy, mỗi người dùng gửi một (hoặc nhiều hơn ) các khóa công khai tới một danh sách công khai sẽ là khóa công khai của nhóm. Nhưng 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.
3.3.2. Sơđồ chữ ký nhóm thứ hai
Z chọn hai số nguyên tố lớn p, q khác nhau và một hàm một chiều 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 φ ={[ ] [ ]N ,K, 2 N −1}, và tính v = ∏si, và công bố N, v và f. Nếu thành viên I muốn ký thông điệp m, chữ ký của anh ta sẽ là (f( )m )si mod N.
Z phải chứng minh cho người nhận rằng si là ước của v, và si∈ φ mà không để lộ
thể sử dụng giao thức xác nhận hoặc giao thức chống chối bỏ yêu cầu bên gửi phải chứng minh rằng chữ ký không phải của bên gửi.
3.3.2.1. Giao thức xác nhận
Người ký P sẽ phải chứng minh rằng S là chữ ký của anh ta trên thông điệp m với V mà không để lộ thông tin nào về khóa bí mật s của anh ta, việc này sẽ được giải quyết bởi giao thức 1, chúng ta sẽ phải tính toán các blob an toàn B .
Ta coi bản thu gọn của thông điệp là m.
Giao thức xác nhận 1
Nếu giao thức này được lặp lại k lần, V sẽ tin rằng s ∈ Ω; nhưng V sẽ không nhận được gì hơn ngoài sự thật là s ∈Ω;
Giao thức 1
1. P chọn r ∈ (0, …, β). Tính các blob trên z1≡ xr (mod N) và z2 ≡ xr−β (mod N), và gửi không theo thứ tự {B(z1),B(z2)} cho V .
2. V chọn ngẫu nhiên b ∈ (0, 1) và gửi cho P 3. P gửi lại cho V trong trường hợp
b = 0:r và mở các blob
b = 1:~z là (c + r) hoặc (c + r - β) và tương ứng z1 hoặc z2 (gọi là z~) 4. V kiểm tra trong trường hợp :
b = 0 : kiểm tra r ∈ ( 0, …, β) và các blob của xr và xr-β theo thứ tự nào đó b = 1 : kiểm tra r~∈Ω và một trong các blob chứa z~ và ~z thỏa mãn
r
m~≡ z~S (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ý S 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ý S trên thông điệp m không phải là chữ ký của P.
Blob B có thểđược tính bằng cách sau: Z chọn các phần tử sinh gp và hq của * p Z và * q Z và tính g ≡ ⎩ ⎨ ⎧ q l p gp mod mod và h ≡ ⎩ ⎨ ⎧ q h p l q mod mod sử dụng CRT Để tính B(y) thì P chọn r1, r2 ∈ (1, …, N) và tính B(y) = ygr1hr2mod N Khóa bí mật của P : s Công khai : N, m, S, Ω; m, s ∈ Z* N, Ω ={[ ] [ ]N ,K, 2 N −1} ⊂ N Chứng minh với V : ms ≡ S (mod N) và s ∈Ω
Trong giao thức này, chúng ta tạo một giao thức xác nhận, vì P muốn chứng minh cho người nhận V rằng P đưa cho một V chữ ký có giá trị S. Trường hợp này được giải quyết như sau :
Giao thức xác nhận 2
Giao thức 2
1. Chứng minh tồn tại s sao cho ms ≡ S (mod N) và s ∈ Ω bằng giao thức 1, thực hiện k lần.
2. Chứng minh rằng s|v như sau:
Giao thức 2
3.3.2.2. Giao thức chối bỏ
Nếu P muốn chứng minh cho V rằng S không phải là chứ ký của anh ta trên thông
điệp m, trường hợp này sẽđược giải quyết như sau: Giao thức chói bỏ
Khóa bí mật của P : s
Công khai : N, m, S, Ω; m, s ∈ Z*
N, Ω ={[ ] [ ]N ,K, 2 N −1} ⊂ N
Chứng minh với V : ms ≡ S (mod N) và s ∈Ω và s|v (s là ước của v)
P V a ≡ Sr Chọn r ∈ (1,…, N) b ≡ av/s B(b) Kiểm tra a r
Mởblob Kiểm tra blob và b≡mvr
Khóa bí mật của P : s
Công khai : N, m, S, Ω; m, s ∈ Z*
N
Z công bố (g,h ) được sinh trong nhóm Z*
N (cách tính g, h 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 và công khai
2 1 2 1 ~ , ~ gaha h gbhb g ≡ ≡ với g, h là các phần tử sinh của Zp* và Z* q), cùng đó là một thư
mục công khai tin cậy chứa ( tên thành viên, g~s,h~s). Lấy l là một hằng số rất nhỏ để
việc tìm kiếm toàn diện trên (0, …, 1) là khả thi. Chú ý rằng nếu S ≡ ms, thì p không thể tính a từ ( s )a
S
m / , vì khi đó ( s )a S
m / = 1. Khi đó anh ta sẽ phải đoán a. Giao thức 3
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ỏ do chính tác giả David Chaum sáng tác để
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 với V .
Z công bố g~và g~si(mod N), S-1i (mod ϕ(N)) tương ứng từng thành viên. Giao thức 4 sẽ giải quyết vấn đề chối bỏ chữ ký như sau :
Giao thức 4
Bước 1 : V chọn ngẫu nhiên 2 số nguyên x1, x2∈Ф, tính x1( )~s x2
g S c= mod N, sau đó gửi cho P Bước 2 : P tính ( )−1 = c s d mod N, gửi d cho V
Bước 3 : V thửđiều kiện d ≠ mx1g~x2mod N. Nếu đúng thì tiếp tục bước 4. Nếu sai thì chữ ký đúng là của P P V a~ ~r2 h g m ≡ Sr Chọn r1, r2 ∈ (1,…, N) và a ∈ (0, …, 1) a( )~s r1( )~s r2 h g S Tính a từ ( s )a S m / B(b) Bằng cách kiểm tra Toàn bộ các số r1, r2
Bước 4 : V chọn ngẫu nhiên 2 số nguyên tố x’ 1, x’ 2∈Ф tính c'=Sx1' ( )g~s x'2 mod N, sau đó gửi c’ cho P . Bước 5 : P tính ( ) 1 ' '= c s−
d mod N, sau đó gửi d’ cho V
Bước 6 : V thử điều kiện d’ ≠ mx'1g~x'2mod N. Nếu đúng thì tiếp tục bước 7. Nếu sai thì chữ ký đúng là của P . Bước 7 : V kiểm tra ( ) ( ' )1 2 ' 1 2 ~ ~ x x d'g x x g d − ≡ − mod N ? Nếu đồng dư thức đùng thì kết luận chữ ký không phải là của P. 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ười quản lý nhóm thực hiện như sau : Z chọn p = 101, q = 113, N = pq = 11413, ϕ(N) = (p-1)(q-1) = 11200, Z chọ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 Z*p và Z *q. Chọn a1 = 3, a2 = 7, b1 = 11, b2 = 13. Tính g~= ga1ha2mod N = 3456 và ~ b1 b2 h g h= mod 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ông khai này sẽ được người nhận thông điệp dùng để xác minh có đúng hay không.
Khóa công khai của nhóm là N = 11413
v = 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 ta thự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 blob : g = 1922, h = 4748, chọn r1 = 5,r2 = 7. B(z1) = 4016.19225.47487 mod 11413 = 8712 B(z2) = 2429.19225.47487 mod 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ứ 3 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, g~ = 1299,g~s= 4528 (mod N) (công khai), 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 ≡ 1234412996(mod 11413)? →6038 ≡ 694 Bước 7 : V kiểm tra ( ) ( ) ( ) ( ) ⎪⎩ ⎪ ⎨ ⎧ = = − − 2682 mod 1299 . 5172 2682 mod 1299 . 6038 4 5 3 6 N N do đó chữ ký không phải là của P Một vài nhận xét đối với sơđồ chữ ký nhóm thứ hai
Nếu tất cả thành viên của nhóm có âm mưu loại một người thì khóa bí mật của người này sẽ bị lộ. Việc này có thể dễ dàng được giải quyết khi Z là một thành viên của nhóm, khi đó Z sẽ tính v = sz∏si , trong đó sz là một khóa bí mật mà chỉ Z mới biết.
Độ dài của khóa công khai v tuyến tính với số thành viên của nhóm, do đó việc tăng một số lũy thừa của v sẽ là một lần tuyến tính số thành viên của nhóm.
3.3.3. Sơđồ chữ ký nhóm thứ ba
Chúng ta giả sử rằng có một thư mục công khai tin cậy trong đó các modulo RSA của mỗi thành viên được liệt kê ( số mũ RSA công khai không cần trong sơđồ này)
Khóa bí mật của thành viên thứ I sẽ là thừa số của modulo RSA của anht a Ni= piqi. trong suốt quá trình cài đặt, Z chọn một số modulo RSA N độc lập với tất cả các Ni của các thành viên. Lấy M là một số nguyên công khai sao cho pi∈Ф=
[ ] [ ]
{ M ,..., 2 M −1} và qi> 4 M (đối với mọi i). nếu thành viên i muốn ký thông điệp m, anh ta chọn ngẫu nhiên một bộ Γ người ( bao gồm cả anh ta ), chữ ký của anh ta sẽ
là :
( ) (f m )pi
,
Γ mod N
Và anh ta sẽ phải đưa ra một chứng cớ không tiết lộ thông tin rằng sử dụng thừa số
pi ∈ Ф và pi là một ước số của modulo RSA của các người trong Γ. Điều này có thể được giải quyết bằng Giao thức 2 ( với Ω = Ф). Nếu một thành viên muốn chối bỏ một chữ ký, anh ta có thể sử dụng Giao thức 3.
3.3.3.1. 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à do thà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ành viê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ếu sử 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.
3.3.3.2. Nhận xét
Các sơđồ chữ ký nhóm của D.Chaum đều dựa trên hệ mã RSA và việc tính logarit rờ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ý).
Trong các sơđồ thì số người trong nhóm là cố định, riêng trong sơđồ thứ ba, khi một người muốn ký một văn bản mà không muốn lộ tên anh ta thì đồng thời anh ta tạo một nhóm người (các khóa công khai lấy từ thư mục công khai tin cậy) và anh ta sẽ
chứng minh rằng anh ta thuộc nhóm người này. 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.