ブロックチェーンの仕組みを基礎から理解する

に公開

はじめに

テクノロジーセンター TechnicalForgeチームです!
みなさんは「ブロックチェーン」に取り組んでいますか?
おそらくこの記事にたどり着いた方はブロックチェーンを学ぶ必要が出てきた方、あるいはブロックチェーンとはどんなものであるかを知りたいという方だと思います。
私自身もブロックチェーンに取り組むため学習を始めましたが、記事の数がまだ少なく、書籍も最新のものが少ない状態でした。
そこで、せっかく学習のであれば記事にまとめることで、これからブロックチェーンを学ぶ方の役に立つだろうと思い、記事を書いている次第です。
初学者に寄り添って記述しているので、ブロックチェーンをこれから学びたい人の手助けになっていれば幸いです。

この記事で学べる事

  • ブロックチェーンの基本的なデータ構造
  • ハッシュ関数と電子署名の役割
  • マークルツリーによるデータ検証の仕組み
  • ネットワーク種別(パブリック/プライベート/コンソーシアム)の特徴

対象読者

  • ブロックチェーン技術を始めて学ぶエンジニア

ブロックチェーンの基礎

前提

「ブロックチェーンといえばビットコインだ」と思われる方がいるほど、ブロックチェーンの学習するにあたってビットコインという単語が頻繁に出てきます。
しかし、ブロックチェーンとビットコインはイコールではありません。ビットコインはブロックチェーン技術を利用した仮想通貨の一つに過ぎません。よく混同されがちですが、このことを頭に入れて以降の記事を読んでください。

ブロックチェーンとは

ブロックチェーンは、データをブロックと呼ばれる単位でまとめて保存し、ブロックとブロックを時系列順に連結しているデータベースのことを言います。この技術の特徴は、一度記録されたデータは改ざんされないように設計されていることです。

ブロックチェーンは、特有の機能セットを持った分散データベースの一種であり、以下のような特徴を持っています。

  • 追記のみ可能:新しいデータの追加のみが可能となっています。データが一度記録されると、変更や削除はできず、不変なものとなります。
  • 透明性:すべての取引はブロックチェーンネットワークの参加者全員に公開されているため、全てのデータを追跡することができます。
  • 改ざん検知の容易性:過去のデータを改ざんしようとすると、ブロックチェーンネットワークに参加している全員によって検出されます。そのため、データが一度記録されると実質的にデータの改ざんはできない状況になります。

ブロックとトランザクション

ブロックチェーンにおけるトランザクションは、システム上で行われるあらゆる操作や取引を指します。ビットコインであれば通貨の送金、イーサリアムではスマートコントラクトの実行なども含まれます。

ブロック同士の連結

ブロックチェーンを構成する基本単位の「ブロック」は以下で構成されています。

  • データペイロード:ブロックに含まれるトランザクションなどの情報。
  • タイムスタンプ:ブロックが生成されたおおよその時刻。
  • ハッシュ:ブロックの内容から生成される文字列。
  • 直前のブロックのハッシュ:「チェーン」を形成するために必要な1つ前の情報。1つ前のブロックを親ブロックと呼びます。親ブロックを必ず参照することで、ブロックの順序が決まり、データの依存関係が保護されます。
  • ナンス:新しいブロック生成時に条件を満たすハッシュ値を作るために調整される数値

ブロックチェーンは直前のブロックのハッシュを持っていることで、チェーンを形成しています。

Blocknは、Hash(Block n-1)を含み、Hash(Block n-1)はHash(Block n-2)を含むといった関係が、ジェネシスブロック(ブロックチェーンの最初のブロックで、前のブロックへの参照を持たない特別なブロック)まで続いていきます。

ハッシュ関数

ブロックチェーンでは、ハッシュ関数が重要な役割を果たします。ハッシュ関数はセキュリティ機能を担っており、ブロックの信頼性を担保する上で不可欠なものとなっています。

ハッシュ関数は以下の特性を持っています。

  • 決定論的:同じ入力は、常に同じ出力を生成する。
  • 一方向性:出力から元の入力を計算することが、計算上実行不可能である。
  • 衝突耐性:異なる入力データから同じハッシュ値は生成されない。
  • アバランシェ効果:入力データのわずかな変化(1ビットの変更など)が、出力ハッシュ値の約半分のビットを変化させる現象。
アバランシェ効果の具体例
入力: "Hello"
出力: "2cf24dba4f21d4288094b2cb2e435e8a7c27ae4c4e63dc1c24c3e1f2e5c5e7"

入力: "Hello!"(!を一文字追加)
出力: "334d016f755cd6dc58c53a86e183882f8ec14f52fb05345887c8a5edd42c87b7"

わずか1文字の違いでも全く異なるハッシュ値が生成されます

これらの特性は信頼できない環境での検証を可能とします。
ブロックチェーンは、分散型のシステムであるため管理者が存在しません。ブロックチェーンネットワークの参加者は、独立して同じデータに同じハッシュ関数を適用できます。自身が計算したハッシュ値がチェーン上のハッシュ値と一致すれば、データの提供者を信頼することなく、データが同一であることを確信することができます。これにより、全員が同じ結果を得ることを可能としています。
そのため、信頼のある検証を行うために数学を用いた検証を行っています。この特性があるからこそ、中央集権型システムのようなデータベース管理者を持たずとも協調を保つことを可能にしているのです。

電子署名

トランザクションの正当性を証明するために、公開鍵暗号方式に基づく電子署名がブロックチェーンでは利用されています。電子署名を用いることで、本人によって確かに作成されたことを証明し、作成後に第三者によって改ざんされていないことを証明することができます。

以下のような仕組みで、署名と確認が行われます:

  1. 送信者が、自分の秘密鍵でトランザクションデータに署名
  2. 受信者は、送信者の公開鍵を使って署名を検証
  3. 署名の有効性を確認できれば、トランザクションが本人によるものだと確認できる

このような仕組みにより、なりすましやデータの改ざんを防止しています。

データの完全性

ブロックチェーンにおいて、記録されたデータが改ざんされていないことを保証する「データの完全性」は、システム全体の信頼性を支える重要な要素です。
しかし、ブロックチェーンは時間とともにデータが増え続けるという特性があるため、効率的にデータの完全性を検証する仕組みが必要となります。
そこで考えられたのが「マークルツリー」です。

マークルツリー(Merkle Tree)

ブロックチェーンはデータが増え続けるため、チェーン全体を検証するためには全データへのアクセスが必要となり、膨大な時間と手間がかかるため、非効率的です。
この問題を解決するために、マークルツリー(別名:ハッシュツリー)と呼ばれるデータ構造を利用します。マークルツリーは木構造でデータを管理する技術で、ハッシュ関数などを用いて計算、構築されます。

マークルツリーは以下のプロセスで構成されます:

  1. それぞれのトランザクション(TX)のハッシュ値を求めます
  2. ハッシュ値をペアにして連結し、再度ハッシュ化を行う
  3. このプロセスをツリーを上に向かって繰り返して最終的に単一のハッシュになるまで続けます

手順を繰り返す中で、最終的にすべてのトランザクションをまとめたハッシュを「ルートハッシュ」と呼びます。

このようにしてすべてのトランザクションをまとめることで、どこかのトランザクションがほんの少し改ざんされても、ルートハッシュの値が一致しなくなるため、容易に改ざんを検出することができるようになります。

マークルプルーフ(Merkle Proof)

マークルプルーフは、特定のトランザクションがブロックに含まれていることを効率的に証明する仕組みです。
通常であれば、あるトランザクションがブロックに含まれているかを確認するために、ブロック内の全てのトランザクションデータをダウンロードして確認する必要があります。これでは、ブロックが大きくなるほどデータ量が膨大になってしまい、非効率的です。
マークルプルーフでは、マークルツリーの構造を活用して、この問題を解決します。確認したいトランザクション(木構造の葉にあたる部分)から、ルートハッシュまでの経路上にある最小限のハッシュ値だけを使って検証を行うことができます。この経路を検証パスと呼びます。

検証する側は、この検証パスのハッシュ値を使って自分でルートハッシュを計算し、それがブロックのルートハッシュと一致するかを確認します。一致すれば、そのトランザクションが確実にブロックに含まれていることが数学的に証明されます。
この方法により、全データの約1%程度の情報量で検証が可能になります。そのため、効率的にトランザクションの検証を行うことが可能とします。

ブロックチェーンのノードとネットワークの種類

ノードとは

ブロックチェーンでは、参加するコンピューターがそれぞれ、クライアントとサーバーの役割を果たします。この参加するコンピュータを「ノード(node)」と呼びます。

  • フルノード(Full Node)
    フルノードは完全なデータを保持しており、ジェネシスブロックから最新のブロックまですべてのブロックとすべてのトランザクションを検証するノードです。言い換えると、自身の端末に完全なブロックチェーンのコピーを持っているようなイメージです。
    すべてのトランザクションを持っていることで、他のノードに頼らずことなく単独でトランザクションの検証を行うことが可能です。
    ただしフルサイズのブロックチェーンのコピーを保存するための容量と、処理能力が必要となる点に注意が必要となります。

  • ライトクライアント(Light Client)
    ライトクライアントは、ブロックチェーンの完全なデータを保持せずに、必要な情報のみを取得し検証するクライアントです。ブロックヘッダーのみを保持しており、マークルプルーフを用いて取引を検証します。
    モバイルウォレットなどリソースの制約があるデバイスでは、ブロックチェーンのフルノードを所持することができない場合も多くあります。そういったフルノードを実行できないユーザーでも、セキュリティを損なうことなくブロックチェーンを利用する際にライトクライアントを利用します。

ブロックチェーンネットワーク

ブロックチェーンは、利用目的や参加者の範囲によっていくつかの種類に分類されます。それぞれ異なる特徴とメリット・デメリットを持っているため、用途に応じて適切な種類を選択することが重要です。

  • パブリックチェーン(Public Chain)
    ビットコインなどで利用される誰もが自由に参加可能な開かれたチェーンのことを指します。
    行われる取引やデータはすべて公開され、ブロックチェーンネットワーク全体で合意された唯一の取引履歴を持っています。
    完全な分散型の運用が行われており、全ての参加者が完全な台帳のコピーを所持しています。そのため透明性が高く、改ざん検出の容易性が確保されますが、処理速度やスケーラビリティに課題があります。

  • プライベートチェーン(Private Chain)
    パブリックチェーンとは対称的に、許可された参加者のみアクセスができるチェーンのことを指します。
    限られた参加者間での合意形成となるため、パブリックチェーンと比較して迅速な合意が可能になります。また、特定の組織や団体によって管理されるため、パブリックチェーンと比較して分散性と耐検閲性は低下します。

  • コンソーシアムチェーン(Consortium Chain)
    プライベート型を複数者で管理するチェーンになります。同じ企業連合などの団体で共同運用するチェーンです。プライベートチェーンと同じく、許可された参加者のみがアクセスが可能なチェーンです。
    銀行間での決済システムやサプライチェーン管理等、業界団体での利用に適しています。

パブリック プライベート コンソーシアム
管理者 存在しない 単独で存在 複数存在
参加者 不特定多数 許可された参加者のみ 許可された参加者のみ
手数料 必要 不要 不要

まとめ

この記事ではブロックチェーンの基本的な仕組みや、頻出の用語を解説しました。
現在、ブロックチェーンは多くの分野で利用が広がってきています。
今回学んだことはあくまで基礎ではありますが、ブロックチェーン学習の第一歩として役に立っていれば幸いです。
そして次回の記事では、これらの知識を活用して実際にブロックチェーンを用いたスマホアプリを作成したので、どういった機能が実現できたかを詳しく解説いたします。

ブロックチェーンの実践的な活用例が知りたい方は、ぜひ次回の記事もご確認ください

参考文献

コンセンサス・ベイス株式会社(2019).『図解即戦力 ブロックチェーンのしくみと開発がこれ1冊でしっかりわかる教科書』

株式会社SCC - テクノロジーセンター

Discussion