『いちばんやさしいブロックチェーンの教本』を読んで

はじめに

いちばんやさしいブロックチェーンの教本』を読んで学んだ内容を整理する。

本書について

いちばんやさしいブロックチェーンの教本
いちばんやさしいブロックチェーンの教本について

そろそろちゃんとしたブロックチェーン知識をつけたいと思い、一番分かりそうで、かつ全体的な内容をカバーしてそうな本書から読みを始めることにした。

ブロックチェーンとは

定義

ブロックチェーンは複雑な仕組みが絡み合って実現される技術のため、一口に何か?と説明するのは難しい。

あえて一言で簡単にいうと、以下の通り(本書引用)。

正しい記録しかできない、変更できない、消せない、改ざんできない、壊れても自動修復される、落ちない、みんなに合意された情報だけが有効と認識される、ネットワーク共有型のデータベース

日本ブロックチェーン協会による定義は以下の通り。

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

日本ブロックチェーン協会による広義の定義は以下の通り。これがいわゆる分散型台帳技術。

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

したがって、ブロックチェーン技術は分散型台帳技術の一つにすぎないということ(以下本書引用)。

分散型台帳技術とブロックチェーン技術

DBとの違い

情報を記録できるという意味ではDBの一種である。ただし、ブロックチェーンでは以下の全ての機能が満たされている(以下本書引用)。

  • データは複数の参加者に確認されルールに従った書式のものだけが記録されること
  • 参加者全員によって合意されたデータだけが有効となる約束で運用されていること
  • 耐改ざん性のあるデータ構造(ハッシュチェーン構造)を持っていること
  • 改ざんしようとすると即時検出され、そのデータが破損していると認識されること
  • 破損データは正常なデータを持つほかの参加者から取り寄せて自動復旧できること
  • 一度書き込まれたデータは変更も削除も誰にもいっさいできないこと
  • システム全体を止めることは誰にも不可能なこと

絶対に壊れないシステムの実現方法

ブロックチェーンは「少しぐらい壊れても大丈夫なシステムを作る」というスタンス。

たくさんのノード(コンピュータ)に同じ情報をネットワーク上でコピー・共有させて全体のシステムを稼働させる。

これらのノードに、リーダのようなものはなく全て平等で、同じデータを互いに共有しそれぞれで処理を行う。同じデータを扱っているので、処理結果は同じになる(間違った処理結果があったとしてもそれは少数派となり採用されない)。

ノードが勝手に判断を行って処理する仕組みを特に「自律分散システム」と呼ぶ。

仮想通貨の仕組み

ウォレットアドレス(銀行でいう口座)は、手元のPCで秘密鍵と公開鍵のペアさえ作れば何個でも作成可能。したがって、世界中全てのウォレットアドレス残高を知ることは不可能。秘密鍵で送金処理、公開鍵で入金処理を行う。

ブロックチェーンでは、ウォレットアドレスの残高を記録するのではなく、ウォレットアドレス間の取引(トランザクション)を記録する。

2種類のブロックチェーン

パブリックチェーン

誰でもネットワークに参加可能。ビットコインの用にマイナーにノードを運用させて報酬を与える。ノードの数が増えるほど安定する。

プライベートチェーン

ネットワーク参加に承認が必要。計算が早かったり、運用報酬を与えたりする必要はないが、受益者が自前でノードを立てなくてはいけない。

ブロックチェーンの特徴

  • システム管理者もデータの変更・削除ができない
  • 単独では閲覧権限のコントロールができない(全取引履歴を閲覧できる)

したがって、個人情報の管理などには向かない(削除要請があっても対応できないので)。

実務上は、この特徴を踏まえて、他のシステムと上手く連携させていくことが重要。

ビットコインとブロックチェーン

処理の流れ

送金取引を実行しするとビットコインのネットワークにトランザクションが送られる。それはただちに処理されず、一旦「トランザクションプール」という待機場所に保存される。マイナーたちはそのトランザクションをブロックに取り込みながら採掘を行い、成功すればビットコインのネットワーク上にブロードキャストされる。採掘には平均10分要するので、決済手段としては現実的でない。

ブロックチェーンの暗号技術

現代暗号の方式

大別して以下の2種類。

  • 共通鍵暗号方式:復号化する鍵が共通(例 DES、AES)。
  • 公開鍵暗号方式:秘密鍵と公開鍵の2つを用いた暗号方式(例 RSA ECDSA)。

ブロックチェーンは公開鍵暗号方式で、短い鍵で済むECDSAが用いられることが多い(デファクトスタンダード)。

公開鍵の方がより安全であるが、共通鍵暗号より計算時間が長くなってしまうため、大きなデータの暗号化には向いていない。

ハッシュ関数

暗号を生成する関数で、入力値の桁数に関わらず、常に指定された桁数を出力する。

ハッシュとは細かく小さく切って混ぜるという意味。

ハッシュ値の衝突とは、ハッシュ関数が別の入力値に対して同じ出力をしてしまうこと。この耐衝突性を上げるために、アルゴリズムの改定が行われてきた(下表引用)。
ハッシュ関数のアルゴリズム

分散タイムスタンプ

タイムスタンプは各ノードでずれていたりするので、たくさんのノードのタイムスタンプの内、極端な異常値を除いた平均値をあるべきタイムスタンプにするという手法。

分散システム

CAP定理から見たブロックチェーン

CAP定理とは、インターネットサービスを広く提供する場合、一貫性(Consistency)・可用性(Availability)・分断耐性(Partition-tolerance)の全てを同時に確保することはできないという定理。

P2Pのブロックチェーンでは、一貫性を犠牲に高い可用性と分断耐性を実現している。

P2P分散データストレージ

P2Pを利用して、複数のコンピュータにデータを保存する仕組み。

保存したいファイルから作り出したハッシュ値をそのままアドレスとする手法を「コンテントアドレス」という。

分散システムの合意形成

分散システムでは、複数のノードが同時に同じ計算を行うが、計算結果が異なる場合にどのように解決するかが問題となる。

プライベートチェーンでは、リーダを決めて決定する方法が合理的。

パブリックチェーンでは、リーダがおらず、またノードの母数を把握することができないため多数決では決めることができない。そこで、Proof of WorkやProof of Stakeなどの経済的インセンティブの行使権を与える合意形成の仕組みが考えられた。

プライベートチェーンとパブリックチェーンは一長一短なので、利用するサービスに応じてどちらを採用するか決めるべき。

トランザクション

UTXO

Unspent Transaction Output の略であり、任意のウォレットアドレスが利用できる残高の上限。

トランザクションは必ず以下の式が成り立っている。UTXOがInputより大きい場合があるのは、マイナーに経済的インセンティブ(手数料)を支払うため。

UTXO ≧ Input = Output

メモリプール

作成されたトランザクションは、分散システム上で一旦メモリプールの中に未承認の取引としてプールされる。

マイナーによりブロックチェーンに取り込まれると、承認された取引となる。

トランザクションの順序

トランザクションの承認される順序は、マイナーがマイニングに成功したタイミングであり、先着順ではない。

先着かどうかが重要な場合は、メッセージブロッキングサービスやタイムスタンプなどで補完した実装が行われる。

スマートコントラクト

定義

広義には、合意内容に従い自動で契約が履行されるシステムをいうが、狭義には(ブロックチェーンの世界では)以下の通り。

契約成立のために必要な条件が記された取引内容が、ブロックチェーン上に改ざん困難な状態で記録されており、そこに書かれた条件が満たされると、自動的に成立するトランザクション

実務的にスマートコントラクトを活用したサービスでは、プライベートチェーンが多く採用されるが、業務の特性に応じてパブリックチェーンの採用も検討する。

ワールドステート

ワールドステートは、全ノードが参照可能なグローバル変数のようなもの。

オラクル

オラクルは、ブロックチェーンが取り込む外部情報で、その情報は必ず正しいものという前提で処理される。

所感

ブロックチェーンに関する全般的な内容を、網羅的かつ技術的に分かりやすく説明されている良書だと感じた。漠然と把握していた事項が、より技術的な理解につながった。

ブロックチェーンは情報など「物理的な実態がないもの」との相性が良いと感じた。行政サービスや情報インフラのような分野では、活用場面がたくさんあるのだろうと想像できる。

もう少し理解を深めて色々とアイデアを膨らませてみたいと思った。

Source

いちばんやさしいブロックチェーンの教本
いちばんやさしいブロックチェーンの教本について

兵庫県西宮市生まれのフリーランスRailsエンジニア。海外を拠点にデジタルノマド生活中。/ 前職・資格:公認会計士 / プログラミング言語:Ruby, JavaScript, HTML, CSS / 日本語・英語
コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です