IOGはブログ記事「Ouroboros Genesis Design Update」で、Ouroboros Genesisの設計に関する最新の更新情報を公開しました。
Ouroboros Genesisは、CardanoのコンセンサスプロトコルであるOuroborosの最新バージョンであり、新規ノードや長期間オフラインだったノードが再接続する際の保護策を強化するシリーズの改良です。このプロトコルは2024年第3四半期までに導入が予定されています。
以下はIOGブログ「Ouroboros Genesis design update」を翻訳したものです。
IOGブログ:Ouroboros Genesisのデザイン更新
Cardanoの信頼性とセキュリティを担保するコンセンサスプロトコルの最新バージョン、Ouroboros Genesisの設計と実装に関する詳細な説明
2024年5月8日 Nicholas Frisby
Ouroboros Genesisは、既に堅牢なOuroborosプロトコルに一連の強化を加えたもので、新規のネットワークノードや一定期間不在の後に復帰するノードを保護する対策が含まれています。
OuroborosはCardanoブロックチェーンの中核をなすコンセンサスプロトコルです。Cardanoの継続的な開発と普及に伴い、Ouroborosも計画されたアップグレードの道を進んでいます。Ouroboros Classicは最初に証明可能なセキュアなプルーフ・オブ・ステークプロトコルでした。Ouroboros BFTはByron updateを可能にした中間解決策でした。Ouroboros PraosはOuroboros Classicの発展を続けました。Ouroborosの進化はさらに進み、現在2024年第3四半期に提供予定のOuroboros Genesisに達します。
この記事では、Ouroboros Genesisプロトコルの開発と実装に関する最近の更新について説明します
Ouroborosのこれまでの経緯
ブロックチェーンはノードと呼ばれるマシンに複製された分散型台帳です。中央の権限がないため、すべての台帳コピーの一貫性と不変性を保証するメカニズムが必要です。そのメカニズムがコンセンサスプロトコルです。プロトコルはまた、ノードが新しいブロックを検証してチェーンに追加するためのインセンティブも設定します。
OuroborosはCardanoの時間をエポックに分け、その中をスロットに細分化します。スロットはブロックが作成される短い期間を表します。
Ouroboros Classicは、ほとんどのノードがオンラインで一貫した台帳コピーを持っている場合にセキュアであることが証明されています。攻撃者は次のスロットリーダー(チェーンにブロックを追加するノード)を予測できないため、攻撃は非常に高コストです。
Ouroboros Praosは次のスロットリーダーの選定にランダム性を増し、他の可能な攻撃に対する対策を追加しました。
Ouroboros Genesisは、ネットワークに初めて参加する(ジェネシスブロックから開始する)場合や長期間不在の後に再参加する場合のノードの状況に対処します。このようなノードは追いつくまで脆弱な状態にあります。例えば、長距離攻撃は、攻撃者がチェーンの履歴を書き換えようとする攻撃です。攻撃者は大量のステークを蓄積し、メインチェーンよりも早くブロックを秘密裏に作成します。そして、別の履歴チェーンが準備できたら、攻撃者はメインチェーンを攻撃者のチェーンに切り替えようとします。ジェネシスの実装は、ノードがエクリプスされない限り、長距離攻撃を軽減します。エクリプス攻撃は、攻撃者が被害ノードを悪意のあるピアで囲み、実際のネットワークを隠すことを試みるものです。
最新の開発
Genesisは以下の新しい概念を導入します:
• レジャーピア
• 軽量チェックポイント(仮のフォールバック/オーバーライドとして)
• 熱心さの制限(LoE)
• ジェネシス密度切断(GDD)
• 忍耐の制限(LoP)
• ジェネシス状態機械
レジャーピア
Genesis論文からの最も大きな逸脱は、Praosノードのロールバック制限を維持するという早期のアーキテクチャ上の決定でした。Praosの下では、Cardanoノードは手動介入なしに2,160ブロック以上ロールバックしません。Genesis論文に記載されているように、エクリプス攻撃を受けたノードは何年も敵対的チェーンの延長を選択し続け、最終的に正直なチェーンを提供するノードに接続したときに、任意の数のブロックを突然ロールバックする可能性があります。
実際には、ノードが無制限のロールバック能力を持つ必要はないため、アーキテクトは代わりにロールバック制限を優先しました。これは多くのリソース使用量の制約の鍵となります。Genesisのためにこれを削除することは、前述のエンジニアリング作業のかなりの部分で呼び出される基本的な不変条件を削除することになります。さらに、同期しているCardano Genesisノードが健全な正直なピアにアクセスできれば、Praosノードのように2,160ブロック以上のロールバックは不要です。
エクリプスは、論文で表現されているよりもGenesisノードにとって潜在的に大きな脅威です。これらの攻撃は、ジェネシスの安全性特性を危険にさらします。エクリプスが数秒以上続くと、Genesisの密度比較を誠実に実施していても、同期しているGenesisノードが敵対的チェーンから2,161ブロックを選択する可能性があります。正直なチェーンの知識がないと、Genesisルールは現在アクセス可能な最も密なチェーンを選択します。エクリプス状況では、それが必ずしも正直なチェーンとは限りません。これはGenesis論文とは対照的で、エクリプスされたノードとそのユーザーは単に遅延、混乱、誤情報を受けるだけで、安全性や存続性の特性を損なうことはありません。ノードは最終的に正直なピアに接続できるため、回復可能です。
Praosネットワークだけを考慮すると、理論的にはノードが遅れを取らないため、エクリプスは依然として有害です。ジェネシスとの主な違いは、Praosノード(本質的に最新である)は、敵対的チェーンにコミットする可能性が高くなる前に、はるかに長いエクリプスを耐えることができることです。しかし、同期中の追加の脆弱性を考慮しなくても、Praosノードにはエクリプスに対する防御が必要です。
一つの防御策は、ピア選択ロジック内でレジャーピアの概念を導入し、エクリプスの確率と期間を十分に制限することです。同期中、Genesisノードはレジャーピア構成を調整して、エクリプスされる確率を大幅に減少させます。そしてエクリプスがない限り、ジェネシスノードは敵対的チェーンから2,161ブロックを選択することはありません。
変更されたピア選択は次のように機能します。最近のステーク分布を調査することで、Genesisノードはネットワークの維持に参加しているピアをサンプル選択し、悪意のあるノードを選択する確率を大幅に減少させます。
フォールバック:軽量チェックポイント
Genesis論文では、健全なPraosネットワーク内の最良のチェーンは、2つのチェーンの交差直後の固定スロットウィンドウ内の他のチェーンよりも多くのブロックを持つとされています。唯一の例外は、Praosネットワークが健全でない場合です。
重大なネットワーク障害が発生した合には、ステークホルダー間のオフチェーン協力によって障害の期間中のチェーンを修正する災害復旧計画を実行する正当性があります。その後、Genesisルールは再び正直なチェーンを支持します。
しかし、災害復旧計画は本質的に難しく、高コストで実行されます。少なくとも一時的には、簡単なチェックポイントメカニズムが十分な協力的なステークプールオペレーターのサブセットによって、ブロック生成の障害期間中または直後にネットワークの制御を迅速かつ容易に維持することを可能にします。
ロジックは簡単で、プロトコルの他の部分と一貫しています:ブロック番号とハッシュペアのリストを指定する設定ファイルで、これにより同じブロック番号を持つ他のブロックはすべて無効と見なされます。そのチェックポイントの設定データは注意して使用し、信頼できるソースからのみ取得する必要があります。理想的には、災害復旧計画の最終実行により、チェックポイントリストへの反応的な追加は一時的なものであることが許可され、さらには要求されます。唯一の恒久的なチェックポイントは、Byron時代のGenesisキーがCardanoチェーンに関連しないことを保証するセットです。
熱心さの制限
レジャーピアが効果的にエクリプスを防止するため、同期ノードは少なくとも正直なチェーンの一部を提供する健全なピアが少なくとも1つはあると仮定できます。したがって、Genesisの安全性の特性は、単純に、同期中のGenesisノードがレジャーピアのチェーンの交差点を越えて2,160ブロック以上を選択することを禁止することで直接的に保証されます。それはすべてのレジャーピアが同意するブロックのみを選択します。これにはほぼ確実に正直なピアが含まれます。この制約は「熱心さの制限」(LoE)と呼ばれます。これは、同期ノードがこれまでに見た中で最良のブロックに熱心にコミットしないようにするためです。敵対的なピアは、正直なピアが歴史的なブロックを提供するよりもはるかに速く代替ブロックを提供できるかもしれません。
Genesis密度切断
LoEを悪用して被害者がブロックを同期しなくなるようにするのは敵対者にとって簡単です。これは同期ノードの存続性の特性に違反します。これを行う方法は3つあります:
• 攻撃ピアがこれ以上ブロックを持っていないと主張する
• 攻撃ピアが代替チェーンを提供する
• 攻撃ピアが代替ブロックを持っていると主張し、かつそれを提供しない。
Genesis論文の基本ルールは最初の2つを直接軽減します。2つのピアが異なるチェーンを提供し、少なくとも1つのチェーンが交差点から2,161ブロック以上を持っている場合、Genesisは交差点後の固定スロットウィンドウでより多くのブロックを持つチェーンを支持します(正直なチェーンは常にその比較に勝ちます。チェーンの交差点を反映する共有プレフィックスを思い出してください。1つのチェーンが他のチェーンの延長である場合でも同様です)。Genesisノードは正直なチェーンを支持し、他のピアから切断します。この行動は「Genesis密度切断」(GDD)と呼ばれます。十分なGDDの後、残りのピアの交差点は歴史的な正直なチェーンのさらに先に進みます。
忍耐の制限
第3の攻撃ベクトルは最も分析が難しいものです。ピアがさらに多くのブロックを持っていると主張しているため、GDDは無効になります。つまり、そのピアの固定ウィンドウ内のブロック数が増加することを許可されれば、さらに多くのブロックを提供できると主張しています。正直なピアは常にその主張を誠実に行い、同期ノードが実際にすべての正直なブロックを持つまで続けます。しかし、攻撃的なピアは悪意を持ってその主張を行うことができます。「忍耐の制限」(LoP)は、さらに多くのブロックを持っていると主張するピアが実際にそれらを提供し、迅速に提供する必要があることを保証します。主な複雑さは、正直なピアも何時間も完璧な応答性を維持することができず、時折遅延が発生することです。このため、LoPは各ピアに対して漏れバケツとして実装されます。漏れはブロック処理の速度であり、ピアがブロックを主張し、それを最小速度よりも遅く提供している間は漏れますが、各正直なピアのバケツ容量は、健全なレジャーピアから予想される典型的な遅延バーストを吸収するのに十分な高さを持ちます。
Genesis state machine(ステートマシーン)
Genesisノードは、追いついたと判断した場合、LoE、GDD、およびLoPを無効にします。その理由は2つあります。まず、追いついたノードは、選出されたスロットで最良のブロックを生成しなければならないという点で、Praosネットワークと根本的に同じです。たとえば、そのようなノードがまだジェネシスルールを使用している場合、強力な攻撃者はLoEを悪用して被害者が自分が生成したブロックを選択するのを一時的に禁止し、それによってそれがネットワークに伝播するのを防ぐ可能性があります。このようなベクトルの全体的な影響を制限することは困難であり、したがって、Genesisノードは同期していない場合は常にPraosノードのように振る舞うべきです。
第二に、追いついたノードは同期ノードほど多くのピアを必要としません。したがって、すべてのノードが膨張したレジャーピア数を維持することによるネットワークへの負荷が不必要で望ましくありません。ジェネシス状態機械は、ノードが追いついたかどうかを判断するための遷移を管理します:
• 追いついた場合、ノードはLoE、GDD、およびLoPを無効にします。
• ノードが追いついたと判断する条件は次の通りです:
• 十分なレジャーピアがあること
• すべてのピアが追加のブロックを持っていないと主張すること(適切に調整されたLoPがこれが早急に起こることを保証します)
• ノードが既にピアのチェーンの中で最良のものを選択していること
これはローカル選択の年齢などを信頼するよりも堅牢です。攻撃ピアがそのような閾値を引き起こすことができ、被害者が防御を早急に下げる可能性があるためです。
• ノードがチェーンの先端が古すぎる(例:20分以上)場合、ノードは同期に戻ります。特に、マシンが長時間スリープすると(例:ユーザーがノートパソコンの蓋をしばらく閉じる)ノードのOSプロセスのライフタイム中にこれが発生します。
次のステップ
上記の設計は過去1年ほどで安定してきました。まだわずかに進化していますが、大きな変更はありません。IOGは過去数か月にわたってTweagと協力してこれを実装およびテストしています。
最近の報告では、この設計に関する主要な欠点や設計変更の提案は見られませんでしたが、いくつかの実装上の問題が指摘されました。これらは現在対処されています。テストおよび最適化のフェーズが完了し、成功した場合、この機能はCardanoメインネットに段階的に展開される予定です。次に、PoSに基づくグローバルブロックチェーンネットワークでの利用を可能にするためのスケーラビリティおよび分散性の改善が進行中です。
結論
この論文は、ブロックチェーンの災害復旧を容易にし、ジェネシスの安全性を確保するためのプロトコルとして、熱心さの制限(LoE)、Genesis密度切断(GDD)、忍耐の制限(LoP)という三つの主要なメカニズムを提案します。これらのメカニズムは、Cardanoネットワークの健全性と信頼性を高めるために重要な役割を果たします。
1. 熱心さの制限(LoE): ノードが過度にブロックを選択しないようにする制約。
2. Genesis密度切断(GDD): 敵対的なピアの代替チェーンからの切断を確保。
3. 忍耐の制限(LoP): ブロックを提供するピアが実際にそれを提供することを保証。
これらのメカニズムの設計と実装は、Cardanoネットワークのスムーズな運用を確保し、ノードが効率的に同期することを保証するための重要なステップです。将来的には、さらに多くのスケーラビリティと分散性の改善が期待されています。