Trƣớc khi trình bày giao thức chính, chúng ta bắt đầu với một giao thức mà chỉ ẩn thông điệp, nhƣng không ẩn chữ ký. Trong giao thức này, giả thiết ngƣời ký có khóa bí mật là x Zn và khóa công khai là y = gx.
Vòng 0: Người dùng
Ngƣời dùng gửi yêu cầu ký thông điệp m tới ngƣời ký.
Vòng 1: Người ký
1) Chọn r r1, ,...2 rlR Zn
2) Đặt rj
j
z g , 1j l và gửi các zjtới ngƣời dùng.
Vòng 2: Người dùng
Tính c = Hl (m, y, g, z1,…, zl), và gửi c tới ngƣời ký.
Vòng 3: Người ký
Đặt sj = rj - c[j]x, 1j l.
Bây giờ ta chứng minh (c, s1,…, sl) là một chữ ký hợp lệ dựa trên tri thức
Bổ đề 3.6.1
1
( , ,..., )c s sl SKLOGl[ | yg]( )m
Chứng minh
Trong giao thức, thông điệp đƣợc che giấu với ngƣời ký, nhƣng ngƣời ký vẫn có thể đoán nhận ra chữ ký vì anh ta nhìn thấy cả c lẫn s1,…,sl. Hãy xét những thứ cần thiết để giao thức này thực sự là mù. Đầu tiên, không chỉ duy nhất thông điệp cần đƣợc che giấu, mà tất cả đầu vào của ngƣời ký trong giao thức.
Chúng ta có thể bắt đầu với việc làm mù các zj - điều này đƣợc thực hiện bởi việc nhân hệ số làm mù ngẫu nhiên aj
g (với aj chọn ngẫu nhiên). Tiếp theo, chúng ta cần làm mù các bit của c. Vì đầu ra của hàm băm H luôn chứa một số bằng nhau của 0 và 1, do đó nó hoán vị ngẫu nhiên thứ tự các bít riêng của c để có kết quả là hoàn toàn làm mù c.
Để có thể xây dựng lại một chữ ký hợp lệ sau khi làm mù c, ta cần thực hiện những bƣớc sau:
1) Trộn thứ tự của zj bằng việc áp dụng một hoán vị trên chỉ số. 2) Áp dụng hàm băm H với bản đã đƣợc trộn của các zj này để có c. 3) Áp dụng -1
tới các bit riêng của c để có một c đƣợc làm mù.
4) Ngƣời ký đáp ứng với c đã làm mù, thứ tự của zj đã đƣợc trộn và các aj đã đƣợc sử dụng để làm mù chúng. [1] [ ] 1 [1] [ ] 1 1 1 ( , , , ,..., ) ( , , , ,..., ) ( , , , ,..., ) ( , , , ,..., ) s s c l c l l s s c x l c l x l r r l l l l H m y g g y g y H m y g g g H m y g g g H m y g z z c
Giao thức ký mù
Vòng 0: Người dùng
Ngƣời dùng gửi yêu cầu ký thông điệp m tới ngƣời ký.
Vòng 1: Người ký
1) Lấy riR Zn,1 i l
2) Đặt ri,1
i
P g i l
3) Gửi { Pi } tới ngƣời dùng.
Vòng 2: Người dùng
1) Lấy một hoán vị ngẫu nhiên :{1,..., }l {1,..., }l và đặt Qi:P( )i ,1 i l ( sẽ được sử dụng để làm mù kết quả của H)
2) Lấy ngẫu nhiên a1,…, al, và đặt ai,1
i i
R Q g i l (ai được dùng để làm mù các zi mà là đầu vào của H) 3) Tính c := Hl(m, y, g, R1,…, Rl)
4) Tính c‟ sao cho c‟[i] = c[-1
(i)] (c‟ được làm mù) 5) Gửi c‟ tới ngƣời ký.
Vòng 3: Người ký
1) Sử dụng x bí mật (với x=logg y) tính với 1il, , '[ ] 0 (mod ) , '[ ] 0 i i i r c i t r x n c i
2) Gửi { ti } tới ngƣời dùng.
Vòng 4: Người dùng
1) Xác minh ti c i'[ ] i
P g y
2) Tính si:t( )i ai (mod )n