卒論から始まるBlockchain

卒論から始まるBlockchain

俺の屍を越えて行け

ブロックチェーンってなに?に答えよう

最近自分がやっていること、興味を持っていることを口に出すことって大事だなと思い、「ブロックチェーンに興味あります!」っと隙あらば言っています(このブログもその一環)。ただそうすると必ず「ふ~ん、なにそれ?」って返ってくるわけですね。で、自分も思うわけです。

ブロックチェーンってなに?」

大変本質的な質問ですが、これに対する的確な解答例はない気がします。なので今回は、個人的に大事かなというポイントを押さえて説明します(何かおかしい所があったらご指摘お願いします)。何とな~く、全体のイメージを抑えてもらうことが本記事の目標です。

以上の疑問に対して自分が説明するときは

特定の管理者がいない、データの連なりだよ」と言います。

「ふ~ん、なにそれ???」とはてなが増えそうですが、ポイントを押さえて説明します。

大事なポイントは二つ

①特定の管理者がいない

②データの連なり

かと思います。ではそれぞれ見ていきましょう!

 

①特定の管理者がいない

はい、一番の意味不明ポイントですね。でも大丈夫、ちゃんと説明します。

この「特定の」がキモです。なので管理者が「いない」わけではないのです。いーーーーっぱい管理者がいるのです。

ちなみに何を管理しているかというと「データ」です。お金かもしれないし、個人の生体情報かもしれないし、公文章などかもしれません。とにかく何かしらのデータを不特定多数の管理者で管理しています。マンションの管理人がめちゃくちゃいっぱいいる感じです。ビットコインなら数十万数百万の管理人がいます(ノード数のことを指しています)。そうなると当然思うわけですね「そんなこと出来るの?」と。

「出来るんです(´・ω・)」

ええ、できちゃうんですね。しかも、みんなが同じデータを持つことが可能です。一人一人がバラバラのデータを持っていたら、それは管理できていないのと同等ですからね。じゃあ何故できるんですか?を例題を踏まえて説明します。

例題

今、5人の王様(A,B,C,D,E)がいると仮定します。

ある時外国から侵略がありました。この敵、めちゃくちゃ強そうです。なのでそれぞれが単独で戦っても勝ち目はなく、みんなで戦うしかありません。(じゃないとみんな駆逐される)そんな中、各王様は2つの戦略を思いつきました。

1,待ち伏せ策   2,猛突進策

どちらかの策に決めたいですが、残念ながら以下の制約があります。このような制約の中で、どちらか一方の策に決めるにはどうすればいいでしょうか?

・一同に会して話合うことはできない

・各王様は手紙でのみ、やり取り可能(SkypeやLineなど通信インフラは整っていない)

・一人裏切り者の王様がいる。もちろん誰かはわからない。

 

皆さんならどうしましょう?一番簡単な方法はそれぞれが手紙を出しあって、それぞれの考えを聞き、過半数を超えたものにすればいいでしょう。例えば自分を含めて以下のような状況を想定してみましょう。

1,待ち伏せ策 (以後(待ち)と略) → 2票 

2,猛突進策 (以後(猛突)と略) → 2票

つまり,あと一人の意見次第でどちらかの策になりますね。案外簡単そう...ではありません。そう、裏切り者が厄介ですね。もし最後の一人が裏切りものなら、彼はどうするでしょうか?簡単です。

・(待ち)と回答した王様には、自分も(待ち)で行くと回答

・(猛突)と回答した王様には、自分も(猛突) で行くと回答

つまり相手によって別々のことを言えばいいわけです。すると以下のようになるからです。

 

1.Aが(待ち)と回答していて、裏切り者以外の回答は得ている

  (裏切り者を除けば2対2)

2.Eから「俺も (待ち)で行くぜ!」と連絡が来る。

3.Aは(待ち)が過半数を超えたと考えて策を実行する。

4.実際には一つに決定されていないためバラバラの作戦をとることになり、作戦失敗

でもこんなことにはなりたくありません。どうすれば防げるでしょうか?

解決策は、

A.それぞれがどのような回答を得ているかを各自で確認すればいい.

です。

それぞれの手持ち情報を以下のように表にまとめてみます。

 

Aの手持ち情報

Bの手持ち情報

Cの手持ち情報

Dの手持ち情報

Eの手持ち情報

Aの回答

(待ち)

(待ち)

(待ち)

(待ち)

(猛突)

Bの回答

(待ち)

(待ち)

(待ち)

(待ち)

(猛突)

Cの回答

(猛突)

(猛突)

(猛突)

(猛突)

(待ち)

Dの回答

(猛突)

(猛突)

(猛突)

(猛突)

(待ち)

Eの回答

(待ち)

(待ち)

(猛突)

(猛突)

(待ち)

 

何か違和感ありませんか?そう、Eの回答欄です。明らかに統一されていませんね。これを見れば一発で裏切り者だということがわかります。あとは彼を省き、裏切り者がいなくなるまで繰り返せば一つの答え合意できます。

つまり、特定の管理者がいなくてもただ一つのデータを持つ(合意する)ことができるわけです。美しい・・・(*´ω`*)

 

②データの連なり

従来のデータは以下のよう管理されていました。

 

f:id:mochi-mochi-0397:20180523151611p:plain

一つのデータサーバーに特定のキーワードを入れていました。でもこれだとちょっと問題も起こるわけですね。

特に大きな問題(メリットでもある)は、データ管理者が大きな権限を持っていることです。なので、勝手にデータを書き換えてもそれは正しいデータになってしまうわけです。もちろん誰もがそんなことをするわけではありませんが、「出来る」ことが問題なのです。

f:id:mochi-mochi-0397:20180523152444p:plain

 

ではどうすればいいでしょうか?

何となく気づいていたかもしれませんが、うえの図、全てしりとり形式になっているんですよね。つまり何が言いたいかというと、「前後のデータに繋がりを持たせる」ことをしています。そうすると、もし改ざんしたいデータがあったらその前後のデータも改ざんしなければなりません。

もちろん簡単なものなら出来るかもしれませんが、これが大きなデータになればなるほど改ざんは困難になります。なのでよく「改ざんが不可能」と言われるのはここが一種の要因だったりします(もちろん全てではないし、絶対できないわけでもない)。

f:id:mochi-mochi-0397:20180523152959p:plain

 

実際はハッシュ値というものでデータ繋げていますが、それは今回は説明しません。あくまで「データが繋がっている」ことを何となく理解していただければ大丈夫です。

 

 

どうでしょう。何となく「特定の管理者がいない、データの連なりだよ」の意味は伝わったでしょうか。なんでそんなことするの?とか、そのためにどういう技術が使われているの?とかは今回は触れていません。あくまで「何とな~く、全体のイメージを抑えてもらう」ことが出来れば大丈夫です。専門的なことはおいおい説明できればと思います。では、今日はここまでです!読んでくれた方々、ありがとうございました(*´▽`*)

 

 

//毎回文量が多くなっていて嫌になりそうなので、もう少し減らせるよう頑張ります(´・ω・)