什麼是零知識證明

零知識證明(Zero—Knowledge Proof),是由S.Goldwasser、S.Micali及C.Rackoff在20世紀80年代初提出的。

零知識證明的定義為:證明者(prover)能夠在不向驗證者(verifier)提供任何有用的信息的情況下,使驗證者(verifier)相信某個論斷是正確的。

為了理解上面這段話的含義,接下來給出一個有關零知識證明的非常經典的例子:

阿里巴巴被強盜抓住,為了保命,他需要向強盜證明自己擁有打開石門的口令,同時又不能把密碼告訴強盜。他想出一個解決辦法,先讓強盜離開自己一箭之地, 距離足夠遠讓強盜無法聽到口令,足夠近讓阿里巴巴無法在強盜的弓箭下逃生。如果強盜舉起左手,阿里巴巴就使用口令將石門打開,如果舉起右手,就將石門關閉。阿里巴巴就在這個距離下向強盜展示了石門的打開和關閉。如果每次都能正確打開和關閉大門,則證實阿里巴巴確實知道石門的密碼。

這個整個過程就是零知識證明,即證明者能夠在不向驗證者提供任何有用信息(石門的口令)的情況下,使驗證者相信某個論斷(阿里巴巴知道打開石門的方法)是正確的。

由此我們可以總結出零知識證明的三個屬性:

如果語句為真,誠實的驗證者(即:正確遵循協議的驗證者)將由誠實的證明者確信這一事實。

如果語句為假,不排除有概率欺騙者可以說服誠實的驗證者它是真的。

如果語句為真,證明者的目的就是向驗證者證明並使驗證者相信自己知道或擁有某一消息,而在證明過程中不可向驗證者洩漏任何有關被證明消息的內容。

零知識證明是一種基於概率的驗證方式,驗證者(verifier)基於一定的隨機性向證明者(prover)提出問題,如果證明者都能給出正確回答,則說明證明者大概率擁有他所聲稱的“知識”。 零知識證明並不是數學意義上的證明,因為它存在小概率的誤差,欺騙的證明者有可能通過虛假的陳訴騙過驗證者。換句話說,零知識證明是概率證明而不是確定性證明,但是也存在技術能將誤差降低到可以忽略的值。

根據零知識證明的定義可以得知零知識證明具有以下三個重要的性質:

完備性(Completeness):只要證明者擁有相應的知識,那麼就能通過驗證者的驗證,即證明者有足夠大的概率使驗證者確信。

可靠性(Soundness):如果證明者沒有相應的知識,則無法通過驗證者的驗證,即證明者欺騙驗證者的概率可以忽略。

零知識性(Zero-Knowledge):證明者在交互過程中僅向驗證者透露是否擁有相應知識的陳述,不會洩露任何關於知識的額外信息。

零知識證明應用場景

從零知識證明定義中可以提取到兩個關鍵詞:“不洩露信息”,“證明論斷有效”,基於這兩個特點擴展出零知識證明在區塊鏈上的兩大應用場景:

隱私:在隱私場景中,我們可以藉助零知識證明的“不洩露信息”特性,在不洩漏交易的細節(接收方,發送方,交易餘額)的情況下證明區塊鏈上的資產轉移是有效的。

擴容:在擴容場景中,我們不太需要關注零知識證明技術的“不洩露信息”這個特性,我們的關注重點是它的“證明論斷有效”這個特性,由於鏈上資源是有限的,所以我們需要把大量的計算遷移到鏈下進行,因此需要有一種技術能夠證明這些在鏈下發生的動作是可信的, 零知識證明正好可以幫助我們做鏈下可信計算的背書。