"POS型のコインの場合、33%以上持っていれば、POW型のコインのようなネットワーク攻撃ができるようですが、その理由について書かれた説明を見たことがありません。数学を用いるなどかなり難しいとは思いますが、ご教示いただけたら幸いです" 

という質問をいただきました。ちょうどよい機会なので、POSのセキュリティーについて説明します。

まず、なぜ33%なのかですが、これは数学的にいうと難しいです。いちおうWikipediaなどにも解説があるので、読んでみてください。これはいわゆる「ビザンチン将軍問題」といわれるものです。「ビザンチン将軍問題」で検索すれば、ほかにもいろいろ解説はでてきます。

分散型のシステムで、コンピュータが故障したり、ハックされて、偽の情報をだしたり、またはオフラインになったとしても、どのくらいのノードが生きていれば、確実に同期を保証できるか、というのがビザンチン将軍問題です。これには数学的な証明があり、33%、つまり三分の1以下の故障であれば大丈夫であるというようになっています。

これをBFT(ビザンチン、フォールト、トレランス)といいます。多くの分散型のシステムは、このBFTの理論を元にしています。分散ノードしかり、分散データベースしかり、分散◎◎しかり、冗長性を確保するための分散システムではすべてこの理論が適用されているといって過言ではないでしょう。歴史はふるく、ビットコインのPoWのプロトコルができる何十年もまえから存在するプロトコルです。分散型合意形成といえばこれ、なわけですね。

BFTのプロトコルの特徴は2段階コミットにあります。

最初にどれかいずれかのノードが生成したブロックを他のノードに伝搬します。他のノードはこれを検証して、OKか否かを返すわけです。このとき、1/3が嘘の答えをしても、のこり2/3が正しく検証していれば大丈夫です。すべてのノードの回答を集計して、正しいとなれば、最終的にコミット(確定)して、ブロックが確定します。このときファイナリティがえられて、それは覆りません。

ビットコインのマイニングとは極めて違う方式です。ビットコインの場合は、マイナーが正しいハッシュをみつけた時点で、自己完結していますが、BFTのプロトコルの場合は、すべての検証ノードがブロックをうけとり、その検証結果を共有する必要が有ります。つまり、すべてのノードが「お互い」に通信しあえる状況でないとコンセンサスがとれません。ですので、極めて、限定した条件でないとうまくいかないわけで、インターネットのようなネットワークのうえで、BFTのコンセンサスをとるのは難しいと言われていました。とりわけ難しいのは、BFTは基本的に多数決なので、母数がきまっていないといけません。1/3というのを測るときに、母数がきまってないのと1/3がわからないのです。

POSのプロトコルは、この部分をブレイクスルーしたといえます。基本的にPOSのプロトコルは、ヴァリデータといわれる検証ノードの数がきまっています。つまり母数がきまっているわけですね。EOSでは21、Cosmosでは125など、母数がきまっています。ただし、ステーキングしているコインの数によって上位21なり、125を、ブロック毎に選出するという方式になっているわけですね。

また、これら21なり125のヴァリデータノードがお互いに通信する必要があるので、数が大きくなると指数関数的に通信量が増えます。2のノード数乗の通信量になるわけですね。なので、ノードが100、200くらいが限界だといわれています。通信速度も大事で、遅い通信や、返答の遅いノードがふくまれていると、全体のコンセンサスのスピードがおちます。

いずれにしてもパブリックなネットワークでのBFTは難しいといわれていたのですが、それを可能にしたといういみでPOSのプロトコルはかなりブレイクスルーである一方で、通信速度などの制約をうけやすいといえます。

ちなみにイーサリアム2.0の場合は、ステーキングの上位XXノードから選出するということではなく、ランダムにノードを選出して、そのノードのあいだで多数決でブロックを検証する仕組みになっており、より高度です。ただ、これもランダムに選ばれたノードがちゃんと生きているか、通信速度が十分あるか、などの課題があり、そういういみでイーサリアムのPOSがなかなか技術的にハードルがたかく、時間がかかっている要因になっています。

(大石)