ZK 證明和 zkEVM 的工作原理(無需數學)
零知識 (ZK) 證明正在為 web3 的最新創新提供動力。它們已經被用于Polygon 的 zkEVM[1]等產品中,為以太坊帶來可驗證的可擴展性,而Polygon ID[2]則用于在不泄露任何個人信息的情況下驗證您的身份。
一句話:ZK 證明可以讓你在不泄露事物本身的情況下證明某件事。這有幾個實際應用,例如在不提供完整許可證/護照信息的情況下驗證您的年齡。
但這實際上是如何運作的呢?幕后發生了什么讓這一切成為可能?在這篇文章中,我將介紹您需要了解的有關 ZK 證明的所有內容,但忽略數學。
我們開始做吧!
ZK 證明如何工作?
為了在不泄露聲明本身的情況下證明聲明的有效性,涉及兩方:
1. 證明者:試圖證明某事的人。
2. 驗證者:試圖驗證聲明是否“真實”的人。
圖片
有時,涉及第三方(即頒發者),該第三方向證明者授予證書(例如許可證),驗證者將其作為信息來源信任。
圖片
讓我們看一個例子...我想向一個網站證明我已年滿 18 歲,但不上傳我的護照照片。在這種情況下,有:
? 證明者:我,試圖證明我達到法定年齡的人。
? 驗證者:網站所有者,試圖驗證我是否達到法定年齡。
? 發行人:向我提供護照的政府;網站所有者信任的證明我年齡的文件。
通常,我需要將整個護照的屏幕截圖上傳到網站(我真的不想這樣做),只是為了證明我已年滿 18 歲。
斯蒂芬[3]制作的一個有趣的例子是將其應用于海綿寶寶。海綿寶寶想要證明他的名字確實是海綿寶寶,但為了做到這一點,他需要向驗證者(警察……或者我猜,警魚)提供他的完整許可證。
他的駕照包含敏感信息,如出生日期、地址、性別等;所有這些都不是證明他的名字所必需的;但可惜的是,他別無選擇。
圖片
如果海綿寶寶能證明他的名字,或者我能以某種方式證明我已經超過 18 歲,而不需要交出那么多敏感信息,那就更好了。
這是 ZK 證明如何為世界提供真正價值的一個典型例子。有了 ZK 證明,我現在能夠向驗證者證明我的部分身份(或其他任何內容) ,而無需提供我身份的任何方面或任何支持文件來證明這一事實。
這樣,我就不會將敏感的個人信息轉移給第三方存儲在數據庫中;容易受到攻擊和泄露;目前,我們幾乎每次注冊網站時都會面臨一些風險。
這一切聽起來都很棒。但如何在不透露任何內容的情況下證明某件事呢?為此,我們可以更深入地了解 ZK 證明是什么。
ZK 證明由什么組成?
所以,我們想要證明某件事,而不透露我們如何知道那件事,或者那件事到底是什么。這怎么可能?
在我們回答這個問題之前,ZK 證明分為兩大類:
- 1. 交互的
- 2. 非交互式
在 web3 中我們關心的是非交互性的,但讓我們快速了解一下 ZK 上下文中的“交互性”指的是什么。
交互式 ZK 證明
想象一下,有一個環形洞穴,里面有一扇門,需要密碼才能進入。
作為證明者,您的目標是向您的朋友(驗證者)證明您知道秘密密碼(稱為“證人”),而不告訴他們實際的密碼。
圖片
你不想告訴你的朋友密碼,所以你要證明你知道它;首先,隨機進入洞穴的一側;在他們看不見的情況下。
此時,你的朋友不知道你站在哪一邊。但作為挑戰,他們會喊出“A!” 或“B!”;要求您從A側或B側****退出。
在這個簡單的例子中,這可能會導致兩種結果:
- 1. 你進入了A面,所以你需要密碼才能通過大門進入B面:
圖片
- 2. 您進入B面,所以不需要密碼;你可以直接退出:
圖片
這就是所謂的 阿里巴巴洞穴故事[4],供參考。
這是一個簡單的例子,因為無論您是否需要密碼來滿足您朋友的挑戰,這都是 50/50 的比例;因此,僅執行一次此挑戰不足以確定您知道密碼。
這意味著您需要完成更多次挑戰,正確退出 A 側或 B 側,直到您的朋友滿意為止;或者在理論世界中,直到你不可能偽造證人的知識(密碼)。
因此,這是交互式的;您(證明者)和您的朋友(驗證者)來回交互。你的朋友提出了一個挑戰,你提出了一個回應。重復這個循環,直到驗證者滿意為止,此時驗證者已經證明了證人的知識。
這構成了交互式 ZK 證明的三個部分:
- 1. 見證人:證明者想要證明其了解的秘密信息。
- 2. 挑戰:只有了解證人的人才能回答這個問題;雖然可能是一個幸運的猜測。
- 3. Response:證明者對挑戰的響應;包含(希望)正確的答案。
重復步驟2和3,直到驗證者滿意為止。
圖片
最終,一旦驗證者滿意,循環就會中斷;驗證者不會產生另一個挑戰,而是承認證明者了解證人。
圖片
雖然這個過程有效,但它需要證明者和驗證者之間進行多輪通信;這是低效的,并且在區塊鏈環境中效果不佳。
交互式證明還有另一個很大的限制;即使驗證者滿意后,該證據也無法用于獨立驗證[5];這意味著只有驗證它的一方才能信任它,而不是其他任何人。
由于這些原因,進行了非交互式 ZK 證明。
非交互式 ZK 證明
非交互式 ZK 證明只需要從證明者到驗證者的一輪通信。證明者使用一種算法來計算 ZK 證明并將其發送給驗證者,驗證者也使用另一種算法來檢查它。
非交互式 ZK 證明的另一個好處是它們也可供其他任何人驗證;這意味著它不僅可以從驗證者的 POV 中得到證明,而且可以供每個人驗證自己;適合區塊鏈。
這些能夠證明信息和驗證證據的“算法”是什么?嗯,答案是;這取決于。[它們的數量相當多](https://en.wikipedia.org/wiki/Zero-knowledge_proof#:~:text=The most popular interactive or,Delegation (VPD)%2C and Succinct),但在區塊鏈環境中通常使用兩種 ZKP 系統;ZK-SNARK 和 ZK-STARK。
什么是 ZK-SNARK?
ZK-SNARK 的意思是零知識簡潔非交互式知識論證。
? ZK:希望現在你能猜到這意味著什么(零知識)。
? 簡潔:它們很小,并且可以被驗證者快速驗證。
? 非交互式:我們之前討論過這一點。證明者和驗證者之間只需要一輪通信。
? 論據:理論上來說,“欺騙”系統的可能性極小。
? (的)知識:如果不訪問秘密信息(見證人),就無法構建知識。
他們使用一種稱為橢圓曲線配對[6]的加密原語作為創建和驗證這些證明的方法(我們不會在這里討論數學)。
關于 ZK-SNARK 需要注意的一件關鍵事情是,在初始設置階段,證明者和驗證者必須同意使用“共享密鑰”,即公共參考字符串 (CRS)。任何有權訪問此共享密鑰的人都可以驗證這些證明。
這個共享密鑰使 ZK-SNARK 成為可能;盡管這也可以說是它們最大的缺點,因為它創建了所謂的“可信環境”。
用于創建 CRS 的值(有時稱為“有毒廢物”)需要在 CRS 生成后銷毀。如果不是,整個系統就會面臨風險;因為不誠實的證明者能夠計算出錯誤的證明;因此,用戶必須相信價值已被破壞。
關于 ZK SNARK 還值得一提的是,它們不具有“抗量子性”。這意味著它們將來很容易受到量子計算機的攻擊;盡管它們將來可能會升級以具有抗量子性。
什么是 ZK-STARK?
ZK-STARK 的意思是零知識可擴展透明知識論證。
? 可擴展:它們不是“簡潔”的,而是可擴展的;這意味著它們比 ZK-SNARK 更有效地生成和驗證更多見證人的證明。
? 透明:無需可信設置。他們依靠可公開驗證的隨機性來生成共享密鑰。
這種透明度的提高通常需要權衡生成比 ZK-SNARK 大小大得多的證明;除非處理非常大的數據集。[證明的大小從 288 字節增加到幾百 KB](https://vitalik.ca/general/2017/11/09/starks_part_1.html#:~:text=the size of a proof goes up from 288 bytes to a few hundred kilobytes)。
他們不使用橢圓曲線,而是使用多項式[7];我絕對沒有資格告訴你。Vitalik 針對該主題推出了一個由三部分組成的系列:1[8] , 2[9] , 3[10]。
ZK STARK 解決了我們與 ZK-SNARK 討論的兩個問題,它們:
- 1. 不需要“可信環境”。
- 2. 似乎是后量子安全的;這意味著它們將來不會容易受到量子計算機的攻擊。
ZK-STARKS 比 ZK-SNARK 更新,Vitalik 稱它們為“[更新、更閃亮的表弟](https://vitalik.ca/general/2017/11/09/starks_part_1.html#:~:text=a newer%2C shinier cousin)”!?? 所以,快速回顧一下:
ZK-SNARK | ZK-STARK | |
尺寸 | 簡潔、可快速驗證 | 更大,但在證明更大的證人時可以更有效地擴展 |
安全 | 需要可信的環境 | 不需要可信環境 |
后量子 | 盡管可以升級,但不安全 | 安全的 |
zkEVM 如何工作?
現在我們已經介紹了零知識證明的工作原理以及 web3 世界中出現的兩種常見的 ZKP 形式,讓我們來探討一下由 ZKP 支持的最新創新之一;zkEVM(零知識以太坊虛擬機)。
zkEVM 有幾種不同的形式;正如 Vitalik 在他的博客文章“不同類型的 ZK-EVM[11] ”中概述的那樣。我將在這篇文章中引用的是Polygon zkEVM[12]。
zkEVM 的目標是提高以太坊區塊鏈的可擴展性,同時保持安全、去中心化和EVM[13]兼容。
細節很復雜,但核心原理與我們到目前為止討論的相同。與所有 ZKP 系統一樣,有:
1. 證明者:生成代表用戶提交的一批交易真實性的有效性證明。
? 首先,它創建多個 ZK-STARK 證明。
? 它使用STARK Recursion[14]將 ZK-STARK 捆綁在一起,以創建單個 ZK-STARK。
? 這個 ZK-STARK 很大,因此它通過CIRCOM 組件[15]輸出到 SNARK 構建器。
? 顧名思義,SNARK 構建器生成 ZK-SNARK 有效性證明;這有助于將 Gas 成本從 5M 降低到 350K。
2. 驗證者:PolygonZkEVM部署在以太坊上的智能合約是 ZK 證明的驗證者。
zkEVM 中的數據流
下面是 Polygon zkEVM 中數據的簡化流程圖。
我將其分成按時間順序排列的部分,以幫助其更容易理解。
圖片
提交交易
作為用戶,您可以像平常使用任何其他 EVM 鏈(例如以太坊)一樣提交交易;通過簽署交易并通過 JSON RPC 發送它們。
運行 zkEVM 軟件的定序器節點會選取這些交易并決定要處理哪些交易,并制定一些激勵機制來正確處理這些交易。
圖片
批量交易
排序器將交易批量合并為一個,并將它們提交到PolygonZkEvm智能合約,該智能合約存儲在以太坊主網上(以及以太坊 Goerli 測試網上的一個單獨實例)。
圖片
這些批次目前不一定正確或經過驗證。
驗證交易
使用 ZKP,PolygonZkEVM智能合約在此設置中充當驗證者。它想要驗證剛剛收到的批次是否有效;它通過將批次發送到聚合器節點來實現這一點。
圖片
生成和驗證 ZK 證明/有效性證明
智能PolygonZkEVM合約將剛剛收到的批次發送到聚合器節點,該節點是另一臺運行 zkEVM 軟件并與 ZK 證明器通信的機器。流程如下:
? 聚合器從智能合約接收批次
? 聚合器將批次發送到 ZK Prover
? ZK Prover 創建多個 ZK-STARK -> 單個 ZK-STARK -> 一個 ZK-SNARK
? ZK-SNARK(有效性證明)被發送回聚合器
? 聚合器將有效性證明發送回PolygonZkEVM智能合約
? 智能PolygonZkEVM合約驗證有效性證明
? 如果有效性證明有效,則接受。
? 如果無效,則拒絕它。
圖片
閱讀 ZK EVM
為了使 ZK EVM 發揮作用,去中心化應用程序(dApp)需要從中讀取信息;這就是同步器發揮作用的地方。
它從以太坊智能合約中讀取事件,存儲來自聚合器的 ZK 有效性證明和從排序器提交的批次的知識。
圖片
這樣,應用程序就可以通過 JSON RPC 輕松獲取匯總狀態的視圖。
總結
零知識證明是密碼學的現實應用,可以成為更加注重隱私的未來的基礎;在Polygon ID[16]等產品中得到了證明。
在區塊鏈的背景下,ZKP 被用來提高Polygon 的 zkEVM[17]等產品中以太坊的可擴展性,通過提供一種驗證批量交易的新方法,而不會出現我們今天在其他匯總解決方案中看到的典型的安全性或 EVM 兼容性損失。
在這篇文章中,我們介紹了:
- ? ZK 證明是什么,以及為什么它們很重要。
- ? ZK 證明如何工作,包括 ZK-SNARK 和 ZK-STARK。
- ? 這些證明如何在區塊鏈世界中使用。
如果您想了解如何應用這些概念,我之前有一篇博客文章介紹了如何在 Polygon zkEVM 上構建您的第一個智能合約和去中心化應用程序,如下所示:
https://blog.jarrodwatts.com/the-ultimate-guide-to-building-on-polygon-zkevm
原文:https://blog.jarrodwatts.com/how-zk-proofs-and-zkevms-work
引用鏈接
[1] Polygon 的 zkEVM: https://polygon.technology/polygon-zkevm
[2] Polygon ID: https://polygon.technology/polygon-id
[3] 斯蒂芬: https://twitter.com/0ceans404
[4] 阿里巴巴洞穴故事: https://en.wikipedia.org/wiki/Zero-knowledge_proof#The_Ali_Baba_cave
[5] 用于獨立驗證: https://ethereum.org/en/zero-knowledge-proofs/#non-interactive-zero-knowledge-proofs
[6] 橢圓曲線配對: https://medium.com/@VitalikButerin/exploring-elliptic-curve-pairings-c73c1864e627
[7] 多項式: https://vitalik.ca/general/2017/11/09/starks_part_1.html
[8] 1: https://vitalik.ca/general/2017/11/09/starks_part_1.html
[9] 2: https://vitalik.ca/general/2017/11/22/starks_part_2.html
[10] 3: https://vitalik.ca/general/2018/07/21/starks_part_3.html
[11] 不同類型的 ZK-EVM: https://vitalik.ca/general/2022/08/04/zkevm.html
[12] Polygon zkEVM: https://polygon.technology/polygon-zkevm
[13] EVM: https://ethereum.org/en/developers/docs/evm/
[14] 它使用STARK Recursion: https://zkevm.polygon.technology/docs/zkProver/overview/#stark-recursion-component
[15] CIRCOM 組件: https://zkevm.polygon.technology/docs/zkProver/overview/#circom-library
[16] 在Polygon ID: https://polygon.technology/polygon-id
[17] Polygon 的 zkEVM: https://polygon.technology/polygon-zkevm