ブロックチェインはなにかすごいのか

この記事のタイトルをよく見ると、「なにが」ではなく「なにか」と書いてある。ブロックチェインがすごいのかすごくないのかよくわからないからだ。君はEthereum Foundationで働いているのではないかと聞かれると、はいそのとおりですと答えるのだが、ブロックチェインはなにがすごいのかと聞かれると、なにかすごいのかしらんと考え込んでしまう。

こっそり思うブロックチェインの一番の功績は公開鍵暗号の利用者を増やしたことである。電子メールにせよwebページにせよ、つけようとおもえば公開鍵暗号をつかえるのだが、つかおうと思わなければつかわないで済む。いっぽうブロックチェインにはアカウントの秘密を保持する機能がないので、自分の秘密鍵は自分で管理するのが当然の開拓時代である。これは、ブロックチェインがすごくないから起こることで、秘密を管理する機能がないところで価値を扱おうとするから利用者にしわ寄せが行っているだけで、まあ怪我の功名と言えるだろう。

そういえば、ブロックチェインで合意が取れるという話について、昔からある研究に照らして何か言えるか考えてみた。

分散アルゴリズムの研究では、ビザンチン故障(すぐせつめいします)するノードがいくつまでなら、まだ動きますよ、というような定理を証明していくことが多い。ビザンチン故障したノードは何をするか何をしないかわからないノードで、意味不明なデータを送りつけるかもしれないし、黙り込むかもしれないし、意味ありげだけなデータを送ってきてだましてくるかもしれないし、ふつうにしばらく動いているかもしれないし、とにかくなにをするかわからない。よいアルゴリズムを使うと、このような胡乱な参加者がたくさんいても、そうでない参加者同士でアルゴリズムを動かし続けられる。たとえばビットコインとかEthereumとかでビザンチン故障の参加者がいると何が起きるかというと、よい性質がすべて失われる。ビットコインでもEthereumでも、超絶的に運のいいビザンチン故障ノードが人のアドレスから秘密鍵をずばずば当てたり、proof of workの課題を他人の億兆倍のスピードで解いたりしはじめると、全体的に崩壊して素のインターネットよりよいところがなにかあったのか、わからなくなってしまう。これは極端な議論なのだが、ビザンチン故障に耐えるというのは、そういう超絶幸運参加者がいても壊れないということなので、しかたがない。

それではといって、これらのビザンチン故障のノードは実は確率多項式チューリングマシンで、これこれの計算は安くなくて、うんぬん、と、暗号の議論をするときに使うような仮定を置いていけば、暗号の議論でよくある結論の、セキュリティパラメータの増加につれてそのどんな多項式よりも早く攻撃が難しくなっていくので、これはいい方式なんですという議論ができるだろうか。できないとおもう。ビットコインにしてもEthereumにしても、たくさんお金を出してproof of workの課題を人より速く解けば、昔の支払いをなかったことにさせたりとか、いやな攻撃ができる。この「たくさんお金を出して」という障壁を、秘密鍵の長さにつれてどんな多項式よりも素早く引き上げていくというのは、できない話である。世界の富の半分以上がそのブロックチェインを支えているというふうになれば安全かもしれないが、それはディストピアだと思われる。

それから分散データベースとしてどうなんですかというと全然だめである。なにしろすべての参加者がすべての歴史を持つので、一台の計算機より速くなるということがない。そもそもすべての歴史に全順序をつけて一列に並べようというのがなんだか無駄な感じがして、個々のアカウントのすることについて全順序がつけばそれで十分なのではないの、と思ってしまう。全順序をつけるつけかたにしても、原子時計でタイムスタンプをつけたほうが、性能はでそう。このへんをもうちょっとましにする計画はあるが、分散データベースとして開発された分散データベースに性能が及ぶことはあるまい。

ブロックチェインはなにかすごいのか。たぶん、おたがい信用しないノードがたくさん集まって、ちゃんとprice of anarchyを払って一つの歴史を編んでいくのが、これまでになかったことで、おもしろい眺めなのだろう。そしてそのうち、ブロックチェインの側が地球を眺めていることになるんじゃないかしら、と思わせるようなところがある。既の僕のまわりでは変わったブロックが現れるたびに人が働いているので、ブロックチェインの側の都合で人間が動いている。

ともかく、人が使い始めていて、Ethereumのスマートコントラクトが走る仮想マシンはごく単純なもので、形式手法のよいターゲットとなっている。自分にとってはそれで十分である。