ビットコインのサイドチェーンである Liquid Network から、9 月 6 日に約 4,000 BTC が連合のウォレットを出ました。ネットワークは停止し、翌 7 日に 3,400 BTC が返還され、598.5 BTC は返らないまま現在も凍結が続いています。注目したいのは、鍵が盗まれた事件ではないという点です。壊れたのは資産を守る錠前ではなく、「残高がちゃんと裏付けられているか」を確かめる側の経路でした。そしてもう 1 つ、この件は「橋を止められた」という事実そのものが設計の話になっています。止められたのは、止められる主体がいたからです。ペグ——つまり別のチェーンの資産を預かって表現する仕組み——の信頼をどこに置くのか。その分かれ目が、今回はっきり見える形で出ました。Cardano 側のサイドチェーンやパートナーチェーンを考えるときの比較軸として読める事例です。
なお本稿は公式一次ソース未確認のまま書いています。バグの内容について Blockstream 自身の技術的な公表は、この記事の執筆時点では確認できていません。事実関係は複数報道と、公開された取引を追った独立の分析が一致する範囲に限りました。断定の程度は、その前提でお読みください。
■ 起きたことを、順に
報道と、オンチェーンの取引を突き合わせた分析によれば、9 月 6 日(UTC)の流れはおおよそ次のとおりです。まず少額のテスト送金が行われ、13 時 53 分に Liquid 上で約 4,000 L-BTC を生む取引が通ります。出力は数分のあいだに Sideswap へ移され、14 時 06 分にペグアウト(ビットコイン本体への引き出し)の要求が出されます。14 時 28 分、Liquid の連合がその支払いを実行しました。約 4,205 BTC あったペグのウォレットは、この時点で約 203 BTC まで落ちています。
ここから先が普通のハッキングと違います。取引の実行者は同日 18 時 30 分、ビットコインの取引に埋め込める OP_RETURN という領域を使って「we are whitehats. contact us on chain(我々はホワイトハットだ。チェーン上で連絡を取れ)」と書き込みました。翌 7 日 9 時 04 分、Blockstream 側は PGP 署名つきの同じ経路で「ブリッジのノードはパッチ済み、資金を返しても安全だ」と返します。16 時 09 分に 3,400 BTC が返され、598.5 BTC は残りました。最後に書き込まれたのは「:(」の 3 文字だったと分析は記録しています。
Blockstream は、連合の鍵が漏れた事実はないと説明しています。ペグアウトの窓口になった Sideswap も、自社のシステムが破られたわけではないと述べています。USDT や Depix などの Liquid 上の他の資産は影響を受けておらず、ビットコイン本体のネットワークも無関係です。一方で現在も、ブリッジのノードは停止されたまま、取引所での L-BTC の入出金も止まっています。
■ 鍵は漏れていません——壊れたのは「確かめる側」です
Liquid のノードが動かしているのは Elements という、Bitcoin Core から分岐したソフトウェアです。Liquid は取引の金額を隠せる設計(コンフィデンシャル・トランザクション)を持っており、金額が隠れていても「マイナスではない、正しい範囲に収まっている」ことを示すために range proof(範囲証明)という証明が付きます。金額が見えないチェーンで帳尻が合っていることを担保しているのは、この証明です。
独立の分析によれば、問題はその証明の検証結果をキャッシュする部分にありました。修正前のキャッシュは、証明そのものと隠された金額だけを鍵にして「この証明は検証済み」と覚えていました。そこにはどの資産のものか(asset)と、どの出力スクリプト向けか(scriptPubKey)が入っていなかった。つまり一度検証を通った証明が、別の資産・別の宛先に対しても「検証済み」として通ってしまう余地が残っていたということです。結果として、裏付けとなるビットコインを持たない L-BTC を作れる。そしてその L-BTC は、通常の引き出し手続きを通って、連合が預かっている本物のビットコインと交換されました。
ここが今回の要点です。攻撃者は鍵を破っていません。破ったのは検算の手続きです。金庫の錠前が無事でも、「中身と帳簿が合っているか」を確かめる係が同じ答えを使い回していれば、帳簿の側から資産は増えてしまいます。分散台帳が価値を持つ理由が「誰もが独立に検証できること」にあるのなら、検証の高速化のために置いたキャッシュは、その根拠そのものに触れている部品だということになります。
時間の経過も記録されています。分析によれば、この点を修正する「fix: range proof cache bind to asset and scriptpubkey(範囲証明のキャッシュを資産とスクリプトに紐づける)」という変更は 8 月 3 日に書かれ、9 月 2 日に本流へ、9 月 3 日に 23.x 系へ取り込まれています。ただし最新のリリース版は 4 月 13 日の 23.3.3 で、事件の時点でこの修正を含む配布物は存在していませんでした。修正が書かれていたことと、動いているノードに届いていたことは別だ、ということです。
■ 止められたのは、止められる人がいたからです
そのうえで、この事件の後半——止めて、交渉して、返させた——という展開は、Liquid の設計そのものから来ています。
Liquid の公式ドキュメントによれば、このネットワークは 80 を超える連合メンバーで構成されます。メンバーは functionary(ファンクショナリー)と呼ばれ、2 つの役割を同時に担います。1 つはブロック署名者として、1 分ごとに順番でブロックを提案し、Liquid というサイドチェーンを動かす役割。もう 1 つは watchman として、ネットワークが預かっているビットコインを守る役割です。ブロックが確定するには全ブロック署名者の 3 分の 2 以上の署名が要り、預かっているビットコインを動かすにも同じく 3 分の 2 超の閾値が要ります。ビザンチン障害耐性のための設計です。
この構造は、裏返すと「合意すれば止められる」という性質を持ちます。3 分の 2 の署名がなければブロックは進まないのですから、止める判断もまた 3 分の 2 で下せる。今回、ネットワークが停止しブリッジのノードが落とされ、パッチが当たるまで待てたのは、この止められる主体がいたからです。もし誰も止められない設計だったなら、修正が配布されるまでのあいだ、同じ穴は開いたままだったことになります。
同時にこれは代償でもあります。止められるということは、誰かが止められる場所に資産があるということです。凍結が守りに働いた今回とは逆に、同じ権限が別の目的で使われる可能性は構造として残ります。「連合型のペグは中央集権的だ」という批判と、「だから今回止められた」という擁護は、実は同じ 1 つの性質を別の側から見ているにすぎません。
■ ペグの信頼を、どこに置くか
この事例が Cardano の周辺にとって意味を持つのは、橋を持つこと自体が避けられないからです。別のチェーンの資産を扱う仕組みは、どこかで「向こう側に本物があること」を誰かが担保しなければ成立しません。その担保の置きどころは、大きく分けて 3 つあります。ひとつは今回のような連合、ひとつは検証をコードと証明に寄せる方向、ひとつは経済的な担保(ステーク)に寄せる方向です。
今回はっきりしたのは、どの方向を選んでも「検証経路そのものが壊れたらどうなるか」という問いからは逃げられない、ということです。連合型は止める手段を持っていましたが、穴が空いたこと自体は止められませんでした。逆に、止める主体を持たない設計は中央化の代償を払わずに済む代わりに、同じ状況で待つことしかできません。橋の議論は「分散しているかどうか」の一点で語られがちですが、実際に効いてくるのは壊れたときに誰が何をできるかの一覧です。
この論点は、SIPO でも過去に扱ってきました。ブリッジ全般の再設計については『Getting Bridges back on Track』の解説で、実際にブリッジで異常が出た事例についてはWanChain の件の解説で触れています。今回の Liquid の件は、そこに「連合という止め方」の実例が 1 つ加わった形です。
■ 次に見るもの
- 凍結が解ける条件 — 修正を含むリリースが配布され、連合のノードがそれで動くところまで行くかどうかが最初の関門です。返らなかった 598.5 BTC の扱い(賞金として合意されたものなのか)についても、Blockstream からの説明はまだ確認できていません。
- 裏付けの穴をどう埋めるか — 分析はこの時点の L-BTC の裏付けが 1 ドルではなく 86 セント相当まで落ちたと計算しています。この差を誰がどう埋めるのかは、預かり資産を扱う仕組み一般にとっての先例になります。
- 事後の技術的な公表が出るか — 何が起きたのかを運営側が自分の言葉で説明するかどうかは、次に同じ設計を選ぶ人にとっての情報の質を決めます。
そのうえで、1 つ問いを残しておきます。あなたがいま預けている資産は、誰かが止められる場所にありますか。止められない場所にありますか。今回の件は、そのどちらが安全かという問いではなく、自分がどちらを選んでいるのかを知っているかという問いを突きつけています。
一次ソース / 関連リンク
- Liquid Network の技術概要(公式ドキュメント・連合の構成と 3 分の 2 閾値)
https://docs.liquid.net/docs/technical-overview - Liquid Hackers Return 3,400 BTC, Keep $47M as Network Stays Frozen(Bitcoin.com News・9 月 7 日)
https://news.bitcoin.com/security/liquid-hackers-return-3400-btc-keep-47m-as-network-stays-frozen/ - Liquid Network Attacker Offers to Return $320M in Bitcoin After Team Fixes Bug(Crypto Briefing・9 月 7 日)
https://cryptobriefing.com/blockstream-liquid-network-exploit-funds-return/ - Liquid Network Hack: Blockstream Sidechain Loses 4,000 BTC(Bitquery・オンチェーン取引の独立分析)
https://bitquery.io/investigations/liquid-network-hack-4000-btc-op-return - チャールズ・ホスキンソン氏動画『Getting Bridges back on Track』解説・全翻訳(SIPO・7 月 24 日)
https://sipo.tokyo/47000-2/ - チャールズ・ホスキンソン氏動画「Brief Update on WanChain」解説・全翻訳(SIPO・7 月 21 日)
https://sipo.tokyo/post-46960/
