そろそろ Blockchain について勉強を始めるか

no extension

IBM が強い興味を示しているという報道。 エンジニアとしてはすっかりロートル(老頭児)な私だが, Blockchain についてはちゃんと勉強すべきと思い立ち,基本的なところから勉強していく。

まずは Blockchain の元祖ともいえる Bitcoin について概説して,それから Blockchain の話へと遷移していくこととしよう。

Bitcoin は決済システム

Bitcoin の実体は「決済システム」である。 決済システムという点では Suica や Edy や au WALLET などの従来サービスと同じである(これらは世間では「電子マネー」などと呼ばれている)。 しかし Bitcoin が従来サービスと決定的に異なるのは「銀行役」が存在しないことにある。 (もちろん Bitcoin の仕組みの上に銀行的なサービスを行うプロバイダは存在するが,「銀行役」の存在は Bitcoin の要件ではない)

たとえば Suica の運営主体は JR 東日本だし, Edy は楽天, au WALLET は au の子会社である WebMoney が運営主体であり,彼らが「銀行役」となっている(銀行そのものではない。法律に引っかかっちゃうからねw)。 オモチャのお札を使って遊ぶ「人生ゲーム」にも「銀行役」が存在する。 国家ですら「銀行」の存在を前提とした経済政策を行っているのだ。

Bitcoin は私たちのこうした「常識」に真っ向から conflict する。

Bitcoin は補完通貨

Bitcoin では,決済に BTC という単位を使用する(最小単位は $1\,{\rm satoshi} = 0.00000001\,{\rm BTC}$。ここ1か月のレートでは $1\,{\rm BTC} = 247\,{\rm USD}$ ほど。おおむね3万円前後かな)。 つまり Bitcoin は補完通貨(昔は「地域通貨」と呼ばれていた)として機能する。 実際に財政破綻しかかった国では Bitcoin が事実上の通貨として流通していると聞く。 ただし,これまでに登場した数多の補完通貨と異なり, Bitcoin は地理的な制約を受けない。 また「銀行役」のいない Bitcoin では BTC の発行量と発行タイミングは数学的に決められており,誰もコントロールできない。 したがって本当に財政破綻した国で Bitcoin が代替えになるかどうかは疑問が呈されている。

ユーロの主な問題は、ギリシャが自由にそれをもっともっと印刷できないことだ。それができるのは、European Central Bankだけだ。でも、少なくとも、誰かにそれができる。ギリシャはECBを説得して自分たちのためにもっとユーロを印刷してくれ、と頼めるかもしれない。一方、ギリシャがBitcoinに切り替えたら、自分たちが発行する通貨の量をコントロールすることがまったくできない。発行量の増加を頼めるかもしれないECBや合衆国のFRBのような機関も、Bitcoinにはない。
[...]
今Bitcoinを保有している人は約1000万人いる。うまくいけば、20年後には10億から20億ぐらいの人びとが合計2100万bitcoinを保有し、そのときBitcoinの価格(貨幣価値)は相当大きくなっているだろう。経済学者はBitcoinを、“デフレ性通貨”と呼ぶ。
ギリシャがユーロを捨ててBitcoinに切り替えてはいけない理由 | TechCrunch Japanより

Blockchain は Bitcoin の核心

Bitcoin では銀行の元帳にあたるデータを Blockchain と呼ぶ。 Blockchain は追記(loging)型のデータベースで,世界中にたったひとつしか存在しない。 ただし Blockchain は peer-to-peer(P2P)ネットワークによりコピーがいくつも分散しお互いに同期をとっている。 また個々の取引データは前後のデータと数学的に関連付けられ「鎖(chain)」のように繋がっている。 このため Blockchain は偽造や改竄が非常に難しいシステムだと言われている(「鎖」の途中を切って繋ぎ直すのは数学的に困難。無数のコピーを同時に改竄するのは更に難しい)。

更に,取引データを追記する作業には懸賞金および手数料を付与し,早い者勝ちで決められる。

(勝者を決めるルールは一定の作業量(計算機パワー)を要するもので proof-of-work と呼ばれている。 また実際の追記作業には競争に参加した他のユーザの過半数の(数学的な)承認が必要。 これらは通常はアプリケーションによって自動的に行われる。 一連のプロセスは「採掘(mining)」と呼ばれていて,かつては BTC を得る手っ取り早い手段として推奨されていたが,現在はその辺のパソコンでは太刀打ちできないレベルの計算機パワーを要する)

取引のプロセスに競争の原理を持ち込むことによって不正がしにくい仕組みになっているのである(proof-of-work を迂回するほうに経済的メリットがない限り不正は起きない)。

Blockchain は P2P ネットワークによって無数のコピーが作られる。 したがって取引データの追記作業のタイミングによっては一時的に異なる追記が行われる場合がある。 この場合は chain の長いほうを「正」とするルールがある。 正しい Blockchain は常にひとつで, fork も merge も許容しない仕組みだ。 「一旦分離したブランチを再びマージする方法は無い物だろうか?」という疑問は当然あるが, merge を許すことは Blockchain に不正データを紛れ込ませる余地を残すことになり,相当難しいだろう。

Blockchain という「信用モデル」

Blockchain は単なる取引データではなく,それ自体が「信用モデル」として機能しているのが特徴である。

実は「(誰かを)信用する」ことについて客観的な根拠は存在しない(ここで言う「信用」とは「私はあなたを人として信用する」といった情緒的なものではなく,数学的にセキュリティ的に「信用」できるか否かということ)。 たとえば SSL/TLS の PKI である X.509 は CA(Certification Authority)の権威性で以って信用するが,その「権威」を信用する客観的な根拠はない。 また OpenPGP は web of trust と呼ばれる信用モデルで運用されるが,これはユーザ同士の直接的な信頼関係がベースになっているもので,信頼そのものを客観的に証明するものはない。

Blockchain はこれら既存の「信用モデル」とまったく異なったアプローチをとる。

Bitcoin の話に戻るが, Bitcoin のユーザごとの識別子は「アドレス(address)」と呼ばれている。 アドレスの実体は公開鍵暗号の鍵ペア(公開鍵および秘密鍵)である。

(公開鍵暗号とは,ざっくり言えば,暗号化と復号に異なる鍵を使う暗号アルゴリズムの総称で,公開鍵から秘密鍵を推測できないのが特徴である。 たとえば公開鍵で暗号化したデータは秘密鍵でしか復号できない。 秘密鍵を知られなければ暗号データを復号できるのは秘密鍵を持っている本人のみということになる。 逆に秘密鍵で暗号化したデータは公開鍵を持っている全てのユーザが復号できる。 ただし,暗号化できるのは秘密鍵を持っている本人のみなので,これは本人による暗号データ(=電子署名)であると言える。

Bitcoin のアドレスのうち,「5」から始まる文字列が秘密鍵で,「1」から始まる文字列が公開鍵である。 公開鍵はネット上に公開できるが秘密鍵は絶対に秘密にしておかなければならない。 ただし,オンラインの wallet サービスでは秘密鍵をプロバイダ側に預けるものが多く,この点がセキュリティ・リスクになる)

公開鍵暗号の鍵ペアを運用する際には,それが本人のものであることを如何に証明するかが重要なのだが, Bitcoin ではそうした仕組みをまったく捨てている。 つまり鍵ペアの持ち主が誰であるか(本人のものなのか,それとも誰かから盗んだものなのか,もしかしたら FBI がおとり用に作成したものかも) Bitcoin は全く気にしない。 Bitcoin が気にするのは Blockchain に記載されるアドレスの一貫性と無矛盾性である。

(こういう話をすると「なりすまし」の問題がクローズアップされがちだが,実は鍵の本人性を証明できないということは「否認」が可能ということでもある。 例えば Alice が Bob に BTC を送金したとして,送金先アドレスを Bob が否認すれば, Blockchain に記録が残っているとしても,取引を不成立にすることができる)

「こんなの「信用モデル」じゃない」という人もいるかもしれないが,属人性を徹底的に排除することによって Blockchain そのものは信用できることを数学的に証明できているのが画期的なのである。

一方で,よく「Bitcoin は匿名のサービスだ」という人がいるが,これは厳密には間違いだろう。 Bitcoin 自身はアドレスが誰に属してるか気にしていないだけで,実際にそれを利用するユーザは,取引を正しく成立させたいなら,アドレスの帰属先を何らかの方法で証明する必要がある(たとえばアドレスを OpenPGP で署名するとか,究極的には直接手渡しするとか)。 証明する方法があるのなら他者に知られる余地を残すことになる。

ここまでのまとめ

  1. Blockchain は「鎖」で繋がれた追記型データベース。「鎖」の途中のデータは取り消しも変更(改竄)もできない(おそらく)
  2. Blockchain の追記プロセスには不正の余地がないよう何らかの仕掛けが必要。 Bitcoin の場合は「採掘」がそれにあたる
  3. Blockchain は P2P による分散型かつ fault tolerant(過失を許容する)なシステムだが最終的には fork も merge も許容しない
  4. Blockchain の識別子(Bitcoin の場合は公開鍵)を証明する方法は実装されてない。証明するには外部の PKI を利用するか,新たに組み込む必要がある

参考ページ

参考図書

photo
ビットコイン解説本
足立 明穂
2014-02-01
評価

クラウドソーシングの衝撃 (NextPublishing) ビットコイン解説本2 <投資編> 小心者でもサラリとかわせる「断る」心理テクニック 仏教は宗教ではない ~お釈迦様が教えた完成された科学~ 広告の基本 この1冊ですべてわかる

最初に読んだ Bitcoin 解説本。手軽に読める。

reviewed by Spiegel on 2015/04/02 (powered by G-Tools)

photo
新版暗号技術入門 秘密の国のアリス
結城 浩
SBクリエイティブ株式会社 2013-12-04
評価

プログラマの数学 数学ガールの秘密ノート/整数で遊ぼう インフラ/ネットワークエンジニアのためのネットワーク技術&設計入門 数学ガールの秘密ノート/式とグラフ 数学ガール/ガロア理論

まさに入門書。暗号がどのような要素技術で成り立っているのか体系的に理解できる良書。

reviewed by Spiegel on 2014/09/18 (powered by G-Tools)