ビットコインとは何か? 第2回:ビットコインの仕組み(ブロックチェーンの構造)

本ページでは主にビットコインの構造的な仕組みについて見ていきます。

前提知識

ハッシュ

ハッシュの図

まず、ビットコインの仕組みを知る上で最も重要なハッシュという前提知識があります。

ハッシュとは、ハッシュ関数という計算方法を実行することにより、任意のデータを一定の短い長さの値に変換したもののことです。ハッシュには、①元のデータに戻せない②元のデータが少しでも変わると変換後のハッシュが全く異なる値になる③原則として元のデータは何でも良い、といった特徴があります。

少しでも元データが変わると変換後のハッシュが完全に異なるものになる特徴を生かして、ファイルが破損していたり改ざんされてないかを調べるのに利用されたり、ハッシュから元データを復元できないという特徴を生かして、パスワード等の重要なデータを安全に保管する方法として利用されたりしています。

ビットコインにおいてはSHA-256やRIPEMD-160というハッシュ関数が利用されており、これらのハッシュ関数を利用してあらゆるところでハッシュ化が行われています。

P2P分散型仮想通貨

P2Pの図

電子データでもあるビットコインのデータは、P2P型に分散して保存されています。P2P型に保存されているというのは、特定のサーバーに保存されているのではなく、世界中の多くのコンピュータがそれぞれ保存して共有しているということです。

P2P型にすることにより、例えば一か所のコンピュータが攻撃されてダウンしても、他の多数のコンピュータが同じデータを保存しているので影響を受けないというメリットがあります。このP2Pのネットワークには誰でも参加できるので、例え政府から規制されても世界の中にビットコインのデータを保存しインターネット上で共有する人がいる限り、ビットコインは永遠になくならないと言われています。

ちなみに、ビットコインの取引情報は全世界に共有・公開されていますが、ビットコインを送金するための「パスワード」(秘密鍵と呼ぶ)は公開されていないので、他人のビットコインを勝手に送金できるということはありません。

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

それではビットコインとは一体何なのでしょうか?その正体はブロックチェーンと呼ばれる取引台帳です。

ブロックチェーンの図

上図はブロックチェーンを模式的に表したものです。ブロックチェーンは、「EさんからAさんとCさんへ10BTCずつ送った」、「AさんからBさんへ7BTCを送った」、「CさんからDさんへ0.02BTCを送った」というような取引記録の集合です。これらの取引記録を時系列順に集計していくことで、現時点で「Bさんが7BTC保有している」ということが判明します。

この取引データを効率的に保管するために、ブロックチェーンは、複数の取引を含むブロック(上図の黒四角部分)という一定の単位に分かれています。そして、ブロック同士を時系列順に繋ぐために、取引データ以外にも前のブロックのハッシュが含まれています。このようにブロックが鎖状につながっているために、文字通りブロックチェーンと呼ばれているのです。

さらに、ビットコインではブロックのハッシュは「一定数(図では3つ)の0からはじまるハッシュ」が有効なブロックであると規定することで、取引の改ざんを非常に難しくしています。つまり、前のブロックの取引を改ざんすると、そのブロックのハッシュが変わって0が連続しない値になってしまい、その後ろのブロックのハッシュも連鎖的に0が連続しないランダムなものになってしまうので、後ろのブロックもすべて無効になるというわけです。

ブロックの仕組み

ハッシュというのは予測できないランダムな値のはずですが、では、なぜブロックのハッシュが一定数の0が連続するハッシュになるのでしょうか?それについて知るにはもう少しブロックの構造を詳しく見る必要があります。

ブロックの図

上図左の黒四角部分はブロック内に含まれるデータを模式的に表したものです。実際には他のデータも含まれていますが、簡単のため省略しています。

これまで「ブロック」のハッシュと説明してきたものは、実際にはブロック全体ではなくブロックヘッダー(上図左,茶色四角部分)と呼ばれるブロックの中の一部分のハッシュです。このブロックヘッダーには、前のブロックヘッダーのハッシュ、取引データをまとめたもの(マークルルート)、nonceという任意の値などが主に含まれています。

マークル木

ブロックには取引の生データも含まれていますが、この生データは膨大な容量になり毎回参照するのは非効率で大変なため、マークル木(ハッシュ木)(上図右部分)というデータ構造にまとめられています。これは、一定長の短い値に変換できるハッシュの特徴を生かしてブロック内の取引をツリー状にハッシュ化して、最終的に一つのハッシュにまとめたものです。この最終的にまとめたハッシュはマークルルート(マークル根)と呼ばれます。

ブロックヘッダーにはこのマークルルートのみが含まれており、これによって、取引の改ざんを検出するのにすべての取引の生データを参照する必要がなくなっています。

nonce

ブロックヘッダーに含まれるもう一つの重要なデータがnonce(ナンス, ノンス)です。そしてこのnonceがブロックヘッダーのハッシュを「0が一定数連続する」値にする鍵となっています。

nonceは一定の長さであること以外は、特定のルールのない任意の値です。このnonceを変化させることにより、ブロックヘッダーのハッシュを0が一定数連続する値にするのです。ハッシュの元のデータというのは復元できないため、ブロックヘッダーのハッシュが連続する0から始まる値になるようなnonceを総当たり的に探すしかありません。第4回で詳細に説明しますが、nonceを総当たり的に探すことをマイニング(採掘)と呼びます。

また、このnonceを導入することにより取引の改ざんが難しくなります。例えば、上図の取引Aを改ざんすると、それに合わせてハッシュA,ハッシュAB,ハッシュABCD(マークルルート)が連鎖的に変化し、結果的にブロックヘッダーのハッシュも変わり0が連続する有効なハッシュでは無くなってしまいます。つまり、nonceを再度探さないといけないということです。

さらに言えば、実際には前半で見たようにブロックは鎖状につながってブロックチェーンを形成しているため、過去のブロックを改ざんしようと思った場合、一つのブロックのnonceだけではなく改ざんしたブロックより後のブロックに含まれるnonceをすべて再計算しなければなりません。再計算された後のブロックチェーンは元のブロックチェーンとは異なるため、改ざんしたブロックから「分岐」することになりますが、ブロックチェーンには最も長いブロックチェーンのみを有効とする、というルールがあるため、昔のブロックの改ざんほど難しいということがいえます。

最終更新日: 2023年03月05日

コメント欄

コメントシステムを試験的に変更し、メールアドレスの入力やSNSからのログインを廃止しました。投稿後5分以内であれば編集や削除が可能です。その後に削除したいコメントがあれば依頼していただければこちらで削除いたします。

質問については出来る限りお答えしていますが、個人が運営している関係上対応の遅れや見逃し等限界もあるのでご了承ください。