Monthly Archives: 12月 2013

Permalink to single post

BitCoinの論文を読んだ

Original Update by BTC Keychain

(Cover Image: Original Update by BTC Keychain)

世界中でなんとなくもてはやされつつあるようなないような、BitCoin。

ということでBitCoinに関する、Satoshi Nakamoto の論文 ( http://bitcoin.org/bitcoin.pdf ) を読んだ。

【注意】社会的側面については一切触れません。純粋に仕組みだけ見てます。

  • なんか解くのが難しい問題がどうのこうの、ということだけ知っていたので、自分の勝手な妄想で、「困難な問題の解に対して価値を持たせたもの」だと思ってたけど、全然違った。
    • まぁ公開鍵暗号を使って署名などしている、という観点では、ある意味ただしいかもしれないけど・・・
  • P2Pの通貨システムを考えたときの問題点はそもそもそういうなにに価値を持たせるかとかどうやってやりとりするかいうことではなく (それはたぶん取るに足らない問題) 、「二重支払いの防止」にある
    • 取るに足らない部分: コインのやりとりを「受け渡し元の秘密鍵で、受け渡し先の公開鍵に署名したもの」という形で記録していけばOK
  • 二重支払いを防ぐには、「ある時点である事実 (transaction) が起った、という正しい記録」が必要
  • その「正しい記録」を作るには・・・
    • 方法1: だれかが中心となって管理する
    • 方法2: (本方式)
  • 本方式のイメージとしては、【「Transaction履歴に依存する困難な問題の解」を見つけていき、見つけたという事実がTransactionの存在の証明になる】
    • 厳密に言うとHashのHashだったりするけど、それは重要ではない
    • 「困難な問題の解」は10分ぐらいで見つかるように調整されるらしい
    • 「Transaction履歴」は世界で一つ。それを全体で共有する
  • 具体的には【「(前回問題のHash値)+ある時点までのTransactionの塊+(nonce)」のHash値のうち、特定条件を満たすHash値を出すnonceを見つける】という問題を解く
    • 特定条件=「先頭のNビットが0であるHash値」
    • 何らかの方法でNは調整される
  • 「正しい計算者」は一番長い履歴、かつそこにあるTransactionに矛盾が無いものを信じ、その履歴の最後に「正しいTransaction」を追加しようとする
  • 「悪意を持った攻撃者」が居たとして、変なTransaction履歴を出して、自分で計算して一回解を発見できたとしても、その変なTransaction履歴に続く他のTransactionに対して攻撃者は解を計算し続けなければならなくなる
    • 攻撃者は「世界全体の計算リソースに対して勝ち続けられるわけが無い!」から大丈夫
    • ※ このへんよく理解できてない気がする・・・
  • ちなみに「発掘者が居て計算しまくってコイン発掘してる」みたいな話があるけど、それは上記の計算に対して意図的なインセンティブが与えられているらしい。
  • なんかその後に安全性の議論みたいなことが書いてあるけど、あんま読んでない。数式から見るに特段すごいことは書いてない。(ていうか途中まで計算してC言語で書き起こして計算して~のくだり乱暴でワロタ)

仕組みとしては面白いと思うし、自分が考えていたものと問題意識からして違うので、そういう意味では面白かった。あと難しい問題が特定Hash値の計算だったりするところが「そんなんでいいんだ」という印象。

ただ、「美しい仕組みだ」とか言う人もいる [参考 2, 3] ので、なにか数学的な美しさがあるのかと思ってたけど、特段そうは思えた所は無い。いわゆる”愚直な実装”だと思う。 (社会的な意味で”美しい”と言っているのかもしれない。だとしたら分からない。後は愚直が美しいという観点もあるのだろうか)

そしてたぶん間違えてるので、もし気づいたら教えてやってください。

たぶんnonceあたりのこまかいとことか。

ふと疑問・・・

いぜん「ビットコインが入ってた (記録されてた) HDDを捨てちゃって大変だ!」みたいな話 [参考4] があったけど、それがそもそも理由で一番上の「困難な問題の解に対して価値を持たせたもの」みたいなことを個人的に勝手に妄想していた。要するに「その解をHDDにいれといたから大変になった」と思っていた。

が、それは違ったとしたら一体何がHDDに入っていたのか・・・?

なんかこれは「取るに足らない問題」の部分の話のよう。コインの受け渡しのトランザクションは上で書いたとおり「受け渡し元の秘密鍵で、受け渡し先の公開鍵に署名したもの」という形で記録されるんだけど、その「受け渡し先の秘密鍵」は「毎回違ったものが生成されるべき」と論文にも書いてある。つまりHDDに入っていたものはその秘密鍵の集まりだったに違いない。きっとそうだ。たぶん。

それはそうとして、そういう毀損したビットコインが今後増えていったらどうなるんだろうか・・・?確かコイン数は発行上限があったはず。

そのあたり、なんか数百年で見たときの持続可能性と、所々にアドホックな制約 (問題の解く時間の調整とか、発行コイン数とか) があったりするので、そのあたりの解消が今後の課題なんですかね。あるいはなんかの実装で既に解消されている問題なんでしょうか。そのへん論文だけでは分かりませんです。

参考

  1. Bitcoin: A Peer to Peer Electronic Cash System – http://bitcoin.org/bitcoin.pdf
  2. Bitcoinが目指した未来と残した課題 – http://d.hatena.ne.jp/syncn/20130416/1366119474
  3. Bitcoin Fraud Gets Connected –  http://www.f-secure.com/weblog/archives/00002644.html
  4. 7.7億円分のビットコイン捨てちゃった!英男性が埋め立て地を捜索 – http://www.afpbb.com/articles/-/3004149