卒論から始まるBlockchain

卒論から始まるBlockchain

これを読めば、きっとあなたもBlockchainを題材に卒論が書ける,はず!

Hyperledger プロジェクトについて調べてみた

はじめに

ごめんなさい。

ということで久しぶりの投稿は謝罪からです。なんでこんなに間が空いたかって?? 

サボってたからです!!(開き直り)

 

 前回まではひたすらブロックチェーンの基礎を説明していました。ただいつまでもそこばっかりやっても面白くないので、今回はブロックチェーンプロジェクトの実例を一つ紹介していきたいと思います。それは

「Hyperledger プロジェクト」

です。読み方は「ハイパーレジャー 」です。最近子供たちの間で大人気の戦隊シリーズの名前・・・ではありません。ちゃんとしたブロックチェーンプロジェクトの名前です。

ではくだらない前置きはこのぐらいにして、早速進みましょう!

 

※なぜこれを取り上げるかというと、最近大学でHyperledger Fabricの講演をしていただいたからです。本当はHyperledger Fabricの話を書こうと思ったんですが、Hyperledgerだけでも記事が書けそうだと思ったので書くことにしましたHyperledger Fabricの話はまた今度書きます。

 

Heyperledgerとは

 2015年12月17日、米国のThe Linux Foundation(LF)が発表した「Hyperledgerプロジェクト」により作成されたものになります。これはブロックチェーン技術の普及に向けた、共同研究プロジェクトになります。

 開発は一応オープンソースで開発されていますが、目指しているのは特定の業界や企業間でのブロックチェーンネットワークの構築になります。そのため、BitcoinやEthereumのようなパブリック型ではなく、コンソーシアム型のブロックチェーンプロジェクトがほとんどになります。(これからパブリック型のプロジェクトが出てくるという可能性の意味を込めて)よって流通や貿易、金融などの幅広い産業で「現実的に」使えることが予想されます。

 さらに特徴の一つとして、Bitcoinのビットコインや、Ethereumのイーサのような内部通貨がない点が挙げられます。(もちろん作ろうと思えば作れる。また、テスト用通貨が用意されているものもある)これはコンソーシアム型ブロックチェーンのため、パブリック型のようなインセンティブ、もしくは不正をするコストを考慮していないためだと思われます。

 参加企業としてはIBMIntelアクセンチュア、日立、富士通などの大企業が参加しています。全体では150以上の企業がこのプロジェクトに参加しています。

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

出典:https://www.hyperledger.org/members

 

 ご覧の通り名だたる企業が参加していますね。全体的には米・中の企業が多めな感じがします。

メンバーにはプレミアム会員(Premier Member)・一般会員(General Member)・準会員(Associate Menber)の3つの会員があるようです。

もちろん各メンバーごとにそれぞれ特権?のようなものがありますが、開発自体はオープンソースであるため、メンバーにならなくても意見などは自由に発言できます。

 

 ちなみにメンバーになるには以下のような会費が必要です。一番上のプレミアム会員になるためには$250,000(USD)。つまり日本円にして最低約2800万!!(2018/08/14)ヤバすぎ...。

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

出典:https://www.hyperledger.org/members/join

 

 

派生プロジェクト・ツール

 ここまで概要を見てきましたが、実際に走っているプロジェクト・ツールそれぞれ5個です。中でもHyperledger FabricはIBMが発起したプロジェクトでコンソーシアム型ブロックチェーンとしては一番有名?ではないでしょうか。またHyperledger Irohaは、ソラミツ株式会社という日本の会社が発起したプロジェクトになります。最近だとカンボジア政府と共同開発するということで話題にもなりました。数少ない日本初のブロックチェーンプロジェクトですので、是非頑張ってほしいですね(*´▽`*)

 

プロジェクト

ツール

 

まとめ

 個人的にBitcoinやEtereum、Nemなどのブロックチェーンに触れる、もしくは情報を目にする機会が多いので、案外Hypereledgerも開発が進んでるんだと知りビックリしました(笑)

後は個人もコミュニティに入れるとか・オープンソースで開発が進んでいるなども今回初めて知ったので面白かったです。(企業の人しか入れない&そうなると必然的にクローズドに開発が行われるているんだろうな、と勝手に思っていた)

気になる方は各プロジェクトのリンクを張っていますので、そちらから詳しい情報を得るといいと思います。

 

では今回はここまでです!ここまでお読みいただきありがとうございました!!

何か不備、ご意見ありましたらコメントいただけると幸いですm(_ _)m

 

//Hypereledger?パブリックじゃねえんだろ?そんなもんブロックチェーンじゃねえ!!とか少し思っていた部分もあったので頭を冷やすいい機会になりました(笑)ビジネス利用するならやっぱりコンソーシアム型なのかなぁ、と考え始めた今日この頃です(-ω-)

 

参考資料

日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう⑦最終回 ~ データ同一性&まとめ編 ~

前回までのおさらい

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

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

 前回は太字の部分のみを解説しました。まずは可用性について触れ、高可用性を説明しました。可用性とは「システムが壊れていない状態がどれだけ維持されているか」を示す指標の事(≒稼働率)でした。なので高可用性とは、高確率でシステムが壊れていない状態がどれだけ維持されているかの指標でした。

じゃあどのくらいが高いかの指標は以下の表のようになっていることになります。

Availabilityレベル   Availabilityクラス  年間ダウンタイム 
100% 連続処理 0分
99.999%  フォールトトレラント 5分
99.99%   フォールトレジリエント   53分
99.9%   ハイアベイラビリティ 8.8時間
99-99.5% 一般の商用 44~87時間

HAシステム(1) - 高可用性システムとクラスタリング

 

そのうえでまた一つ読み進めていきたいと思います。

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

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

 ついに最後になります。いやー、長かった。本当に。

 

データ同一性

  そのデータは間違いない?改竄されていない?みんな同じデータになってる?ってことです。じゃあどうやってそれをするか。特別なプロトコル電子署名ハッシュポインタデータ構造などなどさまざまな技術を用いて実現しています。そして、それらを用いて高可用性・データ同一性を実現する技術を「ブロックチェーン」と読んでいるんですね。

 

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

 

いやー、終わった終わった。今日はうまい酒が飲めそうだぜ!!って思うのは早いです。実はこの定義の下には以下のような文章が書いてあります。 

定義策定のアプローチ

まず、Satoshi Nakamoto論文およびその実装である、ビットコインブロックチェーンをオリジナルのブロックチェーン(以下「オリジナル」)として強く意識しています。

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

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

今後について

今回公開する定義は、現在時点の見解であると考えており、今後もアップデートが必要であると考えています。また、引き続き、ブロックチェーンに関する用語解説を策定していく予定です。

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

 

広義・狭義のブロックチェーン

 何となくお忘れかもしれませんが、この定義は1)、2)がありました。ブロックチェーンで色々調べてみると、本当に様々な見解や説明が書かれています。そうなると自分も思いますし、周りからもあることを言われます。

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

 この素朴な疑問への一つの解として1)をオリジナル=ビットコインとして「狭義ブロックチェーン」、2)を「広義ブロックチェーン」として定義されたということになります。

じゃあ広義のブロックチェーンって何になるかというと以下の表が非常にわかりやすくまとまっていました。ビットコインも入っているので、狭義も含んでますね)

 

f:id:mochi-mochi-0397:20180718143135p:plain出典:ビットコイン研究所ブログ(http://doublehash.me/blockchain-difinition/

 ここでは細かい説明はしません。何となくこれだけ多くの分類が出来るんだな、と思っていただければ十分です。

 

まとめ

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

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

定義策定のアプローチ

まず、Satoshi Nakamoto論文およびその実装である、ビットコインブロックチェーンをオリジナルのブロックチェーン(以下「オリジナル」)として強く意識しています。

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

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

今後について

今回公開する定義は、現在時点の見解であると考えており、今後もアップデートが必要であると考えています。また、引き続き、ブロックチェーンに関する用語解説を策定していく予定です。

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

 全7回に渡って説明することになった「日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう」ですがいかがだったでしょうか。以上の文を見て、ふむふむなるほどねと1mmでも思ってくれたのならこれほどうれしいことはありません。

 また、今後についてと書かれているように、この定義はアップデートされていくはずですし、するべきだと思います。その時はまたこのブログで書いていけたらとも思います。

では今日はここまでです。ここまで読んで頂きありがとうございました!

何か不備等ありましたらご指摘いただけると幸いです。

 

参考資料

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

なんでもかんでもブロックチェーン?何をもってブロックチェーン?ブロックチェーンの用語の混乱を整理してみる(議論たたき台) | ビットコイン研究所

日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう⑥ ~ 高可用性編 ~

前回までのおさらい

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

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

 前回は太字の部分のみを解説しました。電子署名とハッシュポインタを使うことで、「改竄検出が容易なデータ構造」を実現しています。またそれをみんながみんなのデータを持っている(=当該データをネットワーク上に分散する多数のノードに保持させる)ことで改竄を防ぎ、もし起きてもそれが容易に検出できるように設計されていると説明しました。

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

 

そのうえでまた一つ読み進めていきたいと思います。

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

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

ということで今回は太字の部分ですね。今回は前回のようにちゃっちゃっと進みます!とはなりません。だって見てください。コウ・・・カヨウセイ?

思わずカタカナになってしまうぐらい難しそうな言葉。もう・・・いや。

 

可用性Availability

 本題に入る前に、まずは最初の一文字を消した「可用性」ついて理解していきましょう。簡単に言えば「システムが壊れていない状態がどれだけ維持されているか」を示す指標の事です。そのため可用性=稼働率、として説明されることもあります。

 

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

 

 

システムは銀行のATMでも、インターネットでも何でもいいです。ちなみにJISでは以下のように定義されています。

許可されたエンティティが要求したときに,アクセス及び仕様が可能である特性。

JIS Q 27000:2014 情報技術−セキュリティ技術−情報セキュリティマネジメントシステム−用語

  さらに、稼働率は以下の式で表されます。

稼働率 = 総稼働時間/総時間

 この稼働率が1に近くなるほど可用性が高く、0に近いほど可用性が低いということになります。正し、あらかじめ設定されたメンテナンスなどは故障には含みません。あくまで災害やサイバー攻撃、バグなどの想定外の故障になります。

 

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

 

高可用性(High Availability

 まあここまでくれば「高可用性」の意味も何となく察しがつくのではないでしょうか。可用性が高いこと。つまり高確率で、システムが壊れていない状態がどれだけ維持されているか、もしくは稼働率が1に近いことになります。

じゃあその高い確率とはどのくらいでしょうか? 80%? 90%? 人によってそれぞれだよ!となりそうではありますが、一応指針目安として以下のようになっているようです。以下の表は任意のシステムを1年間休まず動かした場合になります。 

Availabilityレベル   Availabilityクラス  年間ダウンタイム 
100% 連続処理 0分
99.999%  フォールトトレラント 5分
99.99%   フォールトレジリエント   53分
99.9%   ハイアベイラビリティ 8.8時間
99-99.5% 一般の商用 44~87時間

HAシステム(1) - 高可用性システムとクラスタリング

...99.9%!たっっっか!!!っていうのが個人的な感想ではあります(笑)まあATMとかSNSとかを想像したとき、年間で約8.8時間(一回でというわけではない)も止まったら困りますよね。それでも99.9%なんですから、システム作るってのは大変なんですね・・・・。 

 

まとめ

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

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

  高可用性とは、とにかく止まらない!ずっと稼働している!ということです。で、ブロックチェーンはそれを満たすような仕組みであるこということですね。

 

参考資料

「分かりそう」で「分からない」でも「分かった」気になれるIT用語辞典

ビジネスITと継続について考える

HA(高可用性)とは - IT用語辞典

JIS X 0014:1999 情報処理用語—信頼性,保守性及び可用性

わかりやすい組込みシステム構築技法 ハードウェア編

日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう⑤ ~ 改竄検出編 ~

前回までのおさらい

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

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

前回は太字の部分のみを説明しました。ハッシュポインタとは、ハッシュ関数から得られるハッシュ値を隣のブロックのポインタとして使うことで、ブロック(データ)ごとの繋がりを作っています。そのために以下のような要件を満たす、暗号学的ハッシュ関数も含めて説明しました。

  • どんな入力にも固定長の値を出力
  • 同じ入力には同じ出力
  • 一方向性(原像計算困難性)
  • 第2原像計算困難性
  • 衝突困難性

これにより、ハッシュ値は少しでも入力が違うと出力結果が全く違うものになる&どんな入力を入れても固定長の出力が得られことになります。

 そして、このような特性を持つハッシュ関数を用いることで隣のブロックを指し示す(=ポインタ)ことをしていますと説明しました。

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

 

そのうえでまた一つ読み進めていきたいと思います。

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

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

ということで今回は太字の部分ですね。今日は前回、前々回と違い、ちゃっちゃっと進みます!...たぶん

 

みんながみんなのデータを持っている

 このブログで口うるさいほど言っているセリフがあります。それが「みんながみんなのデータを持っている」というものです。これを小難し言葉で表現しているのが「当該データをネットワーク上に分散する多数のノードに保持させる」というものです。

 当該データはブロックチェーンに保存している何等かのデータになります。仮想通貨のような金銭データかもしれないし、公文章や生体データかもしれません。データの種類はここでは説いていません。また、ノードは連載一回目の記事で軽く説明しましたが、ネットワークに参加しているコンピューターやプログラムをさします。ここではネットワーク=ブロックチェーンになりますね。

 

改竄検出

 以上のものが成り立つ理由も説明してきたのでここではあえて触れません。前回、前々回は少し技術的な話だったのでどうしても小難しい感じになりましたが、それは「改竄検出」を説明するためにしました。

 電子署名は、署名者が間違いなく署名したことを証明する技術でした。ハッシュポインタは、隣のブロックを繋げる役割として働いていました。署名者しか知らない秘密鍵を用いることでデータの正当性を証明し、少しでも入力が違うと出力結果が全く違うものになる&どんな入力を入れても固定長の出力が得られるというハッシュ関数の特性を活かしたものでした。

 これにより、みんなが好き勝手にみんなのデータを持っていたり、好き勝手に改竄することを防いでいます。もちろんそんな無法状態だったら、そもそも一つに合意できません。ただこれがもし改竄された時、分かりづらくては困ります。なぜなら改竄検出を何度も何度もチェックするのは大変ですよね。刻一刻とブロックが積みあがっていく中で、チェックにそう時間をかけられません。

 

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

なので出来るだけ簡単にチェックできなければなりません。それを実現するために外せない技術が電子署名とハッシュポインタ(もちろんこれだけではない)になるということです。

 

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

 ただブロックに取り組む前に正当なデータであるかをチェックしてブロックに取り込んでいます。ですので、ブロックに取り込む(=データの合意)後ではなく、前に行われる場合の方が多いかもしれません。ただし、現在はブロックに取り組まれた後に改竄 or 不正なデータが発覚した場合にも対処できるようにしようという動きもあります。

 

まとめ

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

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

  電子署名もハッシュポインタも、数学的に逆算が非常に大変という特性を持つことで改竄を防ぎ、もし起きても検出が用意になるように設計されています。さらに、多くのノードで成り立つ(具体的な数値は不明)ネットワーク状態だということですね。

 

今回もここまでお読みいただきありがとうございます!何かご意見ご指摘等ありましたらコメントいただけると幸いです。

 

参考資料

日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう④ ~ ハッシュポインタ編 ~

前回までのおさらい

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

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

前回(日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう③ ~ 電子署名編 ~ - 卒論から始まるBlockchain)はこの太字の部分だけを解説しました。例として以下のものを考えながら説明しました。

 アリスがボブに10BTC送る状況を考るとき、超大まかなステップは以下のようになります。

  1. 「アリスからボブに10BTC送る」という取引内容をアリスがネットワークに知らせる。
  2. 取引内容に問題がないかみんなで検証する。
  3. 正しければ約束事(コンセンサスアルゴリズム)に沿って合意し、ブロックを繋げる。

 この時の取引内容は本当にアリスがネットワークに知らせた(発行した)のかを証明する技術になると説明しました。

  1. アリスしか知らない秘密鍵で署名を作る
  2. ネットワーク上に公開鍵とともに公開
  3. 各ノードが公開された署名と公開鍵を使って、それぞれが同じものかを検証する。同じであればアリスの正当な取引とする。

 

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

 

 このようにアリスが秘密鍵と公開鍵を用いることで、その取引内容が間違いなくアリスが発行し、途中で改ざんされていないとい事を証明しているのでした。

 

そのうえでまた一つ読み進めていきたいと思います。

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

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

...ハッシュポインタ?もういい加減スラーっと進ませていただきたい。そう願うばかりですね(´・ω・)

 

ハッシュ関数

 ハッシュポインタを説明する前にいくつか前提知識が必要そうです。それが、ハッシュポインタのハッシュの部分。こいつです。おそらくハッシュ値のことを指していると考えられる(間違ってたらごめんなさい)ので、そこから説明します。

 皆さん、関数って覚えていますか?y=2x とか y=x+2 とかのあいつです。xに何かを入れるとyの値がわかります。つまり変数に任意の値を入力すると、それに対応して結果を出力します。 二次関数、指数関数、三角関数、etc...そんな中、本日ご紹介するのが「ハッシュ関数」でございます。そして、この関数から得られる値を「ハッシュ値」といいます。

この関数、とっても面白い性質を持っているんです。特に今回ご紹介するのは以下の2つです!!

  • どんな入力にも固定長の値を出力
  • 同じ入力には同じ出力

さらにブロックチェーンで求められるものはただのハッシュ関数ではありません。「暗号学的ハッシュ関数」です。以下のような安全性を満たすハッシュ関数がそう呼ばれることがあります。

  • 一方向性(原像計算困難性)
  • 第2原像計算困難性
  • 衝突困難性

...頑張ろう。

 

どんな入力にも固定長の値を出力

少し変な質問をします。

Q:y=x+2に適当な整数を入力すると、それに伴って出力の桁数はどうなりますか?

A:入力の値によって変化する。

何を当然なことを言っているんだと思われたかもしれません。でもハッシュ関数だとそうはいかないからこんな質問をしました。実際にビットコインで使われているSHA-256(シャ-ニゴロと呼びます)を例に見てみましょう。

入力:1

出力:6B86B273FF34FCE19D6B804EFF5A3F5747ADA4EAA22F1D49C01E52DDB7875B4B

 

入力:1234567890

出力:C775E7B757EDE630CD0AA1113BD102661AB38829CA52A6422AB782862F268646

出力は数字以外の文字も含まれていますが、そこは気にしないでください。今回大事なのは出力の長さです。1桁でも10桁でも全く同じ長さですね。もちろん嘘ではありません。試しにこちらで色々試してみてください。なんでそうなるかは置いといて(単に説明できないだけ)、必ず任意の固定長の出力をするように設計されています。

 

同じ入力には同じ出力

 当たり前だろ!って思った方が多いかもしれません。かくいう私もそう思いました。でも大事なので挙げました。これは言葉の通りです。特に説明はしません。

※先ほど挙げたサイトで例の入力をいれてみてください。同じものが出てくるはずです。ちなみに半角ですよ。

 

一方向性(原像計算困難性)

 ここからは暗号学的ハッシュ関数を満たすための3要素の説明になります。見るからにやばそうな名前がついていますが大丈夫です。案外見かけだけです。

まず一つ目の「一方向性(原像計算困難性)」という性質。簡単に言えば出力から入力を求めることは困難(やろうと思えばできなくはないが、現実的に無理)ということです。

例えば

4A44DC15364204A80FE80E9039455CC1608281820FE2B24F1E5233ADE6AF1DD5

という出力が得られた時、どんな値が入力されたかわかりますか?わからないですね。ではこれならどうでしょう。F5CA38F748A1D6EAF726B8A42FB575C3C71F1864A8143301782DE13DA2D9202B

やはりわかりませんね。(ちなみに答えは10と20です。わかったぜ!という方、おそらく人知を超えたと思われます。こんなブログ見てないで全人類のために何かしてください。お願いします。)

 正確に言うのであれば、出力されたh(m)から入力したmを求めることは非常に困難であるという性質です。

 

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

 

第2原像計算困難性

 ある入力 mと、そのハッシュ値h(m)が与えられた時、同一のハッシュ値になる別の入力を計算することは困難であるという性質です。例えば先ほど10を入力したときのハッシュ値で考えた時、これと全く同じハッシュ値になる入力を見つけるのは非常に困難であることを指します。

 

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

衝突困難性

同じハッシュ値h(m) をとるようなメッセージ(m,m') の組を一つでも見つけることは非常に困難という性質。先ほどの第2原像計算困難性と似ていますが別物です。

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

 

とりあえずここまでだらだらと性質やら特徴やらを述べてきたわけですが、一番抑えておいていただきたいのは「少しでも入力が違うと出力結果が全く違うものになる&どんな入力を入れても固定長の出力が得られる」ということです。(じゃあ最初からそう言えというツッコミをしてはいけません)

 

ポインタ

 ここまでさんざんハッシュ関数ハッシュ値について説明してきましたが、ハッシュポインタの「ポインタ」部分の説明をしていきたいと思います。でもそう深堀はしません。

ここではデータ構造としてのポインタを指します。代表的なものはC言語になるかと思いますが、ここでは「何かを指し示してしている」という説明にとどめたいと思います。ですのでポインタとはデータの「何かを指し示している」ということだけを頭に入れてください。

 

ブロックチェーンでのポインタ

 先ほどポインタとは「何かを指し示している」と説明しました。ではブロックチェーンでは「何を」指し示しているのでしょうか。

それは「隣のブロック」です。ブロックチェーンはデータをつなぎ合わせています。でもこれは物理的につながっているのではありません。あくまでデータで繋がっているのです。

そしてデータを繋ぐ役割を担っているのがハッシュ値になります。(もちろんハッシュ値は他にも役割があります) ビットコインを例にしましょう。

ビットコインでは10分置きに新たなブロック(データ)ができます。この時、全取引内容をハッシュ関数に入力し、その出力をh(m)とします。そしてまた10分経ち、新たなブロックを作るとき先ほどのようにハッシュ値h(m')'を出力します。しかし、ここで一工夫。先ほど作ったh(m)を入力にいれてh(m')'を出力します。つまりh(h(m),m')'になります。つぎの10分が経ち新たなハッシュ値を出力します。その時も同じように今までできたハッシュ値を入力に入れて新たなハッシュ値を出力します。

 このようにブロック(データ)ごとにハッシュ値を作り、それが次のブロック(データ)とを繋げています。つまり次のブロックを指し示す役割になっています。(表現としては無理やりすぎるかな(;´・ω・))

 

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

 

こうすることでそれぞれのブロックに対して繋がりができます。つまりハッシュ値を用いることで隣のブロックの場所を指し示す(ポインタ)ことができるのです。

 さらに先ほどのハッシュ値の特性から、各々のハッシュ値はほぼ雄一無二の値です。それぞれ偽装・改変することもほぼ不可能です。これがブロックごとの繋がりをより強固にしています。

 

まとめ

 ハッシュ値を隣のブロックのポインタとして使うことで、ブロック(データ)ごとの繋がりを作っています。これが「ハッシュポインタ」になります。

調べているとハッシュチェーンと紹介されていることが多いような気がしましたが、あくまでハッシュ値が各ブロックのアドレスを指し示すような役割であるということを強調したくてこの言葉を使ったのかなと解釈しています。(まちがっていたらごめんなさい)

 

というこで今回はここまでです!ここまでお読みただきありがとうございました!!

何かご意見ご指摘等ありましたらコメントいただけると幸いです。

 

参考資料

日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう③ ~ 電子署名編 ~

前回までのおさらい

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

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

 前回は太字部分を「ファイナリティーを確保する」という言葉に置き換えて説明しました。じゃあファイナリティーってなに?というのは以下のようなものを指しますとお話しました。

(1)受け取ったおかねが後になって紙くずになったり消えてしまったりしない、また決済方法について(2)行われた決済が後から絶対に取り消されない――そういう決済が「ファイナリティーのある決済」と呼ばれます。 

出典:第7章 決済の実行 : 日本銀行 Bank of Japan

ではなぜこれが定義の太字部分に関係あるかはブロックチェーンのある特徴に由来しますよ。それは「一定時間ごとにデータを繋げていく」、「より長くつながったデータを正しい合意とする」という二点によります(前回は説明を簡略化するためあえてこの二点に絞った)、と説明しました。

Q:ブロックチェーンは「どんな」データを合意しているのか?

A:ある計算を一番早く、正しくした者のデータをみんなで合意する(ビットコインの場合&データの中身についての話は省略)。そして、合意したブロックを一定時間ごとに繋げていく。

注意点

1:ある瞬間に、正しいデータが複数提案される(これをフォークといいます)ことがある。

2:その場合、より長くなった方を正しいデータとして合意し、繋げていく。短い方(その他のブロック)は無効になる。

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

これによりブロックチェーンでは、一時期は正当な取引であると合意されていたものが時間が経つと無効になる、覆される可能性があります。だからブロックチェーンでは「一定時間」ごとにネットワークで合意されたデータを繋いでいき、それらが後で「無効・覆る可能性」が限りなく0に近くなっていく(0%にはならない)ことでデータの正当性を担保しています。と説明し、最後に(1)のまとめをして終わりました。

ブロックチェーンとは:応答を返さない、誤った応答を返す可能性がある不特定多数の参加者を含むネットワークにおいて、時間が経つにつれてその合意内容が覆される確率が限りなく0に近くなっていくプロトコル、実装のこと

 

 

ということで、今回から(2)の説明をしていきたいと思います。では改めて定義を見て見ましょう。

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

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

 

・・・まあ、なぞだよね。画面たたき割りたくなるよね。だって最初の一語「電子署名」がわからんもん。

定義だからしょうがない?うるせぇ!もっとわかりやすく言えねえのかよ!

そんな方々のために、私頑張りたいと思います。

 

署名とは

 そもそも署名とは何でしょうか。Google先生に聞くと、以下のような文が見つかりました。

行為者の同一性を示し、行為者の責任を明らかにするために行為者が自己の氏名を手書き(自署)すること。

出典:日本大百科事典(全書)、署名とは - コトバンク

 これは間違いなく私(署名者)が行った・確認したものですよ。ということを証明するものなどで使われるものです。ここでは手書き(自書)と書かれていますが、ネットの世界にも証明しなくてはならない事があります。そして、ブロックチェーンにも必然的にあるわけです。

では一体どんな場面でそれは必要になってくるのでしょうか。ここではビットコインを例に説明していきます。

 

ブロックチェーンで必要な署名とは

 アリスがボブに10BTC送る状況を考るとき、超大まかなステップは以下のようになります。

  1. 「アリスからボブに10BTC送る」という取引内容をアリスがネットワークに知らせる。
  2. 取引内容に問題がないかみんなで検証する。
  3. 正しければ約束事(コンセンサスアルゴリズム)に沿って合意し、ブロックを繋げる。

※今回は電子署名の話だけしたいので、色々省略してます。ごめんなさい。

※アリスとボブは暗号学などでよく出てくるので使っています。特に意味はないです

※BTC:ビットコインの略

 ここで問題です。1.「アリスからボブに10BTC送る」という取引内容をアリスがネットワークに知らせる、と書きました。では、この取引内容は本当にアリスがネットワークに知らせた(発行した)のでしょうか?

もしかしたらボブが勝手に発行したのかもしれません。もしくはネットワーク全体に知らせる途中で、誰かが取引内容を改ざんしているかもしれません(本当は10BTCではなく1BTCだったなど)。でもそんなことはありません!確実にアリスが発信したものです!取引内容にも間違いありません!!という確証を得るにはどうすればいいのでしょうか。

 これこそがブロックチェーンで必要な署名です。そして、こんな時に使われるものが「電子署名(デジタル署名)」です。

※他にも確認しなければならないことは多くあります。しかし、今回は説明簡略化のために絞っています。ご理解ください。

※赤文字は修正した部分です。大事な部分を赤にしているわけではありません。

 

電子署名とは

 この電子署名をするために、アリスやその他のノードはどのような動きをするのか、超簡単にまとめてみます。

<アリス>

  1. 秘密鍵・公開鍵という二つのカギを用意します。
  2. 証明したい取引内容を、秘密鍵署名(暗号化)します。
  3. 公開鍵と、暗号化していない元の情報(取引内容)に署名を添付したものをネットワークに公開する。

暗号化していない元の情報=平文。暗号化した情報=暗号文といいます。以下それぞれを、平文・暗号文と表記。

 

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

 

<その他のノード>

  1. アリスが公開した公開鍵を使って、(暗号化した取引内容を元に戻す(以下、復号と表記)。)署名検証する。
  2. (復号したものと、平文を比べる。同じであれば、)署名検証が正しければアリスが本当に署名したものと判断。違っていれば正しい署名がなされていないと判断し、その取引は無視。

 

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

 

では要点を絞って説明していきます。

 

秘密鍵・公開鍵

最初にアリス(署名者)は以下の二つの鍵を用意します。

秘密鍵:アリス(署名者)だけが知る鍵。誰にも知らせてはいけない。

公開鍵:(今回は)署名検証(平文を復号化)するための鍵。ネットワーク上に公開するため誰でも知っている。

 

 おそらく理解しがたいのは公開鍵ではないでしょうか。特にネットワーク上に公開するという点。鍵なのに公開していいの!?と思うかもしれませんが、大丈夫です。

何故なら公開鍵から秘密鍵を知ることは実質不可能だからです。ここで「実質」とつけているのには訳があります。というのも、現在の暗号技術は数学的計算量によって担保されたものを使用しています。つまり、計算すればいつかは暗号が解読できるかもしれないが、それは何万年、何十万年かければ解けるよ、ということです。一つの暗号解読にそれだけの年月がかかるならば、それは実質解読不可能と考えられます。この先に出てくる「実質」も同じ意味です。

※次回のハッシュの話をするので、その時に詳しく説明するかも?

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

 次いで重要なポイントは秘密鍵は文字通り「秘密」にしなければなりません。これを知られたら、ほかの人々はいつでもアリスに成り代わることが出来てしまいます。しかもそれはネットワーク上では本物のアリスとして完全に認められてしまいます。その為、秘密鍵は絶対に知られてはいけません。絶対にですよ!!

 また、電子署名では秘密鍵を用いて署名(平文を暗号化)します。この署名(この暗号文)はもちろんアリス(署名者)以外は実質解読することができません。

そして、この署名(暗号文)はアリスの秘密鍵からしか作れません。大事なのでもう一度いいます。この署名(暗号文)はアリスの秘密鍵からし作れません。

これが後々、署名として活きてきます。

 

 署名検証

 その他のノードは、アリスの公開鍵を用いて署名検証暗号文を解読)します。そして同じくアリスが公開した署名平文)とを比べます。そこで、両者が一致していればアリスが署名したもの、つまりは正当な発起人が出した情報だと確認できます。

 でもなぜそんなことが言えるのでしょうか。先ほどの一文を覚えていますか?「この署名暗号文)はアリスの秘密鍵からしか作れません。」といいました。

 つまり、公開された署名暗号文)を作れるのは全世界で秘密鍵を持っている者のみ。今回でいうアリス本人でしかありえないということになります。

 これでアリスが本当に署名をしたと確認することができます。

 

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

 

まとめ

 秘密鍵・公開鍵の二種類の鍵を用いることで。電子署名という技術が成り立っているとお話しました。

これは署名者しか知りえない情報(秘密鍵)でしか作れない署名を作る暗号文を用いる)ことで、その情報の正当性を得る技術になります。

本当はハッシュ関数を用いての説明の方がよかったかもしれませんが、それはまた次回ということにしました。

ということで今回はここまでです!お疲れ様でした。ここまでお読みいただきありがとうございました!!

何か不備等ありましたらご指摘下さると幸いですm(_ _)m

 

修正:2018/06/13

公開鍵暗号秘密鍵・公開鍵の役割と、電子署名秘密鍵・公開鍵の役割を勘違いしていたため一部修正を入れました。少々読みづらくなってはいますが、どこで勘違いしていたかがわかるように()に打消し線を引き、赤文字で修正しました。重要な部分という意味で勘違いされるかもしれない(あながち間違っていない?)ので、ある程度時間が経ったら黒文字にします。

ちなみに同じような勘違いをしている方は以下のブログがおすすめです!

「電子署名=『秘密鍵で暗号化』」という良くある誤解の話

 

あときっかけは以下のツイート。上のブログもその流れの紹介です。ありがたや(*´ω`)

 

参考資料

日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう② ~ ファイナリティー編 ~

前回までのおさらい

前回は定義1の一番最初に出てくる単語「ビザンチン障害」をメインに解説していきました。(日本ブロックチェーン協会の定義から、ブロックチェーンを理解しよう① ~ ビザンチン障害編 ~ - 卒論から始まるBlockchain)

 ビザンチン障害:応答を返さない、誤った応答を返す障害のこと。

と紹介しました。さらに、それを含むネットワーク内でどのように合意すればいいかは、実はこの記事で紹介してたよ(ブロックチェーンってなに?に答えよう - 卒論から始まるBlockchain)と言いました。またそのような場合に、ネットワーク内で一つの情報(提案)に合意するためには、

ネットワークの総数:n≥3t+1(n:ネットワークの総数, t : 故障機器数)

正常に動く機器:m≥2t+1(m :正常に動く機器の総数, t : 故障機器数)

が必要だよ!という話をして終わりました。その上で今日は太字の部分

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

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

 「時間の経過とともにその時点の合意が覆る確率が0へ収束するプロトコル

をメインに説明していきたいと思います!

 

プロトコル”とは 

相変わらずどこから手を付けていけばいいのかというところですが、とりあえずカタカナから片付けましょう(何となく)。

 

プロトコル:機器同士がネットワークを利用して通信するうえで決めている約束事

 

この記事を読んでいる方の多くは日本語を母語にしているかと思います。ではなぜ私たちは「日本語」で会話ができるのでしょうか。それは「日本語」での単語の意味や、文法がわかっているから。つまり「日本語」のルールがわかっているからですね。一方が日本語で話し、一方がスワヒリ語で話しても会話は成り立ちませんね。同じように、インターネットや通信の世界も場所によって様々なルールがあります。でもそれでは不便だよね。だから、プロトコル(ルール、お約束事)を決めましょう。それをもとに色々やっていきましょう、というのがあるわけです。じゃあブロックチェーンにおけるルールは何かというと、

時間の経過とともにその時点の合意が覆る確率が0へ収束する」ルール・お約束事です。

ふむ...わからん( ˘ω˘) ややこしい言い方しやがって、っという怒りは我慢しましょう。

 この長くてややこしい文章を、私は「ファイナリティーを得る」と置き換えて理解しています(間違ってたらごめんなさい)。なのでここから先はファイナリティーについての説明を絡めながら進めます。

...余計ややこしくなってんじゃねえか(#^ω^)、っという怒りはもう一度我慢しましょう。ちゃんと説明しますから。

 

”ファイナリティー”とは

「ファイナリティー(fainality)」とは金融、特に決済の場面で使われる言葉です。例えば日銀のホームページにはこのように書かれています。

(1)受け取ったおかねが後になって紙くずになったり消えてしまったりしない、また決済方法について(2)行われた決済が後から絶対に取り消されない――そういう決済が「ファイナリティーのある決済」と呼ばれます。 

出典:第7章 決済の実行 : 日本銀行 Bank of Japan

 まずは「(1)受け取ったおかねが後になって紙くずになったり消えてしまったりしない、また決済方法」を説明します。

例えば、私がある店で1万円分の商品券を使って買い物をしたとします。するとお店はその商品券を、発行元の会社に持っていき1万円に換金します。しかし、もし換金する前に発行元の会社が倒産したとしたら、その商品券はどうなるでしょうか。そう、ただの紙切れになりますね。そうなったとしたら、お店側は1万円分の損失を被ったことになります。

この、お店側が現金ではなく商品券を受け取るという事は、「損失を被る可能性を抱えた」事になります。これは商品券を受け取ったこと、倒産する可能性のある会社が発行した商品券を受け取った事、が原因として考えられます。そのため、決済には「(1)受け取ったおかねが後になって紙くずになったり消えてしまったりしない、また決済方法」が重要視されます。

 次に「(2)行われた決済が後から絶対に取り消されない」を説明します。

先ほど受け取った商品券を換金した後、実は無効なものだったと判明したとします(拒否できない)。おかねを取り上げられるということは、お店側からすればタダで商品を手放したことになります。

つまり、「(2)行われた決済が後から絶対に取り消されない」事も決済においては重要なことになります。

ではなぜこれがブロックチェーンの定義の一文に関係があると私が言っているのか。それはブロックチェーンのある特徴に由来します。

ここでは2点だけに絞って説明します。

 

一定時間ごとに繋げていく

ブロックチェーンってなに?に答えよう - 卒論から始まるBlockchainの記事で「データの繋がり」と説明したことに関連しています。詳しい説明は省きますが、この「データの繋がり」は「一定時間」ごとに繋がっていく(長くなっていく)のです。(例えば、ビットコインだと10分に1ブロックずつ伸びていきます。)

また、「みんながみんなのデータを持っている」とも説明しました。ここでは、「どうやったら」一つのデータに合意できるかは説明しました。では「どんな」データを合意しているのでしょうか。

 

「どんな」データを合意するか

もう一度ビットコインを例に話を進めます。ビットコインでは「ある計算を一番早く、正しくした者のデータ」をみんなで合意しています。しかし、世界はとても広いです。なのでどうしても時間差により複数出てきてしますことがあります。しかも、この二人のデータはどれも違う(全く同じの可能性もある)が、どれも正しい(ここでは正しいとする)のです。

お前何言ってるんだ(´・ω・)、という声が聞こえますが本当なんです。ある瞬間に、正しいデータが複数提案される(これをフォークといいます)ことがあるのです。

それじゃあ、みんなで一つのデータに合意できてないじゃないか!どうするんだ!っとなりますね。しかしこれは単純。

それぞれが正しいと思う方(実際は早く受け取ったデータの方)を元に、新しくデータを繋げていきます。

そうしてより長くなった方を正しいデータとして合意していきます。じゃあ長くならなかった(合意されなかった)データはどうなるか―――無効です。なかった事になります。

 

一旦話を整理しましょう。

Q:ブロックチェーンは「どんな」データを合意しているのか?

A:ある計算を一番早く、正しくした者のデータをみんなで合意する(ビットコインの場合&データの中身についての話は省略)。そして、合意したブロックを一定時間ごとに繋げていく。

注意点

1:ある瞬間に、正しいデータが複数提案される(これをフォークといいます)ことがある。

2:その場合、より長くなった方を正しいデータとして合意し、繋げていく。短い方(その他のブロック)は無効になる。

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

 

ここで一番の問題点は「2:その場合、より長くなった方を正しいデータとして合意し、繋げていく。短い方(その他のブロック)は無効になる。」です。つまり、一時期は正当な取引であると合意されていたものが、時間が経つと無効になる、覆される可能性があるのです。これが決済の世界なら「ファイナリティーがない決済」になりますね。もちろんこれでは困るわけです。じゃあブロックチェーンではどうするか。ここで一気に話を戻していきます。

 

ブロックチェーンにおける”ファイナリティー”

「時間の経過とともにその時点の合意が覆る確率が0へ収束する」

ブロックチェーンでは「一定時間」ごとにネットワークで合意されたデータを繋いでいき、それらが後で「無効・覆る可能性」が限りなく0に近くなっていく(0%にはならない)ことでデータの正当性を担保しています。「ファイナリティを得る」、つまり「時間が経つにつれて、合意したものが覆る可能性が減っていく」ということになります。

じゃあどのくらいのペースで限りなく0に近くなっていく(収束)していくのでしょうか。例であげたビットコインでは6ブロック(10分×6ブロック=60分)待つことが推奨されています。実際にビットコインの最初の論文でその数式を見ると以下のようになっています。

f:id:mochi-mochi-0397:20180604005247p:plainf:id:mochi-mochi-0397:20180604005251p:plain

f:id:mochi-mochi-0397:20180604005254p:plainf:id:mochi-mochi-0397:20180604005257p:plain

出典:http://www.kk-kernel.co.jp/qgis/HALTAK/FEBupload/nakamotosatoshi-paper.pdf

※Pが大文字だったり小文字だったりするのは何故なんでしょう?わかる方いらっしゃいましたら教えてください(*_*;

とりあえず計算結果だけを見てみましょう。後のブロック(この場合zブロック)から追いつく=覆される確率は、ブロックが重なっていくごとに確率0へ近づいていっていることがわかりますね。もちろんp,qの値に依存いてしまいますが、ここではブロックが繋がっていけばいくほど、一度決まった合意が覆されにくくなっていっているんだとわかっていただければ十分です。実際この論文の結論では以下のように述べています。

良心的なノードが CPU パワーの過半数をコントロールす る限り、プルーフ・オブ・ワークを使って記録された公開型の取引履歴を攻撃者が変えようとすることが、コンピュータ的に加速度的に実質上実行不可能になっていく P2P ネットワークを提案した。

このような状態を「時間の経過とともにその時点の合意が覆る確率が0へ収束する」と述べているんですね。

 

まとめ

ブロックチェーンとは:応答を返さない、誤った応答を返す可能性がある不特定多数の参加者を含むネットワークにおいて、時間が経つにつれてその合意内容が覆される確率が限りなく0に近くなっていくプロトコル、実装のこと

 

となりますね。ただし、これは狭義の意味での定義と注意書きされています。さらに、協会でも一意に定義するのは非常に難しく、今後変わっていく可能性もあると述べています。ここまで、長ったらしく説明してきましたが、あくまで参考程度にしてくれということですね(笑)

今回で(1)は終わりましたが、まだ(2)の定義が残っております。次回からは、こちらの説明をしていきたいと思います。

では今日はここまでです!お疲れ様でした!!ここまでお読みいただきありがとうございましたm(_ _)m

 

//論文は妥協して原論文ではなく和訳を用いました。しかも画像を切り貼りしただけ。ごめんなさい(/_;) 

また、何かおかしなところがありましたらご指摘頂けると幸いです。

 

参考資料

ブロックチェーンのおいて確定を意味する言葉「ファイナリティー」

第7章 決済の実行 : 日本銀行 Bank of Japan

ブロックチェーンの基礎:ブロックチェーンの定義、種類、技術