為了方便大家閱讀,可預覽目錄
Part 1:為什麼需要零知識證明?
Part 2:零知識證明如何工作?
Part 3:非交互式零知識證明
Part 4:零知識證明有哪些用例?
零知識證明(Zero-knowledge proofs)是一種在不暴露聲明本身的情況下證明聲明有效性的方法。 “證明者”(prover)是試圖證明聲明的一方,而“驗證者”(verifier)負責驗證聲明。
零知識證明最早出現在1985 年的一篇論文“ The knowledge complexity of interactive proof systems ”中,它提供了當今廣泛使用的零知識證明的定義:
零知識協議是一種方法,通過這種方法,一方(證明者)可以向另一方(驗證者)證明某事是真實的,除了這個特定聲明是真實的事實之外,不會透露任何信息。
多年來,零知識證明得到了改進,現在它們被用於多個現實世界的應用程序。
為什麼我們需要零知識證明?
零知識證明代表了應用密碼學的突破,因為它們承諾提高個人信息的安全性。考慮如何向另一方(例如,服務提供商)證明您的聲明(例如,“我是X 國家/地區的公民”)。您需要提供“證據”來支持您的說法,例如國民護照或駕照。
但這種方法存在問題,主要是缺乏隱私。與第三方服務共享的個人身份信息(PII) 存儲在容易受到黑客攻擊的中央數據庫中。隨著身份盜竊成為一個關鍵問題,人們呼籲採用更多的隱私保護方式來共享敏感信息。
零知識證明通過消除需要披露信息來證明聲明有效性的方式來解決這個問題。零知識協議使用聲明(稱為“見證”)作為輸入來生成其有效性的簡潔證明。這個證明提供了一個強有力的保證,即一個聲明是真實的,而不會暴露創建它所使用的信息。
回到我們之前的例子,你需要證明你的公民身份的唯一證據是零知識證明。驗證者只需檢查證明的某些屬性是否成立,就可以確信基礎聲明也成立。
零知識證明如何工作?
零知識證明允許你證明聲明的真實性,而無需共享聲明的內容或透露你是如何發現真相的。為了使這成為可能,零知識協議依賴於將一些數據作為輸入並返回“真”或“假”作為輸出的算法。
零知識協議必須滿足以下條件:
- 完整性:如果輸入有效,零知識協議總是返回“真”。因此,如果基礎陳述是真實的,並且證明者和驗證者誠實行事,則證明可以被接受。
- 可靠性:如果輸入無效,理論上不可能欺騙零知識協議返回“真”。因此,說謊的證明者不能欺騙誠實的驗證者,使其相信一個無效的陳述是有效的(除非概率很小)。
- 零知識:驗證者除了聲明的有效性或虛假性之外,對聲明一無所知(他們對聲明“零知識”)。此要求還阻止驗證者從證明中導出原始輸入(聲明的內容)。
在基本形式中,零知識證明由三個要素組成:見證( witness )、挑戰( challenge )和響應( response )。
- 見證:通過零知識證明,證明者想要證明一些隱藏信息的知識。秘密信息是證明的“證人”,證明者對證人的假設知識建立了一組問題,這些問題只能由了解信息的一方回答。因此,證明者通過隨機選擇一個問題、計算答案並將其發送給驗證者來開始證明過程。
- 挑戰:驗證者從集合中隨機選擇另一個問題,並要求證明者回答。
- 響應:證明者接受問題,計算答案,返回給驗證者。證明者的回應允許驗證者檢查前者是否真的可以訪問見證者。為了確保證明者不會盲目猜測並偶然得到正確答案,驗證者會選擇更多的問題來提問。通過多次重複這種交互,證明者偽造證人知識的可能性顯著下降,直到驗證者滿意為止。
以上描述了“交互式零知識證明”的結構。早期的零知識協議使用交互式證明,其中驗證聲明的有效性需要證明者和驗證者之間的來回通信。
Jean-Jacques Quisquater 著名的阿里巴巴洞穴故事是說明交互式證明如何工作的一個很好的例子。在故事中,Peggy(證明者)想向Victor(驗證者)證明她知道打開魔法門的秘密短語而不洩露該短語。
非交互式零知識證明
雖然具有革命性,但交互式證明的用處有限,因為它需要兩方隨時可用並反復交互。即使驗證者確信證明者是誠實的,該證明也無法用於獨立驗證(計算新證明需要證明者和驗證者之間的一組新消息)。
為了解決這個問題,Manuel Blum、Paul Feldman 和Silvio Micali 提出了第一個非交互式零知識證明,其中證明者和驗證者擁有共享密鑰。這允許證明者在不提供信息本身的情況下證明他們對某些信息的了解。
與交互式證明不同,非交互式證明只需要參與者(證明者和驗證者)之間進行一輪通信。證明者將秘密信息傳遞給特殊算法以計算零知識證明。該證明被發送給驗證者,驗證者使用另一種算法檢查證明者是否知道秘密信息。
非交互式證明減少了證明者和驗證者之間的通信,使ZK 證明更加高效。此外,一旦生成了證明,其他任何人(可以訪問共享密鑰和驗證算法)都可以進行驗證。
非交互式證明代表了零知識技術的突破,並推動了當今使用的證明系統的發展。我們接下來討論這些證明類型:
零知識證明的類型
ZK-SNARKs
ZK-SNARK 是Zero-Knowledge Succinct Non-Interactive Argument of Knowledge的縮寫。 ZK-SNARK 協議具有以下特點:
- 零知識:驗證者可以在不知道聲明的任何其他信息的情況下驗證聲明的完整性。驗證者對聲明的唯一了解是它是真還是假。
- 簡潔:零知識證明比見證(witness)小,可以快速驗證。
- 非交互式:證明是“非交互式”的,因為證明者和驗證者只交互一次,不像交互式證明需要多輪通信。
- 爭論:證明滿足“可靠性”要求,因此作弊的可能性極小。
- 零知識: 如果不訪問秘密信息(witness),則無法構建零知識證明。對於沒有見證(witness)的證明者來說,即使不是不可能,也很難計算出有效的零知識證明。
更多關於ZK-SNARKs的知識可參考上一篇文章,本篇不再贅述。
ZK-STARKs
ZK-STARK 是Zero-Knowledge Scalable Transparent Argument of Knowledge的首字母縮寫。 ZK-STARKs 類似於ZK-SNARKs,除了它們是:
- 可擴展性:當見證(witness)規模較大時,ZK-STARK 在生成和驗證證明方面比ZK-SNARK 更快。使用STARK 證明,證明者和驗證者的時間只會隨著見證的增長而略有增加(SNARK 證明者和驗證者的時間隨著見證的規模線性增加)。
- 透明:ZK-STARK 依靠可公開驗證的隨機性來生成用於證明和驗證的公共參數,而不是可信設置。因此,與ZK-SNARK 相比,它們更加透明。
ZK-STARKs 產生比ZK-SNARKs 更大的證明,這意味著它們通常具有更高的驗證開銷。但是,在某些情況下(例如證明大型數據集),ZK-STARK 可能比ZK-SNARK 更具成本效益。
零知識證明的用例
匿名支付
信用卡支付通常對多方可見,包括支付提供商、銀行和其他相關方(例如,政府當局)。雖然金融監督有利於識別非法活動,但它也損害了普通公民的隱私。
加密貨幣旨在為用戶提供一種進行私人、點對點交易的方式。但大多數加密貨幣交易在公共區塊鏈上都是公開可見的。用戶身份通常是假名的,並且要么故意鏈接到真實世界的身份(例如,通過在Twitter 或GitHub 個人資料中包含ETH 地址),要么可以使用基本的鏈上和鏈外數據分析與真實世界的身份相關聯。
有專為完全匿名交易而設計的特定“隱私幣”。 ZCash 和Monero 等注重隱私的區塊鏈會屏蔽交易細節,包括發送方/接收方地址、資產類型、數量和交易時間表。
通過將零知識技術融入協議,以隱私為中心的區塊鍊網絡允許節點在無需訪問交易數據的情況下驗證交易。
零知識證明也被應用於公共區塊鏈上的匿名交易。一個例子是Tornado Cash,這是一種去中心化的非託管服務,允許用戶在以太坊上進行私人交易。 Tornado Cash 使用零知識證明來混淆交易細節並保證財務隱私。不幸的是,因為這些是“選擇加入”的隱私工具,所以它們與非法活動有關。為了克服這個問題,隱私最終必須成為公共區塊鏈的默認設置。
身份保護
目前的身份管理系統將個人信息置於危險之中。零知識證明可以幫助個人驗證身份,同時保護敏感細節。零知識證明在去中心化身份的背景下特別有用。去中心化身份(也稱為“自我主權身份”)使個人能夠控制對私人標識符的訪問。在不透露納稅ID或護照細節的情況下證明你的公民身份是零知識技術如何實現去中心化身份的一個很好的例子。
身份驗證
使用在線服務需要證明你的身份和訪問這些平台的權利。這通常需要提供個人信息,如姓名、電子郵件地址、出生日期等。您可能還需要記住較長的密碼,否則可能會失去訪問權限。
然而,零知識證明可以簡化平台和用戶的身份驗證。一旦使用公共輸入(例如,證明用戶平台成員身份的數據)和私有輸入(例如,用戶的詳細信息)生成了ZK-proof,用戶就可以在需要訪問服務時簡單地提供它來驗證自己的身份。這改善了用戶的體驗,並將組織從存儲大量用戶信息的需要中解放出來。
可驗證計算
可驗證計算是零知識技術改進區塊鏈設計的另一個應用。可驗證計算允許我們將計算外包給另一個實體,同時保持可驗證的結果。實體提交結果,並附上驗證程序正確執行的證明。可驗證計算對於提高區塊鏈上的處理速度而不降低安全性至關重要。理解這一點需要了解擴展以太坊的擴展解決方案的差異。
鏈上擴容解決方案,如分片,需要對區塊鏈的基礎層進行大量修改。然而,這種方法非常複雜,實施中的錯誤可能會破壞以太坊的安全模型。
鏈下擴容解決方案不需要重新設計核心以太坊協議。相反,他們依靠外包計算模型來提高以太坊基礎層的吞吐量。
下面是它在實踐中的工作原理:
●以太坊不處理每筆交易,而是將執行卸載到單獨的鏈上。
●處理交易後,另一條鏈返回應用於以太坊狀態的結果。
這裡的好處是以太坊不需要執行任何操作,只需要將外包計算的結果應用到其狀態。這減少了網絡擁塞,也提高了交易速度(鏈下協議優化為更快的執行)。
這就是可驗證計算發揮作用的地方。當一個節點在以太坊外部執行交易時,它會提交一個零知識證明來證明鏈下執行的正確性。這種證明(稱為有效性證明)保證交易是有效的,允許以太坊將結果應用於其狀態,而無需等待任何人對其提出爭議。
零知識匯總和有效性(validiums)是兩種鏈下擴容解決方案,它們使用有效性證明來提供安全的可擴展性。這些協議在鏈下執行數千筆交易,並在以太坊上提交驗證證明。一旦證明被驗證,這些結果可以立即應用,允許以太坊在不增加基礎層計算的情況下處理更多的交易。
更多區塊鏈知識與乾貨,關注https://tokenview.io 。
參考文章
https://ethereum.org/en/zero-knowledge-proofs/#zk-snarks

