Bitcoinの何が革新的なのか?
なんとなくbitcoinがわかったような気がしたので書いてみる。
「P2Pで取引のデータベースを管理する」と聞いて、最初に不思議だったのは、「なぜみんなそれに自分のコンピュータを提供するのだ?」ということだった。
多数のコンピュータで分散処理をしてDBを管理すれば、やり方によっては効率的で確実な管理ができることは想像がつくが、誰がそのコンピュータを提供するのだ? 金がからむとなれば、それは儲けようとしてやる以外に考えられない。
しかし、P2Pというのは、単なる分散処理ではなくて、身元保証の無い分散処理だ。ネットワークを構成するノードの大半のコンピュータの所有者は、どこに住んでいるか誰なのかわからない。それをわかるようにしたら登録制度が必要になり、その登録制度を運用し管理する主体が必要になる。そういうのは普通、P2Pとは呼ばない。
だから、P2Pという限りは、ノードの中に、インチキのプログラムを仕込んで不正を行う奴が当然いる。そういう前提で考えないとうまくいかない。金がからむ処理でP2Pをやるということは、インチキ野郎をたくさん集めて、信頼性のあるDBを構築するということで、そんなことができるわけないと思った。
公開鍵暗号をうまく使うと、そういうことができるのだろうか?
公開鍵暗号とは、簡単に言えば
- 正しい答を出すのは途方もなく困難だが、検算するのは超簡単な計算がある
- ある特定の数字を知ってる人にとっては、簡単に答えが出せる
- だから、その計算の正しい答を見たら、それを誰が書いたかすぐわかる
という仕組みだ。これを使えば、「私がAさんに50$払います」というハンコつきのデータを作ることができる。そして、これを書いたのは私であることを、誰にでも簡単に確かめることができる。
bitcoinの中に記録されるのは、こういうデータだろうということは、簡単に推測できる。
これを私が送信して、悪人Bの運用するノードを経由して、bitcoinのネットワークに流したとする。
悪人Bがこれを「私がBさんに50$払います」に改竄することはできない。「特定の数字」を知っているのは私だけで、それ以外の人にとっては、これは途方もなく困難な計算だからだ。
しかし、改竄は不可能だとしても、悪人Bは、データを捨てることはできる。というか、自己の利益にしか関心がない悪人Bにとって、改竄できないからと言って、これをそのまま流す動機がない。そこがどうなっているのか?
これについては、「採掘者は、正しい取引データブロックを生成することで(その計算をすることで)、報酬としてbitcoinをgetできる」というような説明があった。
最初、私は、これを「悪人Bが私の取引記録に公開鍵暗号でハンコを押すことで報酬が得られる」と勘違いして理解した。確かに、取引DBの維持には、取引記録が本人が書いたものであるという保証だけでなく、「それが記録された」という保証も必要である。手数料と引き換えにその保証をさせることで、ネットワークを維持するというのは、一応、筋が通る。
しかし、悪人に自分の伝票を裏書きしてもらっても、ちっとも嬉しくない。というか不気味だ。
公開鍵暗号によって、そのハンコが悪人Bのものであることは確定できるが、その悪人Bが何者であるかはわからない。これに何らかの意味があるのか?
つまり、ノードの中には多数の悪人がいて、それぞれ自分のコンピュータパワーを提供して、取引データにハンコを押していく。そして手数料を得る。しかし、悪人がハンコを押した取引記録同士がどうやってつながるのか?そこがよくわからなかった。
そのアルゴリズムもわからないし、悪人同士が合意して一つの台帳を維持する動機もわからなかった。
わからないのは、公開鍵暗号の延長だけで、これを考えていたからだ。bitcoinは、公開鍵暗号の応用だけでなく、新しい手法が含まれていた。それは、「Proof of Workによるビサンチン合意問題への現実的な解」とでも言えばいいのだろうか。
- 正しい答を出すのは途方もなく困難だが、検算するのは超簡単な計算がある
- たまたま特別運のいい奴だけが、そこそこ簡単に答えが出せる
- だから、その計算の正しい答を見たら、それを使うか見なかったことにするしかない
という種類の計算を使うらしい。
「私がAさんに50$払います。悪人Bが手数料として1$受取ります」という取引データに、この計算を使ってハンコを押す。悪人Bだけでなく、ノードを構成する悪人どもが全員競争でこの計算を行なう。みんな、「私がAさんに50$払います。」という所は同じだが、次の「悪人Bが」という所は、それぞれ自分の名前になる。
手数料受取人の名前だけが違う似たような計算を全員が競争で行なうと、この計算の難易度がその名前によって違ってくる。10分ほど待つと、世界中の悪人の中で、一人だけが、この計算の答を出すことができる。その運のいい奴が悪人Cだとすると「私がAさんに50$払います。悪人Cが手数料として1$受取ります」というハンコつきの取引データがbitcoinネットワークの中を流れる。
そして、ここで他の悪人どもが、どうしたら利益になるかということが、bitcoinのアルゴリズムの一番巧妙な所なのだが、ここで、この悪人Cが保証したデータを捨てるより、これを承認した方が得になるのだ。
モラルは低いが、自己の損得を計算できる悪人であれば、ここでデータを捨てるより、検算をした上で次の取引記録を作った方が得になるのでそちらを選択する。
悪人Dが「私がAさんに50$払います。悪人Dが手数料として1$受取ります」というデータを作って流すことはできる。しかし、悪人Dは悪人Cほど運がよくないので、この計算に途方もない時間がかかる。そのためにコンピュータパワーを使うなら、むしろ、そのパワーを次の取引記録ブロック「XさんがYさんに○○$払います。悪人Dが手数料として1$受取ります」のハンコの生成に回した方がいい。
「運」は数学的に公平に分布しているので、次の取引記録を狙った方が、自分に回ってくる確率が高いのだ。
そして、次の取引記録を狙う為には、検算をしてから悪人Cが作ったデータを他のノードに回すしかない。これが次の記録の基点になるからだ。
- 正しい答を出すのは途方もなく困難だが、検算するのは超簡単な計算がある
- たまたま特別運のいい奴だけが、そこそこ簡単に答えが出せる
- だから、その計算の正しい答を見たら、それを使うか見なかったことにするしかない
- 見なかったことにするより正しい答を使う方が儲かる(次は自分の番かもしれないので)
- 各ノードが自己の利益のために、正しい答を「使う」ことで、一意のDBが維持されていく
この部分が、公開鍵暗号の応用から一歩はみ出したbitcoinの核心で、この仕組みによって、利己的なプレイヤーだけで構成されたP2Pネットワーク上で、多数のノードが取引データの正当性を確認しながら、新しい取引を記録していくことになる。
つまり、bitcoinは、基礎技術レベルの重要な革新と、それを適用したインパクトの強いアプリケーションが、同時に出現した、と見ることが一番重要だと思う。普通に考えると、いかに今目にしている応用が画期的であっても、この基礎技術の本当の使い道は、まだ我々が目にしていない可能性が強いということだ。RSAが生まれた時に、その本当の使い道を誰も知らなかったように、bitcoinの本当の使い道はまだ誰も知らないのだと思う。
当ブログの関連記事