Satoshi Nakamoto Fan Club

ビットコインが好きです。

ビットコインの原理


"I've been working on a new electronic cash system that's fully peer-to-peer, with no trusted third party."
-Satoshi Nakamoto 2008/11/1

ビットコインとは、2009年にナカモト・サトシによって開発された暗号通貨、及びその暗号通貨のP2P送金システムの総称である。以下、その仕組みを簡単に説明する。

分散型取引記録システム

ビットコインとは本質的には分散型取引記録システムである。Alice*1 がBob に30ビットコイン(BTC)を送りたいと思ったら、ネットワークに対し

「Bob に30BTCを送りたい(自分の持っているこの30BTC の所有権をBob に移したい。)」

と宣言する。その宣言を聞いたノード*2がそれぞれのハードディスクにある取引記録を更新することによって送金は行われる(図1)。Aliceが所有するビットコインの送金を宣言をするには、Alice しか持っていない電子的な"鍵"が必要なので、Alice 以外の人がAlice を偽って送金を行うことは不可能である*3。自分がいくらビットコインを持っているかを知るには、自分に向けられた送金の内、他の人に送られていないのを足し合わせればよい。

f:id:link68:20141028182459p:plain
図1.送金が行われるのネットワークの概図

しかし、このシステムには、悪意のあるノードに対して脆いという問題がある。例えば先程の例で、Alice がBob に30BTCを送ると宣言すると同時に、Carol にもその同じ30BTCを送る宣言をしたとする。つまり、Alice が全く同じ30BTCを二重に使おうとした場合である。このとき、ネットワークの一部はその30BTCの所有権をBob に書き換え、もう一部はCarol に書き換えてしまい、ネットワーク内で矛盾がおこる。

この問題の根本的な原因は、「たった一つの取引記録」を共有する機構がないことにある。既存の金融システムは、信用される中央機関が取引を全て管理し、時系列上で一番最初に依頼された取引のみを受け取ることによりこの問題を防止している。取引記録をトップダウンに管理する中央を持たないP2Pネットワークにおいて、いかにして「たった一つの取引記録」を共有するのか、それが問題であった。

ブロックチェイン

ビットコインは、ブロックチェイン(Block Chain)というアーキテクチャによって二重支払い問題を鮮やかに解決した。先ほど述べた取引記録の実体はこのブロックチェインである。その原理は次の通りである。

ビットコインシステムには採掘者(Miner)と呼ばれるノードが存在する。採掘者はネットワークに参加している人なら誰にでもなれる。取引が宣言されたとき、その取引はまず「未承認取引プール」に入る。採掘者は未承認取引プールから未承認取引をいくつかとりあげ、一つのブロックにまとめ(図2)、ネットワークに対し宣言する。

f:id:link68:20141029181105p:plain
図2.ブロックの概図

宣言を受け取ったノードは、そのブロックの形式が正当で、二重送金を含まないことを確認したら、自分のブロックチェイン(図3)の最後に加える。送金はこのブロックに組み込まれてはじめて承認されたことになる。自分のブロックがブロックチェインに受け入れられた採掘者は、報酬としてビットコインを受け取ることができる。

f:id:link68:20141022193250p:plain
図3.ブロックチェインの概図

プルーフ・オブ・ワーク

しかし、まだこれだけでは何も解決できてない。なぜなら、これだけでは二つの異なるブロックチェインがネットワーク内で混在することを防げないからである。例えば、二つの異なるブロックが同時に採掘されたり、悪意のあるノードが独自のブロックチェインを作成し流通させた場合、ネットワークは一つのブロックチェインを共有できなくなる。ビットコインにはブロックチェインの状態をトップダウンに決定する中央組織が存在しないので、それぞれのノードがどのブロックチェインがネットワーク内で合意されたものであるのかを各自で判断できることが必要になる。

ここで考えだされたのは、プルーフ・オブ・ワークと呼ばれるコンセプトである。ブロックを採掘する際、採掘者はプルーフ・オブ・ワーク(Proof of Work)と呼ばれる数学的問題を解くことを要求される。この数学的問題はブロックチェイン内の最新のブロックによって決定されるので、予め先まで計算しておくことは不可能である。このプルーフ・オブ・ワークは、解くのが難しいが、解かれたことを確認するのは簡単という特性をもつので、ネットワーク内の他のノードはブロックの正当性を簡単に判断できる。採掘者たちは新しいブロックを採掘し、報酬を手にいれるために、数学的問題を解く競争に勝たなければならないのだ。

このプルーフ・オブ・ワークによって、ビットコインネットワークは「たった一つの取引記録」を共有できるようになる。以下、その理由をみていこう。

同時に複数のブロックが採掘されたり*4、悪意のあるノードがネットワークを混乱させようとしたりして、複数のブロックが同じブロックのあとに加えられることがある。このとき、ブロックチェインは分岐する(図4)。

f:id:link68:20141022200106p:plain
図4.分岐するブロックチェイン

次のブロックを作成する採掘者は分岐したチェインの中から一番長い枝(ブロックが多い枝)を選び、そこに自分のブロックを加えるよう計算を始める*5。枝の長さに一定以上の差がついたら、短い方の枝は捨てられ、捨てられた方の枝を構成するブロックの採掘者は報酬を受け取ることができなくなる。よって、採掘者は、自分の枝のあとに他の採掘者が続くよう一番長い枝にブロックを加えるインセンティブをもつ。このインセンティブにより、一番長い枝に採掘者が集中し、そして採掘者が一つの枝に集中することにより、チェインが分岐しても一つの枝に収束するようになる。

このことにより、特定の1人、あるいは組織の悪意により、ブロックチェインが改変されることが不可能になる。なぜなら、自分に都合の良い枝を承認させるためには、自分だけで連続して何回もブロックを採掘し(数学的問題を解き)、善良な採掘者が伸ばしている枝との計算競走に勝たなければならないからだ。計算競走に勝つためには、ネットワーク全体に対して対抗できるコンピューティングパワーが必要となるが、ネットワークに参加しているノードの数が十分に多い場合、そのようなことは非常に困難になる。つまり、採掘者の大半が善良な採掘者、すなわち報酬を目当てにした利己的な採掘者であるかぎり、ブロックチェインは「たった一つの合意された状態」へと中立的に収束する。そこに特定の意思が介在する余地はない。

採掘者以外のノードにとっても、枝の長さが、その枝の「承認され具合」を測る偽装不可能な指標になる。かれらはとにかく一番長い枝をネットワークに合意されたものとみなし、受け入れればよい。一番長いということは、一番つぎ込まれた計算量が多いということである。そして、一番つぎ込まれた計算量が多いということは、一番多くの採掘者がその枝を承認しているということである。別の見方をすると、枝は長ければ長いほど、特定個人の悪意によって作成された可能性が低くなるのだ。この長さという指標を手に入れることによって、信用できる誰かに教えてもらわなくても、正当な取引記録の状態を自分で確認することができる。実際、ビットコインソフトウェアを起動したときや、初めてインストールしたとき、真っ先に行われるのは、自分のハードディスクにあるブロックチェインをネットワーク内で一番長いブロックチェインに同期させることである。

プルーフ・オブ・ワークという計算必要性と、その計算に対する対価としての通貨、この二つを組み合わせたところにビットコインの革新性がある。通貨というインセンティブによりコンピューティングパワーが集まり、そのコンピューティングパワーがブロックチェインの連鎖の中で蓄積される。この蓄積されたコンピューティングパワーによって不正を行うことのコストが大きくなり、個人の悪意がネットワークを左右することが無くなる。そして、ブロックチェインの長さ、すなわちプルーフ・オブ・ワークの積み重ねを指標にすることにより、ビットコインネットワークは単一で偽装不可能な取引記録を共有できるようになる。

驚くべきことに、上の一連の過程は中央組織を必要としていない。ブロックチェイン以前、「たった一つの取引記録」を共有するためには信頼される中央組織が必要であった。ブロックチェインの発明により、P2Pに「たった一つの取引記録」を共有できるようになり、中央組織に対する信用ではなく、テクノロジーに対する知識に基づく送金システムが実現できるようになった。

ブロックチェイン技術の応用

ブロックチェイン技術のより汎用的な応用については、以下の記事に書いた。

ブロックチェインの革新性は「たった一つの合意された状態」を共有できることであり、合意する対象は通貨の取引記録である必要はない。このシステムをセキュアに運用するためには一定量のコンピューティングパワーが必要になり、そのコンピューティングパワーに対する対価として、通貨がいわば副産物としてできただけである。ブロックチェインとは本質的には分散型合意形成システムであり、通貨はシステムを動かす円滑油でしかないのだ。


分散型合意形成システム、Ethereum - Satoshi Nakamoto Fan Club

*1:実際のアカウント識別は、14xMdCtNxqPDGTwKWgqud1qJML1zJ6Jc9t というような文字列で行われる。

*2:ここではネットワークに参加しているコンピュータ一台一台を意味する

*3:Mt.Goxで起こったのは、この鍵の盗難である。Mt.Goxはそのユーザーの鍵をまとめて管理していたので、ハッキングされたときにその鍵をまとめて盗まれてしまったのだ。

*4:つまり、同時にプルーフ・オブ・ワークが解かれたとき

*5:同じ長さの枝が複数ある場合、とりあえず最初に受け取った枝に続くよう採掘し、次のブロックが採掘されて均衡が破れたら一番長い枝に移る。