データの安全性を確認できる「ハッシュ値」の仕組み
ブロックチェーンを支える3つの技術的な特徴として、ブロックチェーンの名前の由来でもある「特殊なデータ構造」と「公開鍵暗号方式」、そして「コンセンサスアルゴリズム」があります。
[図表1]ブロックチェーンの3つの技術的な特徴
最初にブロックチェーンの名前の由来ともなっている、「特殊なデータ構造」について説明していきます。
ブロックチェーンは、ビットコインの場合約10分毎の取引内容のデータをひとつのブロックとしてまとめ、それらを時系列順に並べたものであると説明しました。
もう少し詳しく、どのようなデータが入っているのか見ていきましょう。
おさらいですが、ブロックの中には、世界中で行われたビットコインの取引のデータ(2017年1月10日17時15分に、Aさんが、Bさんへ1BTC送金した、など)がそれぞれ入っています。そして、その前のブロックデータのハッシュ値、そしてナンスと呼ばれる数値が入っています。
まずここでハッシュ値について順を追って説明していきたいと思います。
皆さんご存じかもしれませんが、インターネット空間においてはテキストであっても画像であっても、すべてのデータは0と1の組み合わせで表現することができます。
つまり、あらゆるデータ(ファイル)は、ひとつの数値で表すことができます。例えば、「いぬ」の場合は「111000111000000110000100111000111000000110101100」となります(文字コードUTF–8の場合)、「ねこ」の場合は「111000111000000110101101111000111000000110010011」となります。これだとややこしいので、以下ではそれぞれ下4桁で表したいと思います。
いぬを「1100」、ねこを「0011」とします。
次にハッシュ値ですが、これはあるデータ(つまり数値)を、ハッシュ関数と呼ばれる関数で計算した結果を言います。
例えば、先ほどの「いぬ」に「5を掛ける」というハッシュ関数(実際はもっと複雑なものですが)を利用した場合、「5500」というハッシュ値に変換されます。ここでもとの数値が「1100」でハッシュ値が「5500」という数値となります。
ハッシュ値の特徴として、「ハッシュ値とハッシュ関数の内容がわかっていてもデータの特定が困難」ということがあります。
今の例ですと、簡単に「5を掛けている」とわかってしまうかもしれませんが、実際のハッシュ関数はもっと複雑なものです。例えば、ビットコインで利用されているハッシュ関数である「SHA-256」を利用して、「いぬ」のハッシュ値を求めると、「ac780dba391b7b189f56216d0db79c54492f36df4bc683447cfb8061ab645528」となります。
さすがにこの値から、もとのデータである「いぬ」を想像するのは難しいでしょう。
[図表2]ハッシュ値とは?
このハッシュ値は、データの完全性を確認するために利用されます。データの完全性とは、通信を行っている間で、データの改ざんが行われていないかを確認できるようにすることになります。
例えば、AさんからBさんに「ねこ」というテキストメッセージを送ったにも関わらず、途中で悪意のある者によって「ぬこ」に変更されてしまう可能性があります。
この際に、どのような方法で変更が起きたかを確認するかがポイントです。
ハッシュ値は、「異なるデータから同じハッシュ値が得られることは、ほとんどない」という特徴を持っています。
仮にもとのデータが改ざんされた場合は、そのデータをもとに計算されたハッシュ値も変わってしまいます。そのため、送られてきたデータのハッシュ値と同じかどうかを確認すれば改ざんがされたかを確認できます。
ブロックに入れたハッシュ値が相互に作用し連鎖する
ハッシュ値の性質については、ご理解いただけたでしょうか。
ブロックは取引データやその他のデータがまとまっているものですが、これもひとつの数値で表すことができ、それにハッシュ関数をかけることで、一意のハッシュ値を得ることができます。これが、前のブロックのハッシュ値です。
もし、仮に前のブロックに含まれるデータが、少しでも変更されるとハッシュ値自体も変わってしまいます。
ここで注目していただきたいのが、前のブロックのハッシュ値が、それぞれのブロックに入っており、入れ子の関係になっているところです。
したがって、これらの値は、ブロックの中身が変更されると、それに伴って値も変更されます。
つまり、前のブロックのデータが変更されると次のブロックに含まれているハッシュ値の値も変わってしまい、そのブロック自体のデータも変わるため、さらには次の次のブロックに含まれるハッシュ値も変わるということがご理解いただけるでしょうか。
このように、あるブロックのデータを変更するとその後のブロックすべてのハッシュ値が変わってしまうのです。それぞれのブロックのデータが、相互に作用し連鎖した構造となっているので、ブロックチェーンという名前の由来になったのです。
[図表3]ブロックチェーンのデータ構造(ブロックの中身)