31Dec
(Photo by Fabian Figueredo)
ここしばらく、ビットコインにずっぽりハマっています。すっかりビットコイン研究家になりましたw
各取引所にアカウントをつくったり、試しに採掘してみたり。ここ一ヶ月くらいは、集中してビットコインについて書いていきたいと思います。
ビットコインの仕組みについて、あれこれ調べてみました。技術的なことも合わせて、少なからず色んな知識を得たので、それをシェアしていこうと思います。
まず、全くわからないのが、「ビットコインの採掘(マイニング)」というものでしょう。これはいったい何をしているのか?
私も全く理解できてませんでした。何かコインのアルゴリズムとして機能する特殊な関数の値を探しているのかとおもっていました。しかし、違いました。採掘と言うのは完全なる比喩で、実際は取引の認証作業をしています。そして、膨大なコンピューターパワーをつかって不毛なチキンゲームをしています。
まず、ビットコインの仕組みを少し説明します。
ビットコインの取引、たとえば「AさんからBさんに1コイン支払った」というようなものは、取引として記録されます。これはリアルタイムで、たとえばこんなところから見ることができます。なんとビットコインを介した取引は丸裸。すべての取引がこうしてネット上でリアルタイムで参照できるんです。
さて、このリンクでは、「未承認の取引」ってなってます。そう、ビットコインの取引は、承認されてはじめて大丈夫だと確認される。それまでは、二重支払があったり、もしくはニセや改ざんした取引だったりするかもしれない。
この承認作業というのを、いろんなひとが競争してやっています。これが「採掘」の実際のすがたです。この作業にかかるコンピューターパワーの見返りとして、承認作業をしたひとにたいして、一定のビットコインが与えられる(新規に生成され、承認作業をしたひとのものになる)というわけです。
では、この承認作業というのは何をしているのか?
これが予想を超える変なものでした。
ビットコインの取引は、少ないときは100、多い時は1000といった単位でまとめられて、ブロックという単位をなして記録されます。
このブロックごとにまとめられた取引記録に番号がつけられ、チェーン上に繋がって、取引記録全体として保管されます。これは過去のすべての取引を記録した元帳のようなものです。
承認作業とは、承認済みの元帳に、(未承認の)あたらしい取引記録のブロックをつなげて追加していく作業です。
ブロックを元帳の末尾に正しくつなぐためには、つなぐための「キー」となる値をみつけなくてはいけません。そのキーを見つけるには高速なコンピューターを使ってとても時間がかかるのですが、いったんそのキーが見つかれば、iPhoneでも簡単にそれが正しいということを検証できます。なので、ビットコインの参加者は誰もが、それが正当な取引であることを確認できます。
採掘とは、具体的にはこの「キー」の値を見つけることです。問題は、この繋げるためのキーを見つけるのに時間がかかる事です。
技術的にはこういうことです。
ハッシュ関数 (直前ブロックのハッシュ値A, 新ブロックに含まれる取引記録の指紋B, nonce値) → 新規ブロックのハッシュ値
まず、承認済み元帳の末尾のブロックにあるハッシュ値Aを得ます。そして、付け加えたい新ブロックに含まれる取引をまとめてその電子的な指紋の値を取り出しBにします。さらに、nonceと呼ばれる32ビットの任意の値、この3つをハッシュ関数というものに入れて、256桁の値を得ます。これが新規ブロックのハッシュ値と呼ばれるものです。ハッシュ関数は、ビットコインではSHA256という暗号方式を二重にして使っています。
さて、このとき生成されたハッシュ値を見るのですが、この値がある値以下になるまで、nonceを変えて試行錯誤するのです。ある値以下というのが分かりにくければ、こうも言い換えられます。この値は256桁の値ですが、その先頭にゼロがたくさんならぶような値をが得られるとOKということです。具体的に現在の状況では、先頭にゼロが16個並ぶようなハッシュ値が得られるnonceを見つけたとき、それでブロックを繋いで良いという決まりになってます。
ハッシュ値をつくって、先頭にゼロが16個ならぶというのは、とんでもなく低い確率です。しかしそれが見つかるまで、ひたすらnonceの値をランダムに取って、ハッシュ関数にいれて、ゼロが16個並ぶかどうかを試しまくります。ひたすらです。
この試行錯誤の速さが、採掘の速さとよばれ、「○○メガハッシュ/s」などと話題になるわけです。
これが採掘者が実際にやっていることです。晴れて適切なnonceの値が見つかり、生成したハッシュ値にゼロがたくさん並んだら、それが正解です。それを見つけたひと(毎ブロック先着1名のみ)は、新しい取引履歴のブロックを、以前のブロックに正当につなげることができます。そして新しくビットコインが生成され、それをもらえます。そして、そのハッシュ値が、過去のブロックの情報を含み、ブロック同士をつなげるkeyの役割をします。
このkeyをみつけるのは、ブロック毎に1名です。なので、みんな競争して見つけあいをしています。これが発掘競争といわれるものです。
なぜ、こんなことをしているかというと、このビットコインのシステムが、分散的に、取引の改ざんを防いているシステムの根幹なのです。ビットコインのアイデアは、この部分が肝だといえましょう。
このような作業には時間がかかります。当てずっぽうにハッシュの計算をひたすら試して、「当たり」をひくまで、全世界でスパコン何台分もの計算をやって試しているのですから。
もし、悪意のあるひとが取引記録を改ざんしようとしたら、過去の改竄にあわせて辻褄があうように、このkeyも改竄しないといけません。しかし、このkeyを探すのはとても時間がかかるため、改竄者は容易にはこのkeyを改竄できないのです。しかもkeyは連鎖しているので、改竄した部分以降のkeyを全部改竄しないといけない。
改竄者がkeyを改竄するために再計算する時間と、正規の人(つまり全世界の採掘者)が正しいkeyを見つけるのと、どっちが早いかという競争になります。全世界のひとが参加している発掘者のコンピューターパワーには、改竄者はとうてい追いつかないという形になるのです。これがビットコインの安全を担保する仕組みです。
また、改竄者が、仮にそれほどまでのコンピューターパワーを持っているとしたら、むしろ改竄などをするよりも、正規の発掘に協力してビットコインを手に入れたほうがむしろ儲かるということもあります。このインセンティブの仕組みにより、改竄の動機が失われるのです。
(参考資料)
satoshi white paper
http://www.bitcoin.co.jp/docs/SatoshiWhitepaper.pdf
kahan academy bit coin what is it?
bit coin FAQ
http://www.bitcoin.co.jp/faq/faq.html