BFTコンセンサス
ブロックチェーンで確定したブロックが二度と覆らない仕組みは、BFT合意の定足数設計にあります。3f+1とビザンチン耐性、PBFTとTendermintの投票、PoWとの差を原理で押さえられます。
- 1.ビザンチン障害耐性(BFT)合意は、悪意ノードが嘘や矛盾したメッセージを送っても、正直ノード全体が同一のブロックへ合意することを保証する。悪意ノードを f 台まで許すには全体で n≥3f+1 台、各段の定足数(quorum)は 2f+1 票が必要になる。
- 2.PBFTとTendermintは prepare/commit の2段投票で確定的ファイナリティを与える。2f+1 票が集まったブロックは即座に、かつ永久に確定し、ロールバックしない。ここが「確認数を待つほど覆りにくくなる」PoWの確率的ファイナリティと決定的に異なる。
- 3.BFTは検証者集合(validator set)が既知の許可型で真価を発揮し、通信量は素朴には O(n^2)。一方PoWは匿名の参加者でも動くがファイナリティは確率的でエネルギーを消費する。両者はスケール・確定性・参加モデルのトレードオフで住み分ける。
ブロックチェーンにおける「合意」とは何を守るのか
ブロックチェーンは、中央の管理者を置かずに、多数のノードが同じ台帳(元帳)を同じ順序で持つことを目指す分散システムです。ここで避けたい最悪の事態は、あるノードが「取引Xでブロックが確定した」と信じ、別のノードが「取引Yで確定した」と信じてしまう**フォーク(分岐)**です。分岐は二重支払い(同じコインを二度使う)を許し、台帳の一貫性を根底から崩します。
問題を難しくするのが、参加ノードの一部がビザンチン障害を起こしうる点です。単に停止(クラッシュ)するだけでなく、乗っ取られたノードは偽のブロックを署名し、あるノードには賛成票を、別のノードには反対票を送るといった矛盾した振る舞いを取ります。名前は Lamport らの「ビザンチン将軍問題」(1982)に由来し、一部の将軍が裏切って伝令に偽情報を流す状況の比喩です。ビザンチン障害耐性(BFT)合意とは、こうした任意の悪意的振る舞いをするノードが一定数いても、正直なノード全体が単一のブロック列に合意し続けることを保証するプロトコルを指します。
合意プロトコルは2つの性質で評価します。安全性は「正直ノードが矛盾した値を確定しない(分岐しない)」こと、活性は「正常時には合意が前進して新しいブロックが確定し続ける」ことです。BFT合意はこの両立を、悪意ノード f 台の存在下でも達成しようとします。暗号(/security/)が個々のメッセージの真正性を守るのに対し、合意は集団としての一貫性を守る、という役割分担になります。
定足数と 3f+1:なぜ 3 分の 2 超が要るのか
BFT合意の心臓部は**定足数(quorum)**です。あるブロックを「確定」と見なすには、一定数以上のノードの署名つき賛成票を集めます。悪意ノードを最大 f 台許すとき、全体のノード数 n と定足数の大きさは次の要請から決まります。
| 要請 | 内容 | 帰結 |
|---|---|---|
| 活性 | 悪意・停止した f 台が沈黙しても前進できる | 定足数は n−f 台で満たせる必要がある |
| 安全性 | 2つの定足数の重なりに正直ノードが1台以上残る | 矛盾する2つの確定が同時に起きない |
定足数の大きさを q とします。全体 n 台のうち任意の2つの定足数(各 q 台)が重なるノード数は、最低で 2q − n 台です。この重複に悪意ノードが最大 f 台紛れても正直ノードが1台以上残るには 2q − n > f が必要です。一方、活性の要請から q ≤ n − f です。後者を前者へ代入すると 2(n − f) − n > f、整理して n > 3f、すなわち n ≥ 3f+1 が導かれます。このとき定足数は最小で q = 2f+1、つまり全体の 3 分の 2 超になります。
クラッシュしかしないなら、止まったノードは「票が減る」だけなので n≥2f+1 の過半数で合意できます(RaftやPaxosの世界)。しかしビザンチン障害では悪意ノードが票を捏造し、相手ごとに違う票を送るため、単純な多数決は矛盾証言に騙されます。n=3, f=1 なら、裏切り者が0派には0票、1派には1票を送るだけで両派が別々の値を2対1で確定でき、分岐します。この破れを塞ぐのが 3f+1 と 2f+1 定足数です。
PBFT:確定的ファイナリティを与える2段投票
PBFT(Practical Byzantine Fault Tolerance, Castro–Liskov 1999)は、この理論下限 n≥3f+1 で実用的に動く古典的プロトコルで、多くのブロックチェーンBFT合意の母体です。1つのプライマリ(リーダー)と複数のレプリカからなり、各ブロック(提案)を3フェーズで確定します。
| フェーズ | 送受信 | 成立条件 | 意味 |
|---|---|---|---|
| pre-prepare | プライマリ→全レプリカ | — | 「この高さにこのブロック」と順序つきで提案する |
| prepare | 各ノード→全ノード | 2f+1 票で prepared | 提案の中身と順序に全員が合意した(値の固定) |
| commit | 各ノード→全ノード | 2f+1 票で committed | 十分多数が prepared を見届けたと相互確認し確定 |
要点は 2段の投票(prepare と commit)が両方要ることです。prepare だけでは、あるノードが prepared に達した事実を他のノードが知っている保証がありません。リーダーが故障して交代(ビューチェンジ)したとき、新リーダーが既に確定した順序を取りこぼすと分岐します。commit フェーズは「2f+1 台が prepared を見届けた」ことを定足数で固め、ビューを跨いでも確定済みブロックが保存されることを保証します。committed に達したブロックはその場で永久に確定し、以後決してロールバックしません。これが**確定的ファイナリティ(deterministic finality)**です。
PBFT の1ブロック確定(f=1, n=4, 定足数=2f+1=3)
─────────────────────────────────────────────
pre-prepare : Primary ── (block, height h) ──▶ R1, R2, R3
prepare : 各ノードが prepare を全ノードへブロードキャスト
自分ぶん + 2 票 = 3 (=2f+1) 集めた者は「prepared」
commit : 各ノードが commit を全ノードへブロードキャスト
3 (=2f+1) 票そろった者は「committed」→ ブロック確定・不可逆
Tendermint:ブロックチェーン向けに再設計されたBFT
Tendermint(現 CometBFT。Cosmos エコシステムの合意エンジン)は、PBFT の骨格をブロックチェーン用に整理し直したプロトコルです。合意は高さ(ブロック番号)→ラウンドという入れ子で進み、各ラウンドは提案(propose)と、pre-vote/pre-commit の2段投票からなります。役割は PBFT の prepare/commit に対応し、+2/3(2f+1 に相当)の pre-commit が集まったブロックがその高さで確定します。
PBFTとの実務上の差はいくつかあります。第一に、Tendermint はプルーフ・オブ・ステーク(PoS)と結びつき、票は台数ではなく各検証者のステーク(担保)量で重み付けされます。悪意の上限は「台数の 1/3 未満」ではなく「ステーク総量の 1/3 未満」になります。第二に、ロック機構を持ち、あるブロックに pre-commit したノードは、次のラウンドでも原則そのブロックにロックし続けることで、ラウンドを跨いだ安全性を保ちます。第三に、確定したブロックはやはり不可逆で、Tendermint はフォークを一切作らない設計です(正常時は常に単一チェーン)。
Tendermint は安全性を最優先し、+2/3 の票が集まらない限りブロックを確定しません。裏を返すと、ネットワーク分断で投票可能なステークが 2/3 に届かないと、**合意は停止(活性を失う)**します。これは「分断時も書き込みを受け付け後で解消する」可用性重視の設計とは正反対の選択で、CAP でいう一貫性(C)側に振った態度です。BFTチェーンが「止まっても分岐はしない」と言われる所以です。
- ビザンチン耐性は n≥3f+1、定足数は 2f+1(3 分の 2 超)。クラッシュ耐性の n≥2f+1 とペアで覚える。
- PBFT/Tendermint は prepare・commit(pre-vote・pre-commit)の2段投票。commit が要るのはビューチェンジを跨いで確定を保存するため。
- 確定したブロックは不可逆(確定的ファイナリティ)。PoW の確率的ファイナリティとの対比が頻出。
- Tendermint は PoS でステーク重み付け、悪意上限は総ステークの 1/3 未満。
PoW(Nakamoto 合意)との違い
ビットコインのNakamoto 合意は、BFT系とは系譜がまったく異なります。定足数の投票で確定させるのではなく、**プルーフ・オブ・ワーク(PoW)**で計算量を消費させ、**最も累積作業量の大きいチェーン(最長チェーン規則)**を正とすることで、匿名で人数不明の参加者の間に多数派を表現します。
決定的な違いはファイナリティの性質です。PoW では、あるブロックはより長いチェーンが現れれば覆りうるため、確定は「後続ブロック(確認)が積み上がるほど覆る確率が指数的に下がる」**確率的ファイナリティ(probabilistic finality)**にとどまります。ビットコインで「6承認待つ」といった運用はこのためです。対してBFT系は committed の瞬間に不可逆で、待ち時間ゼロで確定します。
| 観点 | BFT合意(PBFT/Tendermint) | PoW(Nakamoto 合意) |
|---|---|---|
| ファイナリティ | 確定的・即時・不可逆 | 確率的・確認数で強化・原理上は覆りうる |
| 安全性の境界 | 悪意が 1/3 未満(票/ステーク) | 悪意が計算力の過半数未満(51%攻撃が境界) |
| 参加モデル | 検証者集合が既知の許可型が得意 | 匿名・出入り自由な非許可型でも動く |
| スケール | 通信量が素朴に O(n^2)、数百ノード級で頭打ち | 参加者数に強い(世界規模) |
| 分断時の挙動 | 確定は止まるが分岐しない(安全性優先) | 各分断で採掘継続、後で長い側へ収束(可用性優先) |
| コスト | 署名・通信が主、省エネ | ハッシュ計算で多大なエネルギーを消費 |
安全性の境界も対照的です。BFT系は悪意が全体の 1/3 以上になると安全性が崩れます。PoW は悪意が計算力(ハッシュレート)の過半数を握ると最長チェーンを操作でき、いわゆる 51%攻撃 が成立します。1/3 と 1/2 という閾値の差は、「投票の矛盾を交差で見抜く」BFTと「作業量で多数を測る」PoWという、確定メカニズムの根本的な違いから来ています。
即時に覆らない確定が欲しく、検証者が既知(許可型・エンタープライズ用途や PoS チェーン)なら BFT系が向きます。参加を誰にも開き、巨大スケールと検閲耐性を優先するなら PoW(や後継の PoS + フォーク選択)が向きます。近年の Ethereum のように、フォーク選択で活性を保ちつつ Casper FFG で 2/3 超の検証者による BFT 的ファイナリティ層を重ねるハイブリッドも広がっています。合意設計は結局、確定性・スケール・参加モデルの三つ巴のトレードオフです。
通信量とスケールの壁
BFT合意の実務上の弱点は通信量です。PBFT の prepare/commit は全ノードが全ノードへ送る all-to-all なので、1ブロックあたり O(n^2) 通のメッセージが飛びます。数十ノードなら軽くても、数百を超えると急速に重くなり、これがBFTチェーンの検証者数を制約します。
この壁への近代的な回答が HotStuff(Diem/旧 Libra などの基盤)です。閾値署名(threshold signature)で多数の署名を1つに集約し、リーダーを介したスター型通信にすることで、メッセージ複雑度を O(n^2) から O(n) へ下げました。さらにフェーズを規則的に連鎖(pipelining)させ、リーダー交代も線形コストで行えます。Tendermint・HotStuff いずれも、分散システムの合意で扱う PBFT の安全性原理——3 分の 2 超の定足数と多段投票——をそのまま受け継ぎつつ、ブロックチェーン規模で動かすための最適化を重ねたもの、と位置づけられます。
まとめ
- BFTコンセンサスは、悪意ノードが嘘や矛盾証言をしても正直ノード全体が単一ブロック列に合意するプロトコル。台帳の分岐(二重支払い)を防ぐのが目的。
- 悪意 f 台に耐えるには n≥3f+1、定足数は 2f+1(3 分の 2 超)。根拠は定足数の交差で、2つの定足数の重複に必ず正直ノードが1台残る。
- PBFT/Tendermint は prepare・commit(pre-vote・pre-commit)の2段投票で、ビューを跨いでも確定を保存し、committed ブロックを即時・不可逆に確定(確定的ファイナリティ)。
- PoW(Nakamoto 合意)は最長チェーンと計算量で多数を表し、ファイナリティは確率的、境界は 51%攻撃。BFTの 1/3 とは閾値も系譜も異なる。
- BFTは許可型・省エネだが
O(n^2)の通信でスケールに弱い。HotStuff の閾値署名が O(n) 化し、Ethereum の Casper FFG のようなハイブリッドも実用化している。
ブロックチェーン Article
BFTコンセンサスを実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
ブロックチェーン
比較で見る軸
難易度: advanced / カテゴリ: ブロックチェーン / タグ数: 6
導入後に効く点
PBFTとTendermintは prepare/commit の2段投票で確定的ファイナリティを与える。2f+1 票が集まったブロックは即座に、かつ永久に確定し、ロールバックしない。ここが「確認数を待つほど覆りにくくなる」PoWの確率的ファイナリティと決定的に異なる。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- ブロックチェーン
- タグ数
- 6
判断チェックリスト
- 自社の用途が「ブロックチェーン / 分散台帳」に近いか確認する。
- 強みである「ビザンチン障害耐性(BFT)合意は、悪意ノードが嘘や矛盾したメッセージを送っても、正直ノード全体が同一のブロックへ合意することを保証する。悪意ノードを f 台まで許すには全体で n≥3f+1 台、各段の定足数(quorum)は 2f+1 票が必要になる。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。