この記事は 法政大応情 応用情報 Advent Calendar 2020 8 日目の記事です。 (僕の誕生日でもあります。)
研究でブロックチェーンについて扱っているのですが、サラッとブロックチェーンについて人に説明できる様になりたいので、練習がてらまずは記事として残していきたいと思います。
この記事で扱う内容は以下です。
- ビットコイン(ブロックチェーン)って何が凄いの?
扱わない内容は以下です。
- 細かい技術
- 詳しい暗号の話
- 仮想通貨は儲かるの?って話
といった感じで前置きはここまでにして早速初めていきたいと思います。
データベースについて考えてみる。
ありがちなシステムについて考えてみます。なんか Client がサーバにリクエスト送って、サーバがデータベースに問い合わせして結果をゴニョって Client に返すようなものです。
ここで、Database の内容を(ブロックチェーンの説明に繋げる際都合良くするため)別に見られても良いデータ。例えば、オンラインゲームのランキングみたいなものと考えてみます。
当たり前ですが、Database が壊れたり、改ざんされると返すべきデータを返せなくなってしまいます。
さらに、改ざんに気付けたとして、元に戻せれば良いですが、再起不可能になったりするとデータの消失などになってしまい、重大な被害を被ることになります。
これの対策について考えることとしてみます。
対策の一つとしてはデータベースをコピーすることが考えられます。
そうすればデータベースのどちらかが改ざんされたり破損したりしても、もう一個の方にはデータが保存されているため復旧が可能になります。
ただし、当たり前ではありますが、改ざんされた時点で復旧には以下の二点が必要になります。
- 改ざんに気づくこと
- 復旧作業が人の手で行えること
です。
できれば、改ざんされた場合、(二個の DB でデータの整合性が取れていない場合)、いい感じに正しい状態に自動で戻してほしいものです。
ただ、二個の DB だと、データの整合性が取れていないことは分かっても、どちらが正のデータかがわからないという問題があります。
どちらが正のデータかがわからないを解決するために、複数のデータベースを用意して、データベース間でネットワークを形成すれば、一個ぐらい改ざんされてもその他すべてのデータベースは正常なら簡単に正常なデータベースが分かるかもしれません。正常なデータベースがわかればそれに合わせて自分のデータベースの状態を合わせればよいでしょう。こういったことを合意形成と呼びます。
線を引くのが面倒だったので頭の中で見てみて下さい。
データベースで P2P ネットワークを形成したとします。
例えばとして、せっかくなので、データベースでネットワークを形成した場合、どのピアにデータが送られるのか分からないとします。すなわち、同一のデータベースを使用するアプリケーションが複数あり、アプリケーション:データベースが多対多とします。
この時、あるピア a が悪意を持っている場合以下のようなことが出来ます。
- ピア a が接続されているピア b にはトランザクション a を通知
- ピア a が接続されているピア c にはトランザクション b を通知
このように接続されたピアごとに別々の情報を送ることで合意形成の妨害が可能になります。
この問題は所謂ビザンチン将軍問題 - Wikipediaと呼ばれています。
ビットコイン(ブロックチェーン技術)はこの状態で合意形成を行う、現実的な解を初めて提案したものでした。
これにより P2P ネットワーク上での合意形成が可能になり、ネットワーク上の第多数のピアを乗っ取られない限り、データベース内で合意形成が可能になります。
まとめ
- ブロックチェーン(ビットコイン)の凄さはビザンチン将軍問題の現実的な解決
- 具体的にどういった解決方法になるかを書くと、滅茶苦茶長くなってしまうのでここでは省略します。