卒論から始まる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

 

 

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