2015/07/15 14:00
中央サーバー不要・オープンソースで開発――ギーク好みな仮想通貨「ビットコイン」のしくみ
ビットコインは、中央サーバーを持たずP2Pネットワークでユーザー同士の送金が可能な仮想通貨です。公開鍵暗号を使ってなりすましを防ぐほか、ビットコインを入手するための採掘というしくみを持ちます。「送金」や「採掘」はどのように行っているか、さらにオープンソースであるビットコインの開発について、前編に続き和田晃一良さんに伺いました。
中央集権的組織を持たないP2Pネットワークで、ユーザー間の直接送金が可能
――ビットコインの優れているところを教えてください。
ビットコインが革新的なのはP2Pネットワークで構成されている点です。
銀行にしろ電子マネーにしろ、ユーザーAからユーザーBに送金するには、中央のサーバーを経由しなければなりません。ビットコインは、P2Pで構成されているため、ユーザーAからユーザーBに直接送信できます。
中央サーバーを介さず価値を直接移動する方法については、1990年代からずっと研究されてきました。2009年にサトシ・ナカモト名義の論文により、中央サーバーなしにP2Pによる価値の直接移動が可能であることが示され、それをもとにビットコインが実装されたのです。
――ユーザーにはどういったメリットがあるのでしょうか。
中央サーバーを経由する場合、中央機関がユーザーの残高や送金履歴などをはじめ、すべてを管理することになります。その分、管理の手間やコストが大きくなり、手数料に跳ね返ります。そして、もし中央サーバーの情報が失われたら、すべてが終わりです。
一方、ビットコインでは、残高や送金履歴を共有して管理することで、不正や漏れがなく安全に送金できるしくみを実現しています。日本にはほとんどいませんが、国や銀行といった中央機関による管理を嫌い、自分の資産を自分で管理したいリバタリアン(自由主義者)のニーズを満たす点も、ビットコインが支持されている理由と言えるでしょう。
ブロックチェーン、公開鍵暗号により送金の不正や漏れを防ぐ
――ビットコインでは送金履歴などを共有するとのことですが、どのように行われるのですか?
ビットコインではブロックチェーンを使って送金履歴を共有します。あるユーザーから別のユーザーに送金することをトランザクションといいます。トランザクションが発生すると、その情報がP2Pネットワーク上のすべてのノードに送信され、承認処理が行われた後にブロックに追加されます。ブロックは約1,000個のトランザクションを含み、約10分に1回、次のブロックが生成されます。これがブロックチェーンです。
ブロックチェーンはすべてのトランザクションを順番に記録した取引台帳のようなものです。この取引台帳はすべてのノードに送られるので、どれか1つを改ざんしても他に正しいものが存在するために無視されます。
――ユーザー間の送金はどのように行われるのでしょうか。
ビットコインは、ビットコインアドレスに紐付けられます。「ユーザーAがユーザーBに10BTCを送金する」は、正しくは「ユーザーAのビットコインアドレスに紐付けられたビットコインから10BTCを、ユーザーBのビットコインアドレスに送金する」ことになります。
ビットコインアドレスは、公開鍵から生成されます。公開鍵とは、公開鍵暗号で使われる暗号鍵のことで、秘密鍵とペアになります。
たとえば、ユーザーAがユーザーBに10BTCを送金する場合、次のものが必要です。
- 送金元:ユーザーAのビットコインアドレス
- 送金先:ユーザーBのビットコインアドレス
- 送金額:10BTC
- 電子署名:ユーザーAの秘密鍵を使って生成
電子署名は送金元の正当性を検証するために使われます。ユーザーAの秘密鍵による電子署名を、ユーザーAの公開鍵を利用して検証することで、送金元が確かにユーザーAであり、他のユーザーのなりすましではないことを証明できます。送金元がユーザーAと証明できなければ、送金は実行されません。
逆に言えば、秘密鍵があれば、そのビットコインアドレスから不正に送金できてしまうことになります。秘密鍵は漏洩しないように、厳重に保管しなければなりません。
トランザクションを承認することで報酬を得られる「採掘」のしくみ
――ビットコインを入手する方法として「採掘」がありますが、「採掘」とはどのようなものですか?
「採掘」は、簡単に言うと、ブロックチェーンで次のブロックを探す作業です。
ブロックは誰でも生成できるわけではありません。中央サーバーがないため、ユーザー同士でコンセンサスを得てブロックを生成するための条件が定められています。その条件を満たすものを「採掘」で探します。
――具体的にはどのようなことを行うのですか?
ユーザーAからユーザーBに送金すると、トランザクションが発生します。けれど、このトランザクションはこの時点では承認されていません。トランザクションは、ブロックに含まれたときに承認されます。「採掘」は、トランザクションが含まれるブロックを探すために行われるというわけです。
「採掘」では、前のブロックのハッシュ値、未承認のトランザクションの情報、ナンス(nonce)をもとに、ハッシュ関数でハッシュ値を計算します。ナンスはランダムな32ビットの値です。計算結果が十数個の0で始まるハッシュ値になるナンスを探してひたすら計算し、条件に合ったナンスが求められると、次のブロックが決定してトランザクションがそのブロックに入ります。
――「採掘」はトランザクションを承認するための作業なんですね。
そうです。条件に合ったナンスを見つけた採掘者には25BTCが報酬として与えられます。現在1BTC=約3万円なので、約75万円です。
――「濡れ手に粟」的な儲け話のように思えます。
そんなことはありません。この例ではハッシュ値の先頭に0が17個並んでいますが、このようなハッシュ値を計算するにはものすごいCPUパワーが必要です。1台のPCで計算すれば、何百万年もかかるでしょう。
難易度、つまり先頭の0の個数は「採掘」の参加人数に比例します。参加人数が多ければ0の数が増え、少なければ減ります。だいたい10分に1回ブロックが作成されるように難易度が調整されます。
――採掘者は世界中にたくさんいるのですか?
ビットコインの価格の低下とともに減っているようですが、採掘専門業者もいるし、複数人で計算を行い、報酬を分配する方法をとる採掘者もいます。採掘用にハッシュ計算に強いチップも販売されています。
日本ではなかなか採算が合わないでしょう。強力なチップで計算し続けると、電気代がものすごくかかります。
実は、採掘の報酬は、ビットコインの流通量に関係しています。今は約10分に1回、25BTCが新たに流通することになります。数年後には報酬は半分の12.5BTCになり、さらに数年後にはその半分になります。ビットコインの流通量は2040年時点で最大2,100万BTCと決められていますが、最大流通量に達すると報酬は0になります。
――報酬が0になると、採掘する人がいなくなってしまうのでは?
そこを担保するために、採掘者がビットコインの送金にかかる手数料をもらえるしくみになっています。
ビットコインはオープンソースで開発、仕様もコミュニティが決める
――ビットコインはオープンソースですね。
そうです。ビットコインの仕様は、しくみはもちろん、ブロックに含めるトランザクションの数や最大流通量なども、コミュニティで決定します。コミュニティの中心だったBitcoin Foundationは経営破綻してしまったのですが、代わりにMIT(マサチューセッツ工科大学)のメディアラボがサポートしています。
――誰でも開発に参加できるのですか?
もちろんです。ビットコインの仕様に沿っていれば、誰でも自由にクライアントなどを開発できます。どこかに登録したり認可を得たりする必要はありません。
ビットコインのソースコードはGitHubで公開されています。
――中央サーバーを介さずP2Pで直接送金を可能にした革新的なしくみが、個人や企業の注目を集めていますね。オープンソースで開発され、コミュニティで仕様が決まるというのも、プログラマーにとって馴染み深いものだと思います。ビットコインがどのように普及していくのか、今後が楽しみです。今回はお話をありがとうございました。
著:坂井直美
写真:小倉亜沙子