ファイナリティとフォーク選択
取引が「もう覆らない」と言える根拠はどこにあるのか。最長鎖・最重鎖ルールとリオーグの数理から、確率的ファイナリティと確定的ファイナリティの本質的な違いまで、実務判断に落とし込めるよう原理で解説する。
- 1.分散台帳では複数ノードがほぼ同時にブロックを作ると一時的フォーク(枝分かれ)が生じる。どの枝を正典(canonical chain)とみなすかを一意に決める規則がフォーク選択で、Nakamoto系は最長鎖/最重鎖ルールを使う。
- 2.PoW/最重鎖系のファイナリティは確率的。あるブロックが覆される確率は後続の確認数(confirmations)とともに指数的に減衰するが、厳密にゼロにはならない。深い枝が新しい重い枝に置き換わるのがリオーグ(reorg)。
- 3.BFT系(Tendermint など)や Ethereum の Casper FFG はブロックに確定的ファイナリティを与える。2/3超の検証者が投票して確定した時点で二度と覆らず、それを覆すには没収されるステークが伴う。
ファイナリティという問い
分散台帳(distributed ledger)の中核的な問いは、「この取引はもう覆らないと、いつ言い切れるのか」です。銀行の勘定系なら中央のデータベースがコミットした瞬間に確定ですが、単一の権威を置かないブロックチェーンでは、そもそも「確定」を誰がどう宣言するのかが自明ではありません。この「もう覆らない性質」をファイナリティ(finality) と呼びます。
ファイナリティが問題になる直接の原因は、台帳が分岐しうることです。世界中のノードは互いにネットワーク遅延を挟んで通信するため、2つ以上のノードがほぼ同時に有効なブロックを提案すると、台帳の先端が一時的に複数の枝に分かれます。このとき「どの枝が本物か」を全ノードが同じ結論で選べなければ、台帳は1つに収束しません。この選択規則がフォーク選択(fork choice) です。
本記事で扱う「フォーク」は、合意規則が同じまま先端が一時的に枝分かれする一時的フォーク(temporary fork) です。プロトコルの仕様変更によって恒久的に鎖が分かれるハードフォーク/ソフトフォークとは別物です。前者は数ブロックで自然解消される運用上の現象、後者は互換性の設計判断であり、混同しないでください。
一時的フォークはなぜ生じるか
ブロックの生成(PoWならハッシュ計算、PoSならスロットへの提案)は本質的に確率的・分散的なイベントです。ノードAが新ブロックを作った瞬間、その事実がネットワーク全体へ伝播するには伝播遅延がかかります。伝播が完了する前に、遠く離れたノードBが同じ親を指す別のブロックを作ると、両者は正当な兄弟ブロックとなり、台帳は一時的に2本の枝を持ちます。
┌─ Block N+1 (A作) … 枝1
Block N ────────────┤
└─ Block N+1' (B作) … 枝2
このとき、ネットワークを半分ずつが枝1・枝2を受け取り、それぞれの上に次のブロックを積み始めます。放置すれば2本が並走してしまうため、全ノードが同じ規則で一方を捨て、他方に合流する必要があります。この収束を担うのがフォーク選択規則です。
一時的フォークの起きやすさは、おおむね「ブロック伝播時間 ÷ ブロック生成間隔」で決まります。生成間隔が短いほど、伝播が終わる前に次ブロックが生まれやすく、フォークが頻発します。ビットコインが10分という長い間隔を採るのは、この孤立ブロック率(orphan/stale rate)を抑え、実効的な安全余裕を稼ぐ設計判断でもあります。
最長鎖ルールと最重鎖ルール
Nakamoto合意(PoWの基本形)のフォーク選択は、素朴には最長鎖ルール(longest chain rule) と呼ばれます。分岐した枝のうち最もブロック数が多い枝を正典とみなし、各ノードはその先端に次を積む、というものです。正直な多数派は常に同じ最長鎖に集中するため、少数派の枝は追い抜かれて捨てられ、台帳は1本に収束します。
ただし「最長」は正確な表現ではありません。攻撃者は難易度の低い時期を狙ってブロック数だけを稼ぐことができるため、本来の基準は累積した仕事量(総ディフィカルティ)が最大の枝です。これを最重鎖ルール(heaviest / greatest-cumulative-work chain) と呼びます。ビットコインの実装が実際に比較するのは、ブロック数ではなく各ブロックの難易度を合算した値です。
| 規則 | 比較する量 | 採用例 | 落とし穴 |
|---|---|---|---|
| 最長鎖(素朴) | 枝のブロック数 | 概念説明・初期の表現 | 難易度差を無視し、低難易度で数を稼ぐ攻撃に弱い |
| 最重鎖(実装) | 枝の累積ディフィカルティ | Bitcoin など PoW 実装 | 計算量が本当の多数派を表す。数ではなく仕事量で判定 |
| GHOST 系 | サブツリー全体の重み | 初期 Ethereum(PoW) の思想 | 捨てられた兄弟(uncle)の仕事も安全性に算入する |
GHOST(Greedy Heaviest-Observed Sub-Tree)は最重鎖の発展形で、先端の1本だけでなく、各分岐点でより重いサブツリー全体を持つ側を選びます。これにより、短い生成間隔で孤立ブロックが多く出ても、それらの仕事量を安全性の評価に取り込めます。高スループット化に伴う孤立ブロックの増加が、正典鎖の相対的な重みを損なうのを緩和する狙いです。
Nakamoto合意が数える多数派は、ノードの頭数でも投票数でもなく、チェーンに投下された希少リソース(PoWなら計算量、PoSなら賭けられたステーク) です。だからこそ攻撃の閾値は「51%攻撃」——ハッシュレートの過半数——として語られます。過半数の仕事量を握られると、攻撃者は正典より重い枝を秘密裏に伸ばし、公開時に既存の枝を置き換えられます。
確率的ファイナリティと確認数
最重鎖ルールのもとでは、確定は原理的に暫定的です。いま最も重い枝に含まれるブロックであっても、将来もっと重い別の枝が現れれば、その枝は正典の座を奪われ、含まれていた取引は台帳から消えます。したがって Nakamoto系のファイナリティは確率的ファイナリティ(probabilistic finality) と呼ばれます。「絶対に覆らない」ではなく、「覆る確率が時間とともに指数的に小さくなる」という性質です。
この確率を実務で扱う指標が確認数(confirmations) です。あるブロックの上に積まれた後続ブロック数を数え、これが多いほど、そのブロックを覆すために攻撃者が追い抜くべき仕事量が増えます。
確認数 k のブロックを覆す条件(攻撃者視点):
攻撃者は非公開の枝を、正典より「深く」伸ばして追い越す必要がある
→ 正直側が k ブロック先行した状態から追いつく確率は、
攻撃者のハッシュレート比 q が 0.5 未満なら k に対して指数的に減衰する
→ q < 0.5 のとき、確認数を増やすほど逆転確率は 0 に近づく(ただし厳密には非ゼロ)
ビットコインで6確認が慣習とされるのは、正直ハッシュレートが十分多数(攻撃者比 q が小さい)という前提のもとで、逆転確率が実務上無視できる水準(おおむね0.1%オーダー以下)まで落ちるためです。高額決済ではさらに深い確認を待つのは、この確率を積み増しているにすぎません。確認数は「安全性を買うために支払う待ち時間」だと理解すると、要件に応じた設定が筋道立って決められます。
確率的ファイナリティの核は「覆る確率が確認数に対して指数的に減衰するが、ゼロにはならない」点。攻撃者のハッシュレート比 q が 0.5 を超えると減衰しなくなり(むしろ逆転が確実化し)、これが 51%攻撃の境界です。「なぜ6確認か」には数値の暗記ではなく、この指数減衰と前提(正直多数)で答えられるようにしておきましょう。
リオーグ(チェーン再編成)
正典とされていた枝が、より重い別の枝に置き換わる現象をリオーグ(reorg, chain reorganization) と呼びます。ノードは新しい最重鎖を検知すると、それまでの先端から分岐点まで巻き戻し(roll back)、破棄する枝に含まれていた取引を未確定プールへ戻し、新しい枝を適用し直します。
リオーグの深さは、巻き戻されるブロック数で測ります。伝播遅延に起因する自然な一時的フォークは深さ1でほぼ解消します。深いリオーグは通常、意図的な攻撃かネットワークの深刻な分断を示唆します。
| リオーグの深さ | 典型的な原因 | 危険度 |
|---|---|---|
| 深さ 1(1ブロック) | 伝播遅延による自然な兄弟ブロック競合 | 低。日常的に発生し自動収束する |
| 深さ 2〜数ブロック | 一時的なネットワーク分断、実装差、局所的な遅延 | 中。二重支払いの窓が開く可能性 |
| 深い(多数ブロック) | 51%攻撃・大規模分断・重大バグ | 高。確率的ファイナリティ前提が崩れる兆候 |
リオーグが二重支払い(double spend) の温床になるのは、破棄される枝に含まれていた送金取引が無効化され、攻撃者が同じ資金を別の宛先へ振り替えた枝を正典にできるからです。確認数を待つ意味は、まさに「相手が十分な深さのリオーグを起こせないと確信できるまで受領を保留する」ことにあります。受領者が確認を待たずに商品を渡すと、浅いリオーグでも支払いが消える危険があります。
ノードのメモリプールに取引が現れただけの「ゼロ確認(0-conf)」は、まだどのブロックにも取り込まれておらず、フォーク選択の保護を一切受けていません。手数料を吊り上げた置換取引(RBF など)で容易に上書きできるため、不可逆な価値の引き渡しをゼロ確認で行ってはいけません。少なくとも1確認、高額なら要件に応じた確認数を要求するのが原則です。
確定的ファイナリティ
確率的ファイナリティの「いつまでも厳密にはゼロにならない」という性質は、決済や取引所にとって扱いづらい面があります。これを解消するのが確定的ファイナリティ(deterministic / absolute finality) で、BFT系合意(/devops/ で扱う PBFT 系の系譜)を土台にします。ここではブロックが投票で確定され、確定した瞬間に、規則上二度と覆らないことが保証されます。
仕組みの核は BFT の定足数です。2/3超の検証者(バリデータ) が同一ブロックへ賛成投票すると、そのブロックは確定(committed / finalized)します。BFTの安全性から、確定した2つの異なるブロックが両立するには1/3超の検証者が二重投票する必要があり、それは検出可能で、賭けられたステークの没収(slashing) という経済的制裁を招きます。覆すには「保有ステークの1/3超を失う覚悟」が要る——この不可能性の裏付けが、確率ではなく経済的・論理的な確実性を与えます。
| 観点 | 確率的ファイナリティ | 確定的ファイナリティ |
|---|---|---|
| 代表例 | Bitcoin, 初期 Ethereum(PoW) | Tendermint/CometBFT, Ethereum の Casper FFG |
| 確定の判断 | 確認数を数え、覆る確率を評価 | 2/3超の投票で確定した時点で即確定 |
| 覆る可能性 | 指数的に減衰するが非ゼロ | 規則上ゼロ(破れば 1/3超が slashing 対象) |
| 一時的フォーク | 頻繁に起き、最重鎖で解消 | 確定前のみ発生。確定後は巻き戻せない |
| トレードオフ | 大規模・開放的にスケールしやすい | 確定は速いが検証者数のスケールに制約 |
Ethereum の Casper FFG(Friendly Finality Gadget)は両者を組み合わせた実例です。ブロックの提案・積み上げはフォーク選択規則(後継としては LMD-GHOST)で行いつつ、一定間隔ごとに検証者が投票してチェックポイントを確定します。確定済みチェックポイントより前は二度と覆らず、確定していない先端部分だけが確率的な性質を残す——日常のフォーク選択と定期的な確定的ファイナリティを二層で両立させる設計です。
フォーク選択規則は「いま、どの先端に積むべきか」を毎ブロック決める規則で、活性(前進し続けること)に効きます。ファイナリティは「過去のどこまでが確定したか」を定める性質で、安全性(覆らないこと)に効きます。確定的ファイナリティを持つチェーンでも、確定していない先端部分ではフォーク選択が依然として必要です。両者は競合せず、層が違うと捉えるのが正確です。
まとめ
- 一時的フォークは伝播遅延によりほぼ同時に有効ブロックが生まれると起き、全ノードが同じフォーク選択規則で一方に収束することで解消される。
- Nakamoto系の規則は最長鎖ではなく厳密には最重鎖(累積ディフィカルティ最大)。数える多数派は頭数ではなく投下されたリソース(計算量/ステーク)で、閾値が 51%攻撃 として現れる。
- Nakamoto系のファイナリティは確率的。覆る確率は確認数に対して指数的に減衰するが非ゼロで、6確認などの慣習はこの確率を実務上無視できる水準まで積む行為。
- 正典が別の重い枝に置き換わるのがリオーグ。深さ1は日常的だが、深いリオーグは攻撃や分断の兆候であり二重支払いの窓を開く。ゼロ確認を最終扱いしてはならない。
- BFT系や Casper FFG は確定的ファイナリティを与える。2/3超の投票で確定した瞬間に覆らず、破れば1/3超のステークが没収される。フォーク選択(活性)とファイナリティ(安全性)は競合せず二層で両立する。
ブロックチェーン Article
ファイナリティとフォーク選択を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ブロックチェーン
比較で見る軸
難易度: advanced / カテゴリ: ブロックチェーン / タグ数: 6
導入後に効く点
PoW/最重鎖系のファイナリティは確率的。あるブロックが覆される確率は後続の確認数(confirmations)とともに指数的に減衰するが、厳密にゼロにはならない。深い枝が新しい重い枝に置き換わるのがリオーグ(reorg)。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ブロックチェーン
- タグ数
- 6
判断チェックリスト
- 自社の用途が「ブロックチェーン / 分散台帳」に近いか確認する。
- 強みである「分散台帳では複数ノードがほぼ同時にブロックを作ると一時的フォーク(枝分かれ)が生じる。どの枝を正典(canonical chain)とみなすかを一意に決める規則がフォーク選択で、Nakamoto系は最長鎖/最重鎖ルールを使う。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。