ビットコインの技術:使われているプログラミング言語、開発体制
仮想通貨ビットコインは、C++を使って開発されているオープンソースのプロジェクトです。 C++は処理が速く、Adobe Systems、Amazon、Paypal、Chromeなど多くのソフトウェアがC++で構築されています。
開発体制については、ビットコインには特定の管理者が存在しないことが特徴で、ビットコインにおける改善の提案や実装はビットコインのコミュニティによって行われています。
githubやreddit、bitcointalkといったサイトに有志が集い、日々改善の提案やそれに関する議論が行われています。有志の集まりですが、それぞれがビットコインに関連する会社に所属していたりするので利害の不一致からコミュニティ内で対立が起こることもあります。
技術面から見た優れている点
ビットコインは言わずと知れた仮想通貨(暗号資産)の原点です。また、現在仮想通貨以外にも様々な領域で応用が進められているブロックチェーンの原点でもあります。
ビットコインの革新的な点は、すでに存在していた技術を組み合わせることで、国や銀行を必要としない金銭的価値の交換がインターネット上で実行可能になった点です。
国が管理しているお金であれば偽造防止の印刷をしたり、財政政策で流通量を調整したりして秩序が保たれますが、そのような管理組織無しにインターネット上にきちんと使えるお金が誕生したのです。
以下では、それを実現するためにビットコインで使われている代表的な要素技術を紹介します。
ブロックをチェーン状につなげたデータベース構造
ブロックチェーンという名前の由来にもなっているデータベースの構造です。
いくつかのデータをひとまとめ(ブロック)にしてそれらを常に関連付けさせながらブロックを増やしていくことで、どこかのデータが変更されたらそれ以降のすべての情報が変更されてしまい、変更されたことがわかってしまうため、改ざんが難しくなっています。
わかりやすく例えると、エクセルのセル参照が連続している感じです。 最初のセルがあり、それを参照した新しいセルがつくられ、更にそれを参照したセルが作られ…。
途中のセルが書き換えられてしまうとそれ以降のセルはすべて変更されてしまうため、書き換えられたことがすぐに分かってしまいます。 実際は取引の情報がまとめられたブロックの要約値(ハッシュ値)を参照して次のブロックが作られます。
要約値の計算には特別な関数が使われ、要約値からブロックの内容(マイニングによって得られた数字)を逆算することは出来ません。
公開鍵暗号
仮想通貨周りでは「秘密鍵」という言葉をよく聞きます。
秘密鍵は公開鍵暗号に使われる、他の人に公開しない鍵のことで、ビットコインにおいては本人確認のために使われます。
公開鍵暗号自体はよく使われる技術で、URLがhttpsで始まるページの表示やメールの暗号化、マイナンバーカードにも利用されています。
公開鍵暗号での通信は以下のようにして行われますが、煩雑なため詳しい説明は割愛します。
- 暗号を受け取りたい人は自分の秘密鍵(暗号を解読する鍵)から公開鍵(暗号にする鍵)を作る
- 暗号を受け取りたい人は公開鍵を送る
- 公開鍵を受け取った人は、公開鍵を使って暗号化し、送り返す
- 暗号を受け取った人は自分の持っている「暗号を解読する鍵(秘密鍵)」を使って解読
マイニング、PoW (Proof of Work)
ブロックチェーンのデータ構造について解説した際に、「どこかのデータが変更されたらそれ以降のすべての情報が変更されてしまい、変更されたことがわかってしまう」と説明しましたが、誰がこれをチェックするのでしょうか。
また、どうしてデータベースが正しいと信頼することができるのでしょうか? ビットコインでは、Proof of Work(以下PoW)という仕組みでデータベースの信用を担保しています。
取引データがまとめられて新たにブロックが作られ、チェーンの一番うしろに繋げられる際に、ある条件に合致する数を求める計算が行われます。 この計算には多くのリソースが必要になっていて、新規ブロックが作成されたということはそのリソースが割かれたことを意味します。
ビットコインではProof of Work(作業量による証明)という名の通り、データベースの正しさを証明するためのブロック生成に多大なリソースが投下されています。
新しいブロックを作ってチェーンの一番うしろに繋げた人、つまり条件に合う数を見つけた人には報酬として新規発行されたビットコインが与えられるため、多くの人が競ってこの計算を行っています。(厳密には、一番長く続いているチェーンを正しいチェーンとするというルールが有り、ブロックをつなげてチェーンを伸ばすことがそれまでのデータを検証し内容に合意したのと同義になります。)
新規ブロックをつなげて報酬をもらうことをマイニング、それをする人のことをマイナーと呼びますが、ビットコインではマイナーが自分の利益のために報酬目当てでマイニングすることでネットワーク全体の健全性が保たれているのです。
PoWのコンセプト自体は1993年にスパムやDoS攻撃への対抗手段として発明されました。ちなみに、このマイニング報酬の額は約4年ごとに半分になるように設計されており、「半減期」と呼ばれています。
発行上限は2100万BTCと定められていて、マイニング報酬は現在は新規発行分とビットコイン利用者が支払った手数料の合計ですが、上限に達した後は新規発行されず手数料のみになります。
P2P (Peer to Peer)
P2Pというと、日本では「Winny」と呼ばれるP2Pファイル共有ソフトが有名です。
インターネットにおける一般的なシステムは「クライアントサーバ」といってデータを保持する中央サーバとそれに対して要求を行うクライアントから構成されています。
例えば、現在表示しているこのページはあなたのパソコンのブラウザがクライアントとして記事などを保持しているサーバに対して「この記事を表示しろ」と要求し、サーバがそれに応答する形で記事の閲覧が行われています。 それに対して各コンピューター同士が対等な立場で直接通信を行います。
クライアントサーバではアクセス集中などでサーバがダウンすると機能しなくなりますが、P2Pではそのようなことがありません。 一方、クライアントサーバでは中央サーバによる集中管理が可能ですがP2Pでは一度動き始めると誰か一人の意向では止めることが難しくなってしまいます。
P2Pを採用することで国や事業者に管理されることなく動き続けるシステムが実現しています。
技術から見た優れている点のまとめ
ビットコインはブロックをチェーン状につなげたデータベースをP2Pネットワーク上で共有することで、「使えなくなることがない」「改ざんできない」という性質を実現し、マイニングの仕組みで特定の管理者がいないままに自律して存続するシステムになっていると言えるでしょう。
今までの普通のお金は国の信用が元となって発行されていましたが、国を信頼する必要なしにインターネット上で国境を超えて自由にお金として使いうるビットコインが誕生したのです。 最初は一部の物好きのみにマイニングされ、ピザ2枚に1万BTCが支払われたりしていましたが、次第に多くの人にその有用性が認められるようになりました。
技術面から見た問題点:スケーラビリティ問題
よく取り上げられるビットコインの課題として「スケーラビリティ問題」があります。
これは、ビットコインの1ブロックに取り込めるデータのサイズと、ブロックの生成時間の間隔が決まっていることから処理できる取引の数が制限されている問題のことです。
十分な数が処理できていれば問題にならないのですが、ビットコインが1秒間に処理できる取引の数は約7件、似たような機能を提供するVisaカードは約2000件と言われていて、利用者が増えて世界中の人に使われるようなものになるには性能不足と言えるでしょう。
実際に処理しきれなくなることはよく起こり、そうなるとブロックに取り込まれるのを待つため取引が完了するまでに約10分以上かかることになります。
これまでに取り組まれたスケーラビリティ問題の解決策を紹介します。
ブロックのサイズに関連する解決法
ブロックのサイズが小さくて困っているなら大きくしてしまうという方法があります。
しかし、1ブロックのサイズをあまり大きくしすぎてしまうと、新しいブロックがマイニングされた際にその情報が他の人へ伝わるのに時間がかかり、一度マイニングに成功したマイナーが連続でマイニングに成功しやすくなる、という問題があります。
2017年8月にビットコインからブロックのサイズを8倍の8MBにしたビットコインキャッシュが誕生しました。
ビットコインキャッシュ誕生の裏には様々な思惑がありますが、ブロックのサイズを大きくしたほうがいいと考える派閥とサイズを変えない方がいいと考える派閥に分かれたため、ビットコインとは別に新たな通貨が誕生していまいました。
サイズを変えない方がいいと考えた派閥は、ブロックのサイズを大きくする代わりに各取引データを小さくして、ブロックのサイズを変えないまま1ブロックに取り込むことができる取引の量を増やしました。この解決策はSegwitと呼ばれています。
ブロックの生成時間を短くすることについて
約10分おきに生成されるブロックを、より高い頻度で生成すれば処理速度は向上します。
しかし、ブロックの生成間隔を短縮すると同時にマイニングが完了することによるチェーンの分岐が頻繁に起こるようになり、ビットコインネットワークのセキュリティを低下させると言われています。
電力消費
ビットコインへのよくある批判として、「マイニングに無駄な電力が消費されている」といものがあります。
ビットコインが採用しているPoWでは、一番最初にブロックを生成した勝者一人にのみ報酬が与えられ、敗者が消費したエネルギーに見返りはありません。
上記記事のような反論もありますが、使われているのがクリーンエネルギーというだけで大量に消費されている事実は変わりません。 これを根本的に解決するにはPoWの仕組み自体を大きく変える必要があり、ビットコインではない別の通貨を作る事で解決しようとすることが多いようです。
技術面から見た将来性
ここまでビットコインの技術的な特徴と課題を見てきましたが、これらを踏まえるとビットコインは将来どうなるのでしょうか。
考えられるシナリオを2つほど紹介したいと思います。
普段使いされる
スケーラビリティ問題のところで挙げた解決策はいずれもこれまでに取り組まれた方策であり、現在は主にオフチェーン・スケーリングとサイドチェーン・スケーリングの検討が進められています。
オフチェーンスケーリングとは、ブロックチェーンの外で取引を行って一定期間の取引の結果をまとめてブロックチェーンに書き込むことでブロックチェーンに書き込む取引の量を減らす、といったようなブロックチェーン外の処理を利用してスケーラビリティ問題を解決しようとする方策のことです。
「Lightning network」に代表され、高速な処理が期待されています。
サイドチェーン・スケーリングとは、ビットコインのブロックチェーンに紐付いた新たなルールのブロックチェーンを作る方法です。企業間決済ネットワークの「Liquid Network」に代表されます。
これらの解決策によりスケーラビリティ問題が解消されればコンビニの支払いでビットコインを使うのが当たり前になるような世界が到来するかもしれません。
デジタル・ゴールドとしての地位を確立する
ビットコインの台頭の後、ビットコインの抱える課題の解決を図る数多のアルトコインが誕生しました。
Vitalik Buterin氏がビットコインに感銘を受けてイーサリアムを作り出したように、ビットコインは「プログラム可能な通貨」の可能性を世界に示しました。 今後は投機対象、仮想通貨の基軸通貨としてのみ存在し、普段使いされるようにはならないのかもしれません。
有識者コメント
ー他の仮想通貨(暗号資産)と比較したときに、ビットコインが特に優れている点はどこだと思いますか?そのように感じる理由もお聞かせください。
ビットコイン最大の特徴は、銀行の様な中央管理者が不要で、誰もが使用でき、セキュリティが極めて高い点にあります。特に、現状ではビットコインのみが「非中央集権的」に運用されていく資質があり、他の暗号資産とは一線を画しています。
この点、一部企業等が管理する中央集権的な暗号資産は、性質が大きく異なるため、単純な比較対象とするべきではありません。
一方、PoW(プルーフオブワーク)に類する理念を取り入れた、ビットコインと同様のアルゴリズムに基づく暗号資産は、非中央集権的を目指してはいますが、ハッシュレート(採掘速度)が極めて低く、セキュリティ面で大きな課題があります。
つまり、容易に「51%攻撃」の標的となり得るため、資産保護の観点からも信頼性を著しく失う可能性が高く、非中央集権的な暗号資産の達成自体が困難だともいえます。
世界のフラット化が急激に進展する時代、この「非中央集権的」というビットコインの特徴は、その他暗号資産の増加に連れ、今後一層際立つものとなると思います。
ーBitcoin.orgの日本語コーディネーター hakka(@hakkame7)
画像はShutterstockのライセンス許諾により使用