ビザンチン将軍問題~ブロックチェーン理解への道~
この記事を読んでくださっているということはブロックチェーンに興味があるということですよね。
そんな皆さんには基礎知識であるビザンチン将軍問題(Byzantine Fault Tolerance)について改めて整理していきます。
ブロックチェーンには合意形成アルゴリズムが必要不可欠であり、それらがブロックチェン技術の中核を担っています。
ブロックチェーンの生みの親ともいわれるSatoshi NakamotoもPoWのもつビザンチン将軍問題解決の可能性に関して触れていました。
それでは本題に入ります。
1.二人の将軍問題
ビザンチン将軍問題に入る前にこの議論のもととなる話「The Two Generals Problem」を取り上げます。
次の条件を想定してください
- 二人の将軍がいます
- 一人はリーダー、もう一人はそれに従うフォロワー
- 二人はとある敵陣へ攻め込もうとします
- 敵を倒すには二人が同じ時間に同時に攻撃を仕掛けなければなりません
- 二人は遠く離れた地にいるため伝令をお互いに送って「攻撃する時間」を示しあわなければなりません
- お互いに伝令を送るためには間に位置する敵陣を超えていかなければなりません
以上のことを踏まえてシミュレーションを行います。
- 将軍A(リーダー)は朝の9時に攻撃すると決定し、その旨を 将軍B(フォロワー)に伝えるため伝令兵を送ります
- 伝令を受け取った将軍Bは「了解した」という旨を伝えるべく伝令兵を将軍Aに送ります
- 伝令を受け取った将軍Aは合意が形成されたと考え、9時に攻撃を仕掛けることにしました
さてここで問題です。将軍A,Bは敵を倒すことができたでしょうか?
答えは「どちらともあり得る」です。
なんとも腑に落ちない答えですね。
実はこの答えがまさに合意形成の難しさなのです。
細かく見てみましょう。
「将軍Aが伝令を送り将軍Bが受け取った、将軍Bがさらに伝令を送って将軍Aが受け取った」
一見合意形成がなされたように見えます、しかし実は穴があります。
皆さん次の条件を覚えていますか?
- お互いに伝令を送るためには間に位置する敵陣を超えていかなければなりません
ここで不確実性が生まれてきます。
この不確実性により将軍Bは自分が出した伝令が将軍Aに届いたか「わからないのです」
これが無限にループしていきます。
だいぶ簡単に書きましたがこれが二人の将軍問題と呼ばれるものです。
ここから派生しビザンチン将軍問題というものが生まれてきます。
2.ビザンチン将軍問題
さて本題のビザンチン将軍問題に入ります。
次の条件を想定してください
- 1人の将軍A、3人の中将a、b、cがいます
- 敵軍に攻め込みたいが、全軍で攻撃を仕掛けないと倒すことができない(一人でも撤退した場合は負ける)
- 4人は遠く離れた地にいるため伝令をお互いに送って「攻撃する」か「撤退する」かを示しあわなければなりません
- 将軍は中将にどちらの選択をするか伝令をおくります
- 合意の確認を取るため将軍からの伝令を受け取った中将はほかの中将にさらに伝令を送ります
全員が信頼があり、絶対的に裏切らないといえるならばこの作戦は成功するかもしれません。
しかしここで誰かひとり(ここでは中将a)が「裏切り」を行うと仮定します。
これを踏まえてシミュレーションすると
- 将軍Aは「攻撃する」と中将、a、b、c全員に伝令を送りました。
- 伝令を受け取った将軍たちは合意を確認するため他の中将へ伝令を送ります
- 中将aは中将bに「攻撃する」という旨を送ります
- 中将cがここで「裏切り」を行い、bに「撤退する」という旨を送ります
さてこのままいくとどうなるでしょうか。
正解は
aだけが全員が攻撃を行うと思っており、攻撃した。しかし実はほかの二人は撤退していた。
ということが起こります。
このように悪意を持ったノード(ここでは中将)によって合意形成がうまくされませんでした。
少々省いた部分もありますが概要はこのようなことです。
ビザンチン将軍問題は失敗モデルとして最も難しい問題の部類に入ります。
ブロックチェーンは悪意のあるノードが存在することを仮定して設計され、これを解決する策が講じられています。
というかここがブロックチェーンのキモですね。
Bitcoinのブロックチェーンでは最も長いチェーンが採用されるという形で合意形成がされます。
PoWは合意形成というよりスパムを排除する機能といったほうが正しいです。
しかしブロックチェーンではこの問題が完全に排除されたかといわれると疑問視する声が多々あります。
ブロックチェーンの問題はたくさんありますね。
今回はビザンチン将軍問題を扱いました。
今後もブロックチェーンへの理解を深めるためにこのような記事を投稿していきます!!
最後までご覧いただきありがとうございました!