1. 1
Đề tài: Chứng minh không tiết lộ thông tin
1. Khái niệm phép chứng minh không tiết lộ thông tin.
1.1 Khái niệm phép chứng minh.
Trong toán học và cuộc sống, chúng ta thường muốn chứng minh một
vấn đề gì đó cho người khác hiểu, điển hình nếu như tôi biết X đúng và
tôi muốn chứng minh điều này cho bạn, tôi cố gắn hết sức để sử dụng
những điều đã có và những điều liên quan để chứng minh rằng X đúng.
1.2 Hệ thống chứng minh tương tác.
Theo lý thuyết tính toán phức tạp, một hệ thống chứng minh tương
tác là một máy trừu tượng mà các mô hình tính toán như là việc trao đổi
tin nhắn giữa hai bên. Các bên có Verifier và Prover(ngườixác minh và
người chứng minh), tương tác vời nhau bằng cách trao đổi thông điệp
để xác định một chuỗi thuộc về một ngôn ngữ hay không. Prover là toàn
năng và sỡ hữu không giới hạn nguồn lực tính toán, nhưng không thể tin
tưởng được, trong khi người xác minh đã bị chặn sức mạnh tính toán.
Thông điệp được gửi giữa hai bên Verifier và Prover cho đến khicó một
câu trả lời cho vấn đề này và đã thuyết phục chính nó nếu nó đúng.
Tất cả các hệ thống chứng minh tương tác gồm có hai yêu cầu:
2. 2
Đầy đủ: Nếu phát biểu là đúng, việc xác minh trung thực sẽ được
thuyết phục thực tế bởi Prover trung thực.
Hoàn thiện: Nếu phát biểu là sai, không có Prover, ngay cả khi không
theo giao thức, có thể thuyết phục người xác minh trung thực rằng
nó là đúng, trừ với một số xác suấtrất nhỏ.
Chú ý rằng chúng ta không quan tâm tới nững gì xảy ra nếu người xác
minh không trung thực, chúng ta tin vào người xác minh.
Bản chất cụ thể của hệ thống, và do đó các lớp phức tạp của ngôn
ngữ nó có thể nhận ra, phụ thuộc vào những gì sắp xếp giới hạn
được được trên Verifier, cũng như những gì mà khả năng của nó
mang lại. Ví dụ hầu hết các hệ thống chứng minh tương tác phụ
thuộc vào rất nhiều vào khả năng của Verifier để đưa ra lựa chọn
ngẫu nhiên. Nó cũng phụ thuộc vào bản chất của tin nhắn trao đổi-có
bao nhiêu và những gì chứa bên trong nó. Hệ thống chứng minh
tương tác đã tìm thấy một số ý nghĩa sâu sắc đáng ngạc nhiên cho
các lớp truyền thông phức tạp được xác minh bằng cách sử dụng chỉ
một máy. Các lớp phức tạp của hệ thống chính được miêu tả bằng hệ
thống chứng minh tương tác là AM(Arthur-merlin protocolvà
IP(interactiveproof system)
2. Phương pháp chứng minh không tiết lộthông tin.
2.1. Khái niệm.
Xét ví dụ:
3. 3
Giã sử P và V cùng tham gia trò chơi với các lá bài. P đưa ra 2 lá bài úp và
nói đó là 2 và 3, p yêu cầu v chọn lá 3.
Và sau đó trước khi chọn lá 3, V muốn kiểm tra chắc chắn rằng hai lá bài
đó đích thực là 2 và 3. V yêu cầu P chứng minh điều này, nếu P lật hai lá
bài đó lên thì coi như là một cách chứng minh thì trò chơi kết thúc vì V
đã nhìn thấy chúng và dĩ nhiên là V có thể chọn ngay ra được lá bài 3.
Có một cách khác để P chứng minh rằng lá bài đó là 2 và 3 mà không
phải lật 2 lá bài đó lên, tức là không làm lộ thông tin về hai lá bài trên tay
P là P đưa 50 lá bài còn lại để cho V kiểm tra, nếu V kiểm tra thấy thiếu
một lá bài 2 và 3 thì có thể coi lá bài trên tay P đưa ra đúng như P nói.
→ Chứng minh không tiết lộ thông tin không có nghĩa là không để lộ
thông tin mà nghĩa là để lộ thông tin ở mức ít nhất về sự việc cần chứng
minh. Với những thông tin để lộ, người xác minh không có nhiều hiểu
biết(knowledge) về sự vật sự việc, họ chỉ thu được chút ít thông tin(coi
như zero knowledge) về đặc điểm tính chất của nó.
Giao thức ∑ là giao thức “Hỏi-Đáp” 3 bước để P chứng minh cho V một
vấn đề nào đó.
P gửi cho V một giá trị ngẫu nhiên.
V gửi lại P một giá trị ngẫu nhiên như là giá trị dùng để kiểm thử.
P gửi đáp lại V một giá trị.
Kết quả V thừa nhận hoặc bác bỏ vấn đề P chứng minh.
4. 4
“Chứng minh không tiết lộ thông tin” được phát minh bởi Goldwasser,
Micali và Rackoff năm 1981(GMR). Chứng minh không tiết lộ thông
tin(và chứng minh tương tác nói chung) hóa ra là một trong những lý
thuyết hay nhất và có ảnh hưởng lớn nhất trong khoa học máy tính, với
ứng dụng ngày càng tăng trong dự án chữ ký thực để chứng minh rất
nhiều vấn đề NP-Complete là khó ngay cả khi xấp xỉ.
2.2. Các thành phần bên trong phép chứng minh không tiết lộ
thông tin.
Có hai nhân vật mà chúng ta thường xuyên phải nhắc đến trong
vấn đề này:
Peggy-các Prover: người chứng minh, Peggy có một số thông
tin muốn chứng minh cho Victor thấy, nhưng cô ấy lại không
muốn nói thẳng bí mật đó cho Victor.
Victor-Verifier: người xác minh, Victor hoit peggy một loạt
các câu hỏi, cố gắng tìm ra được là Peggy có thực sự biết
được bí mật đó hay không, Victor không tiếp thu được bất
cứ điều gì khác từ bí mật đó, ngay cả khi anh ta gian lận hay
không tuân theo chỉ dẫn của giao thức.
2.3. Tính chất của giao thức chứng minh không tiết lộ thông
tin.
5. 5
Giao thức chứng minh không tiết lộ thông tin có thể được mô tả như là
các giao thức mật mã khác có tính năng đặc biệt được mô tả trong [10]-
H. Aronson. Zero knowledgeprotocols and small systems:
Người xác minh(verifier) không thể tiếp thu được bất cứ một điều gì
từ giao thức này: Verifier không học thêm được bất cứ điều gì từ
giao thức này, bởi anh ta không thể tự mình tìm hiểu mà không có
người chứng minh(Prover). Đây chính là nội dung chính của giao thức
chứng minh không tiết lộ thông tin(giống như không có giao thức
nào trao đổi thông tin ở đây). Không có thuộc tính này, giao thức này
sẽ được gọi là giao thức tiết lộ tối thiểu, tức là nó yêu cầu hoàn toàn
không có thông tin nào có thể để lộ trong trường hợp này.
Prover sẽkhông gian lận Verifier: Nếu Peggy không biết bí mật đó, rỏ
ràng xác suất thành công của cô ấy là rất nhỏ. Sau số vòng lặp tương
đối lớn của giao thức này, tỷ lệ Prover gian lận sẽ được làm nhỏ nhất
khi cần thiết. Giao thức này cũng được cắt và chọn lựa, tức là chỉ cần
lần đầu tiên Prover thất bại, Victor có thể biết được ngay rằng Peggy
gian lận. Như vậy với mỗi vòng lặp của giao thức này, xác suất thành
công sẽcao hơn rất nhiều. Giao thức này có thể làm việc tốt nhất
ngay cả khi xác suất may mắn của Prover gian lận cao vì ta có thể
tăng số lần vòng lặp của giao thức. Nói cách khác, khả năng nắm bắt
của Verifier rất cao, có thể bảo vệ bản thân tránh khỏithuyết phục
bởi những vấn đề sai.
6. 6
Verifier không thể gian lận được Prover được: Victor không có thêm
được bất cứ thông tin nào từ giao thức, thậm chí nếu anh ta không
tuân theo những chỉ dẫn đó. Điều duy nhất Victor có thể làm để
thuyết phục chính anh ta rằng Peggy biết bí mật đó. điều mà Prover
tiết lộ chỉ là một giải pháp của trong rất nhiều giải pháp cho một vấn
đề, không bao giờ tất cả những điều ấy kết hợp lại có thể tìm ra
được bí mật đó.
Verifier không thể giả làm Prover để chứng minh cho người thứ ba
được. Bởi vì không có thông tin rò rỉ từ Peggy cho Victor, Victor
không thể thử để thay thế Peggy cho bên thứ ba bất kỳ bên ngoài.
Với một số giao thức khác, người trung gian có thể tấn công là điều
có thể, tuy nhiên, điều đó có nghĩa là có ai đó có thể chuyển tiếp lưu
lượng truy cập từ Peggy thật và cố gắn thuyết phục một Victor khác,
thủ phạm là Peggy. Ngoài ra nếu các bản ghi Verifier khác ghi lại cuộc
đàm thoại giữa anh ta và Prover, thì bản ghi đó cũng có thể được
dùng để thuyết phục bên thứ ba nào cả. Nó trông giống như một
cuộc trò chuyện giả.
Victor có thể chứng minh bất cứ một luận điểm nào đúng nào: thuộc
tính này được gọi là hoàn thiện và nó là khả năng nắm bắt cơ bản
của một số Prover để thuyết phục Verifier về luận điểm đúng đó.
7. 7
3. Lược đồ xác minh
3.1 Giao thức xác minh Feige-Fiat-Shamir.
Trung tâm được ủy thác(TA) công bố một mooduyn chung n=p*q cho
mọi người tham gia, sau khi đã chọn và giữ bí mật hai số nguyên tố lớn p
và q, mỗi số này dều đồng dư với 3 theo mod4. Bài toán phân tích n
thành thừa số được giả thiết là cực khó. Một số nguyên n như trên là số
nguyên n như trên là số nguyên Blum, với-1 là một giả thặng dư bậc hai
theo modn(tức là một bất thặng dư bậc hai có ký hiệu Jacobi bằng +1).
Mỗi người tham gia thực hiện các việc chuẩn bị như sau:
- Chọn K số nguyên ngẫu nhiên s1,s2,..sk trong tập hợp {1,…n-1}, và k bit
ngẫu nhiên b1,b2,…bk.
Tính vi =(-1)bi
(si)-1
mod n vớimọi 1≤i≤k.
- Mỗi chủ thể A đăng ký với TA khóa công khai(v1,…vk;n) của mình, và giữ
cho riêng mình khóa bí mật (s1,….,sk).
Hoạt động của giao thức xưng danh sẽ gồm việc thực hiện t vòng hỏi-
đáp sau đây; B sẽ chấp nhận danh tính của A nếu tất cả t vòng đó đều
thành công. Gỉa thiết B có khóa công khaicủa A. Mỗi vòng gồmcác
bước:
(a) A chọn số nguyên ngẫu nhiên r (1≤r ≤n-1), và một bit ngẫu nhiên b,
tính x=(-1)b
.r2
mod n; và gửi x cho B như một bằng chứng.
(b) B gửi cho A một vecto gồm k bit ngẫu nhiên (e1,…ek) như một câu hỏi
hay lời thách đố.
8. 8
(c) A tính và gửi cho B y=r. ∏k
j=1 sej
j mod n, như câu trả lời.
(d) B tính z=y2
. ∏k
j=1 vj
ej
modn, và thử điều kiện z=±x và z≠ 0.
Chú ý rằng trong giao thức trên đây, các số k và t là các tham số an toàn
như sẽ được giải thích trong một đoạn sau.
Thí dụ: Gĩa sử trung tâm TA chọn p=683 và q=811, và công bố
n=pq=553913. Chọn các tham số k=3, t=1.
Giả sử A chọn s1=157, s2=43215,s3=4646, và 3 bit b1=1, b2=0, b3=1. Tính
ra v1=441845, v2=338402, v3=124423.
Khóa công khai của A là (441845,338402,124423;553913), khóa bímật là
(157,43215,4646).
Giao thức xưng danh của A có thể được thực hiện như sau:
a) A chọn r=1279, b=1, tính được x=25898, và gửi cho B.
b) B ra lời thách đố (e1,e2,e3)=(0,0,1).
c) A trả lời lại bằng y=rs3 modn=403104.
d) B tính z=y2
v3modn=25898 và thửđúng z=+x và z≠0.
Do đó B chấp nhận danh tính của A.
Đối với giao thức Feige-Fiat-Shamir, người ta chứng minh được rằng khả
năng thành công của việc mạo xưng danh tính có xác suất nhiều lắm là 2-
kt
, do đó nếu chọn k và t sao cho kt=20 chẳng hạn thì xác suất đó là
khoảng 1 phần triệu, và nếu kt=40 thì xác suấtđó là 1 phần triệu triệu,
có thể coi là không thể xảy ra. Tính an toàn của giao thức dựa trên độ
khó của bài toán khaicăn bậc hai theo môduyn là một hợp số lớn khó
9. 9
phân tích thành thừa số. Giao thức cũng có tính chất là một chứng minh
không tiết lộ thông tin theo nghĩa là nhớ biết khóa mật mã mà A thực
hiện việc trả lời trong các vòng hỏi đáp một cách trôi chảy, nhưng toàn
bộ các trả lời của A không để lộ bất kỳ một chút bí mật nào để người
khác(kểcả B) có thể khai thác nhằm phát hiện(khóa) bí mật của A.
3.2. Sơ đồ xưng danh Schnorr.
Trong sơ đồ xưng danh này có sự tham gia của một cơ quan được ủy
thác mà ta ký hiệu là TA. TA sẽchọn các tham số cho sơ đồ xưng danh
như sau:
- một số nguyên tố lớn p sao cho bài toán lôgarit rời rạc theo modp
là rất khó; và một ước số nguyên tố q của p-1 (người ta khuyên nên chọn
p≥2512
và q≥2140
).
Một phần tử αϵZp
*
có cấp q(một phần tử α như vậy có thể lấy là
một lũy thừa bậc (p-1)/q của một phần tử nguyên thủy theo modp).
Một tham số an toàn t sao cho q≥2t
. Có thể lấy t=40.
TA chọn cho mình một sơ đồ chữ ký gồm một thuật toán ký(bímật)
sigTA và một thuật toán kiểm thử(công khai) verTA.
Một hàm băm an toàn (một phía và không va chạm mạnh). Ta giả
thiết là mọi thông tin đều được tóm lược bởi hàm băm trước khi được
ký; tuy nhiên trong mô tả sau đây để cho đơn giản ta sẽ bỏ qua các bước
sử dụng hàm băm.
10. 10
Các tham số p,q,α thuật toán kiểm thử verTA và hàm băm đều có
thể được công bố công khai.
Bây giờ, một chủ thể A cần xưng danh sẽ yêu cầu TA cấp cho mình
một chứng chỉ. Thủ tục cấp chứng chỉ cho A được tiến hành như sau:
1. TA xác lập thông tin về danh tính của họ như họ, tên,ngày
sinh,số chứng minh.…. Dưới dạng một dãy ký tự mà ta ký hiệu là IA hay
ID(A).
2. A chọn bí mật một số ngẫu nhiên a (0≤a≤q-1), tính
V=α-a
modp
Và chuyển số v cho TA.
3. TA tạo chữ ký s=sigTA(IA,v) và cấp cho A chứng chỉ
C(A)=(ID(A),v,s).
Như vậy, chứng chỉ mà TA cấp cho A gồm (IA,v) và chữký của TA
trên thông tin (IA,v) đó. Chú ý rằng TA cấp chứng chỉ cho A mà hoàn toàn
không biết gì về thông tin bí mật của A là số a.
Bây giờ, vớichứng chỉ C(A) đó, A có thể xưng danh với bất kỳ đối
tác B nào bằng cách cùng B thực hiện một giao thức xác nhận danh tính
như sau:
1. A chọn thêm một số ngẫu nhiên k (0≤ k ≤ q-1), tính
γ= αk
modp ,
Và gửi cho B các thông tin C(A) và γ.
11. 11
2. B kiểm thử chữ ký của TA trong chứng chỉ C(A) bởi hệ thức
verTA(ID(A),v,s)=đúng. Kiểmthử xong, B chọn một số ngẫu nhiên r
(1≤r≤2t
) và gửi cho A.
3. A tính y=k+armodq và gửi cho y cho B.
4. B thử điều kiện
γ ≡ αy
vr
(modp)
Và nếu điều kiện đó được thỏa mãn thì xác nhận danh tính của A.
Thực hiện giao thức đó, A sẽ chứng minh được danh tính của mình,
vì
αk
vr
≡ αk+ar
vr
≡αk+ar
α-ar
≡αk
(modp)
≡ γ(modp).
Tức điều kiện mà B cần thử là đúng.
Ví dụ: Lấy p=88667, q=1031 và t=10. Phần tử α=70322 có cấp q trong Zp
*
.
Giả sử A chọn số mũ bí mật là a=755, khiđó v=13136.
A và B có thể thực hiện giao thức xác định danh tính như sau: A chọn
k=543, và tính γ=70322543
mod88667=84109 rồigửiγ cho B.
Giã sử B gửi r=1000 cho A, A trả lời lại bằng y=k + armodq =
543+755.1000mod1031=851. B thử điều kiện γ ≡ αy
vr
(modp), trong
trường hợp này là:
84109≡70322851
131361000
(mod 88667),
Đó là đồng dư thức đúng. B xác nhận danh tính của A.
4. Phân loại ứng dụng xuất phát từ thực tiễn.
12. 12
Chứng minh không tiết lộ thông tin có rất nhiều ứng dụng. Các
ứng dụng thực tiễn nhất được chia làm 2 loại:
4.1 Thiết kế giao thức.
Một giao thức là một thuật toán cho các bên tương tác để đạt được
một số mục tiêu. Ví dụ chúng ta thấy giao thức trao đổi khóa Diffie-
Hellman. Trong giao thức này, chúng ta giả định rằng cả hai bên đều làm
theo hướng dẫn của giao thức, và điều duy nhất ta lo lắng là ta đã trở
thành một đối thủ thụ động.
Tuy nhiên, trong mật mã học, chúng ta muốn thiết kế giao thức rằng cần
phải đạt được bảo mật thậm chí khi một trong các bên gian lận và không
làm theo hướng dẫn. Đây là một vấn đề khó khăn kể từ khichúng ta
không có cách để biết chính xác các bên sẽ gian lận.
Tuy nhiên, một các để tránh gian lận là như sau: Nếu alice chạy một giao
thức với Bob, để cho Bob biết rằng Allice không gian lận, cô ấy sẽ gửi
toàn bộ dữ liệu đầu vào cho Bob và sau đó Bob có thể chứng thực điều
này.
Tuy nhiên cách này sẽ không được chấp nhận nhất là với alice: lý do duy
nhất là họ đang cùng chạy một giao thức này và họ không thể thực sự tin
tưởng đối phương và những dữ liệu đầu vào mà cô ấy có là bí mật và cô
ấy không muốn chia sẽ chúng.
Chứng minh không tiết lộ thông tin cung cấp một giải pháp cho vấn đề
này. Thay vì gửi hết các dữ liệu đầu vào của mình, Alice sẽ chứng minh
13. 13
không tiết lộ thông tin rằng cô ấy đã làm theo hướng dẫn. Bob sẽ bị
thuyết phục, nhưng cũng sẽkhông biết được bất cứ điều gì vềnhững dữ
liệu đầu vào của Alice ngoài những cái anh ấy đã biết trước kia
Thực tế, chúng ta sẽ thấy rằng có thể làm điều này một cách chung, áp
dụng cơ bản cho tất cả các giao thức mã hóa. Vì thế, một kỹ thuật tổng
hợp là để thiết kế ra một giao thức mật mã đầu tiên giả định tất cả mọi
người sẽ phải làm theo hướng dẫn và sau đó yêu cầu sẽ bắt họ làm theo
chỉ dẫn sử dụng hệ thống chứng minh không tiết lộ thông tin.
4.2 Đề án nhận dạng.
Một phần đơn giản hơn và ứng dụng trực tiếp là đề án nhận dạng. Giã sử
rằng chúng ta muốn kiểm soáttruy cập vào các bộ phận khoa học máy
tính. Một cách để làm điều đó là cho người được ủy quyền(có thẩm
quyền) một số bí mật là mã PINvà có một ô trên cửa nơi gõ số PINtrên
hộp đó.
Nhược điểm của phương pháp này là hộp vẫn còn ở bên ngoài suốtthời
gian ấy, và nếu có ai đó có thể kiểm tra chiếc hộp, có lẽ họ sẽ có thể xem
bộ nhớ của nó và trích xuất bí mật chìa khóa của tất cả mọi người. Như
vậy từ một quan đểm bảo mật, nó là tốt hơn nếu hộp không chứa thông
tin bí mật nào cả và thậm chí là nếu có ai đã cài đặt một hộp để giả mạo
họ cũng sẽ không biết gì về những bí mật mã PIN.
Chứng minh không tiết lộ thông tin giúp ta theo các cách sau:
14. 14
Có hôp chứa một thể hiện của vấn đề khó khăn. Ví dụ hộp có thể chứa n
hợp số mà không cần phân tích nhân của nó.
Cung cấp cho những người có thẩm quyền giải pháp vấn đề này. Ví dụ họ
có thể nhận phân tích nhân của n để n=p*q.
Những người có thẩm quyền sẽchứng minh cho họ biết hộp phân tích
nhân không tiết lộ thông tin.
5. Nhận xét:
Chứng minh không tiết lộ thông tin là trường hợp đặc biệt của chứng
minh tương tác.
Zero Knowledgeproof cung cấp một cách chứng minh tri thức cho một
ai đó mà không thay đổi bất cứ kiến thức bổ sung cho người đó
Có thể được dùng để chứng minh sự xác minh
Giả thuyết cơ bản được dùng trong tất cả PKIS
6. Tài liệu tham khảo:
1.https://drive.google.com/file/d/0BxeN5fDkjXBFRUhLQnJu
M2tZTlU/view?pref=2&pli=1