「Bitcoin(ビットコイン)」はネット上で流通する仮想通貨の代表的なものである。ビットコインの主要取引所であったMt.Goxの破たんで大きな注目を集めたのであるが、それがどのような仕組みとテクノロジで実現されているのかはあまり理解されていない。

インターネット上で物やサービスを購入し、その対価を支払うのは、クレジットカードを使った取引と似ているが、ビットコインでそれが実現されている仕組みはまったく異なる。では、それがどのように実現されているかを見て行くのであるが、その前に、ビットコインの概要を説明しておこう。

基本的な仕組はSatoshi Nakamoto氏が考案

ビットコインのもとになるのは、Satoshi Nakamoto氏が2008年11月に発表した「Bitcoin: A Peer-to-Peer Electronic Cash System」という論文である。なお、日本人風の名前であるが、Satoshi Nakamotoが本名であるのか、どのような人物であるのかは明らかになっていない。

日本の通貨である円は、偽札の製造は法律で禁じられており、警察が違反を取り締まることで維持されているが、ビットコインの場合は、そのような法律的な保護はない。従って、偽ビットコインを作っても、法律上は処罰されない(それを使って通貨や物を手に入れれば犯罪になる可能性はある)。このため、ビットコインでは暗号テクノロジを使って、偽物作りが非常に難しく、事実上、できないという仕組みを作っている。

また、クレジットカード決済の場合は、取引のトランザクション(支払証文)はクレジットカード会社に送られ、クレジット会社は、それに基づいて支払先にお金を支払い、それをクレジットカードの使用者に請求して回収する。また、クレジットカード会社は支払先から金額に比例した手数料を徴収する。

これに対して、ビットコインではクレジットカード会社に相当する中央の組織がない。ビットコインネットワークは、ネットワークの参加者全員が支払証文の伝送から、偽ビットコインの排除などのすべての作業を分担して行っている。詳しくは、後で述べるが、参加者の中に、単なる利用者でなくビットコインの採掘者(Miner)という人たちがいる。この人たちが偽ビットコインを排除し、正当な取引を維持するのに中心的な役割を果たしている。しかし、誰でも採掘者になれ、採掘者はクレジットカード会社のようなシステムの中央に位置する特別な存在ではない。

ビットコインの概況

ビットコインの取引は2010年2月頃に始まったが、最初は1ビットコイン(BTCと略す)の価値は1円以下であった。それが1年後くらいには、1BTCが1.00ドル程度まで市場価値が向上した。初期のユーザはオンラインのギャンブル、麻薬や武器の取引など通貨の使用が憚られる用途に使われたため、禁止すべきという意見もあったが、現在では、世界的に、ある程度の管理は必要であるが、禁止はすべきでないという方向に動いているようである。

また、中国などの富裕層が為替管理の厳しい自国通貨ではなくビットコインを保持するという動きがあり、それに伴ってビットコインの投機が起こり、2013年11月には、一時、1000ドルを突破した。しかし、現在は500ドル程度で推移している。

図1 ビットコインの価格推移。右側の軸が$ベースの価格。実線が価格推移。バーは取引量(左側の軸)。 http://bitcoincharts.com/charts/bitstampUSD#tgSzm1g10zm2g25zvのデータ

紙幣は日銀が発行しているというように、発行主体があるのであるが、ビットコインには発行主体がない。しいて言うと、参加者すべてのコンピュータで動いている「Bitcoin Core」というソフトウェアがビットコインを発行している。ビットコインの世界の秩序を維持している採掘者の努力に対してビットコインを与えることにより、ビットコインが新たに発行され、流通量が増えるというシステムになっている。

現在のBTCの発行残高は約13.2Mであり、円換算では約6300億円である。日本の紙幣の発行額はおおよそ80兆円であるので、1/100以下の規模である。なお、採掘者の努力に対して与えられるビットコインは、流通量が増えるに従って減少して行き、総発行量が21M BTCになると、採掘報酬はゼロになり、新たなビットコインの発行は止まるというシステムになっている。

ビットコインで使われる暗号テクノロジの基礎知識

ビットコインでは、1方向ハッシュ関数と公開鍵方式の暗号による署名という暗号技術が使われている。

ビットコインで使われるSHA-256という1方向ハッシュ関数は、図2に示すように、長い入力ストリングを64バイト(256ビット)の塊に切り分け、それぞれに圧縮関数を適用してハッシュし、左から入力されたハッシュ値に加えて行く。結果として入力ストリングの長さに無関係に64バイトのハッシュ値が得られる。

図2 SHA-256は長い入力ストリングから64バイトのHash値を作る

長い入力ストリングを64バイトに縮めるので、理論的には、ハッシュ値が同じになる入力ストリングは数多く存在するのであるが、ハッシュ値が同じになる別の入力ストリングを見つけるのは非常に困難で、事実上不可能である。このため、入力ストリングにハッシュ値を付けて送り、受信側で、再計算したハッシュ値と送られてきたハッシュ値が一致すれば、入力ストリングは改変されていないとみなすことができる。一方、2つのハッシュ値が一致しない場合は、入力ストリングが改変されており、送信者が送ったものとは一致していないことは確実である。

ビットコインが使っているもう1つの暗号テクノロジは、公開鍵暗号である。公開鍵暗号には、2つの使い方がある。1つは公開鍵を使ってメッセージを暗号化すると、その公開鍵作成の元となる秘密鍵を使わないとメッセージを取り出すことができない。この性質を使って、メッセージの受取人の公開鍵で暗号化したメッセージを送ると、受取人以外は秘密鍵を持っていないので、メッセージを読むことができないので通信内容の秘密が保たれる。

これが普通の暗号の使い方であるが、公開鍵暗号は、逆に、秘密鍵で暗号化したメッセージは公開鍵を使って誰でも読むことができるが、このような暗号化メッセージは秘密鍵を持っている人しか作れないという性質がある。

図3 公開鍵暗号を使う署名のやり方

図3のように、秘密鍵で暗号化し、公開鍵で復号化し、元のメッセージと復号化して作ったメッセージが一致すれば、メッセージが改変されていないことが分かるのに加えて、送られてきた暗号化メッセージを作ったのは、公開鍵のもとになった秘密鍵を持っている人であることが同時に確認できる。

公開鍵暗号にもいくつか種類があるが、ビットコインではsecp256k1という楕円関数に基づく暗号を使っている。