NONDUBITO

鑿構週期律 · 區塊鏈系列 15 / 21

橋

跨鏈橋沒有讓資產穿過鏈,而是讓一條鏈接受另一條鏈的陳述;事故發生在兩份可驗證賬本之間。

一 讓 B 接受一句話

兩條獨立的鏈之間,不存在一枚幣真的穿過網絡這個動作。

A 鏈的共識只知道 A 的狀態,B 鏈的共識只知道 B 的狀態。

所謂的跨鏈資產移動,實際上必須構造一個跨域的會計關係:A 鏈上可支配的資產減少,同時 B 鏈上出現新的可支配權利。

所以核心問題從來不是怎麼把幣傳過去。

是 B 為什麼相信 A 上真的發生了足以授權 B 鑄造或者支付的事件。

這個問題看上去像技術細節,而它其實是後面七節的全部。

因為 B 鏈自己沒有辦法去看 A 鏈。它的節點只同步自己那條鏈的區塊;它的共識規則只定義自己那些交易是否有效。要它知道 A 鏈上發生了什麼,只有一個辦法:有人把那件事告訴它。

而告訴這個動作,必然發生在兩條鏈的共識之外。

A 鏈的共識管不到它,因為它發生在 A 鏈之外;B 鏈的共識也管不到它,因為 B 鏈無法獨立覈實那件事。

於是就有了一個位置:它對兩條鏈都至關重要,而兩條鏈的安全機制都覆蓋不到它。

餘項從這裡就已經就位了。

它不是某一筆算錯的賬。兩條鏈的賬都算得極准,而且永遠可以復算。它是那個位置本身:一段既不屬於 A 也不屬於 B,而兩邊都必須依賴它的地方。

而這個位置沒有名字。它不是一條鏈,不是一個合約,不是一家公司。它是兩套完備規則中間那一塊誰也沒有管轄的地方。

最典型的流程是這樣的。使用者在 A 鏈把 100 枚 ETH 鎖進橋合約;驗證層向 B 鏈證明這次鎖定;B 鏈隨後創造 100 枚封裝後的 ETH。回來的時候順序反過來:B 上那 100 枚被銷毀,A 上鎖著的才允許釋放。

所以它絕不是同一枚 ETH 跑到了另一條鏈。

B 上的那個東西,是對 A 上抵押物的一項跨域索取權。

而信任放在哪裡,取決於是誰來證明那次鎖定真的發生了。

如果是多簽或者驗證者集合,B 接受的是達到數量的簽名,新增的信任落在簽名者集合,他們的私鑰安全和簽名軟件上。

如果是門限簽名,B 接受的是達到閾值的分片聯合簽名,新增的信任落在這些節點是否真正獨立,分片如何保管,服務器權限歸誰。

如果是預言機或者外部委員會,新增的信任就落在那個委員會上。

如果是輕客戶端,B 接受的是 A 鏈的共識頭和狀態證明,信任落在 A 鏈的共識安全加上輕客戶端實現的正確性。

如果是有效性證明,B 接受的是一份可驗證的狀態證明,信任落在 A 鏈安全,加上證明系統,電路和驗證器的正確性。

這張表裡沒有一行可以寫成無須信任。

差別只在於:要偽造那句話,必須控制哪一層,付出什麼代價,以及事後有沒有人能把它指出來。

這裡已經可以解釋為什麼橋的鎖倉量特別危險。

A 上鎖住的那 100 枚,是 B 上所有 100 枚封裝資產的共同抵押。

如果允許 B 鑄出 200,或者允許攻擊者在沒有對應銷毀的情況下從 A 釋放 100,那個跨域的會計恆等式就被打破了。

上一篇寫的是一部法律要靠人去執行。

而這一次要寫的是兩條鏈之間。

第十篇裡已經出現過一道縫:鏈上不知道某個價格是 65,000,鏈上知道的是有人說了 65,000。

這一次那道縫挪了位置。

它不在鏈和外面的世界之間,而在兩條鏈之間。

而這兩條鏈都是可驗證的,都是不可篡改的,每一筆都是公開的。

兩個完全可驗證的系統之間,仍然有一道縫。

而後面六節要寫的每一起事故,都發生在這道縫上。

二 四種模型

常見的四種模型,其實不在同一個層面上,而把它們並列成四種橋,會掩蓋真正的問題。

第二種模型不必每次製造一份封裝索取權。假定流動性提供者在兩邊都有穩定幣:使用者把 100 枚交給 A 側的池子,B 側的流動性提供者或者中繼立即給收款人約 100 枚。

這裡錢的兩頭是:A 側庫存增加,B 側庫存減少。隨後協議再通過再平衡或者淨額結算,把資本補回來。

有一家協議當前的費用文檔把使用者所付的總費用明確拆成兩項:流動性費用和中繼費用。前者補償流動性使用和再平衡風險,後者補償中繼方的手續費,資本機會成本和風險。

所以使用者付的錢,並不必然流向一家橋公司。

這種方案把不同的風險拆開了:安全的信任仍然在最終的結算與消息驗證那一層;而即時履約的信任轉成了流動性提供者有沒有資本和經濟激勵;價格與流動性風險由兩側的池子承擔;快速路徑失敗的時候,往往還能回落到較慢的規範結算。

因此流動性橋不托管這句話也需要限定。它可能不建立一個永久的封裝資產抵押倉,而流動性提供者確實在橋的路徑中暴露了資本。

兩種模型的差別可以這樣看。鎖定加鑄造那一路,風險集中在源鏈那個池子上:所有人的索取權靠同一筆抵押撐著。而流動性那一路,風險分散在兩邊的庫存上,代價是要有人長期把資本壓在兩邊。

前者的失效是一次性的,巨大的;後者的失效更可能是漸進的,局部的。

而兩者共有的那一件事沒有變:總要有人告訴一邊,另一邊發生了什麼。

換掉的只是誰在承擔資本,以及資本壓在哪裡。

原子交換的基礎是哈希鎖加時間鎖。一方在 A 鏈鎖定資產,另一方在 B 鏈以同一個哈希條件鎖定另一筆;揭示原像領取一邊的資產,會使另一邊具備同一個秘密,從而可以領取;超時則各自退款。

它的特殊之處是,沒有一個永續的大型橋儲備為所有使用者背書。

這一條使它在安全上有一個別的模型都沒有的性質:失敗的規模,上限是那一筆交易本身。

而代價是它做不成通用的跨鏈消息,也承載不了大額和高頻。這個域最後沒有走這條路,理由不是它不安全,是它不好用。

信任更主要放在:底層兩條鏈的終局性和活性,哈希與時間鎖的正確實現,以及交易對手在協議規定的時間內繼續在線。

代價也來自同一個性質:雙方需要可以配對的資產和流動性,鏈間的時序差異需要處理,而通用的跨鏈消息並不能單靠一次哈希時間鎖解決。

輕客戶端這一路最值得看清楚。

目標鏈保存另一條鏈的輕客戶端狀態,由無需許可的中繼搬運數據包和證明;鏈上驗證對方的共識狀態和成員證明之後才接受這個數據包。

而相關文檔明確區分了一件事:中繼負責的是活性,不是被信任的安全裁決者。只要有人願意中繼,原則上可以替換掉失效的中繼。

所以輕客戶端橋所謂的無信任,更精確的表述不是沒有信任。

是不再額外相信一個獨立的外部驗證委員會;安全性盡可能歸約到底層兩條鏈的共識安全,以及輕客戶端和驗證代碼的實現正確性。

學術方案又向前推了一步:有論文提出用簡潔證明來驗證異鏈狀態,在其原型裡避免外部委員會,並給出了證明生成低於 20 秒,鏈上驗證低於 230,000 gas 的結果。

而這是論文和原型的性能實驗,不能直接寫成生產環境已經解決了橋的安全問題。

現在把這四樣東西的層次分開。

鎖定加鑄造是一種資產會計方式。

輕客戶端,多簽和有效性證明是驗證方式。

流動性網絡是履約方式。

原子交換是另一套結算原語。

把它們都叫四種橋,容易掩蓋真正的安全問題:誰擁有最終的那個權限,也就是 B 鏈現在可以鑄造,或者 A 鏈現在可以釋放。

所以分析一座橋,比看它的鎖倉量,速度或者手續費更穩定的一條軸是這樣的:先找出哪一個組件,能夠把另一條鏈發生了某件事,轉化成本鏈現在允許支付;再追問,能夠控制,偽造,誤導或者升級這個組件的最小主體集合是誰。

後面幾節的每一起事故,都是這條軸上的一個點。

三 九個不等於九

Ronin 恰好說明,只看閾值是幾比幾會得出錯誤的安全感。

按公司自己的事故說明,事發時有 9 個驗證者密鑰,橋提款需要 5 個簽名。

而其中 4 個由 Sky Mavis 自己控制。

2021 年11 月,為了應對使用量和免手續費的請求,Axie DAO 曾經把一個驗證者的簽名路徑列入 Sky Mavis 的白名單。這個臨時安排到 12 月已經不再需要,而白名單沒有被撤銷。

攻擊者入侵 Sky Mavis 的環境取得那 4 把密鑰之後,又通過這條殘留的通道,讓 DAO 的驗證者對惡意提款簽了第 5 個簽名。

所以名義上的門檻是 5 比 9。

而實際的攻擊成本不是攻破五家互相獨立的機構,是 4 把同一組織的密鑰,加 1 條過期的簽名通道。

那條通道之所以還在,理由也很樸素:它是為瞭解決一個真實的運營問題臨時開的,問題解決之後沒有人記得去關。

第六篇裡那個為了處理事故而臨時加上去的機制,後來成了下一次事故的入口。這一次是同一個形狀:臨時的東西留了下來,而它保留的權限和當初一樣大。

密碼學上的閾值沒有被破解。

被破解的是獨立性假設。

幣量這一側最乾淨:173,600 枚 ETH 加 2,550 萬枚 USDC,2022 年3 月23 日被兩筆提款帶走。

而美元數有三個,可以同時成立:約 5.4 億,是按攻擊當日的價格算;約 6.15 億到 6.25 億,多按 3 月29 日披露日附近的價格算。美國財政部採用的是接近 6.2 億這個說法,而公司公告給出的是原始幣量。

還有一個數值得單獨擺:3 月23 日被拿走,3 月29 日才被發現。

六天。

這六天裡,那些封裝資產在另一條鏈上照常交易,照常被用作抵押,照常被計入各種鎖倉量的統計。

而支撐它們的那筆抵押已經不在了。

這六天裡沒有任何一條鏈出錯。兩邊都在正常出塊,兩邊的記錄都完整。

只是沒有人去把兩邊的數加起來對一次。

第三篇裡那家交易所漏了三年沒有人發現,原因是沒有人被指派去盤點。這一次是六天,而原因是同一個。

而這兩次的對照還有一層:那家交易所至少還有一本內部賬,只是沒有人拿它去對鏈上。這一次連那本賬都不必有,因為兩條鏈各自的記錄都是完好的,誰也不覺得需要對什麼。

至於最初的入口,後來有媒體報道稱可能涉及偽裝成招聘材料的定向釣魚。而這一條不是最初官方事故說明直接確認的,所以不能和那個 4 加 1 的官方復盤混寫。

Harmony 把門檻壓得更低。

公司自己的調查稱攻擊者取得了至少 2 把私鑰;而公開的安全復盤通常把當時那座橋描述為 2 比 5 的多簽。

這兩個數字看上去衝突,而實際上統計的對象可能不同:一個描述私鑰的保管主體,一個描述橋驗證者的地址集合。現有材料不足以把兩者強行合成一個口徑,所以應當並列。

Orbit 那個 7 比 10 的說法,則主要來自事發之後的安全研究者和安全公司的復盤。公司最初的公告只確認了異常訪問和資產流出,沒有在一手公告裡完成這個根因認定。

所以它應當被標成安全公司的推斷,而不是公司或者政府的正式事實。

把這三起放在一起,可以得到一組真正應該被記錄的變量。

簽名者的數量。閾值。獨立組織的數量。獨立硬件,雲服務或者密鑰管理系統的故障域數量。以及管理員和升級密鑰能不能繞過那個閾值。

而公開的項目通常最容易披露的,恰恰是前兩個。

最難驗證的,是後三個。

這一節和第二篇那五把尺子是同一類問題,而它更具體。

那一次的問題是,同一個對象有五種度量方式。這一次的問題是,最容易公佈的那個數字,恰恰是安全性最不依賴的那一個。

一座橋可以在文檔首頁寫著 5 比 9,而這九個簽名者住在同一個雲服務商的同一個區域裡。這件事不違反任何一條披露要求,因為沒有人要求披露它。

而更難辦的是,即使有人願意披露,也不容易寫清楚。

兩家公司算不算獨立,取決於它們的股東,董事,辦公地點,運維團隊,以及那幾台機器接在誰的網絡上。這些東西沒有一個可以被寫成合約裡的參數,也沒有一個可以被鏈上驗證。

而恰恰是它們,決定了那個閾值到底值多少。

四 驗證器被騙

Wormhole 那一次的性質,和 Ronin 正好相反。

它的核心錯誤在 Solana 那一側的驗證路徑。攻擊者提供了一個假的指令系統賬戶,而相關的舊函數沒有確認傳入的賬戶確實是系統的那一個。

於是程序被誘導,相信簽名驗證已經發生過,並生成了一份可以供後續使用的已驗證憑據。隨後調用封裝資產的完成路徑,鑄出了 120,000 枚封裝 ETH。

這件事特別適合把兩種攻擊分開。

一種是:偷夠守護者的密鑰,真的產生了達到數量要求的惡意簽名。

另一種是:根本沒有達到數量要求,而驗證代碼錯誤地說已經驗證過了。

Wormhole 屬於後者。

所以 19 個守護者的私鑰體系被攻破,不是材料支持的版本。攻擊者攻的是驗簽的邊界。

按事發時的價格,不同來源給出約 3.2 億或者 3.25 億美元。而計量的對象都是那 120,000 枚的當時市值,不是某個公司賬戶裡的一筆美元現金。

資金的兩頭因此出現了非常清楚的不平衡。

Solana 側憑空多出 120,000 枚索取權,而 Ethereum 側沒有新增 120,000 枚抵押。

Jump 隨即補入了 120,000 枚 ETH,使那些索取權重新有了足額抵押。

而兩年之後通過英國和紐約法院的相關程序追回攻擊者控制的資產,是補資方的資產回收,不是使用者第二次獲得賠償。

這個區分很要緊,因為它決定了那個約九成的追回率在說誰的錢。

補資這個動作本身也值得記一筆。它不是協議設計的一部分,不是保險,不是任何一份文件裡承諾過的東西。

它是一家公司在事發當天決定拿出 120,000 枚 ETH,把那個被打破的會計恆等式重新補平。

如果它沒有這樣做,那些封裝資產的持有人面對的就是一批沒有足額抵押的索取權。

同一類失效還有一起,而它發生在一座原生橋上。

2022 年10 月,BNB 的兩條原生鏈之間那座橋被利用。項目自己確認,攻擊者通過底層證明庫的缺陷偽造了跨鏈證明,額外產生並取出了 200 萬枚 BNB。

按當時的市價,名義鑄出的價值約 5.7 億到 6 億美元。

而攻擊者真正趕在鏈暫停之前轉出的,約 1 億到 1.1 億。

這兩個數之間那四五億,是因為驗證者協調把整條鏈停了。

一條以不停機為設計目標的鏈,靠停機避免了一次更大的損失。而這件事之所以做得到,恰恰是因為那條鏈的驗證者數量足夠少,協調足夠快。

所以把它寫成丟了 5.7 億客戶托管資產,也不準確。

根本的動作是:證明驗證器接受了一份偽造的狀態證明,於是在沒有合法源鏈支持的情況下增發了 200 萬枚。

這和 Wormhole 是同一類失效,而不是簽名者的私鑰被盜。

把這兩起並排,可以看出一件很要緊的事。

Ronin 那一次,協議的規則被完整地滿足了。五個簽名是真的,驗證是對的,合約按規矩執行。出問題的是規則之外:那五把鑰匙不該在同一個地方。

而這兩起正好相反。規則沒有被滿足,而合約以為滿足了。簽名根本不存在,證明根本是假的,而驗證代碼說通過。

前一種,鏈做對了它該做的事,而它該做的事本身不夠。後一種,鏈沒有做對它該做的事。

而這兩種失效對使用者來說沒有區別。兩次都是:某一天早上,那些封裝資產背後的抵押不見了。

而在那一天早上之前,那些封裝資產在另一條鏈上和真的沒有任何區別:一樣可以轉賬,一樣可以進池子,一樣被計入鎖倉量,一樣被當成抵押品去借別的東西。

跨域索取權和它所索取的那樣東西之間的距離,平時是零。

只有在出事的那一天,它才突然等於全部。

這也是這類資產最難被定價的地方。一枚封裝資產的價格,永遠等於它所索取的那樣東西,直到某一天它等於零。中間沒有過渡。

而在它等於零之前,沒有任何一個鏈上的指標會先變。餘額不變,簽名不變,合約不變。

五 零根

Nomad 是這幾起裡最少需要高級技巧的一次大規模災難,而原因是前置的邏輯錯誤已經把安全條件消掉了。

2022 年6 月的一次升級初始化,把可信根這一類狀態處理成了零值。於是那個零值對應的確認時間被賦予了一個可以接受的值;而任何未經證明的消息,在映射裡默認也是零。

結果是,判斷某個根是否可以接受的那個函數,對零返回真。

於是沒有得到合法證明的消息,也可以被處理函數執行。

控制面的一次錯誤升級,直接改變了數據面的驗證語義。

第一批攻擊者證明瞭提款模板可用之後,後面的人只需要四步:複製已經成功的攻擊交易數據,把收款人改成自己,重復提交,等待橋的路由合約支付。

這解釋了為什麼它被稱作眾包式的攻擊。

不是幾百人各自發現了一個漏洞,而是公開的成功樣本,使這次利用可以被低成本複製。

而這也說明瞭另一件事。

2025 年,以色列應美國請求拘捕了一名嫌疑人並批准引渡程序,美國方面指控他在這次事件中扮演核心角色。

這屬於政府的刑事指控,不是法院認定他盜走了全部資產。

而更要緊的是:即便對第一個人建立了刑事證據,也不能自然推出後續所有跟隨提款都由同一人控制。

金額這一側,項目後來使用的是超過 1.86 億美元;而安全公司和媒體廣泛使用的是約 1.9 億。

兩者統計的是同一次多資產事件的不同取價和邊界,都應當保留。

這一起在整個系列裡有一個特殊的位置。

前面十四篇裡,構出問題的時候,通常還需要有人具備某種能力:算力,資本,密鑰,或者一段別人寫不出來的代碼。

這一次不需要任何能力。看得懂一筆交易,會改一個地址,願意付手續費,就夠了。

鏈上的每一筆交易都是公開的,而且帶著完整的調用數據。這本來是這套東西最引以為傲的性質之一:任何人都可以驗證任何一筆交易做了什麼。

而那天下午,任何人也都可以照著做一遍。

這也是為什麼這一起的損失統計特別難做。有多少地址是攻擊者,有多少是路過的人,有多少是原本的使用者試圖把自己的錢先搶出來,鏈上分不出來。

後來的返還裡,確實有人屬於最後那一類。

而這也讓追究變得幾乎不可能。要起訴,先要證明某一個地址背後的人知道自己在做什麼;而在那幾個小時裡,同一段調用數據被幾百個地址提交過。

一次攻擊可以有幾百個共同實施者,而其中大多數人此前互不相識,事後也不會再見。

而這恰恰是可組合性和公開性的另一面:同一個使一筆交易可以被任何人驗證的性質,也使它可以被任何人複製。

追兩頭在這一起裡也變得很特別。

通常的攻擊裡,拿走錢的是一個可以被追蹤,被起訴,被談判的對象。而這一次,拿走錢的是幾百個地址,其中相當一部分屬於看到消息之後臨時加入的人。

後來約 3,600 萬美元被自願返還,而其餘部分只能按賠償主張按比例處理。

所以這一起裡那個通常最有用的問題,也就是錢在誰手裡,第一次沒有一個可以行動的答案。

六 雲賬戶

Multichain 那一次最危險的東西,不是門限簽名這個算法。

是它在現實世界裡的控制結構。

2023 年7 月6 日起,該協議出現異常提款。一家分析公司最初統計超過 1.25 億美元,其中近 1.2 億來自其中一條鏈的橋;穩定幣發行方後來凍結了相關地址約 6,500 萬美元。

後續把更多異常轉移納入之後,另一些機構使用的總損失口徑是至少 2.1 億。

這兩個數不是誰對誰錯。前一個是 7 月6 日第一波主要的未授權提款,後一個是把隨後跨多鏈的異常流出納入之後的廣義口徑。

項目在 7 月14 日的自述裡說了幾件事。

首席執行官自 5 月21 日起被中國警方帶走;那些門限簽名的節點服務器,運行在他的個人雲服務賬戶之下;警方還扣走了他的計算機,手機,硬件錢包和助記詞;團隊隨後發現節點服務器的訪問權限被撤銷。

項目又稱,他的姐姐此後曾為了資產保全移動剩餘資產,隨後也被警方帶走。

所有這些關於警方行為以及移動資產目的的描述,證據層級都是公司自述,不是公開的司法裁判。

鏈上可以證明資產從那些受控地址被有效授權轉走。

而鏈上記錄不能單獨證明,控制者究竟是外部黑客,內部人員,家屬,還是執法機關。

那家分析公司當時的寫法也很謹慎:可能的攻擊或者捲款,可能是管理員密鑰被控制。

新加坡高院 2024 年的判決提供了極有價值的鏈外材料。它記載了原告關於這個控制結構的證據,並指出它與使用者協議所宣傳的,不能由一個人控制的去中心化架構存在衝突。

而法官明確表示,他沒有就原告關於欺詐,轉移資產等全部實體指控作出事實認定,因為相關責任首先來自缺席判決。

所以門限簽名這三個字本身,幾乎沒有安全含義。

需要問的是另外五個問題:分片在哪些機器上;雲賬戶歸誰;恢復短語歸誰;節點是否真正由獨立實體運維;管理員能不能替換節點。

Orbit 那一側還有一處必須寫准的東西。

公司在 2024 年1 月指控一名前任安全負責人在離職前擅自弱化了防火牆,並就此起訴,請求警方調查;同時公司稱也在調查另一種可能。

這裡尤其不能寫成那名前任負責人導致了攻擊。

材料只證明公司提出了這一指控,並訴諸調查。

把這一節和第三節接起來讀,能看出一條完整的下降。

Ronin 那一次,九把鑰匙確實存在,只是不夠獨立。

這一次,那些節點確實存在,而它們運行在一個人的賬戶下面。

所以門限簽名這類方案在紙上防的是共謀:沒有足夠多的節點一起作惡,就出不了簽名。而它防不了的是另一件事:那些節點在物理上,在行政上,在法律上,可能根本就是同一個東西。

這件事在鏈上看不出來。鏈只看得見有多少個地址簽了名。

而這一節還留下了一個這個系列裡少見的空白。

那筆錢去了哪裡,鏈上可以追;而它是被誰授權轉走的,至今沒有一個經過司法認定的答案。公司自述指向一個方向,分析公司當時用的措辭是可能的攻擊或者捲款,而新加坡的法院明確說自己沒有就這些指控作事實認定。

三份材料,三種證據層級,而它們指向的不是同一個結論。

這不是這個系列第一次遇到這種情形,而它在這裡最徹底:一筆上億美元的資產被轉走,鏈上每一步都可查,而三年之後,那筆轉賬是誰授權的仍然沒有一個可以引用的認定。

鏈上透明解決的是錢去了哪裡。它沒有解決,也不打算解決,是誰讓它去的。

七 三個分母

追回率不能放在一張表裡直接排名,因為至少有三個完全不同的分母。

一個是資產追回率:從攻擊者控制中取回的資產,除以原來被盜的資產。

一個是使用者賠付率:最終支付給受損使用者的價值,除以被認可的損失。

還有一個是協議償付能力的恢復程度。

這三個可以差得非常遠。

一座橋可以追回九成資產而使用者一分沒拿到,因為追回的是補資方的錢;也可以使用者全額獲償而資產一分沒追回,因為是公司自己掏的。

把這兩種情況放在同一張追回率排行榜上,得到的數沒有任何意義。

而這七起事故恰好顯示了至少四種不同的結果。

Poly 主要依靠攻擊者主動返還。它的攻擊本身也常被寫錯:那不是守護者私鑰洩露,而是攻擊者在更靠前的授權邏輯上,取得了改寫守護者名單的能力。事後攻擊者陸續歸還了絕大部分資產,另有穩定幣發行方凍結了約 3,300 萬美元。所以那個接近百分之百,應當寫成名義被盜資產最終恢復控制接近全部,其中大部分來自攻擊者主動返還,而不是執法追繳。

Wormhole 依靠補資之後,再通過司法命令和技術執行取回資產。

Ronin 依靠鏈上追蹤,交易平台和跨國執法凍結;而使用者是由公司的再資本化獲償的。

Multichain 依靠穩定幣發行方凍結,加上後來的破產清算訴訟。

而 Nomad,Harmony,Multichain,Orbit 都留下了顯著的未恢復敞口。

所以真正決定可執行性的,不是鏈上是否看得見那個地址。

是能不能找到一個鏈外的抓手:一家中心化交易所可以凍結賬戶;穩定幣發行方可以拉黑;司法管轄內的前端或者控制系統可能被法院命令協助;而實體被識別並拘捕之後可以執行扣押。

歸因的強度也差別很大,必須逐案分層。

Ronin 有美國聯邦調查局在 2022 年4 月的正式歸因;Harmony 也有 2023 年初的正式歸因。這兩處的強度,高於分析公司或者媒體說看起來像誰。

Nomad 有刑事指控,而不能把整個群體性的複製提款歸給一個人。

Poly,Wormhole,Multichain,Orbit 的歸因明顯更弱。有的攻擊者身份從來沒有得到政府正式公開歸因;有的司法程序針對的是未知攻擊者控制的資產,確立財產權利並不等於確定了現實身份;而某些關於國家級行為體的說法,只能寫成公司和安全行業的懷疑。

這裡有一句話值得單獨擺。

鏈上透明度解決的是交易歸屬的一部分,而不是現實世界裡人的歸屬。

區塊鏈可以強力回答:哪個地址收到了幣,換成了什麼,經過哪個交易所,橋或者混幣器,最終停在哪個地址。

而混幣器的作用邊界也很清楚:它會破壞簡單的輸入輸出映射,而不會讓前後的鏈上交易消失。分析公司可以給出概率性的追蹤,真正的凍結仍然依賴交易所,發行人或者司法機關。

所以那句錢在鏈上一直看得見,只說對了一半。

看得見和拿得回來,中間隔著的不是技術,是管轄權。

而管轄權這個東西,恰恰是這整套設計當初想繞開的。

所以那幾次成功的追回,靠的都是這套設計沒能繞開的地方:一家要遵守制裁名單的發行方,一家要配合法院的交易所,或者一個可以被拘捕的人。

最後是這門生意本身的兩頭。

流動性提供者,中繼方和協議金庫,獲得的是小額而持續的費用。

而在橋出現資不抵債的時候,承擔巨額,離散的尾部損失的,是封裝資產的持有人,流動性提供者,補資方或者代幣持有人。

小額持續的收入在一側,巨額離散的損失在另一側。

這個形狀在這個系列裡已經出現過幾次。第九篇裡流動性提供者收的是每筆千分之三,而承擔的是價格移動之後的庫存損失;第十篇裡預言機節點收的是按次計的服務費,而報錯一次可以讓下游損失一億。

而橋這一處是最極端的:費用按筆收,以基點計;而失效是一次性的,以億計。

有沒有公司資本或者保險把這兩者重新連接起來,是逐案的合同和治理問題。

它不能從去中心化橋這個標籤裡推出來。

八 兩條鏈之間

有幾種流行說法需要改寫。

跨鏈橋是加密領域最大的安全弱點。

這個版本過寬。最常被引用的那個數據來自一家分析公司:2022 年8 月,它估計當年到那時共有 13 起跨鏈橋被攻擊,約 20 億美元被盜,佔當年當時全部被盜價值的 69%。

而這個 69% 的分母,是這家公司當年迄今納入其攻擊數據集的被盜資金,不是整個加密資產市值,不是所有犯罪損失,也不是歷史累計的漏洞損失。

它的全年統計後來又變成另一個口徑:2022 年的攻擊總損失約 38 億,其中協議類約 31 億,而跨鏈橋佔其中的 64%。這個 64% 的分母是那 31 億,不能和年中那個 69% 直接比較。

而到 2024 年,這家公司統計的攻擊結構已經改變:私鑰被控制佔其全年被盜價值的 43.8%,集中式服務在部分季度成為更主要的目標。

所以橋是最大弱點,是一個對 2022 年那個特定數據集很有基礎的描述,而不是一個跨年份的恆等命題。

多簽越多,橋就越安全。

材料只支持一個更窄的版本:安全性取決於達到閾值所需要的獨立故障域數量,而不是公鑰列表的長度。

橋只是因為私鑰管理差才會被盜。

同樣過窄。Ronin,Harmony,Multichain 和可能的 Orbit 確實說明瞭密鑰與控制面的風險;而 Wormhole 是驗簽缺陷,Nomad 是初始化邏輯缺陷,Poly 是跨合約權限缺陷,那座原生橋是證明驗證失敗。

更窄的版本是:橋的重大損失主要集中在誰有權讓另一條鏈接受一個跨鏈事實這個邊界上;而這個邊界既可能因為密鑰失竊而失敗,也可能因為驗證器,證明,升級,權限或者初始化邏輯而失敗。

輕客戶端橋是真正無信任的。

如果無信任指的是不需要任何安全假設,這個說法不成立。它要相信源鏈的共識與終局性,輕客戶端代碼和目標鏈的執行;如果源鏈的共識本身被攻破,一個正確的輕客戶端會忠實地接受那個被共識確認的惡意狀態。

如果無信任定義為不引入一個額外的外部驗證委員會,那麼這一類設計確實比外部驗證的橋少了一層第三方信任。

原生跨鏈一定比第三方橋安全。

這要拆成兩種原生。如果原生指的是輕客戶端式的驗證,優勢是少一個外部委員會。而如果原生只是由鏈的官方團隊維護一套獨立的橋驗證者或者多簽,那麼官方並不會自動消除額外的信任。

那座出問題的原生橋恰恰是最直接的反例:它是兩條原生鏈之間的橋,卻因為證明驗證庫的漏洞,在沒有抵押的情況下產生了 200 萬枚。

所以原生是一種組織和產品關係的描述,不是一項形式化的安全屬性。

現在回到第一節。

跨鏈的實質,從來不是把一樣東西從 A 搬到 B。

是讓 B 接受一句關於 A 的話。

而這幾起事故,攻的恰好是這句話的五個不同部件。

Poly 攻的是誰有權改寫說話者。

Wormhole 和那座原生橋攻的是如何判斷這句話有證明。

Ronin 和 Harmony 攻的是誰能簽這句話。

Nomad 攻的是什麼話默認算已經證明。

Multichain 和 Orbit 暴露的是,現實世界裡究竟誰控制著說話的那套基礎設施。

五種攻擊,一句話的五個部件。

而這五個部件裡,沒有一個屬於密碼學。

簽名算法本身從來沒有被破解過。哈希函數沒有被碰撞過。共識規則沒有被違反過。

出問題的全部是那句話怎麼被生成,被傳遞,被判斷的那一整套安排。

這一條對整個域都有用。密碼學能保證的是一份簽名確實來自某把私鑰;它保證不了那把私鑰在誰手上,也保證不了檢查那份簽名的代碼寫對了沒有。

上一篇寫的是一部法律要靠人去執行,而人可以不做。

而這一次沒有人可以不做。B 鏈的合約收到那句話就會執行,不會猶豫一秒鐘。

問題在於那句話是怎麼來的。

第十篇裡那道縫在鏈和外面的世界之間:鏈不知道一個價格是不是真的,它只知道有人說了那個價格。

這一次那道縫挪了位置。

它在兩條鏈之間。

而這兩條鏈都是可驗證的,都是不可篡改的,每一筆都是公開的。

A 有共識。B 有共識。

而 A 和 B 之間沒有共識。

餘項就在那裡。

它不在 A 鏈上。A 鏈那筆鎖定的記錄清清楚楚,今天還查得到。

它也不在 B 鏈上。B 鏈那筆鑄造的記錄同樣清清楚楚。

它在兩段清清楚楚的記錄之間,那一小段沒有任何一方的共識覆蓋的地方。

而所有的橋,都是在那一小段上搭出來的。

這一小段的長度,決定了這門生意本身。

如果兩條鏈之間不需要任何東西,那就不需要橋。而正因為需要,才有人來搭;而每一個搭法,都是在回答同一個問題:那句話由誰來說,憑什麼被信。

而十五年下來,還沒有一個搭法能把這個問題取消掉。它只能被搬到不同的地方:搬給一組簽名者,搬給一段驗證代碼,搬給一份狀態證明,或者搬給兩條鏈自己的共識。

每搬一次,出問題的位置就換一次。

而它從來沒有消失過。

兩邊的鏈都在正常出塊。鎖定的那一筆有效,鑄造的那一筆也有效,每一筆都簽得對,每一筆都驗得過。

而它們對不上。

鏈還在結算,而結算什麼還沒有共識。

資料說明

本文依據公開協議文檔、鏈上記錄、法院文書、監管文件與同行評議研究寫成;文中的數字均保留其統計口徑。系列資料截至 2026 年 8 月。

Where next

沿著問題繼續讀