3.6. CHỮ KÝ MÙ DỰA TRÊN TRI THỨC
3.6.2. Chữ ký mù dựa trên tri thức về Logarit rời rạc kép
3.6.2.2. Phân tích chữ ký
Giao thức ở trên sinh ra một chữ ký hợp lệ dựa trên tri thức. Đó là:
(c, s1,…,sl) = SKLOGLOGl[ | y = g( )a ](m)
Chứng minh
Bộ (c, s1,…,sl) là một chữ ký trên m, vì c = Hl(m,y,g,a,R1,…,Rl ) :
thỏa mãn định nghĩa của SKLOGLOGl. Bổ đề 3.6.5 (Tính mù)
Trong mô hình Oracle ngẫu nhiên, thì giao thức mô tả ở trên sinh ra một chữ ký mù, (c, s1,…,sl) là một chữ ký trên m mà người ký không thể thấy được sự liên kết nào trong giao thức.
Chứng minh
Chữ ký (c, s1,…,sl) không thể được liên kết với tầm nhìn của người ký
( )
( )
( )( ) ( )
( ) ( )
( ) ( )( ) ( )
t i ai si
ai ai
t i ai si
a a a
a a
i i i
a a a
g g
R Q P
y y
, nếu c‟[(i)]=c[i]=0 , nếu c‟[(i)]=c[i]=1
3.6.3. Chữ ký mù dựa trên tri thức về gốc của Logarit rời rạc 3.6.3.1. Giao thức chữ ký
Sử dụng kỹ thuật tương tự ở trên, thu được giao thức mù cho SKROOTLOG:
Vòng 0: 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) Với 1≤i≤l, chọn riR Zn* 2) Đặt Pi:g(rie)
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 2) Với 1≤i≤l, chọn ai RZn*, và đặt Ri:Qi(aie)
3) Tính c := Hl(m,y,g ,R1,…,Rl) 4) Tính c‟ sao cho c‟[i] = c[-1(i)]
5) Gửi c‟ tới người ký.
Vòng 3: Người ký
1) Tính
, '[ ] 0 / (mod ) , '[ ] 0
ri c i
ti r x n c i
i
với 1≤i≤l
2) Gửi { ti } tới người dùng.
Vòng 4: Người dùng
1) Xác minh rằng
( ) ( )
, '[ ] 0
, '[ ] 0
e i e i
t
i t
g c i P
y c i
2) Tính si := t(i) *ai , 1≤i≤l
3) Đầu ra (c, s1,…,sl) là chữ ký trên m.
3.6.3.2. Phân tích chữ ký.
Bổ đề 3.6.6 (tính đúng đắn)
Giao thức ở trên sinh ra một chữ ký hợp lệ dựa trên tri thức. Đó là:
( )
( , ,..., )c s1 sl SKROOTLOGl[ \ yg e ]( )m Chứng minh
Bộ (c, s1,…,sl) là chữ ký trên m, vì cH m y g e Pl( , , , , ,..., )1 Pl , trong đó:
(aie)
Ri Q
( )
( ie)
i
P a
( ( ))( )
e e
i i
r a
g
g(t ( )i xc'[ ( )]i ai)e
g(s xi c i[ ])e
thỏa mãn định nghĩa của SKROOTLOGl Bổ đề 3.6.7 (Tính mù)
Trong mô hình Oracle ngẫu nhiên, giao thức vừa mô tả ở trên sinh ra một chữ ký mù, đó là (c, s1,…,sl) là một chữ ký trên m.
Chứng minh
Giống như đã chứng minh trong trường hợp SKLOG, chỉ thêm chi tiết đặc biệt, chữ ký (c, s1,…,sl) không thể được liên kết với tầm nhìn của người ký trong giao thức vì làm mù c và a1,…,al làm mù s1,…,sl.
Chương 4. CHỮ KÝ NHÓM
4.1. GIỚI THIỆU
Chữ ký nhóm là mở rộng của chữ ký số truyền thống cho một thiết đặt đa thành phần tham gia. Trong sơ đồ chữ ký nhóm, một thành viên của nhóm đã cho đƣợc phép ký thay mặt toàn bộ nhóm. Chữ ký nhóm đƣợc xác minh bằng một khóa công khai của nhóm. Đồng thời, khi một tài liệu đƣợc ký, thì không một ai ngoại trừ trưởng nhóm (đã được chỉ định) có thể xác định thành viên nào đã thực sự ký nó. Chữ ký nhóm phải đƣợc thiết kế sao cho không thành viên nào trong nhóm có thể giả mạo chữ ký của thành viên khác.
Ví dụ, giả sử bạn là người quản lý của một công ty và bạn muốn các nhân viên riêng lẻ có thể phê chuẩn các tài liệu, danh sách giá, hoặc các hợp đồng số thay mặt toàn bộ công ty. Trong trường hợp này, bạn có thể thiết lập một sơ đồ chữ ký nhóm, và bạn là trưởng nhóm. Với cách tiếp cận này, bạn sẽ che đi cấu trúc bên trong công ty của bạn, và khách hàng của bạn sẽ chỉ phải biết một khóa công khai của công ty để xác minh chữ ký trên tài liệu của bạn.
Hơn nữa, bạn có thể xác định nhân viên nào đã ký tài liệu nào. Đồng thời, chữ ký thỏa mãn các yêu cầu về bảo mật khác nhau mà chúng ta đang quan tâm.
Các chữ ký này khó có thể giả mạo, nghĩa là không một nhân viên nào có thể giả mạo chữ ký của nhân viên khác. Thực tế thì kể cả trưởng nhóm cũng khó có thể giả mạo chữ ký của các thành viên nhóm. Đây chỉ là một ứng dụng đơn giản của chữ ký nhóm.
Các nội dung tiếp theo của chương sẽ trình bày: các thủ tục và các yêu cầu của chữ ký nhóm, lịch sử nghiên cứu chữ ký nhóm, sau đó là sơ đồ chữ ký nhóm của Chaum và Heyst [17], sơ đồ chữ ký nhóm Camenisch và Stadler (CS97) [14], cuối cùng trình bày một biến thể an toàn hơn của sơ đồ CS97.
4.1.1. Các thủ tục của chữ ký nhóm Một chữ ký nhóm gồm 5 thủ tục sau:
1) Setup
Giải thuật xác suất dùng để tạo ra khóa công khai Y của nhóm và một khóa quản trị bí mật S cho trưởng nhóm.
2) Join
Giao thức tương tác giữa trưởng nhóm và thành viên mới của nhóm Bob để đƣa ra khóa bí mật x và chứng chỉ hội viên A của anh ta.
3) Sign
Giao thức tương tác giữa thành viên nhóm Bob và người dùng ngoài nhóm Alice, nó nhận đầu vào là thông điệp m từ Alice và khóa bí mật x từ Bob để đƣa ra chữ ký s trên m.
4) Verify
Giải thuật với đầu vào ( m, s, Y) để xác định sự hợp lệ của chữ ký s trên thông điệp m đối với khóa công khai nhóm Y.
5) Open
Giải thuật có đầu vào (m, s, S) để tiết lộ định danh của thành viên nhóm, mà đã đƣa ra chữ ký s trên thông điệp m.
▪ Tính hiệu quả của chữ ký nhóm
Những tham số sau đƣợc dùng để ƣớc lƣợng tính hiệu quả của một sơ đồ chữ ký nhóm cụ thể:
- Kích cỡ (số các bit) của khóa công khai nhóm Y.
- Kích cỡ (số các bit) của một chữ ký nhóm thực tế trên thông điệp.
Hiệu quả của các giao thức Sign, Verify, Setup, Open.
4.1.2. Các yêu cầu với chữ ký nhóm
Chữ ký nhóm phải thỏa mãn các yêu cầu an toàn sau:
1) Không thể giả mạo
Chỉ các thành viên trong nhóm có khả năng đƣa ra chữ ký hợp lệ để đại diện cho toàn bộ nhóm, sự hợp lệ của các chữ ký này đƣợc thẩm tra bởi dùng khóa công khai của nhóm.
2) Nặc danh người ký có điều kiện
Bất cứ ai cũng có thể dễ dàng kiểm tra một cặp thông điệp/chữ ký đã được ký bởi thành viên nhóm nào đó, nhưng chỉ trưởng nhóm có thể xác định thành viên nào đã đƣa ra chữ ký này. Cũng có mô hình hơi khác một chút là luôn giữ nặc danh người ký, thậm chí đối với cả trưởng nhóm, nhưng chúng ta không xét mô hình đó trong luận văn này.
3) Danh tính người ký không thể phủ nhận
Trưởng nhóm có thể xác định được danh tính của thành viên nhóm đã tạo ra chữ ký hợp lệ. Hơn nữa, anh ta cũng có thể chứng minh với thực thể khác nào đó (chẳng hạn nhƣ quan tòa) thành viên nào đã ký vào một tài liệu đã cho và không làm hại tới sự ẩn danh của thành viên nhóm trong các thông điệp anh ta đã ký trước đây và có thể trong tương lai.
4) Không có khả năng liên kết
Không ai có thể xác định đƣợc hai chữ ký khác nhau là đƣợc đƣa ra bởi cùng một thành viên ngoại trừ trưởng nhóm.
5) Chống lại sự tấn công khung
Không một tập con các thành viên nhóm nào (có thể có cả trưởng nhóm) có thể ký một thông điệp để thay mặt thành viên nhóm khác. Tức là, nếu thủ tục Open đƣợc gọi trên thông điệp, thì nó không thể định rõ tên của
6) Chống lại sự liên minh
Không tồn tại tập con nào các thành viên nhóm (có thể gồm cả trưởng nhóm) có thể thông đồng để tạo ra các chữ ký nhóm hợp lệ mà không thể phát hiện. Nói cụ thể, chúng ta muốn ngăn chặn các tấn công dạng liên minh của các thành viên nhóm, đó là: họ góp chung vốn thông tin và tạo ra các chữ ký mà đƣợc chấp thuận bởi thủ tục Verify, nhƣng với thủ tục Open thì không đủ để tiết lộ ra bất kỳ thành viên nhóm nào.
4.1.3. Giới thiệu lịch sử nghiên cứu chữ ký nhóm
Chữ ký nhóm đƣợc giới thiệu đầu tiên bởi Chaum và Heyst [17] năm 1991. Họ đã đề xuất bốn sơ đồ khác nhau, trong đó có ba sơ đồ yêu cầu trưởng nhóm tiếp xúc với mỗi thành viên nhóm để tìm ra ai đã ký vào một thông điệp cụ thể. Ba sơ đồ này cho phép tính toán đƣợc độ đảm bảo nặc danh; nghĩa là, sự nặc danh của người ký được đảm bảo bởi một số giả định trên độ bền vững của một bài toán cụ thể. Trong sơ đồ thứ tƣ ta không thể thêm một thành viên mới của nhóm khi sơ đồ đã đƣợc thiết lập.
Hai sơ đồ chữ ký nhóm nữa đƣợc bổ sung bởi Chen và Pedersen [18].
Một sơ đồ của họ cung cấp sự nặc danh liên quan tới lý thuyết thông tin, lƣợc đồ còn lại cung cấp sự nặc danh có thể tính toán đƣợc. Không may, những sơ đồ này bị hạn chế là trưởng nhóm có khả năng ký lên các thông điệp đến từ các thành viên nhóm khác.
Ngoài ra còn bài báo nói về chữ ký nhóm của Camenisch [12]. Bài báo này đề xuất một sơ đồ chữ ký nhóm hiệu quả hơn 2 sơ đồ trên. Sơ đồ này không có hạn chế về việc trưởng nhóm có thể buộc tội sai một thành viên đã ký trên thông điệp và sơ đồ này còn cho phép thêm các thành viên mới của nhóm sau khởi tạo việc cài đặt nhóm. Sơ đồ đặc biệt này cung cấp sự nặc danh có thể tính toán đƣợc.
Một lƣợc đồ chữ ký nhóm đƣợc coi là tốt nhất là của Camenisch và Stadler [14]. Sơ đồ của họ hội tụ đầy đủ các tiêu chuẩn bảo mật ở trên, và có thuộc tính là kích thước của khóa công khai nhóm Y là hằng số trong kích thước của nhóm. Thật ra thì khóa công khai họ đưa ra trong sơ đồ giữ y nguyên trong suốt thời gian tồn tại của nhóm. Hơn nữa, tất cả các giao thức Sign, Verify, Setup và Join cùng hoạt động độc lập với kích thước của nhóm, thuộc tính này rất tốt đối với sơ đồ các nhóm lớn.
Sơ đồ gốc của Camenisch và Stadler bị tấn công bởi một liên minh giả tấn công; sự tấn công này được phác thảo ở phần sau của chương. Nhưng đã có một chỉnh sửa đơn giản trên sơ đồ gốc này để làm cho nó an toàn hơn. Sơ đồ đặc biệt này là khối xây dựng chữ ký mù nhóm của Ramzan (chương 5).
Công việc kế tiếp về chữ ký nhóm đƣợc thực hiện bởi Ateniese và Tsudik [10]. Song không may là có các tấn công liên minh trên sơ đồ chữ ký nhóm này và các sơ đồ khác cũng của Ateniese và Tsudik [8]. Các tấn công này đƣợc khám phá bởi Traore [30].
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 .
si
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 .
si
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à h'gs ri i. (gsi)ri.
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ỉ những thành viên nhóm mới có thể gửi các khóa công khai vào danh sách này.
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à: $msimodn.
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
gp p
q
và h 1 mod
q mod p
h q
P chọn r , r (1,…,N) và tính Blob an toàn B (y) = yg hr1 r2 (mod N).
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 mr 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 s là ƣớc của v
4.3. CHỮ KÝ NHÓM CAMENISCH VÀ STADLER (CS97)
Sơ đồ do Camenisch và Stadler [14] đƣa ra năm 1997, ký hiệu là CS97.
Các thủ tục của sơ đồ chữ ký nhóm CS97 1) Setup (Thiết đặt các tham số)
Để cài đặt sơ đồ chữ ký nhóm, người quản lý nhóm chọn một tham số an toàn l và tính các giá trị nhƣ sau:
(1) Một khoá công khai RSA (n, e) và khoá riêng d, trong đó n có độ dài ít
nhất 2l bit. Chúng ta mong muốn có n = p.q, trong đó p = 2P+1, q = 2Q+1, và p, q, P, Q là các số nguyên tố. Trong thực tế, người ta nên
chọn p và q là dài hơn l bit để chắc chắn rằng sự phân tích modulo n là không thể thực hiện đƣợc.
(2) Một nhóm Cyclic G = <g> có cấp n mà việc tính Logarit rời rạc là khó.
Nói cụ thể, chúng ta có thể chọn G là một nhóm con Cyclic của
2
*
Zp , trong đó p2 là số nguyên tố : n \ (p2 - 1).
(3) Một phần tử aZn* có bậc lớn.
(4) Một cận trờn λ của chiều dài cỏc khoỏ bớ mật và một hằng số à > 1. Cỏc giỏ trị à càng lớn hệ thống càng an toàn.
(5) Khoỏ cụng khai của nhúm là: Y = (n, e, G, g, a, λ, à).
(6) Chúng ta cũng giả thiết sự hiện diện của cơ sở hạ tầng khoá công khai KPI (Public-Key Infrastructure) - Bất cứ ai muốn gia nhập nhóm phải là một phần của PKI. Tất cả các thành viên của PKI có các khoá công khai và khoá riêng đã kết hợp với PKI này.