@mizumotokのブログ

テクノロジー、投資、書評、映画、筋トレなどについて

これからビットコインとブロックチェーンの仕組みをちゃんと理解しよう

ビットコインはサトシ・ナカモトと名乗る人物によって発明され、2009年1月3日から運用が開始されました。
通常の決済は金融機関を通して行われますが、そのために決済コストがかかり少額決済には向かないという問題があります。また金融機関の破綻や法定通貨を発行する国の信用破綻が起こると、そのシステム内で出回っている通貨の紛失や、通貨の価値の暴落が起きてしまうこともあります。
これは誰かが中央集権でシステムや通貨を管理しているから起こる問題であり、P2Pの技術を使ってみんなでオープンに管理しようとして発案されたのがビットコインです。もちろんP2Pならでは発生する問題もあり、それらを解決する技術もビットコインに実装されました。
この記事を読めば、ビットコインの仕組みとそれに使用されている技術についての理解が深まることでしょう。

f:id:mizumotok:20180411084612j:plain

一般的な銀行決済について

AさんがBさんに1,000円を銀行振り込みする場合を想定してみましょう。実際に1,000円という法定通貨が動くのではなく、銀行内のデータベースを操作して、Aさんの口座の残高から1,000円と手数料を引いて、Bさんの口座の残高をに1,000円を加えています。銀行の運営にはお金がかかりますから、これらのサービスをするために手数料をとっています。例えば2018年4月現在、三井住友銀行の支店間での振込手数料はインターネットバンキングを使用した場合に108円かかります。

f:id:mizumotok:20180411002546j:plain

データベースの内容もこれらの振込の操作も銀行外から見られないようになっていて、皆が銀行を信用しているわけです。本当に銀行を信用しても大丈夫でしょうか?勝手に残高を書き換えれば、銀行は預金者の金を横領することは簡単にできてしまいます(現代の日本では考えにくいですが)。銀行員の横領もあります(現代の日本では銀行が信頼確保のために補償してくれますが)。窓口で銀行員が間違えることもあります。そして銀行が破綻することもあります。
また国の財政破綻により、その国の通貨自体の価値が暴落することも考えられます。せっかく銀行にお金を預けていても(預けずにタンス預金していても)、資産価値が激減してしまいます。
これらの問題は決済システムとして銀行を「信頼」し、法定通貨の発行としての国を「信頼」している、つまり第三者機関を「信頼」しているときにその第三者機関を「信頼できなくなる」から起こる問題です。

P2Pネットワークによる第三者機関が不要な決済システム

運営にお金がかかり、信頼破綻のリスクも大きい中央集権化された第三者機関への依存をやめて、皆でオープンに管理していこうという発想からビットコインが誕生しました。信頼すべき第三者機関が存在しないことから、ビットコインの性質を「トラストレス」と呼ぶこともあります。「トラストレス」は「信頼できない」という意味ですが、”個人や組織を信頼できなくても信頼できるようなシステム”というニュアンスで使います。

f:id:mizumotok:20180411004202j:plain

ビットコインはソフトウェアは「オープンソース」として公開されていて、ソフトウェアをインストールすれば誰もがビットコインP2Pネットワークに参加することが可能です。ネットワークにいる参加者全員で送金処理を行ない、全員で全員の口座の残高を管理するのです。例えばblockchain.infoで全取引を確認することができます。
もちろん信頼できる第3者機関がいないから起こる問題も発生します。それを解決するために発明されたのがブロックチェーンです。

ブロックチェーンは完全にオープンな取引台帳

ブロックチェーンビットコインP2Pネットワークに参加しているノードが持っているデータベースで、取引の履歴が載っています。口座Aから口座Bに1,000円送金したといったような取引情報をいくつか集めて10分毎にブロックというデータ単位をつくり、全ブロックをデータベースとして全ノードが持っているのです。ブロックには前回生成されたブロックの固有値を保持しているので、1本のチェーンでつながっているように見えます。ブロックの固有値はブロックのデータ全体にハッシュ関数をつかって計算したハッシュ値を使います。

f:id:mizumotok:20180411010244j:plain

銀行のデータベースというと口座ごとに残高と取引履歴が管理されていて、取引履歴は送金元の口座と送金先の口座と送金額からできているイメージですが、ブロックチェーンでは少し違います。口座Aから口座Bに1,000円送金する場合は、以前に口座Aに送金された取引のいくつかをインプットとして口座Bと金額をアウトプットとして取引を生成します。ある取引が別の取引で使われていくのです。余ったお金はおつりとして口座Aに送金されます。
まだ使われていない取引をUTXO(Unspent Transaction Output)といいます。口座Bが含まれる全UTXOの金額の合計が口座Bの残高となるという仕組みです。

f:id:mizumotok:20180411012259j:plain

なりすまし、改ざん、否認を電子署名で抑止

データは簡単に書き換えられてしまいます。特にA口座の保持者になりすまして勝手にB口座に送ったり、A口座からC口座に送ったのにB口座に送ったことに改ざんしたり、A口座からB口座に送った後に送ってないと言い張る(否認)するといったことが起こりえます。これは「電子署名」という枯れた技術で解決できます。
ビットコインの取引をするには秘密鍵をもつ必要があります。これは51個の数字と記号の組み合わせからできています。秘密鍵から決まった計算で公開鍵というものをつくることができます。誰がやっても同じ秘密鍵からは同じ公開鍵をつくることができますが、公開鍵から秘密鍵を知ることはできません。公開鍵から決まった計算でアドレスを作ることができます。このアドレスが「口座」に相当するものです。同じ公開鍵からは複数のアドレスを作ることができますが、これも誰がやっても同じ公開鍵からは同じ組み合わせのアドレスを作ることができます。またアドレスから公開鍵を知ることはできません。秘密鍵で鍵をかけると公開鍵で開くことができるという性質があります。電子署名はこの性質を利用します。
ウォレットは内部で秘密鍵を保持し、公開鍵とアドレスを作り出します。また取引データを生成して電子署名をするのもウォレットの大事に役割です。

f:id:mizumotok:20180411014257j:plain

口座Aから口座Bに送金する場合を考えます。まずは取引データ(取引X)を作ります。取引Xには送信先(口座Bの所有者)の公開鍵を含めておきます。取引X固有のデータ(実際には取引そのもののデータのハッシュ値)を送信元(口座Aの所有者)の秘密鍵で鍵をかけたものを署名として置いておきます。送信元(口座Aの所有者)の公開鍵は前取引データに含まれていますから、その公開鍵をつかって取引X内の署名を開いて取引X固有のデータと一致するか簡単に検証できます。秘密鍵をもっているのは口座Aの保有者ですのでなりすましや改ざんは口座Aの保有者以外はできません。また秘密鍵を持っている人が署名をしたのは確実ですので、否認もできません。だから秘密鍵を絶対に公開してはいけません。

P2Pネットワークには嘘つきもいる=ビザンチン将軍問題

ビットコインはトラストレスですから、参加者を信頼していません。もちろんその多くは善人だという前提ですが、中には悪人もいます。P2Pネットワークでは各ノードがお互いに取引やブロックのデータを交換しながら同じ情報を維持しようとしているのですが、悪人は嘘をついて混乱させようとします。これがビザンチン将軍問題と呼ばれるものです。
電子署名のおかげでなりすまし、改ざん、否認をはできませんが、二重取引をつくってその取引を無効にすることができます。口座Bの所有者は口座Aの所有者に物品を販売したとします。口座Aの所有者は取引Xの口座Aから口座Bに送金したとします。口座Bの所有者は取引Yがつくられたことを確認して、物品を渡します。その取引Yが全ノードに伝わる前にまだ情報が届いていないノードから、口座Aの所有者は取引Xの口座Aから口座Cに送金する取引Zをつくることが可能です。取引Yと取引Zは同じ取引Xを使用しますので、2重取引になってしまいます。ブロックチェーン上では一本のチェーンが分岐してしまう状態です。チェーンが分岐したときのルールとしてよりチェーンの長い方を正とすることにしています。取引Zの後にどんどんブロックをつなげていくと、取引Yは無効になり、口座Bの所有者は物品を取引を確認し物品を渡したにも関わらず、お金は入ってこないという状況になってしまいます。

f:id:mizumotok:20180411084311j:plain

プルーフ・オブ・ワーク(マイニング)

ビザンチン将軍問題を解決するためにプルーフ・オブ・ワーク(仕事をしたという証明)という発明がされました。これがビットコインにおける大発明で、ビットチェインは優れていると言われている所以です。
ブロックを簡単に作れてしまうことが、2重取引による詐欺が簡単にできてしまう原因でした。ブロックを作るのに約10分かかる仕事を課すことにしたのです。この仕事のことをマイニングといい、この仕事をしたノードをマイナーといいます。マイナーには仕事をする代わりに報酬(2018年4月現在は約12.5BTC)が与えられます。この報酬のために多くのマイナーが競ってマイニングを行うのです。
ブロックをチェーンでつなげるための各ブロックにはハッシュ値という固有のIDを持ちます。ハッシュ値はそのブロック全体にハッシュ関数を通して算出されます。ブロックを作るときにナンスと呼ばれる32ビットの数字を含めることになっています。ナンスを変えると当然ハッシュ値も変わります。ブロックチェーンではハッシュ値をあるディフィカルティ以下にするというルールを決めました。マイナーはランダムにナンスを作ってはハッシュ値がディフィカルティ以下になるか検証する必要があります。ハッシュ値がディフィカルティ以下になるようなナンスが見つかったらそれを含めてブロックの完成です。この仕事には約10分かかりますが、ハッシュ値の計算自体は一瞬で終わり各ノードはこのナンスが正しいかどうかはすぐに検証できますのでずるはできません。ディフィカルティは、過去の数ブロックをつくるのにかかった時間を元に平均10分で終わるように自動的に調整されます。
マイニングには報酬がつきますので多くのノードが競っています。ある悪いノードが2重取引を含めたブロックをつくってブロックチェーンを分岐したとしても、他のノードが正しいチェーンの方を伸ばしてしまいます。2重取引を成立させるためには何ブロックか連続でマイニングを成功させないといけませんが、これができるとしたらかなりのマイニングパワーを占めた場合です。ある一つのノードが全マイニングパワーの多くを占めた場合は、この2重取引を自在にできる可能性がでてきます。これを51%問題と言います。しかし、そのような状況になった場合、ビットコインの信頼性が損なわれ価値が下がります。せっかくお金をかけてマイニングパワーを使い、報酬ももらえるというのに、ビットコインの価値が下がってはたまりません。マイナーはマイニングパワーを行使して悪いことをするよりも、真面目にマイニングを行ない報酬をもらい、ビットコインの信頼性の維持に努めた方が利益になるのです。
ブロックをつくるための時間とお金のかかる仕事をして報酬を与えるというプルーフ・オブ・ワークの発明により、ビザンチン将軍問題は事実上解決されたのです。

まとめ

  • ビットコインはトラストレスな決済システムであり、そのシステムで使用される通貨の単位でもある
  • P2Pネットワーク上に構築され、2009年の運用開始以来一度もダウンしていない
  • ブロックチェーンという完全にオープンで改ざんが難しい取引台帳を参加者全員で管理している
  • 電子署名で取引のなりすまし、改ざん
  • プルーフ・オブ・ワークという仕組みによりP2Pネットワークの課題であるビザンチン将軍問題を解決している
  • プルーフ・オブ・ワークにおけるワークはマイニングと呼ばれ、マイニング成功者に報酬を与えることでビットコインシステムの信頼性維持のインセンティブとしている