II. Hàm Hash
4. Cấu trúc lược đồ chữ ký người xác nhận không thể chối bỏ:
4.1. Tạo khóa:
+ Người ký chọn s ∈R Zq, thiết lập cặp khóa bí mật và công khai (SS, PS) với SS = s, PS = gs mod p.
+ Người xác nhận chọn c ∈R Zq, thiết lập cặp khóa bí mật và công khai (SC, PC) với SC = c, PS = gc mod p.
4.2. Tạo chữ ký:
Để tạo chữ ký σ trên thông báo m, người ký S chọn r ∈R Zq, tạo:
α : = gr, αs : = Pr
S, αs+c : = (PSPC)r, gs : = PS, gs+c : =PSPC
Sau đó tính σ1 = CP(r, α, αs+c, g, gs+c)(m) và σ2 = S(sr, g, αs)(σ1). => Chữ ký σ của người ký trên thông báo m là: σ = (σ1, σ2).
4.3. Kiểm tra chữ ký:
Đầu tiên người kiểm tra sẽ kiểm tra độ tin cậy của (σ1, σ2) với σ1 là chữ ký Chaum – Petersen đẳng thức của thuật toán rời rạc tin cậy trên thông báo m và σ2 là chữ ký Schnorr tin cậy trên σ1. Người kiểm tra dừng nếu mọi sự kiểm tra đều dẫn đến kết quả không tin cậy. Ngược lại, người kiểm tra tiếp tục kiểm tra chữ ký như sau:
- Đối với người ký:
Đầu ra v của người kiểm tra của (SVer (SS), VVer())(m, σ, PS, PC) được tính: v = Bi-Proof [logα(αs) ≡ logg(gs)]
Trong giao thức này người ký đóng vai trò người chứng minh. - Đối với người xác nhận:
Đầu ra v của người kiểm tra của (CVer(SC), VVer())(m, σ, PS, PC) được tính: v= Bi-Proof [logg (gc ) ≡ logα(αc)]
Trong giao thức phép chứng minh ký này, người xác nhận giữ nhiệm vụ như người chứng minh và αc = αs+c /αs.
Trong cả 2 sự kiểm tra của người ký và người xác nhận, người kiểm tra chấp nhận chữ ký khi và chỉ khi v = 1.
4.4. Giải thích cấu trúc bằng trực giác:
Ta thấy rằng trong các cấu trúc này, người ký có khóa bí mật s, khóa công khai g, người xác nhận có khó bí mật c, khóa công khai gc.
Giá trị gs+cđược tính:
gs+c = PS . PC = gsgc (vì gs = PS, gc = PC )
Chữ ký người xác nhận không thể chối bỏσ gồm 2 chữ ký là σ1, σ2.
Trong đó σ1 là chữ ký Chaum – Petersen được tạo với khóa bí mật r1 = r, kiểm tra với khóa công khai α = gr và αs+c = gr
c
s+ ; σ2 là chữ ký Schnorr được tạo với khóa bí mật r2 = rs, kiểm tra với khóa công khai αs = gr
s.
Bằng trực giác thấy rằng, chữ ký là luận chứng của tri thức khóa bí mật. Như vậy, nếu một người nào đó có thể tạo ra σ1, σ2 thì người đó phải có tri thức của r1, r2. Nếu người đó có thể chứng minh rằng r2 = r1s nghĩa là chữ ký đó là tin cậy.
Có 2 cách để chứng minh r2 = r1s như sau:
* Cách 1: Chứng minh rằng: logg(gs) ≡ logα(αs). Cách này yêu cầu tri thức của logg(gs), vì vậy chỉ có thể thực hiện bởi người ký.
* Cách 2: Chứng minh rằng: logg(gc ) = logα(αs+c /αs). Cách này yêu cầu tri thức logg(gc ), vì vậy chỉ có thể thực hiện bởi người xác nhận.