Chương 4 CHỮ KÝ NHÓM
4.2. CHỮ KÝ NHÓM CHAUM VÀ HEYST
Trong bài báo của mình David Chaum và Eugene van Heyst [17] đã trình bày một kiểu chữ ký mới cho một nhóm ngƣời, gọi là chữ ký nhóm, mà có các thuộc tính sau đây:
1) Chỉ các thành viên của nhóm có thể ký thông điệp.
2) Ngƣời nhận có thể thẩm tra rằng một chữ ký nhóm là hợp lệ, nhƣng không thể phát hiện ra thành viên nhóm nào đã ký nó.
3) Nếu cần, chữ ký có thể đƣợc “mở” để xác định danh tính ngƣời đã ký thông điệp (có hoặc không có sự giúp đỡ của các thành viên nhóm).
Các chữ ký này là “sự sinh ra” từ các sơ đồ xác thực thành viên/giấy uỷ nhiệm, trong đó một ngƣời chứng minh rằng anh ta thuộc một nhóm nào đó.
Chaum và Heyst trình bày 4 sơ đồ thoả mãn các tính chất trên. Không phải tất cả các sơ đồ đƣợc dựa trên cùng một giả định mã hoá. Trong một số sơ đồ một trung tâm uỷ thác chỉ đƣợc cần trong Setup và trong các sơ đồ khác mỗi ngƣời có thể tạo ra nhóm mà ngƣời đó thuộc về.
Sau đây chúng ta trình bày hai trong các sơ đồ chữ ký nhóm của Chaum và Heyst.
4.2.1. Sơ đồ chữ ký nhóm dạng 1
Ngƣời tin cậy Z là trƣởng nhóm chọn hệ thống khóa bí mật, Z chuyển cho mỗi thành viên trong nhóm 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 các khóa công khai tƣơng ứng (theo thứ tự ngẫu nhiên) trong Thƣ mục công khai tin tƣởng TPD (Trusted Public Directory).
Mỗi thành viên trong nhóm có thể ký bằng khóa bí mật si trong danh sách của anh ta. Ngƣời nhận kiểm tra chữ ký bằng khóa công khai tƣơng ứng
mod .
i
s
h g p Mỗi khóa bí mật si chỉ đƣợc sử dụng một lần.
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ý.
Theo sơ đồ này, Z biết danh sách khóa bí mật của mọi thành viên và có thể giả mạo chữ ký. Điều này có thể giải quyết bằng việc sử dụng các khóa công khai „mù‟, có hai cách cải biên sau:
Cách 1
- 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 thứ i tự chọn khóa bí mật của mình là si, khóa công khai là mod .
i
s
h g p Trƣởng nhóm Z có danh sách các khóa công khai khác nhau h
và tên của các thành viên tƣơng ứng trong nhóm.
- Mỗi tuần Z đƣa cho thành viên i một số ngẫu nhiên ri {1, 2,…, p-1}, trong tuần này thành viên i sẽ sử dụng s i r i mod (p-1) làm khóa bí mật “mù”. (khóa bí mật si đã bị che giấu bởi ri).
- Khóa công khai “mù” tƣơng ứng là .
' s ri i ( si)ri
h g g .
Với cải biên này, Z khó giả mạo chữ ký, vì mỗi thành viên có khóa mật thực sự si, không trao cho Z. Nếu ri bị lộ thì si vẫn không bị lộ.
Cách 2
Không cần phải có nhóm trƣởng, mỗi thành viên của nhóm gửi các khóa công khai của họ vào một danh sách khoá công khai của nhóm. Chỉ
4.2.2. Sơ đồ chữ ký nhóm dạng 2
1) Sơ đồ: Dựa trên hệ mã hoá RSA.
Trƣởng nhóm Z chọn 2 số nguyên tố lớn p, q khác nhau, tính N = p * q. Z chọn khóa bí mật si, là số nguyên tố lớn, đƣợc chọn ngẫu nhiên trong tập hợp Ω = { N ,…., 2 N -1}, si đƣợc chuyển cho mỗi thành viên thứ i. Z tính v = ∏ si, công khai v và N.
Chữ ký của thành viên i trên thông điệp m là: $ si mod
m n
.
Ngƣời nhận chữ ký cần xác minh rằng ngƣời ký i là thành viên của nhóm, có khoá công khai v. Nhƣ vậy ngƣời ký phải chứng minh cho ngƣời nhận rằng khoá bí mật si là ước của v và si Ω , mà họ không để lộ thông tin nào khác 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ận người ký P
- Ngƣời ký P phải chứng minh với V rằng: $ = ms (mod N) là chữ ký của P
trên thông điệp m, mà không để lộ thông tin nào về khóa bí mật s của anh ta. (để cho đơn giản ta xem m là bản đại diện thông điệp).
- Xác nhận ngƣời ký P bằng 2 giao thức: Giao thức 1, Giao thức 2.
Trong 2 giao thức có sử dụng khái niệm Blob an toàn B:
Z chọn phần tử sinh gp của Z*p và 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
P chọn r1, r2 (1,…,N) và tính Blob an toàn B (y) = r1 r2
Giao thức1:
P chứng minh với V rằng $ = m s (mod N) là chữ ký của anh ta:
- P chọn r (0,1,…, ). Tính z1 m r (mod N) và z2 m r - (mod N). Tính các Blob B(z1), B(z2). Gửi cho V các Blob này (không theo thứ tự).
- V chọn ngẫu nhiên b (0,1) và gửi cho P.
- 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à (c+r) hoặc (c +r - ) và tƣơng ứng giá trị z là z1 hoặc z2 .
- V kiểm tra trong 2 trƣờng hợp ứng với 2 giá trị của b mà V đã gửi:
+Nếu V gửi b = 0 thì V kiểm tra r (0,1, …, ) và các Blob B(z1), B(z2). +Nếu V gửi b = 1 thì V kiểm tra r Ω và một trong các Blob B(z1), B(z2) chứa z, kiểm tra r
m z$ (mod N).
Nếu P trả lời đúng cả 2 câu hỏi của V (2 yêu cầu khi V gửi giá trị b), thì chữ ký $ trên thông điệp m đúng là của P. Nếu một trong 2 câu có kết quả sai, hoặc cả 2 câu đều sai, thì chữ ký $ trên thông điệp m không 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ách kiểm tra s là ƣớc của v.
P V x $ r Chọn r (1,…,N) y x v / s B (y) Kiểm tra x r
Mở Blob Kiểm tra Blob và kiểm tra y m v r
Nếu đúng thì V khẳng định