ビットコインの仕組み

· 10 min read

ビットコインは、伝説的で謎に包まれたサトシ・ナカモトが2009年に提唱したデジタル通貨のコンセプトです。ブロックチェーン技術を基盤とし、中央の管理者を置かずに個人間で機能します。このコンセプトを説明するためにナカモトが書いたホワイトペーパーは、ビットコイン、ひいては暗号資産全般を理解したい人にとって必読の文献です。そこではビットコインという概念だけでなく、ビザンチン障害耐性のシステムが非中央集権的な環境でどう機能しうるかも説明されています。

まず何より、ビットコインに関心のある人は、ビットコインという概念を現実のものにした最大の要因がブロックチェーン技術であることを知り、その技術がどう動いているのかを理解する必要があります。

ブロックチェーンとは

ブロックチェーンとは、それぞれがデータを含むブロックがつながった鎖であり、いかなる中央機関にも監督・管理されていません。この情報の鎖は暗号技術で保護されており、非中央集権的な構造のおかげで沈黙させることができません。ブロックチェーンは基本的に、ポインタと連結リストという二つのデータ構造を使っています。

ポインタ

ポインタは、別の変数がどこにあるかを示す変数です。通常、プログラミングにおける変数はデータを保持します。(int a = 10 という例では、整数型の変数 a が値10を持ちます。)一方でポインタは、データとして値を保持するのではなく、そのデータを保持している変数の場所を指し示します。

連結リスト

連結リストはデータ構造のなかでも特に重要な要素の一つで、おおよそ次のような形をしています。

それぞれが特定のデータを持ち、ポインタによって次のブロックとつながったブロックの並びです。ポインタ変数は次のノードのアドレスを保持し、これによって連結が成立します。末尾のノードで見たとおり、最後のポインタは何のデータも保持しません。

ここで重要なのは、各ポインタが次のブロックのアドレスを持っているという点です。では、最初のブロックを指すポインタはどこにあるのでしょうか。最初のブロックはジェネシスブロックと呼ばれ、そのポインタはシステムの内部にあります。

ハッシュポインタとは、直前のブロックのハッシュを含むポインタのことです。

ハッシュとは、任意の長さのデータを受け取り、その中身が何であれ、決められた関数によって常に同じ長さの結果を生み出す処理です。ビットコインの場合、送金処理がデータとして取り込まれ、SHA-256アルゴリズムを通して固定長の結果が作られます。入力されたデータの長さに関係なく、SHA-256アルゴリズムは常に256ビット長の結果を出力します。

もっとも単純な形のブロックチェーンは、以下に示すような連結リストです。

ブロックチェーンとは、各ブロックがデータと、直前のブロックを指すハッシュポインタを持つ連結リストです。では、ハッシュポインタとは何でしょうか。ハッシュポインタは通常のポインタによく似ていますが、直前のブロックのアドレス情報だけでなく、そのブロック内のデータのハッシュ結果も含んでいます。この設計上のわずかな違いこそが、ブロックチェーン技術をこれほど安全なものにしているのです。

ここで、攻撃者がブロック3を狙い、その中のデータを書き換えようとしたと考えてみましょう。ハッシュ関数の性質上、データのごくわずかな変更が結果には途方もなく大きな差として現れます。ブロック3のデータをほんの少し変えるだけで、ブロック2に保存されたハッシュ結果が変わり、ブロック2の変化はブロック1のハッシュ結果に影響し、結局は鎖全体を作り替えなければならなくなります。それは不可能です。これがブロックチェーンを沈黙させられないものにしている仕組みです。

マイニングとは

マイニングは、新しいビットコインを生み出すために必要な作業です。ビットコインのマイニングはプルーフ・オブ・ワーク(POW)の原則で動いています。単純に言えば、問題を解くのは非常に難しくなければならないが、いったん解いたら、その解が正しいことをきわめて簡単に証明できなければならない、ということです。

ビットコインがPOWをコンセプトとして採用した話に入る前に、そもそもなぜ暗号資産にこうした仕組みが必要なのかを考えてみましょう。

ビットコイン以前にもさまざまなデジタル通貨が作られましたが、デジタル環境で中央管理者を置かない個人間ネットワークを作ろうとすると、最大の障壁になるのがビザンチン将軍問題と呼ばれる論理的な難題です。ナカモトがPOWによってビットコインでこの問題を克服できたからこそ、ビットコインは動き出し、今も力強く続いているのです。

ビザンチン将軍問題

学術研究でも頻繁に引き合いに出されるビザンチン将軍問題の説明から続けましょう。敵の都市への攻撃を計画するビザンチンの将軍たちには、二つの問題があります。

将軍たちは互いに遠く離れているため、中央の権威が包囲戦を指揮することは不可能です。

敵にもまた強力な軍がいるため、成功を収めるには、すべての将軍が同時に攻撃を仕掛けなければなりません。

包囲する軍が都市を取り囲むあいだ、各軍は右隣の軍から届いた命令のメッセージを左隣の軍へ伝え、こうして連絡が保たれます。しかしここに問題があります。「水曜に攻撃する」という命令が届いたとき、ある軍が準備できておらず、「いや、金曜に攻撃しよう」と返信を送るかもしれません。あるいはメッセージを運ぶ兵士が敵に捕らえられたり、運んでいるメッセージの内容が書き換えられたりすることもあります。このような信頼できない環境では、完全な足並みがそろわなければ、どんな攻撃も失敗します。

同じ論理的問題は、ビットコインのような暗号資産の基盤であるブロックチェーンネットワークにも当てはまります。とてつもなく巨大なネットワークで、そこにいる一人ひとりをどうやって信頼すればよいのでしょうか。誰かに4ETHを送りたいとして、悪意ある者がその金額を40ETHに書き換えないと、どう信じられるでしょうか。

サトシ・ナカモトは、プルーフ・オブ・ワーク・プロトコルを持ち込むことでこの論理的問題を克服しました。その仕組みを見てみましょう。

包囲中の軍が「月曜に攻撃する」というメッセージを左隣の軍に伝えたいとき、次の手順を踏む必要があります。

まず、元のメッセージに「ナンス(nonce)」と呼ばれる、ランダムに一度だけ生成される値が割り当てられます。ナンスは16進数のどんな値でも構いません。

次に、ナンスを付けたメッセージ本文をハッシュ関数に通して結果を得ます。この想像上の攻撃では、指揮官たちは先頭5桁がゼロになるハッシュ結果だけを互いに安全に共有すると取り決めた、と考えてみましょう。

ハッシュ関数の結果が望みどおりであれば、メッセージを次の将軍へ回します。結果が望みどおりでなければ、割り当てたナンスをランダムに変え、先頭5桁がゼロの結果が出るまで処理を繰り返す必要があります。この仕組みには途方もなく長い時間と計算能力が必要です。

メッセージを運ぶ兵士が捕らえられたり、メッセージの内容が変えられたりすれば、ハッシュ関数の性質からハッシュ結果は大きく変わります。メッセージを検証した将軍たちは、ハッシュ結果の先頭5桁がゼロでないことに気づき、攻撃を取りやめるでしょう。

とはいえ、可能性はごくわずかとはいえ、どんなハッシュ関数でも衝突する結果が生じうります。理論上、AとBという二つの別々の入力について、H(A) = H(B) となる確率は存在しないはずですが、現実の実装では完全に衝突に強いハッシュ関数は存在しません。

では、そのごくわずかな確率のもとで、メッセージを運ぶ兵士が捕らえられ、メッセージが書き換えられ、しかもハッシュ結果が将軍たちの望みどおりに出てしまったらどうなるでしょうか。もちろん非常に時間のかかる作業ですが、不可能ではありません。これに対して将軍たちは数の優位を使います。

この問題は、一人の将軍が順番に右から左へメッセージを回すのではなく、三人の将軍が同時に左へメッセージを送ることで克服できます。将軍たちが自分たちのメッセージから累積メッセージを作り、それをハッシュ関数に通し、その結果にナンスを割り当てて、もう一度ハッシュ関数に入れるなら、今度は結果の先頭6桁がゼロでなければなりません。

この段階になると、このメッセージのナンスを見つけて内容を書き換えるのは、時間の重大な浪費になります。

一方、メッセージを受け取る将軍たちの作業は簡単です。渡されたナンスをハッシュ結果に加えて、結果を照合するだけで済みます。この手順はきわめて速く単純な処理です。この発想こそがプルーフ・オブ・ワークの原則の動作原理です。

適切なハッシュを得るナンスを見つけるには、莫大な計算能力と時間が必要です

しかし、結果を調べて悪意があるかどうかを見極めるのは、ごくわずかな時間で済みます。

ビットコインのマイニングでマイナーがプルーフ・オブ・ワーク・プロトコルを実行しているのは、まさにこのやり方です。彼らは自分の計算能力を使って目の前の暗号学的な問題を解き、次のブロックを作ります。ビットコインのブロックチェーンでは、ブロックは10分ごとに作られます。

ビットコインネットワークでの送金はどう行われるのか

ジョンがデイブにいくらかのビットコインを送りたいとしましょう。この送金はどのように行われるのでしょうか。ビットコインの送金は法定通貨の送金とはまったく異なる働き方をします。ジョンがデイブに10米ドルを渡したいなら、財布から10ドル札を物理的に取り出してデイブに手渡せば、それで送金は完了します。しかしビットコインは違います。それは物理的に所有できるものではありません。私たちが持っているのは、ビットコインを持っているという証明です。

知っておき、注意すべきことが二つあります。

マイナーは、自分が作るブロックに書き込むデータによって送金取引を承認し、安全なものにします。そしてこのサービスに対して手数料を受け取ります。

法定通貨では、手元にある紙幣の来歴を知ることも追うこともありません。それを実際に行う方法は存在しません。しかしビットコインでは、すべての送金取引がネットワーク上に記録されます。

こうしたことを踏まえて、ジョンとデイブのあいだのビットコイン送金を見ていきましょう。この送金には二つの部分があります。インプットとアウトプット(input-output)です。

ジョンがこの送金を実行するには、過去の送金で受け取ったビットコインを持っていなければなりません。先に述べたとおり、すべての送金はビットコインネットワークに記録されています。

ジョンはあらかじめTR(0)、TR(1)、TR(2)という名前の送金で受け取ったビットコインをまとめ、TR(INPUT)という名前の新しい送金を作ってデイブに送る必要があります。ここでTR(INPUT)が新しい送金のインプットデータになります。

インプットから見たビットコインの送金は、おおよそこのような形です。

アウトプットデータには、新しい送金の後にデイブが持つべきビットコインの量と、残ったお釣りが入るだけです。お釣りはジョンに戻され、彼の次の送金でTR(INPUT)の値になります。

お釣りの部分を除いて考えると、この処理には単一のアウトプット結果しかありませんが、複数のアウトプット結果を持つ送金も可能です。この説明は、ビットコインネットワークでの送金がどう行われるかを単純に示したものです。ただし、これらがうまく成立するには、一定の条件を満たす必要があります。

送金が満たすべき条件:

TR(INPUT) > TR(OUTPUT)。インプットの送金は常にアウトプットの送金より大きくなければなりません。各送金では、インプットとアウトプット(アウトプット+お釣り)の差額が手数料としてマイナーに支払われます。つまり、マイニング手数料 = TR(INPUT) - (TR(OUTPUT) + お釣り) です。

インプット側では TR(0)+TR(1)+TR(2)=TR(INPUT) となる必要があります。言い換えれば、ジョンはデイブに送るのに十分なビットコインを持っていなければなりません。取引を処理するのに十分なビットコインがなければ、その送金はマイナーに拒否されます。

次にデイブは、自分に送られたビットコインの所有者であることを証明しなければなりません。ジョンはビットコインの送金をデイブの公開鍵で暗号化しています。デイブはこの暗号を自分の秘密鍵でしか開けません。

一方、ジョンはデイブに送るだけのビットコインを持っていることを証明しなければなりません。そのために、実行しようとする送金を自分の秘密鍵で署名します。誰でもジョンの公開鍵でそれを開き、彼が実際に必要な量のビットコインを持っていることを検証できます。この証拠は署名データと呼ばれます。

インプットデータ(署名データを含む)とアウトプットデータは合わせられ、SHA-256ハッシュアルゴリズムに通されます。このアルゴリズムの出力が送金と呼ばれるものです。

一つ心に留めておくべきことがあります。ビットコインの送金が成立するには、そのブロックをマイニングしたマイナーが、その送金を実際にブロックへ入れなければなりません。ブロックをマイニングしたマイナーは、そのブロックに入れたすべての送金の手数料を受け取れます。時間とともに送金の量が増えるにつれ、ブロックが完全に埋まるため、送金は新しいブロックが現れるのを待たなければなりません。実際、待ちたくない人はより高いマイニング手数料を払い、自分の送金を目立たせてマイナーにとって魅力的なものにします。

ここから生まれたのがリプレース・バイ・フィー(replace-by-fee)の原則です。単純にこう働きます。ジョンがデイブに5 BTCを送っていても、マイニング手数料を低く抑えたせいでブロックに取り込まれず、保留のままになります。使われたビットコインは取り戻せないため、この取引を取り消したりキャンセルしたりする方法はありません。しかし、ジョンが同じアドレスに同じ額のBTCの送金を行い、マイニング手数料をより高く設定すれば、古い送金は無効とみなされ、新しいほうが処理を待つことになります。

ビットコイン、そして暗号資産全般の未来は、数えきれない可能性に満ちています。ブロックチェーンの応用に境界はなく、この分野のプロジェクトは日を追うごとに成功し、安全になっています。

商品貨幣から金や銀といった貴金属の使用へ、そして紙幣や名目通貨へと至る道のりのなかで、仮想的な環境における貨幣という発想はそれほど新しいものではありません。ただ、それが実現可能になったのはごく最近の歴史においてでした。

ある人によればCIAの中のグループであり、別の人によれば宇宙人であり、あるいは本当にサイバーパンクのサトシ・ナカモトなのかもしれません。それが誰であれ、彼は自らの資産の見方と保管の仕方を根底から変える思想と実践を残し、その先どうするかを決める役目を私たちだけに委ねました。彼は自分のものよりさらに進んだ発想が生まれる道を切り開き、まったく異なる視点を持つよう世界を納得させたのです。

サトシは、自らマイニングしハードコードとして書き込んだジェネシスブロック(最初のブロック)にメッセージを隠すことも忘れていませんでした。2009年1月3日という日付を記し、その日の英タイムズ紙から、世界経済危機の責任を負う銀行についての見出しを添えたのです。「大臣、銀行への二度目の救済に踏み切る寸前」。おそらくこの言葉で中央銀行制度を皮肉っているのでしょう。サトシがなぜ最初のブロックにこの使用不能なアドレスを作ったのかは分かっていません。これまでにこのアドレスへ匿名で16 BTCが送られており、そのため2,100万枚というビットコインの総供給量は実際には決して満たされないことになります。

世界の中央銀行を怯えさせる水準に達するまで、ビットコインにかかった時間はわずか9年でした。そして、その道のりはまだ先へ続いています。

ビットコイン ビットコインの仕組み サトシ サトシ・ナカモト ナカモト 暗号資産 ブロックチェーン ブロックチェーンとは マイニング マイニングとは ビットコインネットワーク