謝謝
@康克由同學的支持~雖然我真的覺得他的答案很好呢。。。為了讓大家理解起來更方便一點,我補充了一個更生動例子,希望能夠解釋得更清楚,也歡迎大家指正~
試圖給一個偏學院派的回答~
「零知識證明」是密碼學中存在於「證明者(prover,以下用P代替)」和「驗證者(verifier,以下用V代替)」雙方的一種協定,這種協定的要求是:
- P使得V相信其擁有某知識
- V不能從證明過程中得到知識的任何資訊
為了使得V相信P擁有知識,證明須滿足:
- 完備性:如果P確實擁有知識,那麽證明成功的概率大於2/3
- 可靠性:如果P並不擁有知識,那麽證明成功的概率小於1/3
若證明滿足上面的條件,則透過反復多次的證明,就能使得V相信P擁有知識的概率趨近1,P不擁有知識的概率趨近0。
概念結束(心累。。。)
下面舉例說明:
第一個例子,也是
@康克由原答案中參照的文章裏提到的
戰爭中你被俘了,敵人拷問你情報。你是這麽想的:如果我把情報都告訴他們,他們就會認為我沒有價值了,就會殺了我省糧食,但如果我死活不說,他們也會認為我沒有價值而殺了我。怎樣才能做到既讓他們確信我知道情報,但又一丁點情報也不泄露呢?這的確是一個令人糾結的問題,但阿裏巴巴想了一個好辦法,當強盜向他拷問開啟山洞石門的咒語時,他對強盜說:「你們離我一箭之地,用弓箭指著我,你們舉起右手我就念咒語開啟石門,舉起左手我就念咒語關上石門,如果我做不到或逃跑,你們就用弓箭射死我。」
強盜們當然會同意,因為這個方案不僅對他們沒有任何損失,而且還能幫助他們搞清楚阿裏巴巴到底是否知道咒語這個問題。阿裏巴巴也沒損失,因為處於一箭之地的強盜聽不到他念的咒語,不必擔心泄露了秘密,而且他確信自己的咒語有效,也不會發生被射死的杯具。
這個方法是如何成為零知識證明的呢?
完備性:當阿裏巴巴知道咒語時,他一定可以按照強盜的要求正確的開關石門,正確率100%。
可靠性:如果阿裏巴巴並不知道咒語,那麽他必然不能正確開關,強盜會立刻發現,他就掛了。就算阿裏巴巴運氣好,隨口說了一句「哈庫吶瑪塔塔!」,正好石門裏有人想開門透透氣開了門,讓強盜們以為他掌握了咒語,這種情況也不會總是發生(概率很小)。只要強盜們多下幾次指令,就可以將這樣的運氣成分降低到可以忽略不計。
而強盜在驗證了阿裏巴巴確實擁有咒語的同時,又不能得到咒語的任何資訊,因此這是一個成功的零知識證明。(當然我才不相信會有這麽守規矩的強盜=.=,門一開還不直接斃了阿裏巴巴沖進洞去嗎。。)
第二個例子。
仍然拿樓上Hamilton回路舉例。具體過程為:
- P隨機構造一個圖G的同構圖G',將G'發給V
- V隨機從以下兩者中選擇一項
那麽首先我們來看P是否能證明他真的知道圖G的Hamilton回路C:
接下來我們看V是否會從證明過程中獲得知識:
如果V能夠由C'得到C,那V就知道G‘和G的同構對應關系,而這在計算上是不可能的(這個證明方法的基礎就是同構圖的判斷是很困難的)。
由此我們可以看出以上證明是一個零知識證明。
再舉一個跟圖有關的例子:
圖的三色問題,是指找到這樣一種染色方法,將圖的頂點用三種顏色中的一種染色,並使得相鄰頂點不同色。假如P找到了圖G滿足三色問題的一種染色方法,想要證明給V,他應該怎麽做呢(O.O)?
步驟如下:
- P隨機選擇一種顏色的置換方式(如紅-藍,藍-黃,黃-紅),將原來的染色方案按照顏色置換重新染色。將染色過後的G放在密封的信封裏發給V。
- V隨機選擇圖中的一條邊,並要求P開啟這條邊的兩個頂點。
- P開啟相應的信封,展示頂點的顏色。
- 如果展示的頂點顏色不同,則V接受證明。
完備性:如果P確實有三染色方案,那麽證明必然成功。
可靠性:如果P沒有三染色方案,那麽他的染色方案中至少有一條邊是頂點同色的。假設圖G有n條邊,那麽證明失敗的概率至少是1/n。如果證明進行m次,那麽P人品爆表蒙混過關的概率就會小於(1-1/n)^m,當m足夠大,這個概率就趨近於0。
而由於每次的隨機顏色置換,V無法從揭示的邊中獲得任何染色方案的資訊。因此這個證明是零知識證明。
至於如何構造這樣的「信封」,使得V在P開啟信封前不能看到信封中的內容,而P也無法透過不同的"拆封"方式而操縱信封中的內容,這就是另外一種密碼協定「承諾協定」的範圍了。