マークル木(マークルツリー)とは?ブロックチェーンの要素技術の一つを徹底解説!

「マークル木が分からない・・・。」

ブロックチェーンを勉強し始めた方にとって、マークル木はつまづきポイントの一つだと思います。その原因は、おそらくその抽象性にあるでしょう。

そこで今回は例えを用いてマークル木を理解しましょう。マークル木は何なのか、何ができるのか、どう良いのか具体的に示し、実際にブロックチェーン、ビットコインにどのように応用されているのかも解説します!

この記事を読んで、ブロックチェーンに対する理解をもう一段階深いものにしましょう!


マークル木(マークルツリー)とは?

​例えと概観

マークル木は、端的に言うとデータを要約・検証するための技術です。

と言っても、曖昧でよく分からないと思います。そこで、データをカラーボールに例えて説明しましょう。

今、皆さんの目の前にたくさんのカラーボールが転がっています。その色は赤や青、緑、黄色と色々あり、一つ一つに①、②、③・・・と番号が割り振られています。さて、ここで一つ質問です。皆さんが、全てのカラーボールが元の状態のまま保全されていること、つまり壊れているところもなく色もそのままであることを確認しなければならないとしましょう。さてどのように確認するでしょうか?

答えは単純です。もともと①のボールは何色でどのくらいの大きさなのかを写真に撮って保存しておきます。すべてのボールの写真を撮り、その写真と実際のボールを比較します。すべてが一致していることを確認すれば万事解決です。

しかし、この方法には一つ問題があります。ボールの数が多くなった時に非常に手間がかかるというものです。10個くらいなら全然問題なくできます。100個でも根性で何とかなるでしょう。しかし、カラーボールが1億個あったとしたら、確認の作業だけで一生が終わってしまいます。

そこで、ある賢い人が一つの機械を発明しました。その機械の名前は機械X。その機械の中に何個でもいいのでカラーボールを入れると一つのカラーボールが出てきます。カラーボールはランダムに出てくるわけではなく、ある法則を満たします。

  1. 同じカラーボールを入れれば、常に同じカラーボールが出てくる。
  2. 出てきたカラーボールから、最初に入れたカラーボールを推測することはできない。
  3. 入れたカラーボールのうち一つでも欠損があったり、色が違ったりすると、全く異なるカラーボールが出てくる。


その機械に赤と青と緑の3つのカラーボールを入れて、結果黒のカラーボールが出てきたとしましょう。法則1で言っていることは何時どんな状況でも、赤と青と緑のカラーボールを入れると絶対黒のカラーボールが出てくるということです。

{赤、青、緑}→{黒}となることを知っているのはあなた一人だけです。その他の人は、黒のボールが出てきたからといって最初に何色のボールを何個入れたのかということを推測できません。これが法則2で言っていることです。

緑のボールを白のボールに変えたとしましょう。すると出てくるボールの色は藍色かもしれませんし、ネズミ色かもしれません。法則3で言っているのは、少なくともその色が黒となることは決してないということです。

一億個のカラーボールが目の前にあったとして、機械Xを用いた解決策を考えます。

まず2つ一組のペアを5000万ペア作ります。そしてペアを機械Xの中に入れ5000万個の新たなカラーボールを生成します。次には、2500万ペアを作り、機械Xを用いて2500万個の新たなボールを生成します。この操作をカラーボールの数が最後の1個になるまで続けます(総数が奇数だった場合、余ったボールの相方は自信のコピー、レプリカとします)。

最後のカラーボールをRと呼びましょう。このRを写真に収めておきます。そして検証するときには1億個のボールに対して同じ操作(ペアを作り、機械Xに入れる)を行い、最後に出てきたボールとこの写真を見比べます。

この方法は最初に挙げた原始的な方法よりも圧倒的に手間が少なくすみます。最後に確認するボールは一つだけでいいのですから。

​なぜ、最後のボールだけを確認すればいいのでしょうか?機械Xの性質3より、一億個のボールのうち一つでも色が違っていたり欠けていたりすると最後に出てくるボールはRと異なります。​よって、最後のボールが写真と一致していれば、全部のボールが元の状態のままであると言えます。

最後にこの操作を図にしてまとめると木のような構造をしていることが分かります。それゆえ、このような方法を用いてできた構造をマークル木(マークルツリー)といいます(マークルはこの手法の発明者ラルフ・マークルに由来します)。


以上、マークル木を例えを用いて説明しました。カラーボールをデータに戻して考えます。

マークル木を用いることによって複数のデータを一つのデータにまとめることができます。その最終的なデータの完備性を確かめれば、そのマークル木を構成するすべてのデータの完備性を確かめることができるのです。

重要なのは、データを要約する過程であり、マークル木では以下の操作が行われます。

  1. データの断片を2つ1組にする(断片の総数が奇数だった場合、最後の断片の相方は自分自身のコピー)。​
  2. そのペアを組み合わせハッシュ関数という関数に通し、一つの値を出力する。
  3. 出力された値でまたペアを作り同じ操作を繰り返す。


この操作をデータの総数が一つになるまで続けます。最終的に残ったデータのことをはマークルルート(マークル木の根っこ)と呼びます。このマークルルートにデータの断片全ての情報が集約されており、マークルルートを確認することでそのマークルルートを構成するデータの完備性を確認することができます。

以下マークル木の参考図です。合わせてご覧ください。

ハッシュ関数

​機械Xは現実の何に対応しているのかここで確認しておきます。操作2のところで、ハッシュ関数という耳慣れない単語がでてきました。このハッシュ関数なるものが機械Xに当たります。ハッシュ関数の説明をしましょう。

ハッシュ関数とはあるデータが与えられたときにそのデータを代表するような値を返す関数のことで、要約関数とも呼ばれます。また、ハッシュ関数を通して得られた値のことをハッシュ値といいます。得られたハッシュ値でペアを作り、再びハッシュ関数を通すことによって最終的にマークルルートを得ます(難しく言うと再帰的にハッシュ関数を適応するということです)。

マークルツリーで用いられているハッシュ関数は特に暗号学的ハッシュ関数と呼ばれ、通常のハッシュ関数に暗号学的な性質を加えたものです。その暗号数理的性質は以下の通りです。

  1. 同じハッシュ​値を持つようなデータを作成することはできない。
  2. ハッシュ値から元のデータを推測することはできない。
  3. 同じハッシュ値を持つようなデータのペアを作ることはできない。


上記の性質は以下の行為を不可能にしています。

例えば、Hさんがデータを改ざんしようとしたとしましょうHさんは周りの人達にバレないように改ざんしなければなりません。つまり、ハッシュ値を変えないようにデータを変えようとするということです。しかし、性質1によりこの行為は不可能です。

次にHさんが元のデータの中身を見るために、マークルルートから本来のデータを復元しようとしたとしましょう。しかし、性質2によりこの行為は不可能です。ハッシュ値から元のデータを推測することは実質不可能だからです

前述したように、マークルルートを検証することによってデータの完備性を検証することができます。これはハッシュ関数が上記のような性質を持っているからです。

以上がハッシュ関数の簡単な説明です。以下ハッシュ関数の具体例です。

SHA(Secure Hash Algorithm)

​最もメジャーなハッシュ関数の一つです。SHAの中にも種類があり、SHA1SHA2などがあります。SHA1はセキュリティの面で問題があり現在は使われていません。セキュリティ面での問題とは、一定以上の計算能力を費やすと前述の暗号数理的性質を満たさなくなるということです。例えば、異なるデータから同じハッシュ値が得られてしまったり、ハッシュ値から元のデータを類推することができてしまったりということです。

現在主に使われている関数はSHA2というハッシュ関数です。ビットコインのアドレス発行の際に使われているハッシュ関数はSHA256です。

マークルルート

マークルルートは、再帰的にハッシュ関数を適応することにより得られるただ一つのハッシュ値です。この値を検証することによって、データの完備性を確認することができます。例えの中で、最後に出てきたボールRがこれに該当します。

ビットコインでは、元となるデータはトランザクションです。AからBに1BTC送るというトランザクションのBをCに変えた場合、それによってマークルルートが変わり、データに何かしらの変化が加えられたことが即座に分かります。

ところで、マークルルートは一体どこに保存されるのでしょうか?答えは、ブロックヘッダーという場所に保存されています。具体的なことは、「マークル木とブロックチェーン」「マークル木とビットコイン」で説明しますが、このブロックヘッダーのハッシュ値が次のブロックにパラメータとして入ることが、ブロックチェーンの非改竄性の観点から非常に重要です。

マークル木の用途

​マークル木の用途には大きく以下の二つがあります。データの要約検証です。

データの要約

​マークル木を使うことによって、多くのデータを一つのハッシュ値に要約することができます。要約する、つまりマークルルートを求めることでデータ全てを扱う必要がなくなります。

ハッシュ関数には、「どんなに大きなデータを関数に通しても、出てくるデータは常に一定の大きさである」という重要な特徴があります。この特徴を利用することで、膨大なデータを1つのデータにまとめることができます。

データの検証

​これがマークル木の最も大きな役割です。データが欠損していたり、データが改ざんされていることをハッシュ値を見ることで一瞬で検知できるのです。全データが元のままであることを知るためには、最後のハッシュ値だけを見ればいいということです。

例えの中で、勘のいい方は気づかれたかもしれません。もしカラーボールが元のままであることだけを確認したいのであれば、一番初めに1億個すべてを機械Xの中に入れてしまうのが一番いいのではないかと。

確かにその通りです。そのほうが圧倒的に処理は少なくて済みます。しかしながら、問題点は最後に得られたボールがRと異なる場合、どのボールに問題があるのかが分からないという点です。これを解決するためにペアを作っているのです。

さて、実際にデータに破損があった時どのデータに問題があるのかどう調べればよいでしょうか?

カラーボールの例えを用いて説明しましょう。1番の番号が割り振られたボール(以降①と呼びます)の色が変えられたとしましょう。1億個のボールの中から①だけに問題があることを検出します。

まず初めに、マークルルートを確認します。①が変わっているので、マークルルートも当然変わっています。

次にその直前の枝(マークルルートを構成する2つのカラーボール)を確認します。①だけに変化が加えられているのであれば、①が含まれている枝の方のボールは変化しており、一方のボールは変化していないはずです。この操作で変化が加えられたボールを含む枝を判別することができました。

この操作を①のボールにたどり着くまで続けます。これがマークル木を用いた、破損ボール検出の方法です。

さて、この方法を用いると一体どれくらい操作が少なくて済むのでしょうか?

マークル木を用いない場合、当然一つ一つボールを確認していくしか方法はありません。1億個のボールの中から①のボールを見つけ出すために何回試行が必要かを計算します。1回の試行で1個のボールを確認できるとします。

計算すると、期待値(①のボールを引くまでの試行回数の期待値)は約5千万回です。平均して5千万回ボールを引けば①のボールを引き当てられます。

マークル木を用いた場合はどうでしょうか。答えだけ先に示します。​log2(100000000)+1です。約27~28回です。

この違いは一目瞭然でしょう。マークル木はそれほど強力な手法なのです。

​マークル木の発明

​マークル木は、1979年ラルフ・マークルによって発明されました。彼は公開鍵暗号の発明にも大きな影響を与えています。彼がマークル木を発明したのは、大量のランポート署名を効率よく処理するためでした。マークル木が発明される以前、ランポート署名において一つの鍵は一つのメッセージに対してのみ署名することができました。

しかし、マークル木を導入することで、1つの鍵で複数のメッセージに対して署名ができるようになったのです。ランポート署名について詳しく知りたい方は以下のリンクをクリックして下さい。

​ランポート署名(Lamport Signature)は、量子コンピュータにも有効であるといわれる仕組みです。5年後に実用化するとの予測もある量子コンピュータは、スーパーコンピュータの約1億倍の処理能力があるとされ、AI(人工知能)やIoT(モノのインターネット)と組み合わせ人々の生活を豊かにすることが期待されています。その一方で、その計算能力・処理能力の高さから、仮想通貨の秘密鍵を解読してしまい仮想通貨のセキュリティを脅かすとの懸念もあります。そんな量子コンピュータへの耐性を持つのがランポート署名という仕組みです。この記事ではランポート署名の仕組みについて詳しく解説します!目次​ランポート署名とは?ランポート署名のメリットランポート署名の仕組みランポート署名まとめ​ランポート署名とは?​安全性の高い電子署名​量子コンピュータへの対策の一つとしてあげられるのがランポート署名(Lamport Signature)です。乱数とハッシュを複雑に組み合わせて作られていて、従来の署名方法よりも安全性の高い署名方法だとされています。秘密鍵・公開鍵の作成、署名、署名の検証という大きく分けて3つの仕組みで成り立っています。ランポート署名のメリット​量子コンピュータの悪用に耐えうる近年話題になっている量子コンピュータは、IoT(モノのインターネット)やAI(人工知能)の応用と組み合わせることで、生活の利便性を何倍にも向上させるとされています。事実、量子コンピュータの処理速度は、今の時点で最速の計算速度をもつスーパーコンピュータの約1億倍ともいわれています。人間の生活を豊かにする量子コンピュータですが、その処理能力・計算速度が悪用された際は、甚大な被害をもたらします。量子コンピュータの処理能力だと、インターネット上の取引で使われる暗号も解読されてしまうのではという懸念もあります。しかし、従来の署名方法よりも安全なランポート署名は複雑に組み合わされて作られているので、量子耐性があるといわれています。仮想通貨の量子耐性のために使われる​​​量子コンピュータが登場すると、その計算能力により仮想通貨の秘密鍵も解読される危険もあります。量子コンピュータが悪用された際、つまり量子コンピュータによるハッキングが行われた際に、セキュリティを守れることを量子耐性といいます。5年後には実用化されるともいわ

 

マークル木とブロックチェーン

​マークル木自体がどんな仕組みなのか理解できたでしょう。ここからは、ブロックチェーンの中でどのようにブロックチェーンが使われているのか見ていきます。

ハッシュチェーン

​いかなる取引においても取引の時間的な前後関係は非常に重要です。どの取引が先に行われたのかによって、その取引が有効となったり、無効となったりします。インターネット上でどのように時間を参照するのでしょうか?

中央集権的な構造の場合、時間はサーバーから受信します。UNIX標準時刻とも言われ、この時間を参照して取引の前後関係を定義します。

一方で、分散的な構造の場合、各々が好きなところから時間を参照します。日本にいる人が日本サーバーで見て12時だとしても、イギリスにいる人はイギリスサーバーで見ると3時と言うことになります。つまり、絶対的な時間を定義することができないのです。

そうなると、相対的に定義するしかありません。時間は一切関係なく、ただどの取引がどの取引よりも先に存在するのかを定義するのです。

​ここでハッシュ関数を使います。「ハッシュ関数」のところで説明したように、ハッシュ関数では出力値から入力値を類推することはできません。つまり、入力値は出力値以前に存在しているということになります。

​上図を見るとわかるように、データ0はデータ1よりも以前に存在し、データ1はデータ2よりも以前に存在します。これで取引の前後関係を定義することができました。

ハッシュ関数を用いてできる上図の構造は一般的にハッシュチェーンと呼ばれます。

ハッシュチェーンからブロックチェーンへ

​相対的な時間を定義することができました。しかしまだ問題があります。このネットワークに参加するすべての人間が最新のデータを見れるのかという問題です。

ハッシュチェーンの状態だと、コンピュータの処理能力によってある人は最新のデータを参照できるのですが、ある人はそこに追いつくことができません。

これを解決するものがマークル木です。マークル木によってデータは要約され、各人が参照するデータの量は圧倒的に減ります。​一つのマークル木に含まれるデータはすべて同時刻のモノとして扱われます。またマークル木を使うことで破損データの検出をすることもできます。

このようなハッシュチェーンにマークル木が加わった構造がブロックチェーンの原型と言うことができるでしょう。

マークル木とビットコイン

​今度はビットコインを見ていきます。ビットコインの中で、マークル木はどのように利用されているのでしょうか。

マークル木とSPV

​ネットワークを構成する要素のことをノードと言います。ノードの中でもいくつか種類があります。分け方によって変わるのですが、今回は参照できるデータの量によって分類します。

1つ目はフルノードです。フルノードは今までのすべての取引情報を保持しており検証することができます。フルノードになるためにはそれだけ多くのデータ容量が必要となるので、簡単にフルノードになることはできません

それでは、取引の検証をするノードが少なくなってしまいます。そこで出てくるのが軽量(SPV)ノードというノードです。軽量ノードはブロックヘッダの情報だけを参照できます。「マークルルート」のところで説明したように、ブロックヘッダに中にはマークルルートが含まれています。

SPVノードはマークルルートだけを参照してデータの検証を行います。しかし、どのデータに問題があるのかまでは特定することができません。

その部分の情報はフルノードに要求します。つまり、SPVノードの検証はフルノードの検証に依存しているのです。

しかし、SPVノードには簡単になることができるので検証するノードがそれだけ増えます。するとネットワークの信頼性がそれだけ増すことと同義です。すべてはマークル木という要約技術があるおかげです。

ノードについて詳しく知りたい方は以下のリンクをクリックしてください。

「ビットコインのノードって何だろう?」、「ノードがないと取引できないの?」と、ノードについてお悩みではありませんか?ビットコインやブロックチェーンの技術を説明をする際に当然のように使われる「ノード」という単語、その意味を知っておくと仮想通貨の技術の理解がグッと深まります。そこで今回は、「ノードとは何のことなのか」というところから、特に初心者の方が理解できるように簡単に説明します!これを読んで、ビットコインやブロックチェーンの知識について、一歩先の理解をしましょう!目次ビットコインのノードとは​ビットコインのノードの種類と特徴​​結局、何のノードを建てるのがオススメなのか​​ビットコインのフルノードの数と分布​その他の仮想通貨のノード​まとめビットコインのノードとは​​​「ノード」は、辞書的には「結び目」という意味を持ちます。コンピュータネットワークの中でノードというと、これはネットワークにおける分岐点や中継点のことを言います。つまり一般的には、あるネットワークに接続されているコンピュータ機器を指します。ここからさらに、ビットコインにおける”ノード”が何を意味し、どういった働きを持っているのか説明します!​​ビットコインのノードとは先ほど述べたように、一般的なノードはあるネットワークに接続されているコンピュータ機器のことです。なので、「ビットコインのノード」とは「ビットコインのネットワークに接続している全てのコンピュータ機器」のことを言います。(パソコンは当然のこと、スマートフォンやASICなどの端末も含まれます)ビットコインの取引記録は全てブロックチェーンに保存されており、ノード間で保存・共有されています。ビットコインの保有や送受信を行いたい場合は、ノードとしてそのブロックチェーンを参照する必要があります。ビットコインのノードの役割​ビットコインのノードが持つことのできる役割は、大きく、ウォレット・マイニング・フルブロックチェーンデータベース・ネットワークルーティングの4つに分けられます。ビットコインのノードの役割ウォレットマイニングフルブロックチェーンデータベースネットワークルーティング 

 

まとめ

​以上、マークル木の説明でした。データの要約・検証に役立つ非常に興味深い技術だったと思います。

「ブロックチェーンはすごい!」と巷でよく言われていますが、ブロックチェーンはそれ単独で生まれ来たわけではありません。インターネット技術、自律分散システム、暗号技術などそれらがすべて組み合わさってできた技術の総体です。マークル木はあくまでそのうちの一つの要素技術であり、ブロックチェーンを本気で学ぼうとしたら他にも学ぶことが多々あると思います。

以下、大事な点をまとめました。このような長い記事を読んでいただきありがとうございました。

マークル木まとめ

  • マークル木はデータを要約・検証するための技術
  • マークル木ではハッシュ関数という関数が使われている
  • マークル木はSPVノードによる検証で利用される