零知識證明技術應用:區塊鏈發展史的第三大技術革新

推薦閱讀
2023-09-23 12:40:33
收藏
相信隨著硬體技術與密碼學的發展,零知識證明將在未來取得更多突破,為數位世界提供更快速,更安全的應用服務。

作者:

新躍社科大學普惠金融節點 SUSS NiFT 研究員 @Jesse_meta

Beosin 研究員 @EatonAshton2

Least Authority 安全研究員 @kaplannie

不管資訊是儲存在互聯網上還是線下檔案室,無論是出於主觀故意還是客觀意外,資訊洩露事件在今天已經屢見不鮮,無需多言。只要資訊是中心化儲存,就會有受到單點攻擊的危險。只要驗證過程需要可信賴的第三方,就會存在道德風險且效率低下。資訊安全的解決至關重要,迫在眉睫。而零知識證明技術讓用戶在保護自身隱私的前提下,更高效、更安全地完成驗證。

如果說比特幣是區塊鏈帶給現實世界的第一大发明,提供價值儲存的新方式,以太坊的智能合約是第二大里程碑事件,解鎖創新的潛力,那麼零知識證明的應用是區塊鏈發展史上第三大技術革新,帶來隱私和可擴展。這既是 Web3 生態的重要一環,也是有潛力推動社會變革的重要基礎技術。

這篇文章以非技術人員的角度,介紹零知識證明的應用場景、工作原理、發展現狀和未來趨勢,以期讓無技術背景的讀者了解零知識證明即將帶來的重大變革。

1.什麼是零知識證明

零知識證明(ZKP)是在1985年由 Shafi Goldwasser、Silvio Micali、Chales Rackoff 合著的論文《The knowledge complexity of interactive proof systems》首次提出的數學協議,除了某一要證明的事實之外,不會透露任何其他資訊。驗證者無法獲得生成證明的秘密資訊。舉一個例子幫助大家理解:我要證明我知道某個人的電話號碼,我只需要能夠在眾人面前撥通那人的電話就可以證明這一事實,不需要透露那人的真實號碼。零知識證明提供了一種有效的近乎無風險的數據分享方式。利用零知識證明,我們可以保留對數據的所有權,極大地提高隱私保護,有望使數據洩露事件成為過去式。

零知識證明具有三個特性:

完整性

如果一個聲明是真實的,誠實的驗證者會被誠實的證明者說服。即對的錯不了。

合理性

如果一個聲明是錯誤的,在絕大多數情況下,欺騙的證明者不能讓誠實的驗證者相信虛假的聲明。即錯的對不了。

零知識

如果一個聲明是真實的,驗證者除了能得知這聲明是真實的,之外不能獲得任何多餘的資訊。

零知識證明存在極小的概率產生合理性誤差,即一個作弊的證明者可能使驗證者相信一個錯誤的聲明。零知識證明是概率性的證明,而不是確定性的證明,但我們可以通過一些技術將合理性誤差降低到可以忽略不計。

2.零知識證明的應用

零知識證明最重要的兩個應用場景是隱私和可拓展。

2.1 隱私

零知識證明允許用戶在沒有透露個人詳細資訊的情況下,安全地分享必要的資訊來獲得商品和服務,免受黑客攻擊和個人身份資訊的洩露。隨著數字和物理領域的逐漸融合,零知識證明的隱私保護功能對於 Web3 乃至 Web3 以外的資訊安全變得至關重要。如果沒有零知識證明,用戶資訊就會存在受信任的第三方數據庫,有受到黑客攻擊的潛在危險。零知識證明在區塊鏈中的第一應用案例是隱私幣Zcash,用來隱藏交易細節。

2.1.1 身份資訊保護和驗證

在網上活動中,我們經常需要提供諸如姓名、出生日期、電子郵件、複雜的密碼來證明我們是有合法使用權限的用戶。因此,我們也常在網上留下了不願透露的敏感資訊。如今接到直呼我們姓名的詐騙電話已經屢見不鮮,可見個人資訊洩露的情況十分嚴重。

我們可以利用區塊鏈技術,賦予每個人一個包含個人數據的特殊加密數字標識符。這個數字標識符可以構建去中心化身份,且不可能在其所有者不知情的情況下被偽造或改變。去中心化身份可以由用戶來控制對個人身份的訪問權限,在不透露護照細節的情況下證明公民身份,簡化了認證過程,還減少了用戶由於忘記密碼而失去訪問權限的事件發生。零知識證明由能證明用戶身份的公開數據和帶有用戶資訊的隱私數據生成,可用於用戶訪問服務時的身份驗證。這既減少了繁瑣的驗證流程,提升了用戶體驗,又避免用戶資訊的中心化儲存。

此外,零知識證明還可以在構建私人信譽系統,允許服務機構在用戶不暴露身份的情況下驗證其是否符合某些信譽標準。用戶可以從Facebook、Twitter和Github等平台在掩蓋具體來源帳號的前提下,匿名輸出聲譽。

2.1.2 匿名支付

使用銀行卡支付的交易細節通常對多方可見,包括支付提供商、銀行和政府等相關方,這在一定程度上暴露了普通公民的隱私,用戶需要信任相關方不作惡。

加密貨幣可以使支付擺脫第三方,直接進行點對點交易。但目前主流公鏈上的交易公開可見,雖然用戶地址匿名,依然存在通過鏈上的關聯地址和鏈下如交易所kyc、Twitter資訊等數據分析來找到現實世界身份。如果知道一個人的錢包地址,相當於可以隨時查看個人的銀行賬戶餘額,甚至可能對用戶身份、財產造成威脅。

而零知識證明可以從隱私幣、隱私應用和隱私公鏈三個層次來提供匿名支付。隱私幣Zcash,隱藏了包括發送方、接收方地址、資產類型、數量和時間等交易細節。Tornado Cash 是以太坊上的去中心化應用,使用零知識證明混淆交易細節來提供隱私轉帳(但也多被用於黑客洗錢)。Aleo 是旨在從協議層面為應用程序提供隱私功能的L1區塊鏈。

2.1.3 誠實行為

零知識證明可以在保留隱私的前提下促進誠實行為。協議可以要求用戶提交零知識證明來證明其誠實行為。由於零知識證明的合理性(錯的對不了),用戶必須根據協議要求做出誠實的行為才可以提交有效的證明。

MACI(Minimal Anti-Collusion Infrastructure,最小反串謀基礎設施)就是一個促進誠實的應用場景,防止在鏈上投票或其他形式的決策過程中發生串謀。該系統利用密鑰對和零知識證明技術來實現這一目標。在MACI中,用戶將他們的公鑰註冊到一個智能合約中,並通過加密的消息將他們的投票發送到合約中。MACI的防串謀特性允許投票者改變他們的公鑰,以防止其他人了解他們的投票選擇。協調者在投票期結束時用零知識證明來證明他們已經正確處理了所有消息,且最終的投票結果是所有有效票數的總和。這保證了投票的完整性和公正性。

2.1.4 個人資訊核查

當我們想要獲取貸款時,可以從公司拿一個數字收入證明來申請貸款。這個證明的合法性容易在密碼學上得到檢查。銀行可以用零知識證明來驗證我們的收入是否達到了規定的最低限度,但得不到敏感的具體資訊。

2.1.5 結合機器學習挖掘私有數據潛能

在訓練機器學習模型時,通常需要大量的數據。通過使用零知識證明,數據擁有者可以證明他們的數據滿足模型訓練的要求,而無需實際公開這些數據。這有利於讓私有數據發揮作用,並且實現貨幣化。

此外,零知識證明可以允許模型創建者證明他們的模型滿足某些性能指標,但無需公開模型的細節,以防止他人複製或篡改他們的模型。

2.2 可擴展

隨著區塊鏈用戶的增多,區塊鏈上需要進行大量的計算,造成了交易擁堵。有些區塊鏈會走分片的擴展路線,但這需要對區塊鏈的基礎層進行大量的複雜的修改,可能會威脅到區塊鏈的安全性。另外一個較為可行的方案是走ZK-Rollup路線,利用可驗證計算,將計算外包給另外一條鏈上的實體來執行,然後將零知識證明和可驗證結果一起提交到主鏈上以供驗證真實性。零知識證明保證交易的真實性,主鏈只需將結果更新到狀態,不需要儲存細節或重放計算, 也不需要等待其他人來討論交易的真實與否,極大地提高效率和擴展能力。開發者可借助零知識證明,設計可以運行在如手機這樣的普通硬體上的輕節點 dapps,更有利於 Web3 走向大眾。

零知識證明的擴展既可運用在一層網絡上,如 Mina Protocol,也可以運用二層網絡 ZK - rollups。

3.零知識證明如何工作

Dmitry Laverenov (2019)把零知識證明結構分為交互式和非交互式。

3.1 交互式零知識證明

交互式零知識證明的基本形式由三個步驟構成:證據、挑戰者和回應

證據:隱藏的秘密資訊就是證明者的證據。這些證據建立一系列只能由知道這些資訊的人正確回答的問題。證明者開始隨機抽取問題,把計算答案發給驗證者來進行證明。

挑戰:驗證者從集合中隨機挑選另一個問題,要求證明者回答。

回應:證明者接受問題,計算答案後將結果返還給驗證者。證明者的回應能夠使驗證者檢查證明者是否知道這些證據。

這個過程可以重複多次,直到證明者在不知道秘密資訊卻猜出正確答案的概率變得足夠低。舉一個簡化的數學例子,如果證明者在不知道秘密資訊卻能猜出正確答案的概率為 1/2,重複交互十次,證明者每次都命中的概率僅有萬分之 9.7,想讓驗證者錯誤地認可虛假證明的可能性極低。

3.2 非交互式零知識證明

交互式零知識證明具有局限性,一方面是需要證明者和驗證者同時存在並進行重複驗證,另一方面是每計算一個新的證明都需要證明者和驗證者傳遞一組資訊,證明不可在獨立的驗證中重複使用。

為了解決交互式零知識證明的局限性,Manuel Blum, Paul Feldman, 和 Silvio Micali 提出了非交互式零知識證明,由證明者和驗證者共享密鑰,且僅需進行一輪驗證來使得零知識證明更加有效。證明者將秘密資訊通過特殊算法來計算生成一個零知識證明,發送給驗證者。驗證者使用另外一種算法檢查證明者是否知道秘密資訊。該零知識證明一旦生成,任何有共享密鑰和驗證算法的人都可以進行驗證。

非交互式零知識證明是零知識證明技術的一大突破,促進了今天使用零知識證明系統的發展。主要方法有 ZK-SNARK 和 ZK-STARK。

4. 零知識證明的主要技術路徑

Alchemy(2022)將零知識證明的技術路徑分為 ZK-SNARK、ZK-STARK 和 递归ZK-SNARK。

4.1 ZK-SNARK

ZK-SNARKs 是一個零知識的簡潔的非交互式的證明。

G2EPumzdpa9e4LzrHPNBEMaqEXUlrCdNPmE6IdKg.png

公鏈要確保在網絡上執行交易的正確性,需要通過讓其他計算機(節點)重新運行每筆交易來實現。但這種方法會使每個節點重新執行每筆交易,會減慢網絡的速度,限制可擴展性。節點還必須儲存交易數據,導致區塊鏈的規模呈指數級增長。

對於這些限制,ZK-SNARK就發揮了作用。它可以證明在鏈外進行的計算的正確性,而不需要節點重放計算的每一步。這也消除了節點對儲存多餘交易數據的需求,提高網絡的吞吐量。

使用 SNARK 驗證鏈外計算將計算編碼為一個數學表達式來構成有效性證明。驗證者檢查證明的正確性。若證明通過了所有檢查,那麼底層計算就被認為是有效的。有效性證明的大小要比它所驗證的計算小很多倍,因此我們稱 SNARKs 是簡潔的原因。

大多數使用 ZK-SNARK 的ZK Rollup 遵循以下步驟。

1. L2 的用戶簽署交易後提交給驗證者。

2. 驗證者利用密碼學將多個交易壓縮生成相應的有效性證明(SNARK)。

3. L1鏈上的智能合約對有效性證明進行驗證,決定了這批交易是否發布到主鏈上。

值得一提的是ZK-SNARK 需要進行可信設置。在這階段,密鑰生成器會獲取一個程序和一個秘密參數來生成兩個可用的公鑰,分別用於創建證明和驗證證明。這兩個公鑰只需通過一個可信的設置儀式生成一次公共參數,就可供希望參與零知識協議的各方多次使用。用戶需要相信可信設置儀式的參與者不作惡,且沒有辦法評估參與者的誠實性。知道秘密參數便可生成假證明,欺騙驗證者,因此存在潛在安全隱患。目前有研究員在探索 ZK-SNARK 無需信任假設的方案。

優勢

1. 安全性

ZK rollup 被認為比 OP rollup 更安全的擴展方案,因為 ZK-SNARK 使用了先進的加密安全機制,很難欺騙驗證者和進行惡意行為。

2. 高吞吐量

ZK-SNARK 減少了以太坊底層的計算量,緩解了主網堵塞情況,鏈下計算分擔交易費用,帶來更快的交易速度。

3. 小證明尺寸

SNARK證明的小尺寸使它們容易在主鏈上得到驗證,這意味著驗證鏈下交易的 Gas Fee 較低,減少了用戶的成本。

局限

1. 相對中心化

大多數時候都依賴於一個可信的設置。這和區塊鏈去信任的初衷相違背。

用ZK-SNARK生成有效性證明是一個計算密集型的過程,證明者必須投資於專門的硬體。這些硬體價格昂貴,只有少數人負擔得起,因此 ZK-SNARK的證明過程是高度集中的。

  1. ZK-SNARK 使用椭圆曲线密码学(ECC)來加密用於產生有效性證明的資訊,目前相對安全,但量子計算的進步可能會打破其安全模型。

使用 ZK SNARK 的項目

Polygon Hermez

Polygon 在2021年 以 2.5 億美元併購 Hermez,成為首個兩個區塊鏈網絡全面併購的案例。Hermez 給 Polygon 快速增長的用戶群帶來的 ZK 技術和工具,使 Polygon 獲得開發 zkEVM 的支持。Hermez 1.0 是支付平台,把一批交易在鏈外執行,允許用戶便捷地把 ERC-20 代幣從一個 Hermez 賬戶轉移到另一個 Hermez 賬戶,每秒交易可達 2000次。

Hermez 2.0 作為一個零知識的 zkEVM 以透明方式執行以太坊交易,包括具有零知識驗證的智能合約。其可與以太坊完全兼容,無需對智能合約代碼進行太多改動,方便開發者將L1的項目部署到 Polygon Hermez 上。Hermez 1.0 使用 SNARK-proofs,2.0 中同時使用 SNARK-proofs 和 STARK-proofs。在 2.0,使用 STARK-proof 證明鏈外交易的有效性。但 STARK-proof 在主鏈上驗證的成本很高,因此引入 SNARK-proof 來驗證 STARK 。

zkSync

Matter Labs 于 2020 年推出的 zkSync 1.0 不支持智能合約,主要用於交易或轉帳。支持智能合約的 ZkSync 2.0 已於 2023 年 3 月份公開上線主網。

ZkSync 把以太坊上的智能合約源代碼 Solidity 編譯為 Yul 來實現 EVM 的兼容性。Yul 是可以編譯成不同 EVM 的字節碼的中間語言。使用 LLVM 編譯器框架可以將 Yul 代碼重新編譯為為 zkSync 的 zkEVM 設計的自定義、電路兼容的字節碼集。通過這種方法,免除通過更高級別的代碼對 EVM 執行中的所有步驟進行 zk 證明,從而在保持高性能的同時更容易使證明過程去中心化。未來還可以通過構建新的編譯器前端來添加對 Rust、Javascript 或其他語言的支持,增加 zkEVM 架構的靈活性和更多的開發者。

Aztec

Aztec是第一個混合型zkRollup,在一個環境中同時實現公共和私有智能合約的執行。這是一個零知識的執行環境,而非zkEVM。通過將公共和私有執行合併到單個混合匯總中來實現機密性,例如公開AMM的隱私交易、公開遊戲中的私密對話、公開DAO的隱私投票等等。

4.2 ZK-STARK

ZK-STARK 不需要可信的設置。ZK-STARK 是 for Zero-Knowledge Scalable Transparent Argument of Knowledge 的縮寫。相比 ZK-SNARK, ZK- STARK 有更好的可拓展性和和透明性。

優勢

1. 去信任

ZK-STARK 公開可驗證隨機來取代可信設置,減少對參與人的依賴,提高協議安全性。

2. 更強的擴展能力

即使底層計算的複雜性呈指數級增長,ZK-STARK依然保持了較低的證明和驗證時間,而非像 ZK-SNARK 線性增長。

3. 更高的安全保證

ZK-STARK 使用抗碰撞哈希值進行加密,而不是 ZK-SNARK 中使用的椭圆曲线方案,可抗量子計算的攻擊。

局限

1. 更大的證明尺寸

ZK-STARK 證明尺寸更大,使得在主網驗證的成本更高。

2.較低的採用率

ZK-SNARK 是零知識證明是區塊鏈中的第一個實際應用,因此大多數 ZK rollup採用ZK-SNARK, 具有更成熟的開發者系統和工具。儘管 ZK-STARK 也有以太坊基金會的支持,但是相比之下採用率不足,基礎工具還待完善。

哪些項目使用 ZK-STARK?

Polygon Miden

Polygon Miden,一個基於Ethereum L2的擴展解決方案,利用zk-STARK技術將大量L2交易集成到單一的以太坊交易中,從而提升了處理能力並降低了交易成本。在不進行分片的情況下,Polygon Miden可以在5秒內產生一個區塊,並且其TPS可以達到1000以上。而在進行分片後,其TPS可高達10,000。用戶只需要15分鐘,就能將資金從Polygon Miden提現到Ethereum。Polygon Miden的核心功能是一個基於STARK的圖靈完備虛擬機------Miden VM,它使得合約的形式化驗證變得更為簡便。

StarkEx 和 StarkNet

StarkEx 是一個需要許可的、為特定應用程序定制的擴展解決方案的框架。項目可以使用 StarkEx 來進行低成本的鏈下計算,生成證明執行正確性的 STARK 證明。這樣的證明包含 12,000--500,000 笔交易。最後將證明發送到鏈上的 STARK 驗證器,驗證正確後接受狀態更新。在 StarkEx 上部署的應用程序包括永續期權 dYdX、NFT L2 Immutable、體育數字卡牌交易市場 Sorare 和多鏈 DeFi 聚合器 rhino.fi。

StarkNet 是一個無需許可的 L2,任何人員都可以在其中部署以 Cairo 語言開發的智能合約。部署在 StarkNet 上的合約之間可以進行交互來構建新的可組合協議。與應用程序負責提交交易的 StarkEx 不同,StarkNet 的排序器批量交易並發送它們進行處理和證明。StarkNet 更適合需要與其他協議同步交互或超出 StarkEx 應用範圍的協議。隨著 StarkNet 開發的進展,基於 StarkEx 的應用將能夠移植到 StarkNet,享受可組合性。

ZK-SNARK 和 ZK-STARK 對比

4.3 递归 ZK-SNARK

普通 ZK rollup 只能處理一個交易區塊,這限制了他們可以處理的交易數量。递归 ZK-SNARK 可以驗證一個以上的交易區塊,把不同的 L2 區塊生成的 SNARK 合併為一個單一的有效性證明,提交給L1鏈。一旦 L1 鏈上合約接受了提交的證明,所有這些交易都會變得有效, 極大地增加了可以用零知識證明最終完成的交易數量。

Plonky2 是 Polygon Zero 的一種使用递归 ZK-SNARK 來增加交易的新證明機制。递归 SNARK 通過將幾個證明聚集到一個遞歸證明中,來擴展證明生成過程。Plonky2 使用同樣的技術來減少生成新區塊證明的時間。Plonky2 將成千上萬的交易並行生成證明,再遞歸地將它們聚合成一個區塊證明,因此生成速度很快。而普通的證明機制試圖一次性生成整個區塊證明,效率更低。此外,Plonky2 還可以在消費級設備上生成證明,解決了 SNARK 證明常伴隨的的硬體集中化問題。

5. Zero Knowledge Rollup VS Optimistic Rollup

ZK-SNARK 和 ZK-STARK 已經成為區塊鏈擴展項目的核心基礎設施,特別是Zero Knowledge Rollup 方案中。Zero-Knowledge Rollup 就是指是指使用零知識證明技術將所有的計算轉移到鏈下處理來減輕網絡堵塞的一種以太坊的二層擴容解決方案。Zero Knowledge Rollup的主要優點是可以大幅提高以太坊的交易吞吐量,同時保持較低的交易費用,且交易一旦打包進rollup,就能立即確定。

目前以太坊的L2擴展方案除了Zero Knowledge Rollup, 還有 Optimistic Rollup。在 Optimistic Rollup 運行的交易被默認為有效並立即執行。只有當發現欺詐性交易時(有人提交欺詐證明),該交易才會被撤銷。所以安全性是低於Zero Knowledge Rollup的。為了防止欺詐交易,Optimistic Rollup 設有一段挑戰期,如果交易需要在挑戰期過後才能最終確定。這可能導致用戶在取回他們的資金時需要等待一段時間。

最初設計EVM的時候沒有考慮到使用零知識證明技術。以太坊創始人 Vitalik 認為短期內 Zero Knowledge Rollup 存在技術上的複雜性,但最終在擴容戰爭中會戰勝 Optimistic Rollup。以下是 Zero Knowledge Rollup 和 Optimistic Rollup 的對比。

來源:SUSS NiFT, ChatGPT

6. 零知識證明技術的未來前景如何?

零知識證明技術領域處於獨特的地位:近年來,經過大量努力致力於推進該領域的研究,許多成果在密碼學和安全通信領域都是相當新的。因此,許多有趣的問題還待學術界和開發者社區解答。與此同時,零知識證明技術被用於各類項目,展現了零知識技術的挑戰並拓展了其要求。

零知識證明技術值得關注的領域之一是零知識證明技術的後量子安全性的討論。可公開驗證的 SNARK(簡潔的非交互式知識論證)是零知識技術領域的關鍵組成部分。然而,大多數廣泛使用的可公開驗證的 SNARK 方案並不被認為是量子安全的。例如 Groth16、Sonic、Marlin、SuperSonic 和 Spartan。這些方案所依賴的數學問題可在量子計算機的幫助下會被有效解決,這大大損害了它們在後量子世界中的安全性。

我們發現學術界正在積極尋找量子安全的零知識證明,該證明可用於各種沒有預處理階段的語句。目前最先進的量子安全零知識證明的例子包括 Ligero、Aurora、Fractal、Lattice Bulletproofs 和 LPK22 等方案。Ligero、Aurora 和 Fractal 基於哈希函數,而 Lattice Bulletproofs 和 LKP22 基於點陣函數。這兩個函數都被認為是量子安全的。推廣這些方案並提高其效率已成為趨勢。

我們對零知識技術未來的另一個期望是它抵抗攻擊的能力和實現相關的代碼成熟度。鑑於編寫的代碼量的增加,將會有更多安全且經過審查的庫和最佳實踐用於各種零知識證明技術。當然,未來也會有更多將等待被發現和溝通的常見錯誤。我們期望該領域成熟並被高度採用,努力標準化協議並確保不同實現之間的互操作性,一個名為 ZKProof 的項目已經開始這樣做了。

零知識技術社區中將繼續存在的另一個趨勢是在高效算法和可能的特殊硬體上進行更多工作。近年來,我們已經看到證明大小的減小以及證明者和驗證者變得更加高效。算法、特殊硬體和計算優化的進步可能會帶來更快、更具擴展性的實現。

雖然現有算法的效率有利於未來零知識證明技術的用戶,但我們也期望看到零知識證明的功能不斷擴大。過去,我們在實現預處理 ZK-SNARK 時遇到過很多實例。現在我們發現越來越多的可升級 ZK-SNARK 實例。此外,一些零知識證明技術的使用更多是因為其簡潔性,而不是其零知識能力。

最後,零知識證明技術的另一個趨勢是機器學習與零知識證明的交叉(ZKML)。這個想法需要在多方環境中訓練大型語言模型,並使用零知識技術來驗證計算。這對於當前人工智能非常有用。該領域有興起項目的可能。

結語

本文由區塊鏈安全聯盟成員共同撰寫,通過本文的介紹,我們可以了解到零知識證明在區塊鏈領域的廣泛應用,技術路徑,發展趨勢與所面臨的挑戰。相信隨著硬體技術與密碼學的發展,零知識證明將在未來取得更多突破,為數字世界提供更快速,更安全的應用服務。

鏈捕手ChainCatcher提醒,請廣大讀者理性看待區塊鏈,切實提高風險意識,警惕各類虛擬代幣發行與炒作,站內所有內容僅係市場信息或相關方觀點,不構成任何形式投資建議。如發現站內內容含敏感信息,可點擊“舉報”,我們會及時處理。
ChainCatcher 與創新者共建Web3世界