見出し画像

【第165回】 マークルツリーの仕組み完全図解~大量のデータを効率的に検証する魔法の木~

アリス:「ウサギ先輩、こんにちは!この前、ブロックヘッダーの話で『マークルルート』っていう言葉が出てきましたよね?あれって、一体何なんですか?なんだか難しそうな名前で…」

ウサギ先輩:「やあ、アリスちゃん!良いところに気がついたね。ふふん、マークルルートというのは、実は今日の冒険の主役『マークルツリー』っていう、とーっても賢い仕組みが生み出す宝物みたいなものなんだ。見た目はただの暗号みたいな文字列だけど、その裏にはたくさんのデータがギュギュッと詰まっていて、しかもそれが正しいかどうかを瞬時に見抜く魔法の力を持っているんだよ!」

アリス:「ま、魔法の木!?なんだかファンタジーの世界みたいでワクワクします!でも、一体どんな木なんですか?」

ウサギ先輩:「うむ、その好奇心や良し!よし、アリスちゃん、今日はその『マークルツリー』という魔法の木が、どうやって大量のデータを効率的にまとめ上げ、そしてその正しさを守っているのか、その秘密の仕組みを一緒に探検しに行こうじゃないか!このウサギ先輩にかかれば、どんな難しいこともイチコロさ!」


マークルツリーってなぁに?~魔法の木の正体~

アリス:「ウサギ先輩、改めて教えてください!マークルツリーって、一体何者なんですか?」

ウサギ先輩:「ふむふむ、良い質問だね!じゃあ、分かりやすく説明しよう!マークルツリーというのは、たくさんのデータを整理整頓して、しかもそれが正しいかどうかをあっという間にチェックできる、魔法のようなデータ構造のことです。ちょうど、たくさんの葉っぱ(データ)を持つ大きな木を想像してみてくれるかな?その木の根っこにあたる部分が『マークルルート』で、その根っこを見れば、木全体の健康状態(データの正しさ)が分かる、みたいなイメージさ。」

アリス:「木の根っこで全体の健康状態が分かるんですか?すごいですね!」

ウサギ先輩:「そうなんだ。だから『ハッシュ木』なんて呼ばれ方もするんですよ。バラバラのデータをハッシュ化っていう魔法の呪文で短い文字列に変えて、それをどんどんまとめていって、最終的にたった一つのルートハッシュ(これがマークルルートだね)を作り上げるんだ。」

アリス:「ハッシュ化…以前教えてもらった、どんなデータも短い暗号みたいにしてしまう魔法ですね!」

ウサギ先輩:「その通り!さすがアリスちゃん、よく覚えているね。そのハッシュ化を巧みに使った木構造だから、マークルツリーはとってもパワフルなんだ。」

魔法の木はいつ、誰が作ったの?~発明物語~

アリス:「そんなすごい木、一体誰がいつ頃考えたんですか?」

ウサギ先輩:「これもまた興味深い話でね。この魔法の木『マークルツリー』を発明したのは、ラルフ・マークル(Ralph Merkle)さんという、とっても頭の良いコンピュータ科学者なんだ。彼がこのアイデアを思いついたのは、なんと1979年のことなんですよ。」

アリス:「1979年!ビットコインが生まれるずっと前ですね!」

ウサギ先輩:「そうなんだよ。ビットコインが2009年に登場するより、実に30年も前にこの基礎技術は考案されていたんだ。最初は、たくさんのデジタル署名を効率的に扱うためだったと言われているけれど、その先見の明には驚かされるばかりだね。このマークルさんの名前を取って『マークルツリー』と名付けられたわけさ。そして、サトシ・ナカモトがビットコインを設計する際に、この素晴らしいアイデアを採用したことで、一躍有名になったんだ。」

アリス:「へぇ~!そんな歴史があったんですね。ラルフ・マークルさん、すごいです!」

ウサギ先輩:「まさに縁の下の力持ち的な発明だね。では、次はいよいよ、この魔法の木がどうやって作られるのか、その仕組みを見ていこうか!」

魔法の木の作り方~アリス、ハッシュの枝を伸ばす~

アリス:「はいっ!どうやってあんなにたくさんのデータをまとめられるのか、すっごく気になります!」

ウサギ先輩:「よしきた!じゃあ、アリスちゃんも一緒に魔法の木を育ててみよう!簡単ないくつかのステップで出来上がるからね。」

ステップ1:葉っぱをハッシュに変える!~データブロックのハッシュ化~

ウサギ先輩:「まず、木にたくさんの葉っぱがあるように、私たちにもたくさんのデータがあるとしよう。例えば、ビットコインのブロックに入っているたくさんのトランザクション(取引記録)だね。これを一つ一つ、ハッシュ関数という魔法の箱に入れて、短いハッシュ値(葉っぱのハッシュ)に変えるんだ。」

アリス:「例えば、トランザクションA、B、C、Dがあったら、それぞれハッシュA、ハッシュB、ハッシュC、ハッシュDになるんですね!」

ウサギ先輩:「その通り!これがマークルツリーの一番下の段、つまりリーフノード(葉ノード)になるわけだ。」

ステップ2:隣同士で合体!~ペアでのハッシュ化~

ウサギ先輩:「次に、隣り合ったハッシュ値をペアにしていくんだ。さっきの例だと、ハッシュAとハッシュBをペアにする。そして、この二つをくっつけて、それをもう一度ハッシュ化するんだ。これで、一つ上の段の新しいハッシュ値(枝のハッシュ)ができる。同じように、ハッシュCとハッシュDもペアにして、くっつけてハッシュ化する。」

アリス:「ハッシュAとハッシュBでハッシュABができて、ハッシュCとハッシュDでハッシュCDができる…ってことですね?もしデータが奇数個だったらどうするんですか?」

ウサギ先輩:「良い質問だね、アリスちゃん!もしデータブロックが奇数個だったら、最後のハッシュ値を自分自身とペアにする、つまり複製してペアを作るのが一般的なやり方だよ。例えば、データが3つでハッシュA、ハッシュB、ハッシュCだったら、ハッシュAとハッシュBでハッシュABを作って、ハッシュCはハッシュCとペアにしてハッシュCCを作る、という具合だね。」

ステップ3:てっぺん目指して合体!~ツリー構築とマークルルート~

ウサギ先輩:「そうやってできた新しいハッシュ値たち(ハッシュABとハッシュCD)を、また同じようにペアにして、くっつけてハッシュ化する。これを繰り返していくと、だんだんハッシュ値の数が減っていって、最終的にたった一つのハッシュ値になるんだ。この、木のてっぺんにあたるたった一つのハッシュ値こそが、栄光ある『マークルルート』なのさ!」

アリス:「わぁ!たくさんの葉っぱが、どんどん太い枝になって、最後は一本の太い幹(マークルルート)になるみたいですね!なんだかスッキリします!」

ウサギ先輩:「まさにその通り!このマークルルートは、木全体のすべての葉っぱの情報を含んでいる、とっても重要なハッシュ値なんだ。そして、このマークルルートは、例えばビットコインのブロックヘッダーに記録されることになるんだよ。」

マークルツリーのすごいところは?~魔法の木の3つの力~

アリス:「マークルルートが全体の情報を含んでいるのは分かりましたけど、それが具体的にどうすごいんですか?」

ウサギ先輩:「ふふん、良いところに気づいたね!マークルツリーには、大きく分けて3つの強力な魔法の力があるんだ。それを一つずつ見ていこう!」

力その1:鉄壁の守り!データの完全性

ウサギ先輩:「まず一つ目の力は、データの完全性を鉄壁のように守れることだ。もし、たくさんのトランザクションデータのうち、たった一つでも、ほんの少しでも改ざんされたとするじゃないか。」

アリス:「はい、誰かがこっそり書き換えちゃったとか…。」

ウサギ先輩:「そうすると、その改ざんされたデータのハッシュ値が変わるよね?ハッシュ関数は、入力が少しでも違うと全く違う出力になる性質があったから。」

アリス:「そうでした!雪崩効果ってやつですね!」

ウサギ先輩:「ご名答!そして、その変わったハッシュ値を使ってさらに上のハッシュ値を作ると、その上のハッシュ値も変わる。これが連鎖的に起こって、最終的にはマークルルートの値が全く違うものになってしまうんだ。」

アリス:「つまり、元の正しいマークルルートの値を知っていれば、データが改ざんされたらすぐにバレちゃうってことですか!?」

ウサギ先輩:「その通り!だから、ブロックチェーンに記録されたマークルルートと、手元にあるトランザクションデータから計算したマークルルートを比較するだけで、データが途中で書き換えられていないか、完全な状態であるかを簡単に確認できるんだ。これはとっても強力な守りの力だよね。」

力その2:目にも止まらぬ速さ!効率的な検証

ウサギ先輩:「二つ目の力は、データの検証が目にも止まらぬ速さでできることだ。例えば、ブロックの中に1000個のトランザクションデータが入っていたとしよう。その中の特定の一個のトランザクションが本当にそのブロックに含まれているか、そして改ざんされていないかを確認したいとする。」

アリス:「1000個全部のデータと照らし合わせるのは大変そうです…。」

ウサギ先輩:「だよね。でもマークルツリーがあれば大丈夫!その特定のトランザクションデータと、そのデータからマークルルートに至るまでの『道筋』にあるいくつかのハッシュ値(これをマークルパスとか認証パスって言うんだ)だけがあれば、検証できちゃうんだ。」

アリス:「ええっ!?全部のデータがいらないんですか?」

ウサギ先輩:「そうなんだ。必要なハッシュ値の数は、データの総数をNとすると、大体log₂(N)くらいで済む。例えば、データが1000個(2の10乗に近い)あったとしても、たった10個程度のハッシュ値があれば検証できてしまう。もし100万個のデータがあっても、20個程度で済む計算だ。これはとてつもなく効率的だよね。」

アリス:「すごいです!データがどんなに増えても、調べる手間はそんなに増えないんですね!」

ウサギ先輩:「その通り!この効率の良さが、後で話すSPV(Simplified Payment Verification)という仕組みで大活躍するんだ。」

力その3:スリムな体!データ量の削減

ウサギ先輩:「そして三つ目の力は、データ量をスリムにできること。特に、ビットコインネットワークに参加するノードの中には、すべてのトランザクションデータを保存する余裕がない『軽量ノード』または『SPVクライアント』と呼ばれるものがあるんだ。」

アリス:「パソコンの容量とか、通信量とか、色々大変ですもんね。」

ウサギ先輩:「そうなんだ。でも、マークルツリーのおかげで、これらの軽量ノードは、ブロックのヘッダー情報(ここにはマークルルートが含まれている)と、自分に関係のあるトランザクションを検証するためのマークルパスだけを持っていれば、そのトランザクションが正当なものであることを確認できるんだ。」

アリス:「つまり、全部の取引記録を持っていなくても、自分の取引が大丈夫かどうかわかるんですね!」

ウサギ先輩:「そういうこと!これは、コンピュータの処理負荷を軽減し、ストレージ容量や通信帯域を大幅に節約することに繋がる。まさに、スリムで賢い魔法の木だろ?」

どんなところで活躍してるの?~魔法の木の冒険の舞台~

アリス:「データの完全性を守れて、速く検証できて、データ量も減らせるなんて、マークルツリーって本当にすごいんですね!どんなところで使われているんですか?」

ウサギ先輩:「ふふん、その活躍の舞台は思った以上に広いんだよ、アリスちゃん。」

暗号資産の世界(ビットコイン、イーサリアムなど)

ウサギ先輩:「まずは、やっぱり私たちがお勉強している暗号資産の世界だね。ビットコインでは、各ブロック内の全トランザクションをまとめたマークルルートがブロックヘッダーに格納されていて、さっき話したSPV(簡易決済検証)を実現するのに不可欠な役割を果たしている。」

アリス:「ビットコインの心臓部の一つなんですね!」

ウサギ先輩:「まさに!そして、イーサリアムでも同じようにトランザクションの検証に使われているんだけど、イーサリアムはさらに賢くてね。『マークル・パトリシア・トライ』っていう、マークルツリーをちょっと進化させたような仕組みを使って、トランザクションだけじゃなくて、アカウントの状態(残高とか、スマートコントラクトのコードとか)も効率的に管理しているんだ。これにより、イーサリアムの複雑なスマートコントラクトの実行も支えられているんだよ。」

アリス:「イーサリアムもマークルツリーの仲間を使っているんですね!なんだか親近感が湧きます。」

ウサギ先輩:「他にも、多くの暗号資産取引所では、顧客の資産がちゃんと保管されていることを証明するために、このマークルツリーを使った情報を公開する動き(Proof of Reserves)もあるんだ。透明性を高めるのにも役立っているわけだね。」

インターネットの裏側(P2Pファイル共有、データベース、Gitなど)

ウサギ先輩:「そして、マークルツリーの活躍は暗号資産だけにとどまらない。実は、私たちが普段使っているインターネットの裏側でも、色々なところで頑張っているんだよ。」

アリス:「えっ、そうなんですか!?」

ウサギ先輩:「例えば、P2P(ピアツーピア)のファイル共有ソフト。大きなファイルをダウンロードするときに、ファイルがいくつかの小さな塊(チャンク)に分かれて送られてくるんだけど、それぞれの塊が壊れていないか、改ざんされていないかをチェックするのにマークルツリーが使われていることがあるんだ。GnutellaとかDirect Connectといったソフトで使われていた『Tiger Treeハッシュ』というのは、まさにこのマークルツリーの一種なんだよ。」

アリス:「ダウンロードしたファイルがちゃんとしているか確認できるのは安心ですね!」

ウサギ先輩:「だろ?他にも、Apache CassandraRiakといった、大規模なデータを扱うデータベースシステムでも、データの整合性を保つために使われているし、プログラマーさんたちがよく使うGitというバージョン管理システムでも、ファイルの変更履歴を管理するのに役立っているんだ。さらに、ZFSという高性能なファイルシステムや、Tahoe-LAFSという安全なバックアップシステムなんかでも、データの破損検出や修復に貢献している。まさに、デジタル世界の縁の下の力持ちだね!」

もっとすごいマークルツリーもあるの?~進化する魔法の木~

アリス:「マークルツリーって、色々なところで使われているんですね!もしかして、もっと進化したマークルツリーもあるんですか?」

ウサギ先輩:「おっと、アリスちゃん、鋭いね!その通り、マークルツリーも時代とともに進化しているんだ。例えば、『Sparse Merkle Tree(スパースマークルツリー)』、略してSMTなんていうものがある。」

アリス:「スパース…?まばらってことですか?」

ウサギ先輩:「そうそう!これは、たくさんのデータ項目があるけど、実際に値が入っているのはごく一部、というような状況で特に力を発揮するマークルツリーなんだ。例えば、イーサリアムのアカウントの状態なんかは、取りうるアカウントアドレスの数は天文学的に多いけど、実際に使われているのはそのごく一部だよね。そういう時に、このSMTを使うと、データが入っていない場所を効率的に扱えて、証明も小さくできるんだ。」

アリス:「へぇ~、無駄がない感じがしますね!」

ウサギ先輩:「うん。他にも、ゼロ知識証明っていう、さらに高度な暗号技術と組み合わせやすいように工夫されたマークルツリーの研究も進んでいる。例えば、Poseidonハッシュっていう新しいハッシュ関数を使ったものとかね。技術は常に進化しているってことさ!」

アリス:「魔法の木も、どんどん新しい魔法を覚えていくんですね!」

ウサギ先輩:「その通り!さあ、ここまでマークルツリーの仕組みと活躍を見てきたけど、ちょっと一息入れようか。特別なコラムの時間だよ。」

ウサギ先輩のちょっと一息コラム:マークルツリーがなかったらビットコインはどうなっていた?~SPVの夢、破れたり~

やあみんな、ウサギ先輩だよ!今日はアリスちゃんと一緒に、マークルツリーっていう魔法の木について学んできたわけだけど、ここでちょっと想像してみてほしいんだ。

もしも、ラルフ・マークルさんがこの素晴らしいアイデアを思いつかなかったら?
もしも、サトシ・ナカモトがビットコインの設計にマークルツリーを組み込まなかったら?

ビットコイン、そして今の仮想通貨の世界は、一体どうなっていただろうか?

特に大きな影響を受けるのは、間違いなく「SPV(Simplified Payment Verification:簡易決済検証)」だろうね。SPVっていうのは、スマホみたいな非力なデバイスでも、ビットコインの全取引履歴(ブロックチェーン全体は何百ギガバイトにもなる!)を持たずに、自分に関係する取引が正当かどうかを検証できる仕組みのことだ。

これができるのは、まさにマークルツリーのおかげなんだ。ブロックヘッダーにちょこんと乗っかっているマークルルートと、ほんのわずかなハッシュ値(マークルパス)さえあれば、「この取引は確かにこのブロックに含まれていて、改ざんされていませんよ!」って証明できるからね。

でも、もしマークルツリーがなかったら?

SPVクライアントは、自分の取引を検証するために、結局そのブロックに含まれる全トランザクションデータをダウンロードしてチェックしなきゃいけなくなるかもしれない。それはもう「簡易」とは言えないよね。スマホのストレージはあっという間にパンクするし、通信量もとんでもないことになる。ビットコインをもっと手軽に使いたい、という夢は、かなり遠のいてしまうだろう。

あるいは、SPVという概念自体が生まれなかったかもしれない。そうなると、ビットコインを使うには、誰もが巨大なブロックチェーンデータを全部ダウンロードして同期する「フルノード」を動かす必要が出てくる。これは一般のユーザーにとってはハードルが高すぎる。結果として、ビットコインネットワークの参加者はごく一部の専門家や企業に限られてしまい、今のような分散性は生まれなかったかもしれないんだ。

つまり、マークルツリーという一見地味なデータ構造が、ビットコインが「誰でも使える分散型のお金」という理想に近づくための、非常に重要なピースだったってことさ。まさに「小さな巨人」だね!

もちろん、歴史に「もしも」はないけれど、こういう風に考えてみると、一つの発明がどれだけ大きな影響を与えるのか、その重要性があらためて分かるんじゃないかな?

さて、コラムはここまで。アリスちゃん、冒険の続きに戻ろうか!

まとめ:魔法の木の教え~アリス、データの森を歩く勇気をもらう~

アリス:「ウサギ先輩、今日の冒険、本当に面白かったです!マークルツリーが、ただのデータ構造じゃなくて、ビットコインやインターネットを支えるための、すごく賢くて力強い『魔法の木』なんだってよく分かりました。一つの根っこ(マークルルート)から、たくさんのデータ(葉っぱ)の正しさが分かるなんて、本当に魔法みたいです!」

アリス:「それに、改ざんを見破る力、速く検証できる力、データを小さくできる力…どれも今のデジタル社会にはなくてはならないものだと思いました。ラルフ・マークルさんのひらめきと、それを活用したサトシ・ナカモトさんのアイデア、両方すごいですね!SPVがなかったら、スマホでビットコインを使うのも大変だったかもしれないなんて、想像もつきませんでした。」

アリス:「これからは『マークルルート』って言葉を見ても、もう怖くありません!むしろ、その裏にあるたくさんのデータと、それを守る魔法の木の姿を思い浮かべられそうです。ありがとうございました、ウサギ先輩!」

ウサギ先輩:「どういたしまして、アリスちゃん。今日の冒険で、また一つ賢くなったね!そう、マークルツリーは、目立たないけれど、私たちのデジタルな世界を根底から支える、本当に重要な技術の一つなんだ。その仕組みを理解できたことは、これからの仮想通貨ワンダーランドの冒険でもきっと役に立つはずだよ。忘れないで、どんな複雑に見える魔法も、紐解いていけば必ず理解できる『仕組み』があるってことをね!さあ、次なる冒険への扉はもうすぐそこだ!」

次回予告:秘密の合言葉~アリス、暗号の迷宮に挑む!~

アリス:「はい、ウサギ先輩!なんだか、もっともっと色々な技術の秘密を知りたくなってきました!」

ウサギ先輩:「うむ、その意気や良し!次回はね、アリスちゃん、私たちが普段何気なく使っている『合言葉』、それがデジタルな世界でどうやって私たちの秘密を守っているのか、その不思議な仕組みに迫ってみようと思うんだ。そう、今回のマークルツリーがデータの『正しさ』を守る魔法なら、次はデータの『秘密』を守る魔法、暗号技術の核心に触れてみるよ!」

アリス:「秘密を守る魔法…!ドキドキします!一体どんな冒険になるんでしょうか?」

ウサギ先輩:「ふふふ、それは次のお楽しみさ!アリスとウサギ先輩の仮想通貨ワンダーランド冒険記、次回、『公開鍵と秘密鍵の秘密の合言葉~アリスとボブの暗号通信ゲーム~RSA暗号の仕組み~』でお会いしよう!お楽しみに!」

☕ 冒険の心得コーナー ☕

アリス:「ウサギ先輩! 今日のお話もすっごく面白かったです! なんだか、この記事を読んでいたら、私も仮想通貨を買ってみたくなっちゃいました!」

ウサギ先輩:「おっと、アリスちゃん、その気持ちはよく分かるよ。でも、焦りは禁物だ。この冒険記は、あくまで不思議の国の仕組みを知るための『地図』みたいなものさ。『宝の地図』じゃないんだ。」

アリス:「宝の地図じゃない…?」

ウサギ先輩:「そう。これは『ここでコインを買いなさい』なんていう投資のアドバイスをするものでは決してないんだ。投資っていうのは、自分自身でよーく勉強して、失っても生活に困らないお金の範囲で、自分の判断と責任でするものなんだよ。そこを間違えると、ワンダーランドで迷子になっちゃうからね。このお約束は、絶対に守ってほしいな。」

アリス:「はい、わかりました! 自分の責任で、ですね! でも、もしこの記事の情報が間違っていたらどうしよう…って、ちょっと心配にもなりました。」

ウサギ先輩:「良いところに気がついたね、アリスちゃん。このウサギ先輩も、できるだけ正確な情報をお届けしようと頑張っているけど、この世界は変化が光の速さだからね。情報が古くなったり、勘違いしたりすることもあるかもしれない。だから、もし読者のみんなの中で『あれ? ここの情報、ちょっと違うかも』って気づいた人がいたら、ぜひ優しく教えてくれると助かるんだ。みんなでこの冒険記を、もっと素敵なものに育てていきたいからね!」

アリス:「みんなで作る冒険記なんですね! なんだか素敵です!」

いいなと思ったら応援しよう!