本ページはプロモーションが含まれています
ビットコインは分散型のシステムです。分散型のシステムというのは中央で管理する母体が存在せずに皆で運営していくシステムの事です。中央があれば中央が方針や様々な事柄を決定していけばいいですが分散型の場合は一つ物事を決定するにしても一筋縄ではいきません。様々な意見や悪意のある人物が不正を働こうとするからです。ビットコインの合意形成アルゴリズム(物事を決定する方法)について初心者の方にも分かりやすく解説をしていきます。
- 分散型ネットワーク
- 合意形成の難しさ
- ビットコインの合意形成場面
- ブロックを作成する
- 二重支払い等の不正を排除
- 正しい合意形成を作る
- 仕事量で参加者のふるい落とし
- もし悪意のあるノードがブロック作成をしたら
- 悪意なノードが50%いたら
目次
分散型ネットワーク
ビットコインは分散型ネットワークによりシステムが成り立ちます。分散型ネットワークと言うのは従来のサーバーを頼りにしたネットワークシステムではなくそれぞれの端末(ノードと言います。ノードとは)が相互に接続しあい、それぞれから情報を得て成り立ちます。ビットコインの分散型ネットワークをP2Pネットワークシステムと言います。(P2Pネットワークとは)
サーバー管理システムでは例えばビットコイン等の決済システムにおいて帳簿を管理する場合、それぞれから送られてきた取引に対して「この取引は不正だ」や「この作成済みの帳簿は間違っている」などの判断を管理者が行い取引の却下や帳簿の修正を行います。
管理者がいる場合はこの判断をするのは簡単です。管理者は管理者のつけてきた帳簿やそれまでの取引を信用すればいいのですから一つ一つ確認して決済を処理していけばいいのです。
しかし、ビットコインの分散型システムの場合はそうはいきません。分散型システムでは帳簿を作成するのもそれぞれのノードですし、判断もそれぞれのノードで行われます。仮にノードの中に不正を働こうとするノードがあれば、正しく取引を処理しようとしているノードと対立が生まれます。悪意のあるノードが多数派になってしまっては正しいノードは負けてしまいます。今までの分散型システムではこの「合意形成」が困難で、なかなか正しい合意形成に至らない、と考えられてきました。
スポンサー
合意形成の難しさ
分散型ネットワークは合意形成が難しいとされています。ビットコインシステムにおいても特に有名なのは「ビザンチン将軍問題」と呼ばれるものでしょう。1/3の将軍が裏切ると将軍達は正しい選択をできなくなる、というものです。全てのノードに等しい権力が与えられているビットコインではこの問題を解決できるのか、という議論はしばしなされます。(ビットコイン初心者の為の「ビザンチン将軍問題」)
ビットコインでも合意形成に至るのは一筋縄ではいきません。その取引が二重支払い(一つのビットコインを複数の人に「使用されていない」ように見せかけて支払いをする事)ではないか、最新のブロック(取引帳簿)は問題ないブロックかどうか、等の問いに対して皆で一つの答えを出すと共にそれがユーザーにとって正しい答えでなくてはなりません。
常に合意形成を満たしていなければユーザーはそのシステムを信用しなくなり、誰も利用しなくなることでしょう。
ビットコインの合意形成場面
ビットコインのセキュリティは今回説明する「合意形成アルゴリズム」と「暗号技術」によって大部分が保証されております。仮にどちらか一方だけでも欠けてしまえばビットコインの安全はかなり不確かなものになり、世界的にここまでの注目はなかったでしょう。
ビットコインの合意形成は分散型システムの中で帳簿を作成する時に行われます。従来のビザンチン将軍問題を抱えていた分散型のシステムに対してどうビットコインが答えを出しているのかについて分かりやすく解説をしようと思います。結論を言ってしまえばビットコインの合意形成は理論的には破る事はできます。しかし、実際には破られていない、という所にビットコインの絶妙なシステム形成が見えるのです。
「ブロック」という名の帳簿を作成していく時に、そのブロックの中に「二重支払いなどの不正取引が無いか」「そのブロックは正しく作成されたブロックかどうか」という問題に対して誰がまず回答するか、が重要です。
ブロックを作成する
ビットコインシステムではブロックを作成するのはまず「ランダムに選ばれたノード」です。もちろん、実際はランダムに選ばれているわけではないのですが話を順序だてる為にこのように認識をしましょう。
合意形成を行う時に皆がブロックを作成し、提案できるとしたらそれはかなり非効率です。それぞれのブロックがどれが最も正しいブロックなのかを一つ一つ確認して決めていかなければなりません。そうではなく、ランダムにどれか一つのノードを指定してそのノードにブロックを作成してもらう、としたらどうでしょうか。
ランダムに選ばれているので悪意のあるノードは必ず選ばれるとは限りません。そしてそのノードが作成したブロックに対して皆が「不正が無いかどうか」を検証するのです。これにより悪意のあるノードの「常に」不正ブロックを作成できる権利を奪いつつ、効率的にブロックを検証する事ができるようになるのです。
二重支払い等の不正を排除
二重支払い等の不正に対しては作られたブロックの検証で防ぎます。作られたブロックの取引が全て正しいものかどうかを他のノードが検証をするのです。もしそのブロック内に不正な取引があればそのブロックを他のノードは拒否します。
このように「ランダムに選ばれたノードにブロックを作らせる」と「そのブロックを他のノードが検証する」事により問題であった対等な立場である分散型ノードが皆で一つの答えを出す合意形成の非効率を解消します。
正しい合意形成を作る
しかし、効率的に合意形成する方法が生まれたとしてもこれだけではそれが正しい合意形成、正しいブロックを常に作り続ける完璧なシステムにはなりません。
なぜなら誰でもいくつでもノードを作れるビットコインシステムでは複数のノードを一人の悪意のある参加者が作り出し、ランダムに選択される回数を増やし、検証して不正なブロックを正しいブロックであるかのように見せかける事が出来てしまうからです。
この問題に対してビットコインシステムは「仕事量」「インセンティブ」というエコシステムを取り入れる事で解決を試みております。
仕事量で参加者のふるい落とし
ビットコインでは先ほどの「ランダムに選ばれた参加者のブロック作成」というルールに一つエッセンスを加える事で「ノードを増やしてブロック作成者に選択される回数を増やす」という事に制限をかけております。
具体的にビットコインの新たなブロック作成者は「ランダム」に選択されるのではなく、最も仕事を行った参加者に権利が与えられるルールを設けております。仕事、というのは高性能コンピューターと電気代を最も多く使用してビットコインシステムに貢献する事です。
この「仕事をしてくれた人が次のブロック作成者になる」というルールがあるおかげで無制限にノードを乱立したところで悪意のある参加者が権限を持つわけではなくなり、無駄にノードを作成しません。それよりも、仕事を他の参加者(善意の参加者)よりもより高性能なコンピューターを用意しより電気代を消費できる環境を整えなければならなくなります。
この「最も仕事をした人が次のブロック作成者になる」というルールを「Proof of Work(プルーフオブワーク)」と言います。(プルーフ・オブ・ワークとは)
そして実際のビットコインシステムではまず参加者全員がブロックを作成し、最も早く演算を解き終わった参加者がそのブロックをビットコインシステム内に投げ入れます。他の参加者によって検証がされてOKならばそのブロックが認められます。つまりブロックを作成する、という挑戦をして初めて参加者はビットコインの次のブロックをシステム内に投げ入れる可能性が出てきます。
悪意のある参加者はまず先にコンピューターや電気代を支払い、その上で不正ブロックが作成できる可能性が出ます。この「先行投資」の考え方が悪意のある参加者が増えない一定の抑止力になります。「Proof of Work」ルールの導入は「ランダムにブロック作成者が決まるシステム」よりも悪意のあるノードを減らす「ふるい落とし」の機能を果たします。
もし悪意のあるノードがブロック作成をしたら
しかし「Proof of Work」の元、悪意のあるノード(参加者)が仕事量を他の善意な参加者よりも多く持ちブロック作成権限を得たとしたらどうなるでしょうか。
そうなれば一度ビットコインシステム内には悪意のあるノードが作成した不正なブロックがブロードキャスト(他のノードへ伝わる)されます。そこで検証がされます。ビットコインのブロックチェーンは前の数珠つなぎに過去のブロックから現在のブロックへと繋がれています。
最新のブロックが不正なものだったとしても一度ブロードキャストされればそのブロックはブロックチェーンに繋がれます。そこで他の参加者が「このブロックは不正だ」と感じなければブロックは永遠に残ります。
ブロックが不正かどうかを判断するのは他の参加者です。不正だと思ったら他の参加者は何をすればいいのか、どう作られたブロックに対して「合意形成」をすればいいのか。それは次のブロック作成権限を与えられた参加者に委ねられます。
次のブロック作成権限を「Proof of Work」によって得た参加者は先ほどの不正なブロックに繋ぐか、はたまたその一つ前のブロックにつなぐのか選択を迫られます。
もし最新のブロックが不正だと思うならそのブロックを無視して一つ前のブロックに作成したブロックを繋ぎます。
ビットコインシステムには「最も長いブロックチェーンを正しいブロックとする」というルールがある事がこの合意形成を成立させる重要なポイントになります。
このように悪意のあるノードが作成した「不正なブロック」がブロードキャストされてしまった場合の合意形成は次のブロックを作成する権限を持った人がそのブロックに繋ぐかどうかで行われます。もし「不正」だと判断しそのブロックを無視するならば上図のように一つ前のブロックに新たなブロックを繋ぎますし、「不正ではない」と判断するのであれば最新ブロックに繋ぎます。
「不正なブロック」を無視したらブロックチェーンは分岐します。この時「最も長いブロックチェーン」は先頭に「不正なブロック」と「それを無視して作成されたブロック」の2種類になります。つまり2つの正しいブロックチェーンが生まれます。
次のブロック作成権限を持った参加者がどちらのブロックに次のブロックを繋ぐかでこの合意形成に一つの解が出されます。もし「不正なブロックを無視して作成されたブロック」に次のブロックを繋ぐのであれば「最も長いブロックチェーン」は不正なブロックの入ったブロックチェーンではなくなり、正しいブロックしかないブロックチェーンが公式に「正しいブロックチェーン」になるのです。
悪意なノードが50%いたら
ここで問題は次のブロック作成権限を持った参加者が「不正なブロック」にブロックを繋ごうとする「悪意のあるノード」だったら合意形成は失敗に終わるのか?というものです。
実際ここまで見てきた合意形成システムでは悪意のあるノードを簡単に増やす事は困難だったとしても「Proof of Work」における「仕事量」を50%以上持つノードがいたら(それが1人でも複数人の合計でも)「不正なブロック」に「不正なブロック」を繋いで「最長のブロックチェーン」を作成できてしまいます。
これはビットコインの問題点である「51%攻撃」と呼ばれるものです。ここでは51%攻撃について深くは言及しませんがこれは理論的にはビットコインシステムの崩壊を招きます。
しかし、現実問題として「51%」の仕事量を悪意のあるノードが持ち、それがシステムを崩壊を招いたのかという問いに対する答えは「ノー」のまま8年間過ぎました。
理由は51%もの仕事量を持つには莫大な労力がかかる程ビットコインが成長したことと、それに対するメリットが少ない、というものです。実際ビットコインが稼働した当初に51%攻撃を仕掛けるのはとても容易いものでした。しかし、そこにメリットは無く(ビットコイン自体に価値も無かったので)誰も行いませんでした。
そして世界中にビットコインが広まっている現在では51%攻撃のコストは計り知れません。メリットが仮にあったとしても行うのが困難ですしそれに対するメリットは薄いです。このように理論的に合意形成を防ぐのは可能でも現実として正しい合意形成は続いているのがビットコインなのです。
そして、今挙げてきた「Proof of Work」や「最長のブロックチェーンを正しいブロックチェーンとする」というルールにプラスして「インセンティブ」の概念を加える事で更に「現実問題として」正しい合意形成がなされるシステムをビットコインは作り出します。
長くなりましたので「インセンティブ」がどう正しい合意形成を導くかのご説明は次回にしたいと思います。
関連記事
リップル(XRP)取引の承認方法・コンセンサスアルゴリズム <初心者向け>
スポンサー