のろける

のろける話をかく

bitcoin 採掘についてのメモ

大石哲之さんのblog*1が人気エントリに上がっていたので、僕も最近調べていた bitcoin の採掘についてメモを晒す。

大筋の理解は大石さんの blog を読んでいただくとして、すこし補足的なことを書いて、ついでだからブコメについても勝手に回答する。
メモなので信用しすぎないように。

採掘報酬は分け合うこともできる

基本的には採掘の報酬がもらえるのは、最初にキーとなる値(大石さんの記事で言うkey, 一般的にはNonceと呼ぶ)をみつけた人だけである。
しかし、採掘プレーヤーが増えまくって並みの計算機では採掘がほとんど不可能なので、みんなで協力して採掘して報酬も分けあいましょうという仕組みがある。Pooled mining という。 Slush's pool(http://mining.bitcoin.cz/) などが有名らしい。多くの採掘ツールは、こういった Pooled mining のアカウントを登録することで、効率的な採掘に参加できるようになっている。

採掘ツールいろいろ

採掘のための実装は
https://github.com/jgarzik/cpuminer
https://github.com/ckolivas/cgminer

などが公開されていて、だれでも採掘に参加できる。
が、しかし、普通の計算機では大した報酬を得ることが出来ない。採掘プレーヤーが増えると Nonce を見つけるのが難しくなるように、Bitcoin が設計されていることが1点。また、省電力化と大規模化がすさまじい勢いで行われていて、そのような改善が行われた bitcoin 採掘マシンを購入しないと他のプレーヤーに比して採掘への貢献少なくなってしまうのが2点目の理由だ。

bitcoin 採掘マシンは、GIGAZINE のこの記事(http://gigazine.net/news/20131127-usb-bitcoin-miner/)などが詳しい。
普通のPC => GPU利用 => FPGA => ASIC と進化してきていて、専用の採掘マシンを作る会社が何社かある。

かなりお高い+詐欺も横行してるらしいので、よく考えてチャレンジを。

"Aさんが確かにAさんであるというのはどうやって判断しているのだろうか。ハードディスクの中身をすっかりコピーしたPCで成り済まされたり、PCが壊れてパーになる可能性とか無いんだろうか。" http://b.hatena.ne.jp/ROYGB/20131213#bookmark-173002714

bitcoin を管理するソフトウェアを wallet という。(まんま財布だ。) 各種OSに実装されている*2し、Android などでも利用可能だ。wallet のはいったPCが、コピーされたり、壊れて損失するということはあり得る。

実際に、ゴミ箱に捨ててしまった案件なども報道されている。
7.7億円分のビットコイン捨てちゃった!英男性が埋め立て地を捜索 写真1枚 国際ニュース:AFPBB News

オンラインの wallet を使う方法もあり、https://blockchain.info/ja/wallet/ などが利用できる。
blockchain はブラウザサイドで暗号化を行っていて、サーバー側での wallet の利用(サービス事業者による悪用や、クラックによるwalletの横取り)は出来ないとしている。

どのような wallet にするにしてもバックアップが重要であるし、盗難やクラッキングには自分で注意しなければならない。

"この key の上限がビットコインの上限ということなのかな?" http://b.hatena.ne.jp/Jxck/20131213#bookmark-173002714

採掘されるBitcoinに上限はある(仕様によって定められている)けれど、key に上限はない。key (この記事では Nonce と読んでいる)は、取引がいくつか行われるたびに、採掘者によって作られる。

大石さんの記事に従えば、H0, d が与えられた時に、

SHA(H0, key ) < d

を満たす key を見つけるというのが 採掘のタスクである。key は非常に見つけるのが困難だけれど、問題の数つまりは取引の数だけあり得るし、1つの問題についてもいくつかのkeyがあり得る。

"成る程。でもこの方式だと、いわゆる採掘され尽くした後は誰も承認者がいなくなるので、一気に取引不能&崩壊に向かうのでは?" http://b.hatena.ne.jp/dkfj/20131213#bookmark-173002714

新規発行完了後は、取引にかかる手数料が採掘者に回るので、採掘者が計算を続けるインセンティブになる。
また、採掘者が少なくなると、とくべき問題が簡単になる。つまり消費電力などのコストが下がるので、どこかで採掘者数と分担コストがバランスするようになっている。

"へぇーこれってアルゴリズムやソースコードは公開されてるのかな?アルゴリズムを工夫すれば効率良くなる気がするけど。例えばレインボーテーブル使うとか。。。BitCoin発掘のアルゴリズム戦争が起きてもいい気がする" http://b.hatena.ne.jp/mak_in/20131213#bookmark-173002714

上に書いたようにソースコードは公開されているので、ご覧になるとよいと思う。
平文を見つけるタスクではないので、レインボーテーブルをそのまま応用するのは難しそう。
簡単なアルゴリズムのほうがASICなどに実装しやすいし、またもとの問題(hash値がd以下になるnonceを見つけるといいうタスク)が単純である分、さらに効率のよいアルゴリズムをつくるのは難しそうに思える。

エコとか軍拡云々とか。

計算内容がどんなに単純で、計算リソースの浪費だという人がいても、中央の管理者が居ない貨幣が存在できることに価値はあると少なくとも僕は思う。そのコストとして、1日 15万ドル(http://techcrunch.com/2013/04/13/the-cost-of-a-bitcoin/) の電気代は十分安い。
そして、少額送金を小さなコストで可能にする点も重要だ。


攻撃者から情報を守るために、必要計算量を大きくするというのは軍拡でもなんでもなくて暗号の定石だろう。
ふつうはそんなに計算機リソースで勝負できないので、アルゴリズムで工夫するわけだけれど、計算リソース提供者に強いインセンティブを与えることでシステム全体が回るしくみを作ったのは大変興味深い。そして、ブコメに書いてる人も居たけれど、仮に攻撃者のほうも"軍拡"を続けて、善なる運営者たちを上回るリソースをもったとしても、そのリソースで攻撃を仕掛けるより、協力するほうが利益になる。という設計もなされていることは、強調されても良いと思う。もうちょっと良い例えもあったのではないかと思う。

*1:http://blogos.com/article/75716/

*2:http://bitcoin.org/en/choose-your-wallet