ARPABLE
アープらしいエンジニア、それを称賛する言葉・・・アーパボー!
ブロックチェーン

ブロックチェーンとは

ブロックチェーンについて

「ブロックチェーン」は、第二のインターネットとも呼ばれている大変将来性のある技術です。

経済産業省も、2016年に、「ブロックチェーン技術を利用したサービスに関する国内外動向調査」の中で、ブロックチェーンの国内市場規模をおよそ67兆円と予想しています。
(資料はこちらから参照できます)

確かにこの数字は経産省の将来予想です。
しかし、同じ年の(2016年)自動車産業の市場規模が60兆円、建設業界が52兆円(市場規模≒建設投資額)、ヘルスケア産業市場規模は25兆円(※2:引用元参照)であることを踏まえると、少なくとも経産省は、「ブロックチェーンが将来性のある産業に発展する可能性が高い」とみていることが分かります。

これを受けて調査を始め、2020年から2021年にかけて社内で開催された技術者向けライトニングトークALT(ARP lightning Talk)にて計6回に発表するに至りました。
このシリーズではそこで使われた資料を元に、ブログという形であらためてわかりやすく説明していたいと思います。

※1)ここでで説明するブロックチェーンは、ビットコインに使用されているもの、つまり2008年のサトシ・ナカモト氏の論文をベースにしています。

※2)市場規模の引用元は以下のとおりです。

  • 自動車産業の市場規模はこちらから(経産省)
  • 建設業界の市場規模はこちらから(国交省)
  • ヘルスケア産業の市場規模はこちらから(経産省)

ブロックチェーンとは

少なくとも2022年1月の時点でブロックチェーンの定義が定まっている、あるいはオーソライズされているわけではない。

例えば、2018年に総務省では以下のような定義をしている。

ブロックチェーン技術とは情報通信ネットワーク上にある端末同士を直接接続して、取引記録を暗号技術を用いて分散的に処理・記録するデータベースの一種であり、「ビットコイン」等の仮想通貨に用いられている基盤技術である。
こちらから参照できます)

これも立派な定義ですが、一般によく引用されるのは一般社団法人日本ブロックチェーン協会のものです(広義)

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

これらをまとめると基本的な要件は以下の3つとなります。

  1. 改竄検出が容易なデータ構造
  2. ネットワーク上に分散する多数のノードに保持させる
  3. 高可用性及びデータ同一性等を実現する技術

 

ブロックチェーンとは?

弊社で実施したライトニングトーク(以下、ALT)では、これまでのデータベースとの違いを意識しつつ思い切って短縮し、キャッチフレーズ化しました。

「改竄できないデータを、理者不在で、永久に残す仕組み」

フクロウ君
フクロウ君
キャッチフレーズとはいえ割り切ったもんじゃなあ

要件は以下の3つです。

  1. 改さんできない
  2. 管理者不在
  3. 永久に残す仕組み

いかがでしょうか?
要件を比較すると①から③それぞれがほぼ同じようなことを言っているのが分かると思いますが、それでももう少し具体的に説明しないとピンときませんよね。

これを簡単な図で表すとこんな感じになります。

①改ざんできない

まず、AさんからBさんにお金を払ったという記録をトランザクションという、正当性を評価可能なブロックチェーン特有のフォーマットで定型化します。

②管理者不在

トランザクションが自律分散型ネットワーク(ピアツーピアネットワークとも呼ばれる)に投入されると、各参加者のノード(通常はPC)は、次々にその正当性を審査し、且つ分散保有していきます。
従って通常のデータベースのようにデータを集中して一元管理する場合には管理者が必要ですが、そのようなシステムに対してブロックチェーンは

  1. 参加者が自律的にデータの正当性を審査する仕組みがある
  2. 同一データを分散保有する仕組みがある

ため、管理者不在であっても信頼性、可用性が保証されます。

永久に保存

トランザクションがある程度たまったら(通常3000~4000個ぐらい)、それを束ねて1MB(※1)のブロックに固めます。
ブロックにするには、ある条件を満たすハッシュ値(※2)が得られる必要があります(ナンスの発見)。
そのようにして作成された1つのブロックが、ネットに再投入され参加者に承認されると、分散保有されているブロック全体に組み込まれるため、実質的に永久保存が可能な状態になります。
(※1)ハードフォークしたビットコインキャッシュはブロックサイズを8MBに拡大しています。
(※2)ハッシュ値を求める条件(難易度)は隔週で見直され、計算時間が常に10分程度になるように調整されています。
(※3)ブロックが確定するまでに1時間程度(ブロック6個分)

かかります。

 

自律分散型ネットワークとは

上記の②の中に出てくる自律分散型ネットワークについてもう少しわかりやすく説明しましょう。

(図)中央集権型(従来型)と自律分散型(ブロックチェーン)

 

今までの多くのシステムには、システムの中央となる管理者が存在しデータも一元管理していました(中央集権型管理)。

ところがブロックチェーンでは、参加者は自らが取引データ(トランザクション)を審査し、その全取引履歴をコピーする権限を持っています。
これが自律分散システムであり、ブロックチェーンの大きな特徴のひとつと言えるでしょう。

この自律分散システムより、管理者がいなくても、不正や改ざんを許さず、公正な取引の履歴を安定して記録し続けることが出きるわけです。

 

ブロックチェーンの基本9ステップ

あまりにもざっくりとした説明でしたので、ここでもう少し具体化してみます。
というのも、実際のブロックチェーンは、何重にもわたる正当性の審査等、複雑なステップを踏むことにより、新しい形のデータ管理システムを構成しているからです。

そのあたりをもう少しだけブレークダウンして図式化したのが以下の図です。

これを順に説明していきます。

①口座の作成

ネットワーク上で特定の人に支払いをするには「アドレス」が必要となります。
これは銀行でいうと口座番号、カードのクレジット番号等に相当します。

②お金の支払いを定型化されたトランザクションに記述する

ブロックチェーンではAさんからBさんにお金(いわゆる「仮想通貨」、正確には暗号資産)を支払ったという記録はトランザクションという検証可能な定型のフォーマットに記載する必要があります(後述)。

③ネットワークに伝播

作成されたトランザクションをネットワークに投入すると、ノードからノードへ次々に伝播していきます。 その際にそのデータの正当性がチェックされます。
そのチェックのためにトランザクションに記載されたScriptSigとScriptPubが使用されます(後述)

④審査終了、⑤トランザクションプールに蓄積

各ノードの審査が終了するとトランザクションプールに蓄積されていきます。

⑥マイナーがナンスを発見し⑦ブロックを生成

ここで初めて「マイナー」という言葉が出てきました。
マイナーはブロックチェーンの参加者の中にいて、一つのブロックを作成するためにひたすら所定の条件を満たすハッシュ値を計算する人(実際にはコンピュータ)です。

もう少し正確に言うと、一つのブロックを生成するには、ハッシュ値が条件に適合した時に使用した「数値」(これを「ナンス」と呼びます)を発見する必要があります。
この作業を炭鉱の採掘作業になぞらえて「マイニングと呼んでます。

そして、最初にハッシュ値を見つけた人には高額な(数百万円~数千万円)報酬が支払われますので多くの人々やグループでし烈な競争が行われてます。
今や全体の計算能力は、グーグルが保有する全コンピュータを超えているといわれてます。

マイニング作業は、どんなに計算能力が高くなっても約10分かかるように、2週間ごとに難易度が調整されています。
この「マイニング作業による合意形成の方法(コンセンサスアルゴリズム)」をPoW(プルーフ・オブ・ワーク)と呼びます。

マイニング」や「PoW」に関してはマイニングとはの稿で詳しく説明する予定です。

 

⑧生成したブロックをネットワークに伝播、⑨ブロックチェーン確定

ブロックをネットワークに投入すると次々にノード間を伝播しながら正当性が新されていきます。
ブロックは互いにつながりあってチェーン構造になるので、場合によっては複数の分岐(これをフォークと呼びます)が発生する場合がありますので、約1時間(この間に約6ブロックが生成できます)経過するとブロックは確定されます。

 

トランザクションとは

トランザクションとはブロックチェーンで使用する取引データです。

直感的につかんでもらうためにもう少し具体的に説明していきます。

トランザクションは「取引」の事で一般的には「AさんからBさんに送金した」ことが記載される検証可能なフォーマットの事です。

従ってトランザクションには送り主と送金額を記載するために「INPUT」と受取人と受取金額を記載するための「OUTPUT」から構成されてます。

その様子を表したのが下図です。
ここでは、直感的につかんでもらうために上記の「検証可能な」の部分はScriptSig、ScriptPubという記載に相当しますが、現時点では無視していただいて構いません(別稿で詳しく説明するのでご安心ください)

(図)トランザクションイメージ

 

この図は、七海君が五条さんに200円を送金する時のトランザクション(イメージ)です。

この場合、七海君はマイナーさんへの手数料10円(「ガス代」と呼ぶ)を加えた210円を払います。

マイナーさんの本業はマイニングで、これに成功すると高額の報奨がもらえますが、何故手数料が必要なのでしょうか?

実はこの時、七海君はガス代の金額を複数の中から選べるようになってます。
そしてその額が高ければ高いほどそのトランザクションは早く処理され取引が確定することになります。
つまりはガス代を上げてでも早く送金をしたい場合、そんなに急いでないのでむしろガス代を節約したいなどの選択をすることができます。

元々ブロックチェーンでは取引が確定するまでに1時間以上かかりますので、送金する人に選択肢が与えられたと考えればよいのではないでしょうか?

改ざんが困難な理由

ブロックチェーンは何故改ざんが困難なのでしょうか?

次の図は実際のブロックチェーンのデータ構造をイメージでとらえてもらうために作成しました。

(図)ブロックチェーンのデータ構造(イメージ)

 

これから以下の手順で改ざんが困難な理由を説明しましょう。

  1. 一つのブロックはヘッダと複数のトランザクションで構成される
  2. 各ヘッダには全トランザクションツリーのハッシュ値が記録されている
  3. ヘッダには前のブロックヘッダのハッシュ値が記録されている。

 

一つのブロックはヘッダとトランザクションで構成

下図が一つのブロックの構造を表してます。
左側の黄色い線で囲まれたところがブロックヘッダ―で右側が複数のトランザクションがまとめられてます。

ビットコインの場合、ブロックのサイズ1MBに対してヘッダは80バイトしかなく、トランザクションは通常は3000~4000ぐらい連なってます。
(この図ではブロックヘッダ―の代表的な項目のみを記載してます)

  • 前ハッシュ:ひとつ前のブロックのブロックヘッダのハッシュ値
  • マークルハッシュ:正確にはマークルルートのことで、図でハッシュ値を強調してこの表現にしてます(後述)
  • 難易度:2週間に一度調整されるマイニングの難易度
  • Nonce:ブロックヘッダのハッシュ値が所定の条件を満たした時のナンスの値
(図)ブロックのデータ構造

ヘッダにはトランザクションツリーのハッシュ値が記録

下図のマークルハッシュ(正確には「マークルルート」のこと)には全トランザクションのそれぞれをトーナメント戦方式で次々にハッシュ化していき先頭のハッシュ値がここに記載されます。

※)マークルルートの詳細はマークルルートとはの稿を参照してください。

これによりトランザクションをたとえ1ビットでも変更すると、ハッシュ値の性質から個々の値が大きく変わってしまいます。
この値が変わるとブロックヘッダのハッシュ値も変わってしまうことになりますね。

(図)マークルルート(マークルハッシュ)

 

ヘッダには前のブロックヘッダのハッシュ値が記録されている。

下図の「前ハッシュ」というのはひとつ前のブロック(ブロックn)のヘッダのハッシュ値が入ります。
またこの値を含めたブロックn+1のヘッダのハッシュ値は次のブロック(ブロックn+2)のヘッダの前ハッシュに記載されることになります。

つまりブロック内のトランザクションやヘッダを少しでも変更すると当該ブロックのハッシュ値が異なるため、次のブロックのヘッダに記載されている前ハッシュ値との間に齟齬が生じ、不正な変更がされたことが明白になってしまうので改ざんができないというわけです。

(図)ブロック間をハッシュ値でリンクしている様子

 

 

ブロックチェーンは長いものが生き残る

このようにブロック同士がハッシュ値でリンクしているために、新しいブロックが追加されそれが承認されたときにほぼ確定します。

ここで「ほぼ」という表現を使用したのは例外があるからです。

今まで説明してきましたように、ブロックチェーンは多くの参加者(ノード)から構成される自律分散型のネットワークでした。

そのノードの中には多くのマイナーがいて、トランザクションプールにたまったトランザクションを取出しマイニングを試みてます。

そしてマイニングは、所定の条件、例えば先頭の6バイトがオール”0”になる等の条件を満足するナンス値を発見することですので、多くのマイナーが参加して熾烈な競争が繰り返される中では、別々のナンス値が同時に発見されることがあります。

そのような場合、自律分散型ですから、それぞれのマイナーが自分のブロックが正当だということで既存のブロックチェーンに連結していきます。

その結果、当然異なるブロックチェーンが形成され分岐(ブロックチェーンが複数形成される)していくという現象が起きることは予想がつきますよね。

しかしこのような状況が起きては何が正しいのかわからなくなってしまいます。

その時どのようなルールで複数のブロックチェーンの中からたった一つだけ正当なものを選択するのでしょうか?

それはその時点で、最も長いものを正しいものとする、ことになってます。

そして当然ながらそれよりも短いものは全て捨てられることによりたった一つのブロックチェーンが生成されていくわけです。

目安として6個のブロックが連結した時点で確定することになってます。

(図)複数のブロックチェーンが生じた場合の解決策

 

(アーパボー)