卒論から始まるBlockchain

卒論から始まるBlockchain

俺の屍を越えて行け

日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう① ~ ビザンチン障害編 ~

はい、4記事目にして新シリーズが始まります。その名も「日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう」です(長いわ!というツッコミは受け付けません)。

t.co

 個人的に大事だと思う、抑えてほしい点のみをピックアップして説明しました。でも何か気に食わないんですよね。自分が書いたのに。

じゃあどうしようと考えついたのが今回の企画ということです。めちゃくちゃ詳しい方々が議論に議論を重ねて作り出した定義を理解すれば、きっとそのブロックチェーンの真髄が理解できるはず!と意気込んでいます。では早速、協会のホームページに掲載されているブロックチェーンの定義を読み解きながら理解を深めていきたいと思います。以下が定義です。

1)「ビザンチン障害を含む不特定多数のノードを用い、時間の経過とともにその時点の合意が覆る確率が0へ収束するプロトコル、またはその実装をブロックチェーンと呼ぶ。」

2)「電子署名とハッシュポインタを使用し改竄検出が容易なデータ構造を持ち、且つ、当該データをネットワーク上に分散する多数のノードに保持させることで、高可用性及びデータ同一性等を実現する技術を広義のブロックチェーンと呼ぶ。」

狭義のブロックチェーン(定義1)は、オリジナルを意識し、それが備える本質的で不可分な特徴を捉え、言語化しました。

広義のブロックチェーン(定義2)は、昨今〜今後の技術の展開を鑑み、オリジナルが備える特徴であっても、別の実装方式や別の目的への展開などにおいて、置換や変化が行われていく広がりを許容しながらも、特徴を捉えられるよう、言語化しました。

出典:「ブロックチェーンの定義」を公開しました | JBA

 

なるほど、わからん。カタカナ多いし、聞いたことのい言葉もいっぱい。もうちょっとわかりやすくしろよ!!という声がどこからか聞こえてきそうですね。とりあえず難しそう、ということはよくわかります。ただ泣き言を言っていても仕方ありませんので地道に頑張りましょう。

 もはやどこから理解すればいいのか悩むところですが、とりあえず順番に見ていきましょう。

1)「ビザンチン障害を含む不特定多数のノード

 いきなりなぞですよね、この「ビザンチン障害」ってやつ。色々調べてみた結果、簡潔に表すならこんなこんな感じでしょうか。

ビザンチン障害:応答を返さない(オミッション障害)、誤った応答を返す(コミッション障害)障害のこと。

これは分散合意問題というもので出てきます。この問題は「不特定多数の参加者がいるネットワーク内で、ただ一つの情報に『合意』できるか」ということです。今世界中のインターネット利用者はどれくらいいるかご存知ですか?もちろんある程度は予測がつきますが、「正確に」何人かを知っている方はいらっしゃるでしょうか。そう、たぶんいません。なぜならその時々でパソコンを開いている人もいれば、いない人もいますね。新たに携帯を買った人も、失くした人もいます。このように何人いるかを正確に測定することが非常に困難なため「不特定多数の参加者」という前提がつくことになります。このような状況でただ一つの情報(提案)を全員で「合意したい(決定、共有したい)」場合を考えたとき、それはできるのかということです。さらに、その中には故障している機器もあり間違った応答を返す危機が含まれる場合があります。

 

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

 

応答を返さないだけならまだしも、誤った応答が帰ってきた場合、それが本当に間違っているのかを判断するのは非常に困難です。一体どうしましょう。でもピンときた方もいらっしゃるかもしれません。そう、前回の記事(ブロックチェーンってなに?に答えよう - 卒論から始まるBlockchain)で紹介した例題。まさしく同じような状況ではないでしょうか。これがビザンチン障害を例にしたもの(ビザンチン将軍問題)です。まさしく例題通りですね。

例題

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

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

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

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

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

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

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

ビザンチン障害に置き換えると

・一同に会して話会うことが出来ない&手紙でのみやり取り可能=個人間(P2P)でしか情報交換、連絡できない

・裏入り者=機器の故障、停止状況

という状況に置き換えられます。そんな状況で一つの作戦に合意する(決定・共有する)にはどうすればいいでしょうか?ということでした。そこでどうしたか。お互いがお互いの情報を確認しあうことで解決出来るよ!!となりました。じゃあこれをインターネットでもそのまま置き換えてみましょう。つまり定義で書かれている「ビザンチン障害を含む」とは、このような解決が難しい(難しかった)障害も含んで定義します、ということですね。

 

ちなみにこのような状況で正しく合意がするには、全体の総数はどのくらい必要でしょうか。(送信情報は途中で紛失、改変されることなく宛先へ届く。各プロセスから全てのプロセスに通信路があり、情報が到着しないことをタイムアウトにより発見できる。遅延時間に上限があり、同期的であるとする。) 

正解は n≥3t+1 です。(n:ネットワークの総数, t : 故障機器数)

またこの中で正常に動く機器は m≥2t+1(m :正常に動く機器の総数, t : 故障機器数)

必要になります。例題に当てはめると、

裏切り者:1人 正直者:3人(2×1+1)以上 総数:4人(3×1+1)以上

裏切り者:2人 正直者:5人(2×2+1)以上 総数:7人(3×2+1)以上

という構成ならば一つの提案に「合意」することが可能です。逆に、ネットワーク参加者の1/3以上が故障していた場合、全体で1つの正しい合意を得ることは出来ないということがわかります。悪い人ばかりではどのみち世界は成り立たないわけですね(´-ω-`)

ビザンチン障害:応答を返さない(オミッション障害)、誤った応答を返す(コミッション障害)障害のこと。

何となくここは理解できたでしょうか。

あとは「ノード(node)」ですが、これは簡単。つなぎ目という意味があるように、ネットワークに参加しているコンピューターやプログラムをさします。

これで最初に提示したビザンチン障害を含む不特定多数のノード」の意味は理解出来たでしょうか。いや~、長かった。とりあえず今日はここまでです!お疲れさまでした!!ここまでご一読いただき、ありがとうございましたm(__)m

 

 

//我ながら重いシリーズになりそうだなと思っています。頑張ってやりきりたい(;´Д`)

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

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

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

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

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

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

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

大事なポイントは二つ

①特定の管理者がいない

②データの連なり

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

 

①特定の管理者がいない

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

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

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

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

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

例題

今、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

 

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

 

 

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

 

 

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

今までブロックチェーンを勉強するうえで読んだ本や、お世話になってるブログとかを紹介するよ

前回はブログの趣旨とか経緯を説明しましたが、今回は今まで自分がどうやって勉強してきたかを紹介したいと思います!これから勉強してみようかな、っと考えている方々の参考になれば幸いです。

ちなみに現状の割合で行くと、本>Twitter>ブログ>その他、が3:2.5:2.5:2、って感じでしょうか。なかでもTwitterは侮れません。「誰でも億り人になれます!!」などのうたい文句で投稿しているアカウントはクソの役にも立ちませんが(むしろ積極的に取り締まってほしい)、ガチで情報発信されている方々も一定数見受けられます。色々ご紹介するので、気になった方はフォローしてみるといいかもしれません。

 

まずは本からいきます。仮想通貨の投機目的で書かれている本が多い気がしますが、そのような本は一切紹介していません。純粋にブロックチェーンに興味がある、勉強したいけど何から始めれば…、って方むけです。なのでエンジニアの方は面白くないかもしれません。

 

 え、ブロックチェーンの本じゃないの??がっつりビットコインって書いてあるじゃん、って思った方。すみません。

でもこれだけは、ぜーーーーーーーーーったいに読んで頂きたい!!!むしろこれを紹介したくてこの記事を書いていると言っても過言ではありません。自分はこれを読んでから「ブロックチェーンってすごいんじゃね!?」ってなり、今に至っています。

この本がすごいのは「ビザンチン将軍問題」を一番最初に説明しているところだと思います。冒頭でもこう述べています。

「本書を読み終えた時には、「ビザンチン将軍問題」の意味を理解し、その解決法であるビットコインアルゴリズムについての理解が得られると思います。」

出典:

ビットコインはどのようにして動いているのか? 数式なしでわかる仮想通貨の仕組みと技術?改ざん防止、採掘、未来の応用まで

最初は何それ?だと思いますが最後には、なるほどそういうことか!っと叫んでいるはずです。ビットコインビザンチン将軍問題を現実的なレベルで解いた初めてのケースであるということ。ブロックチェーンはそのユースケースの一つであること。技術的に新しいものはそう多くなく、絶妙なインセンティブ設計によって成り立っていることなどが大変わかりやすく書かれています。まさに必読の本だといえます。

 

 

先ほどの本よりもう少し詳しく知りたい!という方はこちらをおすすめ。技術的な部分は大体網羅してるかと思います。ちなみに少し図が多いのでkindleだと読みにくいかと(実際自分が読みにくかったので)。

 

 

 じゃあ実際ブロックチェーンが社会に浸透するとどんなことが起きるの?って事が書かれています。もちろん全部が全部実現できるわけではないと思いますが、かなりリアルに書かれています。技術的なことはどうでもいい!日々のニュースを理解できるようになりたいだけ!という方はとりあえず読んでみることをお勧めします。

 

ブロックチェーン技術の未解決問題

ブロックチェーン技術の未解決問題

 

 ブロックチェーンってすごいな!銀行とかいらなくなるじゃん!!うひょー!!っと夢を抱き始めた方々の鼻っぱしをへし折ってくれる本です。実際にブロックチェーンの研究開発してる方々が、日経BP社のweb連載したものを集約したものになります。

もちろんブロックチェーンなんて使い物にならん!ということではなく、確かにすごいんだけど、まだまだこういう所が問題だよね。とかなり冷静に書かれています。きれいな話はもう飽きたという方は是非。

 

中央銀行が終わる日: ビットコインと通貨の未来 (新潮選書)

中央銀行が終わる日: ビットコインと通貨の未来 (新潮選書)

 

 ブロックチェーンには直接は結びつきませんが、ビットコインが社会経済に与える影響を知りたと思った方は是非。経済的な話がメインなので、好き嫌いが分かれるかもしれません。

お金ってなんだろう?っと考えるきっかけにもなると思います。

 

 

ブロックチェーンアプリケーション開発の教科書

ブロックチェーンアプリケーション開発の教科書

 

 実際に触れてみたいな~、という方はこちら。プログラミングを少しでもやったことがある方はわかると思うんですが、とにかく環境設定がめーーーーっちゃくちゃ面倒なんですよね。でもこの本はMacWindows両方の設定方法が書かれているので比較的簡単に読み進められると思います。本書ではEtherum(イーサリウム)で作られていますが、その説明もされているので安心して読めるのではと思います。

 

 

とりあえず誰にでもおすすめできる!!って本を紹介してみました。次にTwitterアカウントやブログ、その他を紹介していきたいと思います。

Twitter> ※順番に意味はないです

twitter.com

twitter.com

twitter.com

twitter.com

twitter.com

twitter.com

twitter.com 

 

twitter.com

twitter.com

twitter.com

twitter.com


<ブログ>

ZOOM | ブロックチェーンと仮想通貨の情報サイト

この界隈でお世話になってない人はいないのでは??と思ってしまうぐらいのクオリティーの高さ!しかも無料!!ありがてぇ( ;∀;)

ちょっと専門的な内容も多いので、ちょっと詳しく知りたいというときは是非。

 

Gunosy Blockchain Blog

今イケイケのベンチャー企業Gunosyさんのブロックチェーンブログですね。技術的な部分はもちろん、日々の勉強会のレポートなんかもされています。

特にブロックチェーン技術を最速で理解するための勉強方法まとめ (エンジニア向け) - Gunosy Blockchain Blogは結構ガチで勉強したい方や、今回紹介しきれなかったものも大変多く掲載されています。ぜひご参考下さい。

 

<その他>

cryptozombies.io

本じゃわかりづらかった、もっと気軽にブロックチェーンに触れてみたい!という方に胸を張っておすすめできるのがこちら!!なんと、環境構築も、プログラミング知識もほとんどいらない(ゼロではない)、かつゲーム感覚で勉強できるという優れもの!!しかも無料。もう世の中なかには半端ない人がいいるもんですね(人''▽`)

 

aidemy.net

こちらも実際に触れてみたい方むけ。Pythonでの作っているのは大きな特徴かもしれません。CriptoZombiesのように全部無料ではありませんが、本当に手軽に始められるのでお勧めです。

 

 

以上!かなり長くなってしまいましたが、何か気になるものはありましたでしょうか?ガッツリ開発とかしている方には物足りない内容だったかもしれませんが、そこはご勘弁ください。ぶっちゃけツイートとか見ても何言ってるか全然わからないことも多々あるのですが、その度に調べるを繰り返す日々です。なのでもっといい勉強方法あるで!って方はコメントください。では、また次回!!

 

 

//申し訳ございませんが、ほぼ本の紹介じゃねえか!!という突込みは受け付けておりません。ご承知おき下さい( `・∀・´)ノ

 

 

 

 

本ブログの趣旨とか開設経緯を紹介するよ

初投稿です!!

めちゃくちゃ緊張しながらの投稿にはなりますが、とりあえず最初はタイトル通り、ブログの趣旨とか開設経緯を紹介できればと思います。

 

本ブログの趣旨は『Blockchainに興味を持った人が、卒論を書くための前提知識を持てるようにする』になります!(卒論のレベルは適当)その他にも、

・自分が卒論を書くうえで調べたこと、考えたこと

・技術的要素、概念(プログラミングとか)

・経済的効果

・勉強していくためのロードマップ

などを書いていく予定です。

内容はプロジェクトの概念から、プログラミングなどの技術的な話まで、Blockchainに関係することなら幅広く書いていこうと思います。プログラム関連とかはQiitaとかに書くかもしれませんが、その時はちゃんと告知します!

 

次に開設経緯ですが、ズバリ『知識をアウトプットするため』です!!他には以下のような感じ

・卒論書くため

・もっと多くの人にBlockchainを知ってほしい

・自分からも色々発信しなきゃいかん!と思ったから

・当事者意識を持つため

 

詳しくは軽い自己紹介をしながらしていきます(そんなもんどうでもいい!という方は最後の3行を読んでいただければ終わりです)。

現在神奈川在住の理系男子大学生(B4)です。経営工学とか最適化理論の勉強をしてます。幸い留年することなく、就活も一段落し、後は卒論だけ!遊びまくるぜ!!!と思っている大学生です。

 

...卒論??

今まで論文すらまともに読んだことのない人間にある日突然「卒論書け」と迫られるわけです(おそろしい...)。 じゃあテーマ何にしよっかなと...。

「Blockchainに関連させて書きたい!!」

(なんでBlockchain?とか、そもそもそれ何??とかはおいおい書きます)

 

で、早速先生の前で発表したら一言「まあ、やってみればいいんじゃないでしょうか(`・ω・´) 」

...よし、やったるで!!と意気込むのもつかの間、

「出来んのかな( ;∀;)」と思うわけです。

教授はBlockcahin専門の先生ではなく(最適化アルゴリズムとかの研究してるっぽい)、周りに詳しい友人もいない。色々本を読んだり、ブログを読んだり、イベントに参加してはみるものの、どうもしっくりこない。

なにがしっくりこないかというと、「自分がどこまで理解し、何を理解しなければならないのかがわかっていない」ということ。これはインプットだけでなく、アウトプットもしなきゃならんなぁと。

で、そのアウトプットの場の一つがこのブログになります。

卒論書くうえで必要になったこと、調べたこと、調べようと思ってることを好き勝手に書いていく場になります。

まあとにかく自分のためが一番強いです(笑) すみません

 

後はイベントとか参加すると、同年代ぐらいの人たちがいっぱいいるんでよね(ゆずしおさんとかOsukeさんとか)。 そういう方々を見ると、年齢とか関係なく自分からも色々発信していかなきゃいけないと思いました。もう少し当事者意識を持って参加したいですしね。

さらに、日本人って世界トップレベルの仮想通貨所持国ですよね。だからこそ、正しい知識を持てばBlockchain先進国になれるんじゃない?って勝手に思っています。なので、経済的なことも含めて発信できればとも思っています。

 

後はブログタイトルにもあるように、何とな~くでもBlockchain(もしくは仮想通貨でもいい)に興味持った方々が、このブログを見て大学の卒論書けるようになるぐらいの知識を持つことができたらいいなと思っています。

 

 

とは言っても勉強し始めてまだまだ3,4カ月ほど。もちろん責任をもって発信していくつもりではありますが、間違いやご指摘等ありましたら優しくご指摘いただければ幸いですm(_ _)m

ではではよろしくお願いします(*^▽^*)

 

//文章書くのって大変ですね( ;∀;) 続くかな...。