原文:Zero-knowledge proofs explained in 3 examples
作者:Tian Daphne
翻譯 & 整理:開放隱私計算 & PrimiHub
零知識證明(Zero-knowledge proof)是一種在不洩露陳述內容的情況下證明陳述有效性的方法。它是一個證明系統使使用者能夠公開分享知識或所有權的證明,而不揭示其細節。
在密碼學中,零知識證明允許使用者在不透露祕密內容的情況下,說服其他使用者知道某事或已經做過某事,它是迄今為止最強大的密碼學工具之一。
下面,我們將深入探討了零知識證明的概念,並通過幾個通俗易懂的範例幫助讀者理解它們的工作原理。
密碼學中的零知識首次出現在 1985 年 The knowledge complexity of interactive proof systems [GMR85] 論文中,由先驅者 Shafi Goldwasser、Silvio Micali 和 Charles Rackoff 提出。他們提供了今天廣泛使用的零知識證明定義:
「零知識協定是一種方法,通過該方法,一方(證明者)可以向另一方(驗證者)證明某個陳述為真,而不揭示任何資訊,除了這個特定陳述為真。」
零知識證明必須滿足三個性質:
互動式零知識證明要求證明者和驗證者進行來回對話,以完成證明。非互動式零知識證明是指證明者向驗證者傳送單個訊息,驗證者能夠在不需要證明者進一步通訊的情況下檢查證明的有效性。下圖是零知識證明的發展史:
zk-SNARK(Succinct Non-Interactive Arguments of Knowledge) 可能是最流行的零知識證明形式,最早出現在 2011 年的 Bit+11 論文中。到 2013 年,多虧了 Pinocchio PHGR13 論文,零知識證明可以在現實應用中使用,該論文使 zk-SNARKS 適用於一般計算,儘管速度較慢。2016 年提出的 Groth16 演演算法大大降低了計算複雜性,使 zk-SNARKS 非常高效,至今仍然是標準。
然而,可信設定對於這些零知識協定的安全性至關重要。必須使用初始過程生成加密引數,以便能夠執行零知識協定。由第三方執行此操作,以確保加密引數是隨機、不可預測和安全的。
隨後在 2017 年引入了 Bulletproofs(BBBPWM17),在 2018 年引入了 zk-STARKs(BBHR18)。與前任不同,它們是不需要初始可信設定的範圍證明型別。2019 年的 PlonK 論文實現了通用零知識證明演演算法,這意味著只需要啟動一次可信設定,而與之相比,Groth16 需要每個電路都有一個單獨的可信設定。
由於領域的發展,零知識證明已經從純理論過渡到應用,在區塊鏈、安全通訊、電子投票、存取控制和遊戲中均有實際應用。隨著這些技術繼續投入商業應用,相信未來將會有更多令人興奮的發展來推進這項技術。
以下是一些概念性範例,幫助你在不涉及複雜理論和高階數學的情況下,直觀地理解不同級別的零知識證明(ZKP)。
在不洩露祕密資訊的情況下證明自己知道某事,可以通過常用的「瓦利在哪裡?」範例來說明。
問題:你和朋友想要找到瓦利。
條件:你知道瓦利在影象中的位置,但你的朋友不相信。你如何向朋友證明你知道瓦利在哪裡,同時又不洩露他具體的位置?
解決辦法:你可以拿出一張大紙,蓋住整個影象,通過一個切口向朋友展示瓦利的影象。這樣做就可以可以證明你真的知道瓦利的位置,但你的朋友不會獲得瓦利的位置,因為相對於影象的確切座標對他來說仍然是未知的。
這是一個非互動式零知識證明的簡單類比。透過孔隙看到瓦利的任何人都能夠證明瓦利的存在,以及證明者知道他在哪裡,同時又不洩露任何其他資訊。
問題:當你遇到一個不認識的人,但她聲稱自己也是你所在團隊的成員。你如何知道她說的是真的?
解決辦法:幸運的是,你的團隊有一個帶鎖的保險箱,只有你的團隊成員知道密碼,可以開啟保險箱。因此,寫一條祕密資訊並放入鎖定的保險箱中。具體步驟如下:
如果這個陌生人是如她所說是團隊成員,那她就會知道密碼。因此,她將能夠開啟鎖定的保險箱,找到你的祕密資訊,從而向你證明她確實是你團隊的成員。
這是互動式零知識證明的類比。只有真正是該團隊的成員才會知道祕密組合程式碼(密碼),能夠存取鎖定的保險箱,從而在不洩露任何其他資訊的情況下證明他的成員資格。
在這個範例中,你和競爭對手正在從同一供應商購買相同的材料,你想知道每千克是否支付相同的價格。但是,你們之間缺乏足夠的信任來透露各自的價格,你還受到不得分享此資訊的合同約束。
假設材料的市場價格只能為 100、200、300 或 400 每千克,這種情況下我們可以通過零知識證明來解決上述問題。按照以下步驟操作:
如果你得到一張上面有支票的紙,你倆都會知道你支付相同的金額。由於你得到的紙上有叉號,你倆都知道你沒有支付相同的金額,但也不知道對方支付了多少。
你倆離開時只知道你沒有支付相同的金額,但你倆都沒有獲得對方支付了多少的知識。
這是使用原始半範圍證明的互動式零知識證明的另一個類比。重要的是要注意,所有這些範例都有限制,並且必須採用某些假設,但它們足夠形象地說明了它們的工作方式。
這篇文章通過 3 個範例層層遞進、簡單易懂的解釋了零知識證明的概念和原理。
通過了解零知識證明的工作原理,會發現零知識證明並不是魔法。目前它在區塊鏈以及需要敏感資訊的各種應用中具有巨大的潛力,例如提供密碼證明、身份證明和成員證明。比如:國外某些銀行中就有用到零知識證明技術,讓他們的客戶能夠在抵押貸款申請中,證明銀行賬戶中的金額而不洩露具體金額等資訊。
PrimiHub 一款由密碼學專家團隊打造的開源隱私計算平臺,專注於分享資料安全、密碼學、聯邦學習、同態加密等隱私計算領域的技術和內容。