撰文:@Jesse_meta,新躍社科大學普惠金融節點SUSS NiFT 研究員;@EatonAshton2,Beosin 研究員;@kaplannie,Least Authority 安全研究員
註:本文為SUSS NiFT 區塊鏈安全聯盟研報
無論資訊是儲存在網路上還是線下檔案室,無論是出於主觀故意還是客觀意外,資訊外洩事件在今天已經屢見不鮮,無需多言。只要資訊是中心化存儲,就會有受到單點攻擊的危險。只要驗證過程需要可信賴的第三方,就會有道德風險且效率低。資訊安全的解決至關重要,迫在眉睫。而零知識證明技術讓使用者在保護自身隱私的前提下,更有效率、更安全地完成驗證。
如果比特幣是區塊鏈帶給現實世界的第一大發明,提供價值儲存的新方式,以太坊的智慧合約是第二大里程碑事件,解鎖創新的潛力,那麼零知識證明的應用是區塊鏈發展史上第三大第三大技術革新,帶來隱私和可擴展。這既是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 是一個零知識的簡潔的非互動式的證明。
公鏈要確保在網路上執行交易的正確性,需要透過讓其他電腦(節點)重新運行每筆交易來實現。但這種方法會使每個節點重新執行每筆交易,會減慢網路的速度,限制可擴展性。節點還必須儲存交易數據,導致區塊鏈的規模呈指數級增長。
對於這些限制,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 的證明過程是高度集中的。
2.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)。這個想法需要在多方環境中訓練大型語言模型,並使用零知識技術來驗證計算。這對於當前人工智慧非常有用。該領域有興起項目的可能。
結束語
本文由區塊鏈安全聯盟成員共同撰寫,透過本文的介紹,我們可以了解到零知識證明在區塊鏈領域的廣泛應用,技術路徑,發展趨勢與所面臨的挑戰。相信隨著硬體技術與密碼學的發展,零知識證明將在未來取得更多突破,為數位世界提供更快速,更安全的應用服務。