中学生でも分かるブロックチェーンの仕組み

Round Silver and Gold Coins

この記事では、ブロックチェーンとは何なのかを、中学生でも分かるくらいに、シンプルに解説してみたい。

初めに断っておくと、私の専門は、ITでも経済学でもない。ブロックチェーンに関しては完全な素人だ。私自身、「ブロックチェーンって何だか良く分からない」と思って、解説書やネット上の記事をいくつか読んでみた。けれども、これがいまいち分かりにくかった。専門家たちの解説は、厳密さを重視するあまり、直観的に掴みにくい内容になっているのだ。だから、この記事では、少々の厳密さは欠いても、ざっくりとイメージを掴めるように解説してみたい。詳しい方から見れば、眉をひそめたくなるような部分もあるかもしれないが、そこはご容赦いただきたい。もちろん、私の解説に間違いがあれば、コメントやお問い合せフォームを通じて、ご指摘いただけると幸いである。では、説明に移ろう。

仮想通貨とブロックチェーン

ブロックチェーンとは何かを考えるためには、まずビットコインをはじめとする「仮想通貨」について語らねばならない。言葉から何となくイメージできるかと思うが、仮想通貨とは、実体の無いお金だ。

普通の日本円だったら、紙で出来ている千円札や一万円札があり、あるいは金属で出来ている1円硬貨や100円硬化などある。つまりは、お金に実体があるのだ。もし、あなたの友達A君が、「俺、1000万円持ってるぜ」とほざいていたとしよう。この発言が本当かどうか確かめるためにはどうすればいいか。答えは簡単だ。「じゃ1000万円持ってきてみろよ」と言って、実際に一万円札を1000枚持ってこさせればいい。もちろん、銀行の通帳で確認するという方法もあるけれど、偽札でも持ってこられない限りは、お金の実体を自分の目で確かめるのが一番確実な方法だ。

けれども、実体が無いビットコインの場合は、この方法が使えない。「1 satoshi札」といった紙幣や硬貨が存在する訳ではないからだ (ビットコインの単位は、その創始者であるサトシ・ナカモトに因んで、satoshiという。ちなみに、サトシ・ナカモトとは偽名であり、正体不明の謎の人物である)。だから、「俺、1000万satoshi持ってるぜ」というのを証明するためには、「この人は〇〇円持っています」という電子データを見せるしかない。

つまり、ビットコインのような仮想通貨の場合は、紙幣や硬貨といった実体がないから、その代わりに「この人は〇〇円持っていますよ」とか「B君はC君に〇〇円あげました」とか、そういった電子データが書かれた"台帳"が必要になるのだ。このデータを管理する"台帳"が、もしハッキングすれば簡単に改ざんできるようなショボい物だったら、仮想通貨は成り立たない。そこで、絶対に改ざんができないような仕組みを持った"台帳"が考案された。この台帳こそが、ブロックチェーンなのだ。

ブロックチェーンの仕組み

先ほど言ったように、ビットコインのような仮想通貨にとってブロックチェーン技術が重要なのは、実体が無い分、絶対に不正や改ざんができない台帳が必要となるからだ。では、ブロックチェーンによって、何故不正が出来なくなるのかを考えていこう。不正を防ぐ工夫は主に二つある。一つ目は、「Peer to Peer (P2P)」型のシステムであることだ。そして、二つ目は、ブロックチェーンという言葉通り、「ブロックが鎖 (チェーン) のように連なったデータベース」であることだ。

Peer to Peerネットワーク

以下のシチュエーションを想像してほしい。

高校生のあなたは、英語のテストを受けた。だが、さっぱり解けず、このままでは赤点になることは確実だ。さあ、困った。けれども、英語な苦手なあなただが、実はハッキングという特技がある。そこで、英語の先生のパソコンにハッキングして、点数を改ざんすることにした...

この時、英語の先生のコンピューターのみに点数のデータがあったとすれば、改ざんは簡単だ。その先生のコンピューターに侵入して、データを書き換えればいいだけだ。

けれども、英語の先生が、点数のデータをその学校の先生全員にメールで送っていたとしたら、どうだろうか。英語の先生のコンピューターにハッキングして点数を書き換えることに成功したとしても、他の先生のコンピューターにあるデータと照らし合わせれば、不正があったことがバレてしまう。

つまり、データは一か所に保管するよりも、たくさんの箇所に同じものを分散させた方が安全なのだ。これはテストの点数に限ったことではない。ブロックチェーンも同様に、一つのコンピューター (台帳) にお金のやりとりを記録するのではなく、全参加者が同じ台帳を持つようになっている。だから、ビットコインを始めたい人は、まずはこの台帳をダウンロードしなければならない。この台帳には、ビットコインが始まって以来の全ての取引のデータが入っているから、膨大なデータ量 (2019年3月現在で200GB以上) になる。このように参加者全員が、全ての取引のデータを持っているおかげで、簡単に改ざんすることが出来ないのだ。データを一括に管理するのではなく、参加者で分散して管理する方式を「Peer to Peer (P2P)」と呼ぶ。ブロックチェーンに関する本や記事を読むと、必ずP2Pの話が出てくるが、要するに「特定少数の人が中心となって運営している訳ではなく、参加者全員で運営している」ということだ。

ブロックチェーンとは

さて、ここからが本番だ。ブロックチェーン技術の肝となる、「ブロックが鎖 (チェーン) のように連なったデータベース」であることの意味と、その仕組みについて説明していこう。

ブロックチェーンを理解する上で、知っておかなければならないのは「ハッシュ」という操作だ。まず、ハッシュについて簡単に説明していこう。"ハッシュ"とは、マクドナルドで売っているハッシュポテトのハッシュと同じ意味だ。ハッシュポテトというのは、ジャガイモをぐちゃぐちゃにして揚げたものだ。「ハッシュ」という操作も、一言でいえばデータをぐちゃぐちゃにすることだ。

例えば、「こんにちは」という言葉をmd2というハッシュ関数でぐちゃぐちゃにしてやると「506f145fafb008a4f6746b4604083ba2」に変わる。

重要となるのは、データをちょっと変えただけでも、ハッシュ関数が大きく変わるということだ。「こんにちは」の代わりに「こんにち」に変えて、同じmd2というハッシュ関数でぐちゃぐちゃにしてやると、今度は「11ab011d6cfc5390bb64ea19d282283c」になる。上の「こんにちは」の場合と見比べてもらえば分かるように、全然違う結果になるのだ。

もう一つ大事なのは、ハッシュ関数でぐちゃぐちゃにして、出てきた文字列 (ハッシュ値)から、もとの言葉を推測することが不可能だということだ。つまり、「506f145fafb008a4f6746b4604083ba2」というハッシュ値から、元のデータが「こんにちは」であることを突き止めることは不可能なのだ。

実際に、ハッシュという操作を実感してもらおう。以下の「ハッシュ計算ツール 」に行って、なんか適当な言葉を打ち込んでみて欲しい。一文字だろうが、長い文章だろうが、ハッシュ関数で処理してやると、同じ文字数のハッシュ値になるのが分かるだろう。だから、ハッシュ値からは、元のデータの量を推測することさえ不可能である。

例えば、上のハッシュ計算ツールで、「人」という字を200個打ち込んで、ハッシュ関数md2にかけてみた。すると、「249f4e898b4301573068e7b1faa4a725」というハッシュ値がでてくる。

f:id:Ketone:20190316213335p:plain

次に、この200個の「人」のうち、一つを「入」に変えてやった。同じくハッシュ関数md2にかけると、今度は「5228be094cb78482641b8126cbe243ed」というハッシュ値になる。さっきの「249f4e898b4301573068e7b1faa4a725」とは全然違う。「人」のうち、一つが「入」になったなんて、普通の人ならば、言われなければ気付かないような些細な変化だ。けれども、ハッシュ値を計算してやれば、データが改ざんされていることは、一目瞭然となるのだ。

f:id:Ketone:20190316213613p:plain
このように、ハッシュを活用すると、データが改ざんされた場合に一瞬で分かる。だから、ブロックチェーンでは、この「ハッシュ」という操作が重要となる。「AさんはBさんに〇〇円支払いました」といった取引に関するデータが、大量に納められたデータベースがあるとしよう。このデータベースの一部を不正に書き換えて、"Bさん"を"Cさん"に変えてやったとする。そうすると、さっきの「人」の例のように、データをちょっと改ざんしただけでも、元のデータのハッシュ値と、改ざんした後のデータのハッシュ値が、全然変わってしまうのだ。

ビットコインの場合、約10分の間に起こった取引のデータが、一つのブロックに入れられる。その10分間の取引を記録したブロックが、ビットコインが始まった2009年から、それこそ鎖 (チェーン) のように連なっているのだ。ここで、ブロック同士をつなぐ鍵となっているのが、ハッシュである。下の図のように、あるブロックの中には、約10分間の取引のデータ以外に、前のブロックのハッシュが含まれる。

f:id:Ketone:20190316215033p:plain

ここで、一番左のブロックの「取引のデータ」を改ざんしたとしよう。そうすると、次の右側のブロックに含まれる、前ブロックのハッシュ値が変わることになる。すると、またその次のブロック (一番右) のハッシュ値との辻褄が合わなくなる。つまり、改ざんしようとするならば、一か所を変えるだけでは済まされず、ブロックチェーン全体を改ざんしてやるくらいの気概とエネルギーが必要となってしまうのだ。

f:id:Ketone:20190316220741p:plain

このように、ブロックチェーンを改ざんするには大変な労力がかかる。そして、ブロックチェーンの巧妙なところは、改ざんにエネルギーを費やすくらいだったら、ブロックチェーンの運営に協力した方が、はるかに得をするようにできているところだ。これについて解説していこう。

ブロックチェーンは、約10分間の取引に関するデータが収納されたブロックを次々と積み上げていくようなシステムだが、ここで「最新のブロックを積み上げる」仕事のことを「マイニング」と呼ぶ。マイニングに成功した人には報酬が与えられるから、不正をするくらいなら、マイニングに参加した方が得なのだ。

では、マイニングとは具体的に何をやっているのか。一つのブロックには、お金の取引に関するデータと、前のブロックのハッシュ関数、それに「ナンス」と呼ばれる無意味な数値が含まれる。マイニングとは、「取り引きのデータ」+「前のブロックのハッシュ値」+「ナンス」のハッシュ値が、ある条件を満たすように、適当なナンスを見つけ出す作業のことだ。ビットコインだと、ハッシュ値の最初の16桁が0になるようなナンスを見つけ出すこと、といった条件が設けられている。ハッシュ計算ツールで試してもらえば分かるように、正解となるナンスを見つけるには、膨大な回数の試行が必要となる。約10分間で適切なナンスが見つかるように、難易度が設定されている。このナンスが見つかったら、それを含めたブロックが最新のブロックとして積み上げられる。そして、そのブロックのハッシュ値と取引データをもとに、次のナンスを探しだす作業が始まる。このように、金儲けしたい人の「マイニング」行為によって、ブロックチェーンは運営されているのだ。

なお、ビットコインを使った取り引きは、参加者が「私はAさんに〇〇円支払いました」というデータを申請するところから始まる。そういう「全世界からの取引の申請をまとめたもの」+「前のブロックのハッシュ値」+「適切なナンス」で、最新のブロックはつくられる。そして、実際にビットコインを使った取引が承認されるのは、そこから更に5つのブロックが連なってからだ。つまり、「私はAさんに〇〇円分のビットコインを払います」と宣言して、1時間ほど経ってから、ようやく「Aさんに〇〇円分のビットコインを支払った」ということが事実として承認されるのだ。このタイムラグがあるから、ビットコインを普通のお金や電子マネーのように使うのは、現状難しいだろう。

以上のように、一か所だけを改ざんしようとすると、ブロックチェーン全体を改ざんする必要が生じるため、それならばと善人も悪人もブロックチェーンの運営に自発的に協力するようになる、というのがブロックチェーンの面白いところだ。

まとめ

以上、ブロックチェーンの仕組みについて解説してきた。私自身もこの分野について勉強している途中であるため、もっと分かりやすい解説や、面白いトピックスを見つけられたら、随時更新していきたい。

 

参考文献