什麼是零知識證明?
零知識證明能證明某陳述有效、卻又無需揭示陳述本身。 「證明者」是試圖證明主張的一方,「驗證者」則負責驗證該主張。
零知識證明首次出現於 1985 年的一篇論文《The knowledge complexity of interactive proof systems (opens in a new tab)》,該論文中提出的零知識證明定義至今仍廣為使用:
零知識協定是一種方法,讓一方(證明者)能夠向另一方(驗證者)證明某件事為真,而不透露任何資訊,除了這個特定陳述為真此一事實之外。
經過多年,零知識證明已經有所進展,目前用於幾項真實的應用中。
為什麼我們需要零知識證明?
零知識證明代表應用密碼學的一大突破,因為有望提高個人的資訊安全性。 想想你如何向另一方(例如服務提供商)證明某個主張(例如「我是某某國的公民」)。 你需要提供「證據」支持你的陳述,例如國家護照或駕照。
但這種方法存在問題,主要是缺乏隱私。 個人身分識別資訊 (PII) 在與第三方服務分享後,會儲存在中央資料庫,而這些資料庫易受駭客攻擊。 身分盜竊成為十分嚴重的問題,人們呼籲以更能保護隱私的方式分享敏感資訊。
零知識證明解決了這個問題,方法是無需揭露資訊就能證明主張的有效性。 零知識協議利用陳述(稱為「證據」)作為輸入內容,產生關於其有效性的簡潔證明。 這種證明既能有效保證陳述為真,又不會公開建立陳述時所使用的資訊。
回到之前的例子,只要有零知識證明,就能證明你所主張的公民身分。 驗證者只需查驗證明當中的某些屬性是否為真,就能夠確信基本陳述也為真。
零知識證明的應用案例
匿名支付
往往許多方都能看見信用卡付款,包括支付提供者、銀行和其他利益相關方,例如政府機構。 雖然金融監管對於識別非法活動有其好處,但也會損害一般公民的隱私。
加密貨幣原本旨在為使用者提供一種私密、點對點的交易方式。 但大部分加密貨幣交易,在公開區塊鏈上皆可見。 使用者身分通常是假名的,且可被刻意連結至真實世界的身分 (例如,在 Twitter 或 GitHub 個人資料中包含 ETH 地址),或是可以透過基本的鏈上和鏈下資料分析與真實世界的身分產生關聯。
現今有專門為完全匿名交易設計的「隱私幣」。 注重隱私的區塊鏈,例如 Zcash 和 Monero,可以保護交易細節,包括傳送者/接收者的地址、資產類型、數量和交易時間軸。
透過將零知識技術融入協定中,注重隱私的網路讓得以驗證交易,而無需存取交易資料。 EIP-7503 (opens in a new tab) 是一個提案設計的範例,它將能在以太坊區塊鏈上實現原生的價值私密轉移。 然而,由於安全、監管和用戶體驗等考量,這些提議難以實現。
零知識證明也正被應用於公開區塊鏈上的交易匿名化。 例如 Tornado Cash,它是一個去中心化的非託管服務,允許使用者在以太坊上進行私人交易。 Tornado Cash(混幣隱私協定)使用零知識證明來混淆交易細節並保證財務隱私。 遺憾的是,這些是「自願選擇加入」的隱私工具,因此本身和非法活動有關。 為了克服這個問題,隱私終究必須成為公開區塊鏈上的預設選項。 深入了解以太坊上的隱私。
身份保護
目前的身份管理系統,使得個人資訊面臨風險。 零知識證明既能幫助個人進行身份驗證,又能保護敏感的細節。
零知識證明在去中心化身份的情境下特別有用。 去中心化身份又稱為「身份自主權」,使個人能控制自身身份識別碼的存取權。 既能證明國籍,又不需揭露納稅識別號碼或護照詳情,是零知識技術實現去中心化身份的一個好例子。
ZKP + 身分實際應用:不丹國家數位身分 (NDI) on Ethereum
一個將 ZKP 用於身份管理系統的真實世界範例,是不丹王國建立在以太坊上的國家數位身份 (NDI) 系統。 不丹的 NDI 使用 ZKP 讓公民能以密碼學方式證明關於自己的事實,例如「我是公民」或「我已年滿 18 歲」,而無需透露其身份證件上的敏感個人資料。
在去中心化身份案例研究中深入了解不丹國家數位身分證。
人性證明
當今零知識證明最廣泛的實際應用範例之一是 World ID protocol (opens in a new tab),它可以被視為「人工智慧時代的全球數位護照」。 它允許人們證明自己是獨特的個體,而無需揭露個人資訊。 這是透過一種被稱爲 Orb 的設備實現的,它可以掃描人的虹膜並生成虹膜程式碼。 透過檢查和驗證虹膜程式碼來確認此人在生物學上是獨特的人類個體。 在驗證後,使用者裝置上會產生身份承諾(且不會連結到或源自生物特徵資料)並被添加到區塊鏈上的安全列表中。 之後,當使用者想要證明他們是通過驗證的人類——不管是登入帳戶、投票,或採取其他行動——他們可以產生零知識證明來確認他們為安全列表中的一員。 零知識證明的優勢在於其只揭露一個聲明:被驗證人的唯一性。 所有其他資訊都保持私密。
World ID 仰賴由以太坊基金會的 PSE 團隊 (opens in a new tab)所開發的 Semaphore protocol (opens in a new tab)。 Semaphore 旨在成爲一種輕量但强大的用於生成和驗證零知識證明的方式。 它讓使用者可以證明他們為團體的一員(這此例中為經過驗證的人類),而不需要透露自己在團體中的具體身份。 Semaphore 還具有高度的靈活性,允許基於各種標準創建群組,例如身份驗證、參與活動或擁有特定憑證。
驗證
要使用線上服務,必須證明身份以及對此類平台的存取權利。 這通常需要提供個人資訊,例如姓名、電子郵件地址、生日等。 你可能還得記住很長的密碼,或面對遺失存取權限的風險。
但零知識證明化繁為簡,平台和使用者都能更輕鬆驗證。 一旦利用公開的輸入(例如那些證明使用者是平台成員的資料)和私密輸入(例如使用者詳細資訊),來產生零知識證明,使用者需要存取服務時就能輕鬆提供,以驗證身份。 這能改善使用體驗,組織也無需儲存大量使用者資訊。
可驗證的計算
可驗證計算是零知識證明用於改進區塊鏈設計的又一應用。 可驗證計算使我們既能將計算外包給另一實體,又能維持可驗證的結果。 該實體會同時提交結果和確認程式已正確執行的證明。
可驗證的計算對於在不降低安全性的前提下,提升區塊鏈上的處理速度至關重要。 想要搞懂這點,你需要知道提議的以太坊擴容解決方案,各有哪些差別。
鏈上擴展解決方案 (例如分片),需要對區塊鏈的基礎層進行大幅修改。 但是,這種方法非常複雜,實作出錯時可能會損害以太坊的安全模型。
鏈下擴展解決方案不需要重新設計核心以太坊協定。 相反,其仰賴外包的計算模型來改善以太坊基礎層的吞吐量。
以下是實際運作方式:
-
以太坊不需要處理每一筆交易,而是將執行卸載至另一條單獨的鏈。
-
處理完交易後,該鏈會將結果傳回,以應用至以太坊的狀態上。
這樣做的好處是,以太坊不必進行任何執行操作,只要將外包之計算的結果應用於其狀態。 這既減少了網路壅塞,也提高交易速度(鏈下協定進行最佳化,加快執行速度)。
鏈上需要以一種方式來驗證鏈下交易、且不需重新執行這些交易,否則鏈下執行就無意義了。
這就是可驗證計算的用武之地。 當一個節點在以太坊鏈下執行交易時,需要提交一個零知識證明來證實鏈下執行的正確性。 此證明 (稱為) 可保證交易有效,讓以太坊能將結果應用到其狀態 — 無需等待任何人提出爭議。
零知識 Rollup 和 validiums 是兩種鏈下擴展解決方案,它們使用有效性證明來提供安全的可擴展性。 這些協定執行上千次鏈下交易,並提交證明以在以太坊上進行驗證。 一旦證明經過驗證,那些結果就能立刻應用,讓以太坊在不增加基礎層計算負擔的情況下處理更多交易。
減少鏈上投票中的賄賂和串通
區塊鏈投票體制具有許多有利特點:完全可稽核、抗攻擊、抗審查,以及不受地理限制。 但即使是鏈上投票機制,也無法免於串通的問題。
根據定義,串謀是指「相互勾連以欺騙、欺詐和誤導他人,以限制公開競爭」,形式可能是惡意行為者透過行賄來影響投票。 例如,Alice 可能會收受 Bob 的賄賂,在投票中投給 B 選項,即使她偏好 A 選項。
當任何流程使用投票作為訊號傳遞機制時,賄賂和串謀行為會限制此流程的有效性,特別是當使用者能證明自己如何投票時。 這可能會產生重大後果,尤其是當投票負責分配稀有的資源時。
例如,二次方募資機制 (opens in a new tab)仰賴捐款來衡量不同公益專案中特定選項的偏好度。 每筆捐贈都算是對特定專案做出的「投票」,獲得較多票的專案,會從匹配的池中獲得更多資金。
鏈上投票會導致平方募資更容易被串謀所影響:區塊鏈交易是公開的,所以行賄者可以檢查受賄者的鏈上活動,了解他們是如何「投票」的。 這使得平方募資法已不再能根據社群集體的偏好,有效進行資金分配。
幸運的是,像 MACI (Minimum Anti-Collusion Infrastructure,最小反串通基礎設施) 這樣的新解決方案正在使用零知識證明,使鏈上投票 (例如,二次方募資機制) 能夠抵抗賄賂和串通。 MACI 是一組智能合約和腳本,它允許一個中央管理員 (稱為「協調者」) 匯總投票並計算結果,_同時_不會揭露每個人的具體投票方式。 即使如此,仍然能驗證投票是否正確,或確認某參與者是否參與該輪投票。
最小反串謀基礎設施如何與零知識證明搭配運作?
開始時,協調員會在以太坊上部署最小反串謀基礎設施智慧型合約,之後使用者能註冊他們在智慧型合約裡的公鑰,以進行投票註冊。 使用者將使用公開金鑰加密後的訊息,傳送到智慧型合約,便完成投票(必須以使用者身份相關之最新公開金鑰進行簽署,投票才有效,還有其他的標準)。 之後,協調員在投票截止後處理所有訊息、統計得票數,並在區塊鏈上驗證結果。
在最小反串謀基礎設施中,零知識證明用於確保計算的正確性,它使協調員不可能在處理投票和計票時出錯。 這是透過要求協調者產生 ZK-SNARK 證明來達成的,以驗證 a) 所有訊息都已正確處理 b) 最終結果對應於所有_有效_選票的總和。
因此,就算未分享每位使用者的投票明細(通常都是如此),最小反串謀基礎設施也能為計票過程中計算的結果確保完整性。 這個特點有助於降低基本串謀手法的有效性。 我們可利用 Bob 賄賂 Alice 以影響投票選擇的例子,來探索這個可能性:
- Alice 將公開金鑰傳送到智慧型合約,以進行投票註冊。
- Alice 同意投票給
B 選項以換取 Bob 的賄賂。 - Alice 投票給
B 選項。 - Alice 偷偷發送一則加密交易,更改與她的身份有關的公開金鑰。
- Alice 使用新的公鑰向智能合約發送另一則(加密的)訊息,投票給
A 選項。 - Alice 向 Bob 展示一筆交易,顯示她投票給了
B 選項(此為無效票,因為該公鑰在系統中已不再與 Alice 的身份相關聯) - 在處理訊息時,協調者會跳過 Alice 投給
B 選項的票,只計算投給A 選項的票。 因此,Bob 雖嘗試賄賂 Alice 來操縱鏈上投票,但計謀失敗。
使用 MACI _確實_需要信任協調者不會與行賄者串通,或自己試圖賄賂投票者。 協調員可以解密使用者的訊息(產生證明時必須如此),以便準確驗證每個人的投票方式。
但在協調員保持誠實的情況下,最小反串謀基礎設施是確保鏈上投票之神聖性的強大工具。 這解釋了它為何在二次方募資應用程式 (例如 clr.fund (opens in a new tab)) 中如此受歡迎,這些應用程式高度依賴每個人投票選擇的誠信。
深入了解 MACI (opens in a new tab)。
零知識證明如何運作?
零知識證明能讓你證明陳述的真實性,而無需分享陳述的內容,或透露你是如何發現真相的。 為了實現這一點,零知識協定仰賴於演算法,該演算法將某些資料作為輸入,並將「真」或「假」作為輸出。
零知識協定必須滿足以下條件:
-
完整性:如果輸入有效,零知識協定永遠會回傳「true」。 因此,如果基本陳述是真實的,且證明者和驗證者的行為皆誠實,則可接受該證明。
-
健全性:如果輸入無效,理論上不可能欺騙零知識協定回傳「true」。 因此,說謊的證明者無法欺騙誠實的驗證者相信某個無效的陳述為有效(除非有非常小的可能性裕度)。
-
零知識:驗證者除了陳述的有效性或虛假性之外,不會得知關於陳述的任何資訊 (他們對陳述擁有「零知識」)。 這項要求亦防止驗證者從證明中推斷出原始輸入(即陳述的內容)。
基本形式的零知識證明由三個元素組成:見證、挑戰和回應。
-
見證:透過零知識證明,證明者希望證明自己知道某些隱藏資訊。 這些秘密資訊就是該證據的「見證」,證明者會基於對見證的了解,設立一組只有知道該資訊的一方才能回答的問題。 因此,證明者會隨機選擇一個問題、計算出答案,並將其傳送給驗證者,以展開證明程序。
-
挑戰:驗證者從集合中隨機挑選另一個問題,並要求證明者回答。
-
回應:證明者接受問題,計算答案,並將其回傳給驗證者。 證明者的回應,能讓驗證者查驗證明者是否真的知悉見證。 為了確保證明者不是盲目猜測並碰巧得到正確答案,驗證者會選擇更多問題進行提問。 如此多次互動之後,證明者偽裝知悉見證的可能性會顯著降低,直到驗證者滿意為止。
以上描述了「互動式零知識證明」的結構。 早期的零知識協定採用互動式證明,證明者和驗證者必須來回溝通許多次,才能驗證陳述的有效性。
一個說明互動式證明如何運作的好例子,是 Jean-Jacques Quisquater 著名的阿里巴巴洞穴故事 (opens in a new tab)。 在這個故事中,Peggy(證明者)想要向 Victor(驗證者)證明她知道開啟一扇魔法門的密語,但不透露該密語。
非互動式零知識證明
互動式證明雖具有革命性,但實用性有限,因為雙方必須同時存在並反覆互動。 即使驗證者相信證明者的誠實,該證明也不能用於獨立驗證(要計算出新的證明,證明者和驗證者之間必須有新的訊息集)。
為了解決這個問題,Manuel Blum、Paul Feldman 和 Silvio Micali 提出了第一個非互動式零知識證明 (opens in a new tab),其中證明者和驗證者擁有一個共享金鑰。 這樣一來,證明者能證明他們知悉某些資訊(即見證),且不必提供該資訊本身。
非互動式證明和互動式證明不同,參與者(證明者和驗證者)之間只需要溝通一輪。 證明者將秘密資訊輸入到特殊的演算法中,以計算出零知識證明。 此證明會傳送給驗證者,驗證者使用另一個演算法來檢驗證明者是否知道秘密資訊。
非互動式證明減少了證明者和驗證者之間的通訊,使零知識證明變得更有效率。 而且一旦產生證明,任何其他能存取共享金鑰和驗證演算法的人,都能予以驗證。
非互動式證明是零知識技術的一項突破,並使現今使用的證明系統急速發展。 下面將討論這些證明類型:
零知識證明的類型
ZK-SNARKs
ZK-SNARK 是 Zero-Knowledge Succinct Non-Interactive Argument of Knowledge (零知識簡潔非互動知識論證) 的縮寫。 ZK-SNARK 協定有以下特性:
-
零知識:驗證者可以驗證陳述的完整性,而無需知道關於陳述的任何其他資訊。 對於該陳述,驗證者只知道其是真是假。
-
簡潔:零知識證明比見證小,並且可以快速驗證。
-
非互動式:證明是「非互動式」的,因為證明者和驗證者只互動一次,不像互動式證明需要多輪通訊。
-
論證:證明滿足「健全性」要求,所以作弊的可能性極低。
-
知識 (Of Knowledge):若無法存取秘密資訊 (見證),就無法建構零知識證明。 若沒有見證,證明者就算有可能計算出有效的零知識證明,難度也是很高。
前面提到的「共享金鑰」,是指證明者和驗證者同意在產生和驗證證明時使用的公共參數。 產生公共參數(統稱公共參考串 (CRS))是一個敏感的操作,因為此操作在協定的安全性方面很重要。 用於產生公共參考串的熵(隨機性),如果落入不誠實的證明者手中,他們能計算出虛假證明。
多方計算 (MPC) (opens in a new tab) 是降低生成公共參數風險的一種方法。 多方參與一場可信設定儀式 (opens in a new tab),其中每個人貢獻一些隨機值來生成 CRS。 只要一個誠實的參與方銷毀他們那部分的熵,零知識簡潔非交互式知識論證協定就能保有運算的健全性。
受信任設定要求使用者必須在產生參數上信任參與者。 然而,零知識可擴容透明知識論證的發展使得證明協定能和非信任設定搭配運作。
ZK-STARKs
ZK-STARK 是 Zero-Knowledge Scalable Transparent Argument of Knowledge (零知識可擴展透明知識論證) 的縮寫。 零知識可擴容透明知識論證與零知識簡潔非交互式知識論證相似,但差別是前者:
-
可擴展:當見證的規模較大時,ZK-STARK 在生成和驗證證明方面比 ZK-SNARK 更快。 隨著見證大小增加,零知識可擴容透明知識論證證明的證明者和驗證時間只會略微增加(零知識簡潔非交互式知識論證的證明者和驗證時間,則隨見證的大小增加線性增長)。
-
透明:ZK-STARK 依賴可公開驗證的隨機性來生成用於證明和驗證的公共參數,而非使用可信設定。 因此,比零知識簡潔非交互式知識論證更加透明。
零知識可擴容透明知識論證產生的證明比零知識簡潔非交互式知識論證更大,這意味著通常具有較高的驗證開銷。 但有些情況下(例如證明大型資料集),零知識可擴容透明知識論證可能比零知識簡潔非交互式知識論證更具成本效益。
使用零知識證明的缺點
硬體成本
要產生零知識證明,涉及非常複雜的計算,這些計算最好是在專業的機器上運行。 這些機器非常昂貴,普通人通常沒有機會擁有。 此外,想要使用零知識證明的應用程式,必須將硬體成本考慮進去,而這可能會增加終端使用者的費用。
證明驗證成本
要對證明進行驗證,也需要經過複雜的計算,還會增加將零知識技術實作於應用程式的成本。 這種成本在證明計算時更加明顯。 例如,零知識卷軸在以太坊上需要支付約 500,000 單位燃料,才能驗證一個零知識簡潔非交互式知識論證,驗證零知識可擴容透明知識論證則需要更高的費用。
信任假設
在零知識簡潔非交互式知識論證裡,公共參考串(公共參數)會產生一次,然後可供想要參加零知識協定的各方重複使用。 在假設參與者皆誠實的前提下,公共參數是經由受信任設定儀式建立而成。
但使用者確實沒有任何方法能評估參與者的誠實度,所以不得不相信開發者的話。 零知識可擴容透明知識論證沒有任何信任假設,因為產生字串所採用的隨機性,是能公開驗證的。 同時,研究人員正在研究零知識簡潔非交互式知識論證的非信任設定,以增加證明機制的安全性。
量子計算威脅
零知識簡潔非交互式知識論證利用橢圓曲線密碼學來進行加密。 雖然橢圓曲線離散對數問題目前被認為是難以破解的,但在未來,量子電腦的發展可能會打破這種安全模型。
零知識可擴容透明知識論證僅依賴抗碰撞雜湊函式提供安全性,因此被視為能防禦量子計算的威脅。 比起橢圓曲線密碼學中使用的公私金鑰配對,抗碰撞雜湊更難被量子計算演算法破解。
延伸閱讀
- 零知識證明的應用案例概覽 (opens in a new tab) — Privacy and Scaling Explorations Team
- SNARKs vs. STARKS vs. Recursive SNARKs (opens in a new tab) — Alchemy Overviews
- 零知識證明:改善區塊鏈上的隱私 (opens in a new tab) — Dmitry Lavrenov
- zk-SNARKs — 實際的零知識範例與深入探討 (opens in a new tab) — Adam Luciano
- ZK-STARKs — 建立可驗證的信任,即使面對量子電腦 (opens in a new tab) — Adam Luciano
- zk-SNARKs 如何實現的粗略介紹 (opens in a new tab) — Vitalik Buterin
- 為何零知識證明 (ZKP) 是自主身份的遊戲規則改變者 (opens in a new tab) — Franklin Ohaegbulam
- EIP-7503 解釋:使用 ZK 證明在以太坊上實現私密轉移 (opens in a new tab) — Emmanuel Awosika
- ZK 卡牌遊戲:學習 ZK 基礎知識和實際應用案例的遊戲 (opens in a new tab) - ZK-Cards
頁面最後更新時間: 2026年2月23日