なぜ銀行が無くても信用できるのか、Bitcoinの基本原理の分かり

2014年2月17日

最近、Bitcoinというサービスが話題になりました。互いに信用しない相手同士でも確実にお金のやりとりができ、かつ不正ができない仕組みです。しかも、銀行や運営会社などの管理機関が一切要らないため、決済手数料はほぼかかりません。まさに、匿名性と無料文化のインターネット世界に最適なイノベーションです。

Bitcoinのすばらしい仕組みから、他のサービスへの応用を考えるのはとても楽しいです。

その楽しさを皆様にも味わってもらえるよう、Bitcoinの基本原理への、僕の理解を共有したいと思います。


Bitcoinには、大きく分けて2つのイノベーションがあります。

① 個人同士でも、不正のできない(不正がとても難しい)通貨やり取りの仕組み。

② サービスへ参加している人達のモチベーション向上の仕組み: マイニング(「堀り」)
・通貨のインフレの制限
・サービスの運用を支えるPCパワーを貢献する人達への報酬

①は純粋な技術のイノベーションですが、②はどちらかというと、サービスデザインの話です。

今回は、①(不正ができない通貨のやり取り仕組み)を中心に説明します。


二重使用問題

先ず、政府や銀行のような信用のできる管理機関が無く、個人同士で直接仮想通貨をやりとりする際、どのような不正行為があるかを考えてみましょう。

1)通貨の不正コピー問題

仮想通貨が簡単にコピーされてしまうと、通貨が溢れて、価値が無くなります。
コピーされても、「本物」と「偽物」を判断できるような方法が必要です。

実際の世界では、お札は偽物ができない(とても難しい)ように作られるし、
銀行は口座の中の残高が「本物」であることを保証してくれます。

但し、仮想通貨は単なるコンピューターの中のデジタル情報です。デジタル情報は100%の精度でコピーできます。誰でもコピーすることができます。
どうやって「本物の通貨」と「偽物通貨」を見極められるかは問題です。

—–
2)取引の整合性問題

例えば、
「AさんがBさんに1円を送る」
という取引が発生したら、銀行はAさんの口座から1円を引き、Bさんの口座に1円を入れます。

入出の金額の整合性は、ブラックボックスされた銀行のソフトウェアが保証してくれます。

但し、取引のソフトウェアがオープンソースであるBitcoinのようなシステムでは、ユーザが勝手に取引のソフトウェアを改造し、1円を送金したのにも関わらず、その1円を自分の口座から消さないという不正行為ができます。

上記の2つの問題は、本質的に同じです。
AさんからBさんに既に払った通貨を、またAさんが使えてしまう問題です。

これは、通貨の二重使用(Double-spending)問題と呼びます。


上記の二重使用問題をBitcoinは次のような仕組みで解決します。

あ)それぞれのコインに、そのコインの所有者の履歴を全て残します。
(仮想通貨の単位を「コイン」と呼びます。)

所有者履歴がこのコインの識別(お札のシリーズ番号みたいのもの)となります。

—–
い)コインが所有者の手元から離れた(送金された)際に、所有者がそのコインに自分のサインで電子署名をします。
「このコインは私の所有権から離れ、○○さんに移動したことを証明します。」のような意味の署名です。

この電子署名は偽造ができず、誰から見ても、本人しかできない署名であることはすぐ分かります。

Bitcoinに使われている電子署名の仕組みは、一般の電子署名の仕組みと同じです。

—–
う)Aさんが自分の所有しているコインをBさんに送金する際、「Bさんにxxx識別のコインを送ります」という取引の情報をBitcoinネットワーク全体に通知し、この取引の承認を申請します。

Bitcoinネットワーク上の各コンピュータ(以降、「PC」と呼ふ)が、xxxのコインに付いている取引履歴(所有者の電子署名の一連)を確認し、
・取引内容と所有者の情報が合っていれば、「この取引を認める」アクションを行います。
・問題がある(Aさんが所有していないコインをAさんが送ろうとする)ようでしたら、「認めない」アクションを行います。

つまり、取引が不正かどうか、成立できるかどうかは、「投票」によって決められます。
(実際のアルゴリズムは投票とは違うことをやっていますが、本質的には投票と同じです。)

この「投票」は、10分毎にBitcoinネットワーク全体で1回行われます。
(10分の間隔には、特別な技術の理由が無く、単なるサービス設計上のバランスの問題です。)


なぜ投票で二重使用の問題は防げるのでしょうか。

先ず、ある時点まで、Bitcoinネットワーク上で成立された取引履歴は全て正しい(信用できる)としましょう。

突然ある時点から、Aさんが以下のような不正取引をするとします。

1)
Aさんが前の取引で既にCさんに渡したxxx識別のコインを、今回の取引でBさんに渡そうとしてします。

前の成立された取引までの情報が信用できるから、xxxのコインの所有者はAさんではなく、Bになったことをネットワーク上の全てのPCが知っています。よって、Aさんが自分の所有でないxxxのコインを使おうとする取引は、投票によって否決され、成立できません。

このように、「成立された取引情報は全て信用できる」という状態を保つことができます。

2)
Aさんが自分の所有しているxxxのコインを、BさんとCさんに同時に送るという不正行為をしようとします。

正しくは、一つの取引しかできません。

その際、ネットワーク上の各PCに、[A–>B]の取引情報と[A–>C]の取引情報が届いています。
どれを認めて、どれを否定するべきでしょうか。

どちらの取引を認めるかは、各PCの判断によりますが、投票の結果によって、一つの取引しか残りません。そして、成立された(例えば、[A–>B]が成立された)取引は皆に通知され、もう片っ方([A–>C])の取引が否決されます。

よって、Aさんが2つの取引を同時にしようとしても、どちらかの取引しか認められない結果となります。

ネットワーク全体が「成立された取引情報は全て信用できる」という状態を保つことができます。

————————————–

ここで、
「仲間を集め、多半数の票を集めれば、不正の取引でも認めさせることができる!」
と思う方がいらっしゃるかもしれません。

原則的にはできますが、過半数を集め、投票結果を変えるのはとても難しいように、Bitcoinが設計されています。
以下に説明します。

1)
それぞれの取引の正当性を確認し、投票アクションを行うのに、大変な計算パワー(CPUリソース)が必要です。
投票するのに、計算パワーが絶対必要となる仕掛けがアルゴリズムの中に組み込まれます。

計算パワーが多い方は、投票に勝ちます。

不正をやろうとする(不正な取引を認めさせようとする)連中は、裏で組んで、この投票で勝つ必要があります。
そのためには、裏で色々な人と組んで、ネットワークの総計算パワーの大半を支配できないといけません。

不正したがる連中に絶対に総計算パワーの大半を占めさせないよう、投票に参加する人達(CPUリソース)を多く集める必要があります。

そのための一つのインセンティブ仕組みを、Bitcoinが提供しています。

2)
投票が成り立ったら、参加する人の誰か(正確に言うと、どれかの匿名口座に)に25コインを作り出す権利が与えられます。その人がこの25コインそれぞれの最初の所有者となります。
(25という数字にも、特別の技術の訳が無く、単なる通貨の流通量バランスの問題です。)

誰がコインをもらえるかは運ですが、自分が貢献する計算パワーが大きければ大きいほど、コインをもらう確率が高くなる仕組みになっています。


票集計の仕組み

既に気づいた方がいるかもしれませんが、
「皆で投票するのは良いのですが、誰が票を集計するの?
集票の人が不正をしたら、台無しじゃないですか。」

実は、Bitcoinでは、票の集計も皆でやります。

この投票を具体的に説明しますと、

i) 各PCが、ネットワーク上に通知された取引申請を集め、自分が正しいと認める取引を一つの箱にまとめます。
(復習ですが、各コインに所有者の署名の履歴が載っているため、取引の正当・不正は簡単に判断できます。)

ii) その箱の上に、シールを作成し、張ります。
シールの作成方法は特殊で、箱の中身と合ったシールを作るにはとても大変で、非常に計算時間(CPUリソース)が必要です。
そして、このシールが中身と合っているかどうかは、誰でもすぐに確かめられます。

簡単に言うと、箱の中身が方程式に変換され、シールの作成はその方程式の解を求めることです。
シール(解)が合っているかどうかの確認は、方程式に代入すればすぐ分かります。

iii) 自分のシールを張った後の箱を、またネットワーク全体に送ります。

iv) 他のPCがその箱を拾って、中身を確認します。
中の取引内容とシール内容が全部正しいと認めれば、またその箱に合ったシールを作ります。
これはまた大変な作業です。
今回の箱の中身は前の人のシールも入って内容が変わったので、前の人のシールを再利用ができず、自分で新たにシールを作らないといけません。
作成されたシールを張って、またネットワークに投げます。

v) このように、皆は自分が正しいと思う取引(箱)にどんどん自分のシールを張ります。
最終的に一番シールの数が多い箱は採決され、その中の取引が成立されます。

vi) 次の投票では、皆が前の投票で採決された(シールが一番多い)箱に、また取引を入れ、またその上にシールを張ります。Bitcoinのネットワーク全体で信用(採決)されている箱は、史上のほぼ全ての取引のシールの軌跡が残っています。

箱の中の取引内容を改ざんしようと思えば、その取引のタイミング以降に張られたシールを全て作り直さないといけません。
その作り直し作業をやっている間、別のところで箱がコピーされ、別の人達がどんどんシールを張ってきます。

不正の作り直しで忙しい間、自分が持っている箱のコピーにはシールの数が少なくなり、Bitcoinネットワークに無視されます。

このように、不正の取引を認めさせられるためには、ネットワークの計算パワーの大半を支配し、シールの数で残りのネットワークを勝る必要があります。
如何に不正が難しいかは、想像できるかと思います。

vii) 採決された箱にシールを張ってきた人達には、コインをもらうチャンスがあります。

よって、自分が正しいと信じる箱にシールを張った方が、当たるチャンスが一番高いのです。

不正のある箱にシールを張っても、その箱は後で否決される可能性があり、コインをもらうチャンスが極めて低くなります。よって、不正のある箱にシールを張るモチベーションが無くなります。

これは、皆を正直に投票させるインセンティブの仕組みです。


Bitcoin仕組みの面白いところ

1)「人間が互いに信用し合わない。でもお金で動く」という心理を見事に利用できるところ。

取引を成立させるには信用が必要な状況から、
不正をするには信用(しかも大人数の)が必要な状況に転換してきた手法に、感動しました。

2)ネット投票の仕組み

不正のできない(とても難しい)投票の仕組みは、またインターネットの世界に更なるサービスの可能性を広げてくれる気がします。
個人的には、この仕組みの応用はまだまだ色々あると思います。

3)ゲーム要素が一杯。

・チャレンジ的なクエスト(シール作成)がある。

・参加するのに、賭け(計算パワーの設備投資)が必要。

・クエストをクリアするのに、少し運が必要。
いつクリアできるか分からない。

・だが、努力次第で確率論で勝てる。

・クエストをクリアできたら、世の中のためにもなる
(不正取引を防げて、正当な取引を運ばせることになる)。

・そして、かなり良い報酬を当たるチャンスがある。

正に、ガチャのような物です。ハマりそう気がします。

————————————–
最後に、宣伝となりますが、Bitcoinの技術を応用したシステムやサービスの開発したいを考えている方がいらっしゃれば、ぜひ弊社へ相談してください。何か役に立つかもしれません。

————————————–
「参考文献」
この記事は、あくまでも一般の方々が理解しやすいように書かれました。技術の詳細内容は一部省略され、または、分かりやすい事象に例えをされたところがあります。正確な技術内容については、以下の元の論文を直接読むことをおすすめします。
Satoshi Nakamoto, “Bitcoin: A Peer-to-Peer Electronic Cash System”, https://bitcoin.org/bitcoin.pdf .