原文:Bridging the Multichain Universe with Zero Knowledge Proofs(Ingonyama)
編譯: ChinaDeFi
橋是一種通信協議,用於促進區塊鏈之間的信息傳輸(消息、資金或其他數據)。建造橋雖然有用,但卻是一件有風險的事情。區塊鏈歷史上最代價慘重的一些黑客攻擊都僅針對橋。
據估計,截至 2022 年,過去一年損失的資金中,69% 是由於橋攻擊造成的,損失達數十億美元。
在本文中,我們關注使用零知識證明 (ZKP) 的橋結構的具體實現。雖然有些黑客攻擊不能僅僅因使用 ZKP 而做到預防,但 ZKP 的可靠性將區塊鏈共識協議的安全性擴展到了橋。
橋與零知識證明
近年來,我們看到零知識證明 (ZKP) 在應用方面取得了巨大的進展,其穩定性為提供安全和去中心化的應用程序創造了條件。因此,ZKP 也被用於製定橋建設是有意義的。下面,我們回顧和比較這一領域的三個有趣的發展:
- 使用 zk-SNARK(Succinct Labs)對共識進行簡潔驗證:使用單個 zk-SNARK 實現以太坊 PoS(權益證明) 輕客戶端。
- 通過 zk-SNARKS (Electron Labs) 將 IBC (區塊鏈間通信) 引入以太坊:Cosmos SDK(Tendermint)上的工作原型到帶有單個 zk-SNARK 的以太坊輕客戶端。
- zkbridge:無需信任的跨鏈橋變得實用 ( ( Berkley RDI ):使用 2 步遞歸 zk-SNARK 實現 Cosmos SDK 到以太坊輕客戶端,以太坊輕客戶端到兼容 EVM 的區塊鏈 (本文未涉及)。
這些項目利用 zk-SNARK 的特性來重新定義橋應該如何設計。以上所有假設都存在一個輕客戶端協議,該協議確保節點可以同步最終區塊鏈狀態的區塊頭。將 ZKP rollup 背後的思想應用於橋的兩個主要挑戰是:首先,與 rollup 相比,橋中涉及的電路大小要大幾個數量級;其次,如何減少鏈上的存儲和計算開銷。
共識證明的簡明驗證 (Succinct Labs)
Succinct Labs 為以太坊 2.0 權益共識證明構建了一個輕客戶端,在 Gnosis 和以太坊之間構建了信任最小化的橋,它使用 zk-SNARK(非零知識) 的簡潔屬性來高效地驗證鏈上共識有效性證明。
該設置由以太坊中每 27 小時隨機選擇的 512 名驗證者組成的同步委員會組成。這些驗證者被要求在其運行週期內對每個區塊頭進行簽名,如果超過 2/3 的驗證者對每個區塊頭進行簽名,則以太坊的狀態被認為是有效狀態。驗證過程主要包括:
- Merkle 證明的區塊頭
- Merkle 證明的同步委員會中的驗證者
- 用於正確輪換同步委員會的 BLS 簽名
上述驗證需要每 27 小時在鏈上存儲 512 個 BLS 公鑰,並且要對每個區塊頭驗證簽名都進行驗證,這將導致 512 個橢圓曲線添加 (在曲線 BLS12-381 中) 和鏈上的配對檢查,該操作的成本是高昂的。這裡的核心思想是使用 zk-SNARK (Groth16) 來生成有效性證明 (大小恆定),並且可以在 Gnosis 上進行有效的鏈上驗證。
以太坊輕客戶端在 Gnosis 鏈上使用 Solidity 智能合約,而鏈下計算包括構建 circom 電路以驗證驗證者及其 BLS 簽名,然後計算 zk-SNARK 證明。在此之後,區塊頭和證明被提交給智能合約,然後智能合約在 Gnosis 鏈上執行驗證。SNARK 計算部分的電路大小和驗證時間總結如下:
優化包括使用驗證者的 512 個公鑰 (PK) 輸入作為使用 ZK 友好的 Poseidon hash 的承諾。Poseidon hash 解決了存儲開銷問題並減小了電路大小。減小電路尺寸的過程如下;受信任的委員會在 27 小時後更新,之前的委員會使用 SSZ (Simple Serialization),使用 SHA256 序列對新的委員會進行數字簽名。而不是直接在創建大型電路的 SNARK 中使用它 (每個位操作需要一個門,在 SHA 中有大量的位操作),對當前公鑰使用 Poseidon hash 的承諾。
總結:它所使用的這種橋接方法非常特定於應用程序 (依賴於共識協議),它的安全性來自於 zk-SNARK 的穩定性。此外,通過優化,它不僅實現了較低的存儲開銷,降低了電路複雜度,完成了簡潔驗證,同時也具有通用性。
將 IBC 引入以太坊 (Electron Labs)
Electron Labs 旨在從 Cosmos SDK 生態系統 (應用特定區塊鏈的框架) 中構建一座橋,使用 IBC(區塊鏈間通信) 來實現框架中所定義的所有主權區塊鏈間的通信。
此設置與前面討論的情況類似,但方向相反,其中輕客戶端 (來自 Cosmos SDK) 需要在以太坊上的智能合約中進行驗證。從實際意義上講,在以太坊上運行來自其他區塊鏈的輕客戶端似乎具有挑戰性。在 Cosmos SDK 中,Tendermint 輕客戶端運行在扭曲的 Edwards 曲線 (Ed25519) 上,以太坊鏈本身不支持該曲線。因此,以太坊 (BN254) 上 Ed25519 簽名的鏈上驗證變得低效且成本高昂。
與我們前面的討論類似,Cosmos SDK 上的每個區塊頭 (每個區塊頭由曲線 Ed25519 上的約 128 個 EdDSA 簽名組成) 由一組驗證者簽名組成 (驗證一個區塊需要 32 個高風險簽名)。驗證簽名會生成大型電路,這是一個重要的計算組件。因此,基本問題是如何在以太坊鏈上高效、便宜地驗證來自 Cosmos SDK 中任何區塊鏈的 Ed25519 簽名。解決方案是構建一個 zk-SNARK,它在鏈下生成簽名有效性的證明,並且只在以太坊鏈上驗證證明本身。
circom 庫支持 BN128、BLS12-381 和 Ed448-Goldilocks 曲線,因此,為了在素數 p=2^(255)-19 的 Ed25519 曲線上執行模運算,可以將字段元素的表示分解為更小的 85 位整數 (85*3=255),以實現高效的模運算。circom 生成的電路是 Ed25519 簽名驗證電路的 R1CS 表示,它由橢圓曲線點加法/加倍和上面定義的模運算組成。用於簽名驗證的電路使用 circom 庫構造,每次簽名驗證會產生約 2M 的約束。
在見證計算之後,Rapidsnark 庫為 Ed25519 簽名驗證生成 Groth16 證明。與 BLS 簽名不同,Ed25519 曲線簽名不可聚合,因此不能為聚合簽名生成單個 zk-SNARK 證明。相反,簽名是批量驗證的,並且可以觀察到,驗證時間與批次中的簽名數量成線性關係。
因此,減少一批次中的簽名數量,確實可以降低證明時間 (減少延遲),但隨之也會增加成本 (gas 費),因為每批生成的證明數量會增加。
總結:這種橋接方法也特定於它們的應用程序,並具備源於 zk-SNARK 證明的可靠性的安全性。特別是,在不引入任何新的信任假設的情況下,它驗證了以太坊上 Tendermint 輕客戶端的 Ed25519 簽名。域外模塊化算法是一種有價值的鏈上驗證計算優化方法。與 Succinct Labs 方法類似的一個具體技術問題是延遲。Cosmos SDK 中的區塊生成速率約為 7 秒,為了跟上這個速率,證明時間就不得不降低。Electronlabs 提出用多台機器並行計算,以與區塊生成速率相同的速度生成證明,並進行遞歸生成單個 zk-Snark 證明。
zkbridge(Berkley RDI)
與其他兩個行業主導的 ZKP 橋結構不同,zkbridge 是一個框架,可以在其之上構建多個應用程序。這個想法類似於前面討論的兩種方法,並且需要兩個鏈上的輕客戶端和智能合約來跟踪摘要,對應於兩端的最新狀態。橋的核心組件是區塊頭中繼網絡、更新合約和應用程序特定合約 (發送方:SC1,接收方:SC2)。
區塊頭中繼網絡由中繼節點網絡組成,這些中繼節點偵聽橋接鏈上的狀態變化,並從區塊中的完整節點檢索區塊頭。橋上中繼節點的主要功能是生成一個 ZKP,該 ZKP 驗證來自一個鏈的區塊頭的正確性,並將其轉發給另一個鏈上的更新合約。更新合約會進行驗證並接受或拒絕來自中繼網絡中的節點的證明。行業主導的方法和 zkbridge 之間的主要區別是,信任假設基本上簡化為中繼網絡中存在一個誠實節點,並且 zk-SNARK 是可靠的。
這種結構的一個關鍵創新是並行使用了 zk-SNARK: Virgo prover(deVirgo),它具有簡潔的驗證/證明大小,不需要可信的設置。其用於驗證 N 個簽名的電路本質上由相同的子電路的 N 個副本組成,稱為數據並行電路,每個子電路與其他子電路相互排斥。例如,前面一節中討論的 Ed25519 簽名驗證就是這種情況。
Virgo prover 的核心組件是基於 GKR 協議的零知識擴展,該協議為分層電路中的每個子電路和多項式承諾方案運行總和校驗參數。deVirgo 泛化本質上是在一組中繼節點上運行一個 Virgo prover,並通過將證明和多項式承諾聚合到一個主節點來避免證明大小的線性增長。
對於使用大約 10M 門驗證 100 個簽名的電路,證明大小為 210KB(與 Virgo prover 大小相同)。Zkbridge 使用兩步遞歸。在第一步中,生成一個 deVirgo 證明,然後使用 Groth16 prover 對其進行壓縮。Groth16 verifier 生成 deVirgo 電路執行的完整證明。遞歸的主要目的是實現簡潔 (證明尺寸) 和降低驗證 gas 成本。
然後,中繼網絡將 Groth16 證明提交給可以在鏈上驗證它的更新合約。deVirgo 證明系統具有後量子抗性,因為它只依賴於抗碰撞哈希函數,主要的計算瓶頸是大型電路中的數論變換 (NTT)。有一件事似乎沒有被提及,即中繼網絡的計算將遭受與 MPC 相同的通信複雜性,這也將影響證明時間。對於中繼網絡中的 N 台機器,GKR 多層和校驗協議的通信複雜度為 O(N log_2(gates per layer))。即使對於 32 個簽名的情況,在中繼網絡中有 32 台機器,這也將導致網絡中的通信輪數比較多,這可能會完全扼殺分佈式計算帶來的性能。
使用上述方法解決了前面討論的來自 Cosmos SDK-Ethereum 輕客戶端的 Ed25519 簽名驗證問題。橋由一個中繼網絡組成,它獲取 Cosmos 區塊頭並生成一個 deVirgo 證明用於分佈式證明生成。接下來,由 Electron-labs 設計的優化簽名驗證電路的 Gnark 適配在遞歸的第二步生成 Groth16 證明。
更新合約在以太坊的 Solidity 中實現,並跟踪 Cosmos 區塊頭和中繼網絡的 Groth16 證明。驗證成本是恆定的<230K gas,這是由於 Groth16 證明的恆定大小。此外,有可能批量驗證 B 個連續區塊頭,並為 B 個頭生成單個證明。然而,增加批次的大小也增加了驗證時間,但由於鏈上的驗證負擔較小,因此會降低 gas 成本。和以前一樣,硬件加速也可能進一步改進 Gnark prover。
總結:zkbridge 是在橋上構建應用程序的框架。橋的設計使用中繼網絡來生成 ZKP,並且具有最低的信任假設。只要能夠克服中繼網絡中類似 MPC 的通信複雜性,就可以使用任何可並行化的 ZK prover。更具體地說,先不考慮 deVirgo 中繼網絡的 MPC 複雜性,NTT 是中繼節點的單個 Virgo prover 組件的瓶頸。
快速比較:
下面我們對本文討論的三種橋樑結構的各種特徵進行快速比較。
綜上所述,使用 ZKP 設計橋,解決了去中心化和安全性問題,但由於電路規模大而產生了計算瓶頸。
計算開銷的問題可以通過硬件加速來改善,特別是使用 SNARK,以及提交公共數據的技巧,它們可以有效的減少存儲開銷。由於大部分的橋接工作都是證明數據並行電路,因此將 ZKP 推廣到像 deVirgo 這樣的並行性是有價值的研究方向。
此外,由於多鏈宇宙中的區塊鍊是根據應用程序在各種各樣的領域 (字段,曲線) 上定義的,字段內外算法的優化在最低級別上是至關重要的構建模塊。通過 MPC 生成證明的並行性在通信複雜度方面有其自身的瓶頸,這是目前尚未解決的問題。
為什麼多鏈宇宙是碎片化的?
區塊鏈生態系統的當前狀態類似於泡沫宇宙(碎片化多鏈宇宙)的異構分佈,每個都有自己的共識機制、設計、應用程序和用例規則。截至撰寫本文時,有超過 100 個第 1 層 (L1) 區塊鏈協議,用戶數量不斷增長,隨著區塊鏈用例的增加,這個數字可能還會增長。
區塊鏈三難困境指出,很難同時實現理想區塊鏈的三個基石:
- 去中心化
- 可擴展性
- 安全
根據用例的不同,除了吞吐量和成本之外,三個基石的重要性順序也可能不同。三難困境中的不同權衡可以想像成在保持面積不變的情況下三角形的變形。當兩個角互相靠近時,第三個角會移動得更遠。這些權衡導致了區塊鏈的不同概念,從而使開發人員能夠自由地為合適的應用程序選擇不同的平台。這同時也導致了碎片化的多鏈宇宙,每個區塊鏈基本上都是獨立運行的,完全 “不知道” 其他區塊鏈的存在。
多鏈宇宙中的鏈間通信,通常被稱為互操作層,是充當不同區塊鏈之間橋樑的基礎設施。橋使用戶能夠在鏈之間傳遞消息,包括數字資產(加密貨幣)、鏈狀態、合約請求、證明等。簡而言之,跨鏈橋 “整理” 了碎片化的多鏈世界。因此,很多研究和開發都集中在構建多鏈宇宙中的這個關鍵組件上。
建設橋
橋是一種雙向通信協議,它向另一個鏈 C2 中的應用程序證明一個鏈 C1 中的事件的發生,反之亦然。為了簡單起見,我們使用術語,源鏈 (C1) 和目標鏈 (C2),它們是可以互換的。C1 上的狀態更改必須在 C2 上 “鏈上” 進行驗證。這通常是由輕客戶端完成的:C2 上的合約跟踪 C1 上的一組區塊頭,並使用與從源鏈提交的根對應的 Merkle 證明對它們進行驗證。一般來說,C1 和 C2 可以在不同的域中工作。除了不斷增加的區塊頭列表之外,客戶端還需要存儲和驗證新出現的區塊頭。這將導致顯著的計算和存儲開銷,而且通常效率低下。為了繞過這個問題,許多橋的建造都採取了更中心化的方法。
致命弱點:輕客戶端協議,有一小組可信任的驗證者來簽署狀態更改。
這通常發生在資金轉移的情況下,其中將大量信任假設放在中心化的橋實體上,該實體通常由少量受信任方組成。這違背了區塊鏈的基本原則,也帶來了與審查和安全相關的問題。
大多數現有的橋 (為了流動性) 通過鎖定-鑄造-銷毀-釋放機制運行。用戶通過將資金發送到鏈 C1 上的橋協議與橋進行交互,橋協議將這些資金 “鎖定” 到合約中,即這些資金在 C1 中不可用。橋允許用戶在另一個區塊鏈 C2 中鑄造等值的資金。一旦用戶花費了一些資金,並希望將剩餘的資金返回到 C1,他就 “銷毀”C2 中的資金,橋對其進行驗證,並 “釋放”C1 中的剩餘資金。在這樣的鏈間橋中,大量資金可能存放在其安全性依賴於少數受信任方的橋中,使其成為攻擊的活躍目標。
總的來說,建造橋的主要技術挑戰是:
- 低計算開銷 (有效處理跨域數據)。
- 低存儲開銷。(簡潔)
- 安全/去信任。(可靠性)
免責聲明:作為區塊鏈信息平台,本站所發布文章僅代表作者及嘉賓個人觀點,與 Web3Caff 立場無關。文章內的信息僅供參考,均不構成任何投資建議及要約,並請您遵守所在國家或地區的相關法律法規。