ブロックチェーンは、10年ほど前にビットコインの基礎技術として現れました。比較的新しい技術ですが、書き換えできないという性質を利用し、今いろいろな用途に利用されつつあります。
ブロックチェーンに書かれた情報は、なぜ石に書いたのと同じように書き換えられないのか。このことはややこしい話なので、すぐにはわからないかもしれません。
かつ、なぜこんなことをやっているのか?ということを理解できない人が大部分だと思います。しかし、これを話さないとブロックチェーンについて話したことになりませんのでこれからお話ししますが、ややこしい話だということをあらかじめ申し上げておきます。
以下は、ブロックチェーンに採用されているプルーフオブワークという仕組みの図です。
「ブロック」には10分間の全世界の取り引きが書き込まれる
ブロックチェーンの仕組みでは、情報を「ブロック」という箱に書き込んでいきます。この図にある四角い青い箱がブロックです。ビットコインの場合は10分間の全世界の取引をこの1つのブロックに記録します。
図の下側に「取引」とあります。これが取引のデータです。ブロックチェーンは、ブロックの中に取引のデータだけを記録するのかっていうとそうではなくて、他に2つのものを記録します。
左の上に「前のブロックのハッシュ」とありますね。前のブロックというのは、ブロックというのは10分間単位ですから、次の10分のブロックはもう1つ別のブロックになります。前の10分間のブロックは前のブロックなんです。
この前のブロックの「ハッシュ」をここに書いてありますということなんです。
「ハッシュ」とは何かです。ハッシュとは、ある種の暗号を作り出す仕組みです。あるデータを「ハッシュ関数」というものに通すと、ハッシュという値を計算します。この値がハッシュなんです。
このハッシュ関数というのは次の2つの性質を持っています。1つは、このデータからハッシュを計算するといいましたが、元のデータをちょっとでも変えるとハッシュは大きく変わってしまうという性質。
もう1つの性質は、このハッシュから元の値、元のデータを推測することができないということです。これは一方向関数といわれますが、つまり、データからハッシュを計算することはできるが逆はできないということです。
そういう性質を持ったハッシュ関数というものがあって、これに前のブロックのデータを入れて計算したものがハッシュなんです。
ややこしい話ですが、わかりますか?
この次の話はもっとややこしいです。もう一つ「ナンス」っていうものがあるんです。
ハッシュとナンスを用いて計算する
ナンスというのは何か。ナンスというのは「」ある数なんです。ある数をこれから計算しようというわけです。先ほど出てきた3種類のもの、つまり「取引のデータ」と「前のブロックのハッシュ」と「ナンス」。この3種類のものを元のデータにして、それからハッシュを計算する。これがこの図では右側のブロックの前のブロックの前のブロックのハッシュと書いてあります。これを計算するんです。その場合に、ナンスの値が違えばこのハッシュの値は変わるわけです。この右側のブロックにあるハッシュの値がある条件を満たすようにそのようにナンスを計算するんです。
その条件というのはこのハッシュがある条件を満たす、例えば最初からゼロがずーっと並ぶというような条件を課します。そういう風になるようにナンスを計算するんです。ハッシュ関数っていうのは先程述べたように一方向関数ですから、ナンスを決めたらハッシュを計算できるけれど、ハッシュから元の数はわからない。そのように計算する公式がありません。ですから、今の条件を満たすようにナンスを決めないと、いちいち計算しないとできないんです。それは非常に手間がかかることです。
マイニングの仕組みは計算と答え合わせ
そういう計算をボランティアがやります。このボランティアというのは本当はコンピュータなんですが、彼らに課すんです。彼らはその計算をします。この計算のことをマイニングと称します。マイニングとは鉱石を掘るという意味です。これをやっている人をマイナーといいますが、マイナーであるコンピュータは、ナンスが与えられた条件を満たすように計算作業をします。その作業をマイニングといいます。
その計算が出来たコンピュータは、はいできましたと手を挙げるんです。その答えが正しいかどうか、このチェックは簡単にできます。もし正しいことが確認されると、その手を挙げたコンピュータがこのブロックについての責任者になってタイムスタンプを押す。
そして計算ができた褒美として一定額のビットコインを貰う。こういうことになっています。これがマイニングの作業です。
そういうことをずっと続けていきます。10分ごとのブロックを繋げていくことで、ブロックチェーンを作る。こういう作業です。
何かすごく馬鹿らしいことに思えるんですが、なぜこんなことをやっているかというと、この仕組みによって改ざんができないからです。
プルーフオブワークにより確保されるブロックチェーンの信用性
例えば、ボランティアであるコンピュータのうち悪い人がいたとして。取引のデータを書き換えようとします。
AさんからBさんへ、というのが本当のデータなのに、それをAさんから私へ、という取引に書き替えればビットコインを盗んだことになるわけですね。そう思った誰かが書き換えようとします。
そうすると何が起こるかといえば、取引のデータが変わっちゃうわけです。
そうするとさっき計算したナンスでは先ほどの条件を満たさなくなるわけです。データが変わるとハッシュが大きく変わりますから。さっきの計算をやり直す必要があるんです。これが大変な作業です。
実はこれだけじゃないです。ブロックがあるところまで進んだ段階で、もとの何時間前のデータを書き換えようとする。その間にはブロックが沢山繋がっているわけですから、それらのナンスの値を全部書き換えないと整合性が取れません。非常にややこしくて馬鹿らしいことなんですが、要はデータを書き換えてしまうと、ナンスの再計算が必要になって、それは著しく大変な作業だということです。だから誰もやらないんです。
悪い人はデータを書き換えたいと思うけれど、書き換えるためにはものすごい計算量が必要になるので割に合わないんです。だからやらないんです。このことによって、記録されたデータは書き換えられていません。このような仕組みによって確保されています。
この仕組みをプルーフオブワークと言います。
監視し合っているから改ざんができない、は間違い
プルーフオブワークというのは、仕事をやった証拠です。
馬鹿らしいようなナンスの計算をやった、その証拠だということです。
ブロックチェーンは、プルーフオブワークの仕組みによってデータの改ざんができないようになっています。これは非常にわかりにくい仕組みなので一般にあまり理解はされていないと思います。
新聞などでブロックチェーンの仕組みでデータの改ざんができないっていうことを説明していますが、何故改ざんできないかということの説明として、沢山の分散した人が、沢山の人がお互いにチェックし合っているから、だから改ざんできないんだというような解説が多いの
ですが、間違いです。チェックし合っても、別に改ざんができないっていうことにはなりません。このような計算作業をしているということが重要です。これによって、性悪説であっても成り立つ仕組みができました。ここが大変重要なことなんです。