在密碼學中,零知識證明(zero-knowledge proof)是一種證明方法,指一方(證明者)向另一方(驗證者)證明一個陳述是真實的,並且除了該陳述是真實的之外,不透露任何資訊。
日常生活中的證明並不是零知識的。例如,當購買者必須證明自己超過 21 歲才能購買酒精時,他們會出示帶有出生日期的身份證明。但這種證明方法有缺陷,因為在證明滿足年齡要求的同時,這種方法同時會揭露其他不相關但敏感的信息,例如姓名和地址。
比較而言,零知識證明更優越,因為它不需要證明者透露關於陳述本身或他/她是如何發現真相的細節。假設 Alice 是色盲,分不清藍球和紅球。 Alice 認為兩個球是一樣的,但 Bob 想用零知識的方式向Alice 證明這兩個球是不同的。 Bob 可以依賴下列機制。
Bob 讓 Alice 雙手各拿一個球並將雙手放在背後,左手是藍色,右手是紅色。 Alice 可以決定是否將左右手上的球交換。之後,Alice 再次向 Bob 展示兩個球,Bob 則告訴 Alice 她有沒有將球互換。
Alice:我把球換了嗎? (左手由藍色變成紅色)
Bob:是的。
Alice:我把球換了嗎? (左手還是紅)
Bob:不,上次沒有。
Alice 和 Bob 不斷重複這個過程,直到 Alice 確信這兩個球確實是不同的,否則 Bob 將無法始終準確地判斷 Alice 在背後做了什麼。請注意,在這個過程中,Bob 不需要告訴 Alice 哪個球是藍色的,也不需要闡述他是如何知道的。
上面的零知識證明範例是互動的。雖然它很容易理解,但作為一個實際的解決方案來講不太現實,因為它需要雙方在建立證明之前多次相互溝通。
研究人員發明了非互動式的零知識證明來解決這些問題。非互動式證明只需要證明者和驗證者進行一輪通訊。證明者將資訊輸入到一個特殊的演算法來計算零知識證明。然後驗證者可以檢查證明以確保秘密資訊的有效性。非互動式證明的另一個好處是,一旦證明生成,任何人都可以驗證它。
在區塊鏈領域,零知識證明主要應用在 rollup 場景。它使得底層區塊鏈能夠將計算外包,同時保證計算結果的可驗證性。鏈下的計算機執行交易,然後提交結果以及正確執行交易的證明。這減少了鏈上網路擁塞並提高了交易速度。
零知識證明允許底層區塊鏈在不重新執行的情況下驗證鏈下交易。雖然零知識證明在技術上是優越的,但圍繞該主題的研究仍處於早期階段。在零知識證明技術實際採用之前,至少還需要幾年的時間。
你可能會對以下內容也感興趣:
- 什麼是拜占庭將軍問題