作者 | Faust & Abyss,極客 Web3

摘要:自從各種跨鏈橋橫空出世以來,緊隨的各種黑客攻擊事件幾乎從未停止,2022 年 Axie 官方跨鏈橋被盜 6.2 億美元一事更是震撼了世人,無數人開始思考如何解決跨鏈橋的安全與免信任,但時至今日,這個領域依然存在許多懸而未決的問題。
 
但與公鏈賽道一樣,跨鏈橋在設計思路上同樣存在 “不可能三角”,而且實質今日仍然無法打破。爲了在成本與 UX 上具備優勢,絕大多數跨鏈橋都採用了類似於多籤的見證人模型,而這種方案從落地的第一天起,就是黑客眼中的香餑餑。
 
慘痛的歷史經驗告訴我們,沒有添加防護措施的見證人橋遲早會出事,但這種橋在整個比特幣生態已然是家常便飯,讓人感到毛骨悚然。
 
本文將要介紹的 Bool Network,在爲跨鏈橋項目方提供動態輪換的見證人基礎上,結合隱私計算和 TEE 封裝密鑰,嘗試在傳統見證人橋的安全模型上進一步優化,解決跨鏈橋的去中心化問題,這也許能爲比特幣跨鏈橋帶來破局的希望。

比特幣生態的現狀:到處都是多籤
 
跨鏈橋的本質,是向 B 鏈證明 A 鏈上有人發起了跨鏈請求,且當事人按照規定支付了費用。要證明這件事,可以有不同的實現路徑。
 
輕客戶端橋往往在鏈上部署智能合約,在鏈上 Native 的驗證跨鏈消息,這種橋的安全性最高,但成本也最高昂,而且無法在比特幣鏈上實現(目前打着比特幣 ZK 橋旗號的項目方,只能保證 BTC 跨到其他鏈時走 ZK 橋,BTC 再跨回去時無法通過 ZK 橋來實現)。
 
以 BitVM 爲代表的樂觀橋,通過欺詐證明來確保跨鏈消息被如實處理,但這種方案落地難度極大。絕大多數比特幣跨鏈橋最終都採用了見證人的模式,在鏈下指定幾個見證人,由見證人驗證並確認所有的跨鏈消息。
 
DLC.link 爲代表的 DLC 橋,雖然在預言機 / 見證人多籤基礎上引入支付通道的思路,最大程度限制見證人作惡的場景,但還是無法在根源上徹底抹除多籤的隱患。



(跨鏈橋不可能三角主要指:1. 可擴展性:能否支持任意消息的傳遞 2. 無需信任:不引入或儘量少引入信任假設 3. 易適配性:落地難度,能適配包括比特幣在內的不同公鏈)

最終我們會發現,在 BitVM 落地前,除了閃電網絡 / 支付通道或 RGB++ 這類基於客戶端驗證或同構綁定的項目以外,其他的比特幣跨鏈橋骨子裏都是多籤。

歷史早已證明,如果不解決多籤跨鏈橋乃至於大型資管平臺的去信任問題,出現資金被盜事件將只是時間問題。

對此,一些項目方讓見證人超額抵押資產,以潛在的 Slash 來作爲懲戒條件,或是讓大機構充當見證人提供信用背書,弱化跨鏈橋的安全隱患。但歸根結底,基於見證人模式的橋,安全模型和多籤錢包基本一致,最終都要按照閾值,比如 M/N 來判定其信任模型,容錯率比較有限。



如何設置和處理多籤,如何讓多籤儘可能去信任,如何杜絕見證人做惡或擡高外界的攻擊成本,將是比特幣二層跨鏈橋需要長期思考的議題。

有沒有什麼辦法可以讓多籤參與者難以串謀作惡,並且讓黑客難以從外界盜取密鑰?Bool Network 嘗試通過一套基於 ZKP-RingVRF 算法和 TEE 的綜合方案來解決見證人橋的安全問題。

Bool 網絡:專爲跨鏈橋等設計的隱私計算基礎設施

其實,無論是 KYC 或是 POS 或是 POW,本質都是爲了去中心化和反女巫,防止重要的管理權限集中在少數人手上。在 POA 和 KYC 之上使用多籤 /MPC 方案,雖然可以通過大機構的信用背書來緩解安全風險,但這種模式和中心化交易所沒有本質區別,你還是要信任這些被欽定的見證人不挪用跨鏈橋資金池裏的錢,這其實就是聯盟鏈,從根本上違反了區塊鏈的 Trustless 精髓。

基於 POS 的多籤 /MPC 方案比 POA 更去信任,准入門檻遠比後者低,但還是會面臨各種各樣的問題:比如節點的隱私泄露。

假設現在有幾十個節點組建的見證人網絡,專門服務於某個跨鏈橋,由於這些節點需要頻繁的交換數據,其公鑰和 IP 地址或是其他的身份信息容易對外暴露,攻擊者可以針對性的構建攻擊路徑,最終往往會導致某些節點的密鑰被盜。此外,見證人也可能內部串謀,當節點數量比較少時,這種事很容易發生。

那麼我們該如何解決上述問題?你可能會本能的聯想到,要加強密鑰的保護措施,防止被外界窺探到。一種比較可靠的方法是把密鑰封裝在 TEE(可信執行環境)當中。

TEE 允許節點設備在本地的安全區域內運行軟件,系統中的其他組件無法訪問其數據,你可以把私密數據或程序隔離在安全的執行環境中,防止機密數據被泄露或是被惡意操縱。

這裏的問題是,如何保證見證人的確是在 TEE 中存放密鑰並生成簽名的?其實只要讓見證人出示 TEE 的遠程證明信息,就可以驗證它是否跑在 TEE 裏,我們只需要在任意一條鏈上驗證 TEE 證明即可,成本幾乎可以忽略不計。

(前不久 Scroll 也宣佈採用 TEE 作爲 ZKEVM 之外的輔助證明器,並驗證了其 Sepolia 測試網上的全部區塊)



當然,除了 TEE 之外,問題還沒完。就算你引入了 TEE,假如見證人的總量不多,比如說只有 5 個,我們還是會遇到各種問題,即便封裝在 TEE 中的密鑰無法被 “看到”,由少數人組成的見證人委員會還是無法保障抗審查性和可用性。比如上述 5 個節點如果集體跑路,讓跨鏈橋陷入癱瘓,這個時候橋接資產無法順利的 lock-mint 或贖回,基本等價於永久凍結。

在綜合考量了兼容性、去中心化、成本等因素後,Bool Network 提出了這樣一種構想:

我們通過資產質押的方式,構建出一個 Permissionless 的候選見證人網絡,只要你質押足額的資產就可以加入進來;當網絡規模足夠大,比如說接入了幾百上千臺設備後,我們定期從網絡中隨機抽取一些節點充當跨鏈橋的見證人,以此來規避見證人 “階級固化” 的問題(這種思路在現在的 POS 以太坊身上也有體現)

那麼該如何讓抽籤算法具備隨機性呢?傳統的 POS 公鏈如 Algorand、Cardano 通過引入 VRF 函數,週期性的讓 VRF 函數輸出僞隨機數,通過輸出結果抽取出塊人。但傳統 VRF 算法往往無法保護隱私,有哪些人蔘與了 VRF 計算過程、VRF 輸出的隨機數關聯着的被選中者都有誰,幾乎暴露在陽光下。
 


而跨鏈橋的動態見證人與 POS 公鏈動態選拔出塊人要考慮的問題不同,公鏈的出塊人即便身份泄露了,往往也無傷大雅,因爲攻擊者的作惡場景有限,會受到許多限制條件的約束;
而跨鏈橋見證人身份一旦泄露,黑客只要獲取到其密鑰,或是這些見證人內部勾結,就會讓整個橋接資產資金池徹底陷入危機。Anyway,跨鏈橋和 POS 公鏈的安全模型是差了十萬八千里的,必須更重視見證人的身份保密。

我們本能的想法是,最好把見證人名單隱藏起來,而 Bool Network 在這方面採用了原創的環狀 VRF 算法,把選中的見證人身份隱藏在全體候選人中,其整體細節比較複雜,我們將其簡化後表述如下:

1. 所有的候選人在進入 Bool 網絡前,先在以太坊或 Bool 自己做的一條鏈上質押資產,留下一個公鑰作爲註冊信息。這個公鑰又稱爲 “永久公鑰”。全體候選人的 “永久公鑰” 構成的集合,在鏈上公開可見。這個永久公鑰說白了就是每個人的身份信息;

2. 每過幾分鐘~半小時,Bool 網絡會通過 VRF 函數,隨機挑選出幾個見證人。不過在此之前,每個候選人要在本地生成一次性的 “臨時公鑰”,同時生成 ZKP,證明該 “臨時公鑰” 與鏈上有記錄的 “永久公鑰” 有關聯;換句話說,通過 ZK 證明自己存在於候選人名單中,但又不透露是哪一個人;

3.“臨時公鑰” 的作用在於什麼?正是爲了隱私保護。如果直接從 “永久公鑰” 集合中抽籤,公佈抽籤結果時,大家會直接知道哪些人當選,這個時候安全性會大打折扣。

如果大家都臨時提交一次性的 “臨時公鑰”,再從 “臨時公鑰” 集合中選出幾個中籤者,你最多隻知道自己中籤,因爲你不知道其他中籤的臨時公鑰對應着誰。

4. 這還不算完。Bool 網絡打算這麼搞:直接讓你不知道自己的 “臨時公鑰” 是啥。這該怎麼做呢?只要把臨時公鑰明文放在 TEE 里加密成 “亂碼” 後再發出去就行。



我們可以把 “臨時公鑰” 的生成也放到 TEE 裏執行,由於 TEE 可以把數據和計算加以保密,你根本不知道 TEE 裏發生了啥。當 “臨時公鑰” 生成完畢後,會加密成 “亂碼” 再發到 TEE 外部,這時你根本不知道自己的 “臨時公鑰” 的原文是啥,只能看到一個加密後的密文(需要注意,第二段提到的,證明臨時公鑰和某個永久公鑰有關聯的 ZKP,也和臨時公鑰一起被加密了)。

5. 候選人要把亂碼形態的 “臨時公鑰” 密文,發送給指定的 Relayer 節點。Relayer 負責解開這些亂碼形態的密文,從中還原出全部的 “臨時公鑰” 原文。

這裏有個問題,就是 Relayer 知道每個密文的發送者是誰,只要他把每個密文解析成 “臨時公鑰”,自然而然就知道了每個 “臨時公鑰” 對應着哪個人。所以,上述工作也要在 TEE 裏做,幾百人的公鑰密文進入 TEE,出來後變成了公鑰原文,就像混幣器一樣,可以有效保護隱私。

6.Relayer 得到了原始的 “臨時公鑰” 後,把它們統一歸集,提交給鏈上的 VRF 函數從中抽選出中籤者,也就是從這些 “臨時公鑰” 中挑出幾個中籤人,組建下一屆的跨鏈橋見證人委員會。

這樣一來整體的邏輯其實就清晰了:我們定期的從見證人臨時公鑰集合中隨機挑選幾個,充當跨鏈橋的臨時見證人,這個設計被命名爲 DHC(動態隱藏委員會)。

因爲每個節點都運行 TEE,MPC/TSS 的私鑰片段,還有見證人運行的核心程序、所有的計算過程,都隱藏在 TEE 環境內,每個人都不知道具體的計算內容包括什麼,就連被選中的人自己都不知道被選中,這樣可以從根本上防止串謀或者外部攻破。



Bool Network 跨鏈消息的生命週期
 
在介紹完了 Bool 隱藏見證人身份和密鑰的大體思路後,讓我們來梳理下 Bool Network 的工作流程。我們假設左邊是源鏈右邊是目標鏈,上面的整個圖構成了資產從源鏈到目標鏈的全流程生命週期,由此我們從數據流轉的角度剖析一下 Bool Network 跨鏈的 4 個過程:



首先,提款人在源鏈發起提款動作後,消息被 Realyer 發送到 Messaging Layer 層;消息在到達 Messaging Layer 層後,由動態委員會對消息進行驗證,確定消息在源鏈確實存在且有效,然後進行簽名。

可能有人要問,既然前面提到,每個人都不知道自己有沒有被選到見證人委員會裏,怎麼才能把消息傳遞給指定的人並讓他們簽名呢?其實這很好解決,既然不知道有誰是選中的見證人,那我們乾脆就全網廣播,把待處理的跨鏈消息傳遞給每一個人。

最開始我們曾提到,每個人的臨時公鑰都是在本地 TEE 裏生成和封裝的,在 TEE 外部看不到臨時公鑰。要驗證自己的臨時公鑰是否被選中,這部分邏輯直接部署在 TEE 內,只要把待處理的跨鏈消息輸入 TEE,TEE 內部的程序就會確定是否要對消息進行簽名確認。



在 TEE 內對跨鏈消息簽名後,還不能直接把數字簽名發出去,因爲如果你把簽名直接往外發,大家會發現你對跨鏈消息附加了簽名,猜到你是選中的見證人之一。所以,要想辦法讓外界不知道你是否對跨鏈消息簽名了,最好的辦法就是對簽名信息本身加密,就和前面提到對臨時公鑰加密的思路類似。

總結就是:Bool Network 會通過 P2P 傳播,把待簽名的跨鏈消息傳遞給所有人,選中的見證人在 TEE 內對消息進行驗證和簽名,然後把加密後的密文廣播出去,其他人收到了密文後,再放進 TEE 內解密,重複上述流程,直到所有被選中的見證人都簽名完畢,最後被 Relayer 解密成 TSS 簽名的原始格式,完成跨鏈消息的確認和簽名流程。

核心在於,幾乎所有的活動都在 TEE 內進行,從外部看根本不知道發生了什麼。每一個節點都不知道見證人有誰,不知道自己是不是選中的見證人,從根本上防止了串通作惡,並大幅度增加了外部攻擊的成本。

要攻擊基於 Bool Network 的跨鏈橋,你需要確定動態委員會裏的見證人都有誰,但你根本就不知道它們是誰,這時你只有攻擊整個 Bool 網絡纔行。像 ZetaChain 等單純基於 POS 和 MPC 的跨鏈橋基礎設施,其見證人身份全部暴露,假設閾值門限是 100/200,你最少只需要攻擊網絡中一半的節點。

但換到 Bool 身上後,因爲有了隱私保護,理論上你必須攻擊所有的節點纔行。再加上 Bool 所有節點都運行着 TEE,此時的攻擊難度會再度擡升。

並且,Bool Network 本質還是見證人橋,見證人橋只需要在目標鏈上提交一個簽名,就可以完成跨鏈處理流程,成本最低。由於沒有 Polkadot 那樣多餘的中繼鏈設計,避免了二階驗證的冗餘,Bool 的跨鏈速度可以很快。這種跨鏈模式同時兼備了資產跨鏈和消息跨鏈的需求,有着較好的兼容性。

如何評價 Bool 的產品設計思路?

這裏我們拋出兩個觀點,首先資產跨鏈是 ToC 的產品,其次跨鏈橋是競爭大於合作的。從長期看,因爲跨鏈協議的壁壘較高,需求較爲同質化,跨鏈橋相關的資金集中度會越來越高,這是因爲跨鏈協議有着較爲強大的護城河壁壘,包括規模效應和轉換成本。

Bool 身爲比跨鏈橋更底層的專用基礎設施,實際上比上層的跨鏈橋項目方的商業前景更廣闊,它甚至還可以承擔預言機的功能,而不僅僅把場景侷限在跨鏈消息驗證,理論上還進入全鏈 oracle 的賽道,真正的構建去中心化 oracle 並提供隱私計算服務。