パブリックチェーンはなぜ止まるのか?Cosmosの25時間停止から、ブロックチェーンのコンセンサスを本当に理解する

Cosmos Hub は、Neutron のガバナンス攻撃を受けて、3分の1超の投票権を持つバリデータが盗まれた資産の移動を防ぐためにブロック生成を停止し、約1日間停止しました。復旧には、バリデータがクライアントをアップグレードし、攻撃者のアドレスの資金を凍結する1回限りの状態変更を実行する必要がありました。この記事は、この事件を通じてブロックチェーンのコンセンサスの本質を探り、非中央集権性が常に稼働を保証するわけではないことを強調しています。異なるメカニズム(PoW、PoS、BFT)には、攻撃時の安全性と生存性に関して異なるトレードオフがあり、ユーザーの秘密鍵の管理権はネットワークのコンセンサス権限とは別物です。重要なのは、コンセンサスは一時停止や変更が可能ですが、それは十分に大きな集団的な合意がある場合に限られるということです。

要約

執筆:imToken

9月22日夜、あるユーザーがATOMの送金を実行した。

一晩が過ぎても、その取引は「確認待ち」のままだった。

秘密鍵は失われておらず、ウォレットにも署名の異常は見られなかった。翌日改めて確認すると、複数の公開RPCが、Cosmos Hubがブロック高33,086,740で停止していることを示していた。

新しいブロックが生成されない以上、この取引をパッケージ化できる場所はどこにも存在しない。

およそ1日後にCosmos Hubがブロック生成を再開して初めて、それまで待機状態だったこのATOM送金はようやく成功した。

一般ユーザーにとって、これはブロックチェーンのコンセンサスを理解する上で最も直感的な授業かもしれない。

私たちは「中央集権的な機関がパブリックチェーンを停止させることはできない」と言い慣れているが、現実は明らかにはるかに複雑だ。十分に分散化されたブロックチェーンには、確かに通常サーバー室にある「シャットダウンボタン」は存在しない。しかし、それでも停止する可能性はある。

今回のCosmos Hubの停止は、普段は最下層に隠れているこの仕組みを、一般ユーザーの目の前に完全にさらけ出すことになった。

一、Cosmosはなぜ突然「ブロック生成を停止」したのか?

まず、混同しやすい問題をはっきりさせておく必要がある。今回直接攻撃されたのは、Cosmos Hubではない。

事件は最初、Neutronで発生した。

9月22日、「AIATO: AI Agent Takeover」という名称のNeutronガバナンス提案が可決された。攻撃者はチェーンレベルのガバナンス権限の隙を突き、wasmdフレームワークがネイティブに提供する特権命令を利用して、AstroportやDropなどのアプリケーションのコントラクト管理者を、攻撃者が管理するアドレスに変更した。

これは、私たちが通常理解するような「コードの脆弱性」や「プロトコルの欠陥」ではない。

簡単に言えば、アプリケーション自体には独自の「ドアロック」があるが、Neutronのチェーンレベルガバナンスは、より権限の高い「マスターキー」を握っている。そして攻撃者がガバナンスの結果を支配した時点で、その鍵を手に入れたことになり、管理者を再指定し、コントラクトを移行し、さらにその中の資産を移転できるようになる。

そしてCosmos Hubが巻き込まれることになった本当の原因は、その後に発生したクロスチェーンでの資金移動だ。

Cosmos Labsの検証によると、Neutronが稼働を停止する前に、攻撃者はすでに一部の資産を複数のネットワークへ移しており、そのうち約170万枚のATOMがCosmos Hubへ送金され、クロスチェーン流動性を通じた交換が始まっていた。

つまり、Cosmos Hub自体は直接攻撃を受けておらず、一般のHubユーザーの資金もNeutronの脆弱性によって直接盗まれたわけではない。

しかし、攻撃で得られたATOMはすでにHubに入ってしまっている。残りのATOMがさらに流出するのを防ぐため、一部のCosmos Hubバリデーターがノードの稼働を停止し始めた。

9月22日19:18頃(SGT)までに、稼働を停止したバリデーターは総voting powerの3分の1以上を占めるようになり、Cosmos Hubは新しいブロックを形成できなくなり、最終的に33,086,740で停止した。

この一歩は非常に重要だ。

これは、Cosmos Hubには特定の企業が直接クリックできる「Pause」ボタンは存在せず、事前にチェーン上のガバナンス投票を経たわけでもないことを意味する。本当にネットワークを停止させたのは、十分な数のバリデーターがコンセンサス形成に参加しなくなったことだ。

しかし、より注目すべきは、その後の復旧プロセスだ。

チェーン停止から約4時間後、バリデーターは完全な復旧案を受け取った。停止したブロック高に対して一度限りの状態変更を実行し、攻撃者のアドレスに残っているATOMを、コミュニティのバリデーターが共同管理するマルチシグアドレスへ移すというものだ。

その後、Cosmos Labsはバリデーターがすでに合意した案に基づいてGaia v28.3.0パッチを作成し、テストを行い、バリデーターに配布した。

このバージョンのGaiaは、指定された復旧ブロック高で一度限りの状態変更を実行し、攻撃者のアドレスにある1,227,121 ATOMを、Nansen、Keplr、Enigma、Silknodes、Kiln、Polkachuの6者で構成される4-of-6マルチシグアドレスへ移す。

9月23日未明までに、v28.3.0のインストールを確認したバリデーターが総voting powerの67%を超えたため、同日12:00 UTCにCosmos Hubは協調して再起動し、約6分後にこの一度限りの状態変更がブロック高33,086,741で実行され、ネットワークは正常なブロック生成を再開した。

結局のところ、Cosmosがブロック生成を停止してから稼働を再開するまでの全プロセスでは、まずバリデーターがネットワークのLivenessを失わせ、次に3分の2を超えるvoting powerが新しい状態遷移ルールを受け入れ、最終的にそのルールが復旧後のcanonical stateとなった。

ここまで来ると、一見単純な疑問が浮かび上がる。分散型パブリックチェーンであるなら、なぜ3分の1を超える検証権で停止できてしまうのか。そしてネットワークの復旧には、十分な数のバリデーターが同じソフトウェアを共同で受け入れ、実行する必要があるのはなぜか?

その答えは、実は「コンセンサス」という二文字の中に隠されている。

二、コンセンサスとは、そもそも「決して止まらない」ことではない

ブロックチェーンで最も誤解されやすいことの一つは、「分散化」と「決してダウンしないこと」を同一視することだ。

実際には、コンセンサスメカニズムが本当に解決する問題は、中央の記帳者がいない状況で、多数のノードがどのように取引の順序と台帳の状態について合意するかということだ。

ただし、パブリックチェーンごとにこれを実現する方法は異なる。

Bitcoinで最も古典的なのはPoW、つまりプルーフ・オブ・ワークだ。マイナーは計算力に頼ってブロック生成を競い、ネットワークに短時間2つの正当な分岐が現れた場合、ノードは累積ワーク量に従ってそのうちの1つを選び、構築を続ける。

そのためBitcoinには、「67%の投票後にこのブロックが永遠にFinalizedされる」という明確な瞬間は存在しない。それは確率的ファイナリティに近いもので、後続のブロックが増えるほど、前の取引を再編成しようとするには、ますます高い計算力コストを支払う必要がある。

これが、過去に「Bitcoinの取引は6ブロックの確認を待つのが望ましい」とよく言われてきた理由でもある。結局、計算力がどれほど高くても、ノードが実行しているコンセンサスルールを簡単に迂回することはできない。

もちろん、これはBitcoinの状態がどのような場合でも「絶対に変更できない」ことを意味するわけではない。理論上、エコシステム全体が新しいクライアントと新しいコンセンサスルールを受け入れれば、ハードフォークによって、過去のルールでは無効だった状態変化を有効にすることもできる。

しかし問題はここにある。十分な数のマイナー、フルノード、取引所、ウォレット、ユーザーをまとめて、このような新しいルールを受け入れさせられるのは誰なのか?

ほとんど誰もいない。

開発チームはBitcoinネットワーク全体に代わってコンセンサスルールを決めることはできないし、マイナーや取引所にも難しい。なぜなら、越えなければならないコンセンサスのハードルが非常に高いからだ。かつてバイナンスが7,000 BTCを盗まれた際、CZに大手マイナーへ連絡して操作するよう提案する者もいたが、結局立ち消えになった。

イーサリアムは、また別の非常に古典的なサンプルを提供している。

PoSへ移行した後のイーサリアムは現在、Casper FFGとLMD-GHOSTが共同で構成するGasperコンセンサスを使用している。簡単に理解すると、一部のメカニズムは「現在どのチェーンに従うべきか」を判断し、もう一部はブロックに真の意味でのFinalityをもたらす役割を担う。

少なくとも3分の2のステーキングETHを代表するバリデーターが対応するcheckpointについて合意したとき、ブロックはさらに最終確定へと進むことができる。逆に、3分の1を超えるステークが長時間正しい投票に参加しない場合、ネットワークは一時的にFinalityを形成できなくなる可能性がある。ただしイーサリアムはinactivity leakも設計しており、長時間finalizingできない場合にオフラインのバリデーターの有効ウェイトを徐々に低下させ、ネットワークが最終的にFinalityを回復する機会を与える。

この結果を本当に変えるには、やはりプロトコルルールとクライアントを変更する必要がある。

2016年のThe DAO事件がまさにそうだ。イーサリアムコミュニティは最終的にハードフォークを通じ、ブロック1,920,000で、当時Ethereum Foundationがirregular state changeと直接呼んだ特殊な状態変更を実行し、関連するETHを復旧コントラクトへ移した。

ただ、アップグレードを拒否し、元の状態を維持し続けた一部のマイナーとコミュニティは、最終的にEthereum Classic(ETC)を形成し、よく知られたETHとETCの分岐を引き起こした。これは、すべての人がこのルールを受け入れたわけではないことを示している。

Cosmos Hubはまた異なり、CometBFTを使用しており、より典型的なBFTコンセンサスに近い。

これは、より典型的なBFTコンセンサスと理解できる。つまり、ブロックが本当にコミットされるには、3分の2を超えるvoting powerのCommitを獲得する必要がある。

その利点は、Finalityが非常に明確であることだ。ブロックが十分な検証権の投票を経てコミットされれば、PoWのように確率で安全感を買うために、ますます多くのブロックを待ち続ける必要はない。

しかし、そのもう一つの側面も非常に直接的だ。3分の1以上のvoting powerがCommit形成に必要な投票を提供しなくなれば、残りのバリデーターがどれほど努力しても、3分の2を超える数を揃えることはできない。

このときネットワークにとって最も安全な選択は、まさに今回の「ブロック生成の一時停止」だ。したがって分散システムの観点から見れば、今回のCosmos Hubの短時間の停止は、実は何も不思議ではない。

一言で言えば、十分なvoting powerを握る一群のバリデーターが参加を停止した後、コンセンサスプロトコルは自らのルールに従い、可用性を失うことを選んでも、十分なコンセンサスがないまま新しいブロックを確認し続けることはしない。

この背後には、分散システムにおいて一般ユーザーがよく混同する2つの概念が対応している。

  • Safety:異なるノードが、互いに矛盾する2つの最終状態を同時に確認してはならないこと;
  • Liveness:ネットワークが継続的に前進し、新しい取引を処理できるかどうか;

BFTシステムにとって、コンセンサスに参加するノードが不足しているとき、一時停止はSafetyを維持するために支払う代償であることがある。率直に言えば、この分散型台帳は、残りの者にそれぞれ勝手に記帳させるより、まずその場に停止することを選ぶのだ。

この角度から振り返ると、パブリックチェーンの歴史における一見まったく異なる多くの事故は、実はすべて同じ一つのことをめぐって展開していることがわかる。

分散ノードが「正しい状態」について合意を形成し続けられなくなったとき、ネットワークはどうすべきか?

三、BitcoinからSolanaまで、パブリックチェーンの本当のリスク境界はどこにあるのか?

これはCosmosが初めてこの問題を表舞台に引き出したわけではない。

2013年には早くも、Bitcoinで非常に古典的なチェーン分岐事故が発生している。

当時、Bitcoin 0.8は基盤データベースをBerkeley DBからLevelDBへ切り替えた。その後、大量の取引インプットを含むブロックが出現し、新バージョンのノードは正常に処理できたが、一部の旧バージョンノードはBerkeley DBのロック数制限により、このブロックを無効と判断した。

そこで非常に気まずい事態が起きた。誰もがBitcoinを実行しているのに、新旧のクライアントが「このブロックが本当に合法かどうか」について異なる答えを出し始めたのだ。

ネットワークはそのため2つのチェーンに分裂し、しかも新バージョン0.8側は一時約60%の計算力を有しており、通常の計算力競争に頼って素早く自然収束することはできなかった。

最終的に、大手マイニングプールが調整して旧バージョンへ切り戻し、旧ルール側でより多くの計算力を再び獲得して、ネットワークはようやく再収束した。Bitcoinは後にBIP 50でこの事故を正式に検証している。

2016年になると、イーサリアムのThe DAO事件が問題をさらに一歩前進させた。

上で述べたThe DAO事件の通り、イーサリアムコミュニティは最終的にハードフォークを通じ、ブロック1,920,000で、Ethereum Foundationがirregular state changeと明確に呼んだ特殊な状態変更を実行し、関連するETHを復旧コントラクトへ移した。

しかし、すべての人がこの処置に同意したわけではない。状態変更の受け入れを拒否した一部のマイナーとコミュニティは元のルールを維持し続け、後に長期にわたって存在するEthereum Classic(ETC)が生まれた。

このDAOフォークもまた古典的な事件であり、すべての人に伝えたことになる。極端な事態が発生したとき、コードのコンセンサスの外側には社会的コンセンサスも存在し、十分に一致した意見を形成できなければ、1つのチェーンは本当に2つに分かれる可能性がある、と。

2021年のSolanaは、またまったく異なる故障経路を示した。

同年9月、大量のボット取引がネットワークに流入し、検証ノードのメモリ枯渇を引き起こし、大量のノードがクラッシュした。最終的にネットワーク全体が現在の状態について合意を形成できなくなり、約17時間にわたって新しいブロックの確認を停止し、その後バリデーターが共同で調整してネットワークを復旧した。

これらの事故を並べてみると、それらが同じものではないことがわかる。

  • Bitcoinの2013年の問題は、異なるクライアントが異なる有効性ルールを実行し始めたこと;
  • Solanaの2021年の問題は、大量の検証ノードが正常にコンセンサスへ参加し続けられなくなり、ネットワークがLivenessを失ったこと;
  • Ethereum DAOが直面したのは、コミュニティが新しいプロトコルルールを通じて状態を能動的に変更すべきかどうかという問題に近い;
  • そして今回のCosmos Hubには、また別の特殊性がある。ネットワークはまずバリデーターの調整によって能動的にLivenessを失い、攻撃資産のさらなる移動を阻止した。その後、十分に高い割合の検証権が新しいソフトウェアと復旧状態を共同で受け入れ、ネットワークを再び一致させた。

だから、これらの事件を単純に「ブロックチェーンも結局シャットダウンできるのか」「分散化はすべて偽物だ」とまとめるより、より真実に近い事実を認めるべきだ。

**コンセンサスメカニズムは決して壊れない機械ではなく、それが本当に提供しているのは、分散型のルール一式なのだ。**たとえば、意見が分かれたときに誰が正しいチェーンを決めるのか、どれだけの参加者がいれば1つの状態がファイナリティを獲得できるのか、障害が発生したときにネットワークは稼働継続か停止かを選ぶのか、そして極端な状況では、どのような集団行動が今後の運営ルールを変えられるのか。

このことも、今回のCosmos事件に、「チェーンを止めるべきだったかどうか」よりも一般ユーザーが考える価値のある問いを残している。

最後に

私たちはよく「not your keys, not your coins」と言う。

この言葉はもちろん今も正しい。ただ、それが強調しているのは資産のコントロール権だ。秘密鍵が自分の手にある限り、ウォレットや取引所、その他の第三者機関は、あなたに代わって送金に正常に署名することはできない。

前提は、あなたがいるブロックチェーンが、いつでもその署名を処理する能力を持っていることだ。

Cosmos Hubがブロック生成を停止したあの日、ユーザーは依然として自分の秘密鍵を保持しており、資産もそれによって消えてなくなったわけではない。ただ、あなたが正しく取引に署名しても、それを受け入れる新しいブロックが存在しなかっただけだ。

復旧プロセスはさらに、十分な数のコンセンサス参加者が新しい状態ルールを受け入れれば、特定のアカウントのオンチェーン状態が、元のアドレスの秘密鍵による署名なしでも変化しうることを示している。

これは「Not your keys, not your coins」を無効にするものではないが、秘密鍵の自主権と基盤となるコンセンサス権は、決して同じものではないことを私たちに思い出させてくれる。

そしてウォレットについても、同じことが言える。

ウォレットは、秘密鍵と署名権がユーザー自身の手にあることを保証でき、チェーンレベルの異常をできるだけ早く識別し、取引状態を正確に表示し、RPCとノードの冗長性を構築し、ネットワーク復旧後に取引の最終結果を再確認することができる。

しかしウォレットは、パブリックチェーンに代わってコンセンサスを回復することはできないし、基盤となるネットワークが永遠に中断しないことを保証することもできない。ましてや、チェーン上のルールと状態がコンセンサスレベルで決して変化しないことを保証することもできない。

だから、成熟した分散型システムが本当に追求すべきなのは、おそらく「何も絶対に変更できない」ことではない。むしろ、これらの不完全な境界をできるだけ明確にすべきだ。誰がコンセンサスを一時停止できるのか?どれだけのウェイトが必要なのか?どのような状況で緊急介入が許されるのか?

なぜなら、真の分散化は、システムが決して事故に遭わないことを可能にするものではないからだ。重要なのは、たとえ事故が本当に発生しても、誰が、どのようなルールに基づいて、どれだけのコンセンサスをもって、この帳簿をこれからどう記帳するかを決めたのかを、私たちが依然として知ることができることにある。

共有先:

著者:imToken

本記事はPANews入駐コラムニストの見解であり、PANewsの立場を代表するものではなく、法的責任を負いません。

記事及び見解は投資助言を構成しません

画像出典:imToken。権利侵害がある場合は著者へ削除をご連絡ください。

PANews公式アカウントをフォローして、強気・弱気相場を一緒に乗り越えましょう
関連トピック
PANews APP
TheDAOセキュリティ基金が第2ラウンドを開始、60万ドルをVyperコンパイラに助成
PANews 速報