みちびき

星空の暗号

 来年のことを言うと鬼が笑うという。では10年先のことを語るとどうなってしまうのだろうか?
 私は技術者の立場として、夢ばっかり語るのは好きではないのだが、2019年も終わることだし、たまには妄想を広げるのも許されるだろう。

 というわけで今回は今後10年、ブロックチェーンにおいて重要になると思う技術的な課題を語ってみたいと思う。ビジネスとしての展望は加納が語ってくれるだろう(丸投げ)。
 これは前世紀の初めにヒルベルトという数学者が、今後100年の数学が取り組むべき23の難題を発表したことのマネをしたい、という個人的なワガママでもある。これも年末ということで大目に見てもらいたい。

タイムリリース暗号

 ビットコインの革新的なことの一つは、現実世界と仮想世界をつないだことである。
 「ある数字を知っている」というのは現実世界の出来事である。だからそれを人に教えたり、逆に隠したり、システムに記憶させ使わせたり、といったこともみんな現実世界の出来事だ。それがそっくりそのまま仮想世界で「ビットコインを所有している」につながっている。

 そしてタイムリリース暗号も同じように現実世界と仮想世界をつなげる。現実世界で「ある時刻になった」という出来事と、仮想世界で「暗号が解ける」ということをつなげるのだ。

 例えば何かの文書を暗号化したいとき、それを未来の時刻「2030年1月1日 0時0分」で暗号化する。時刻を公開鍵と見立てて暗号化するのだ。
 暗号を解くためには秘密鍵が必要になるが、それはその時刻にならないと配信されないという仕組みだ。逆にその時刻になりさえすれば誰でも簡単に秘密鍵を入手できる。気づいただろうか、この仕組みには秘密鍵を配信するサーバーが必要なのだ。
 しかしみんなが信頼できるサーバーを立てることができず、この仕組みはまだ実現してない。

 しかし私には一つ腹案がある。
 それは準天頂衛星システム、通称「みちびき」をサーバーとして使うことだ。みちびきは GPS 衛星で軌道上から地上へ向けて、正確な時刻のビーコンを送ってくる。その目的のために原子時計を積んでいる。どうだろう、これほど時刻という意味で信頼のおけるサーバーがほかにあるだろうか。
 それだけではない。みちびきは宇宙にあるのである。一度打ち上げたら 3 万キロの衛星軌道まで行かなければハックできないのだ。これほど安全なサーバーがほかにあるだろうか。私はロマンティックにこう呼びたい、星空の暗号と。

みちびき

 まあこれは素人の考えかもしれない。そんな簡単にみちびきにこのシステムは導入できないのかもしれない。しかし、ならばほかの方法で 10 年後の 2030 年、タイムリリース暗号は社会実装されているだろう。そうなることがブロックチェーンというパラダイムの大きな流れだと思うからだ。

 実際異なるブロックチェーン間のエスクローなどで信頼できるリアル時刻の必要性は増してきている。ほかにもプレスリリースの配信などへの応用も考えられる。
 あるいはそんなことより、私の想像を超える領域で利用されているに違いない。

オラクル

 現在のスマートコントラクトは大きな問題を抱えている。それは決定論的な計算を許してしまうことだ。
 ブロックチェーンとはとどのつまり分散ステートマシーンである。だからノード間でステートを同期するために、トランザクションの実行に任意性があってはいけない。どんなノードでもいつ実行しても同じ結果にならなければならないのだ。このことを決定論的、という。

 決定論的な計算というのは、乱数を使うという有名な例のほか、実行環境の時計にアクセスし時刻を取得するというのもある。あるいは IP アドレスへのアクセスや、そのほか一般に IO と呼ばれるものはすべて決定論的な計算の範疇だ。RESTFUL な API なんかも呼び出しもそうだ。

 だからまずは決定論的なことを禁止する方向で進化するのだろう。しかしそれでは外の世界の情報をブロックチェーンに取り込むことができなくなってしまう。大事なものまで一緒に無くしてしまった、これだと面白くない。

 これは実はもっと根の深い問題の表れである。
 ブロックチェーンは信頼を扱うデータベースだ。しかしここで信頼といっているのは「データが改ざんされていない」という点においての信頼だ。情報そのものの信ぴょう性については何も保証していない。そんなことはできない。
 情報そのものの信ぴょう性は、結局のところ外部の世界の問題である。そういった意味で、外から信頼を与えることは、ブロックチェーンが広く社会で使われるために非常に重要な課題なのだ。

 今後様々な方法で情報の信ぴょう性をブロックチェーンに取り込む方法が開発されていくのだろう。取り込む際にコンセンサスアルゴリズムに影響も与えるだろう。そういった研究がされていくに違いない。

 実はオラクル問題を考えるときに、私がいつも頭に思い浮かべているものがある。それはエヴァンゲリオンに出てくる思考するネットワーク、MAGI システムだ。彼女達はまるでブロックチェーンのようにコンセンサスアルゴリズムを実行し、それぞれが個性を持ち違った答えを出す。今のブロックチェーンはこれに比べればおもちゃだ、どのノードも同じ答えを出すのだから。

 次の 10 年でこのギャップは埋まるのだろうか。MAGI は作れないかもしれないが、少なくとも今よりもっとワガママなブロックチェーンは登場しているに違いない。

秘密分散署名 with DKG

 私はこの秘密分散署名のことをドラゴンボール署名と呼んでいる(いい加減アニメの例はやめろ、といわれるかもしれないが、こればっかりはご了承いただきたい)
 通常の署名は秘密鍵の持ち主が署名をする。
 マルチシグの場合は複数の持ち主がそれぞれ署名をする。
 秘密分散署名の場合は秘密鍵が分散されそれぞれが署名をする。

 秘密分散署名は効果としてはマルチシグに似ているものの、原理は真逆である。なぜなら複数の秘密鍵を使う代わりに、秘密鍵を分割してしまうからだ。これがドラゴンボールと呼んでいる理由である。
 しかし似ているのはここまでだ。ドラゴンボールなら 7 個集めてしまえば、その場で秘密が完成してしまうが、秘密分散署名は分散したまま、一つの欠片だけで署名を行うことができる。そしてこうして出来たパーシャル署名を組み合わせることで、本物の署名を復元できるのだ。

 出来上がった署名は、パーシャル署名を組み合わせて作られたものなのか、最初から完全な秘密鍵があってそこから作られたものなのか、区別することができない。
 この特徴はマルチシグに対する優位点になる。マルチシグの場合、誰が潜在的署名者で、そのうち誰が署名したのかが外の世界に漏れてしまう。というより外の世界で判定しなくてはならない。これは不必要な内政干渉といってもいいだろう。
 しかし秘密分散署名の場合、外から見たら唯一の代表者が常に署名をしているように見える。独裁なのか、民主なのか、内部の実情を知ることなくマルチシグの利点を得ることができるのである。

 さてもう少し先に進もう。DKG( distributed Key Generation )という概念だ。
 秘密分散は最初に秘密鍵を分割して各保持者に渡す。通常この時に誰かが秘密鍵を作成してそれを分散する。その誰かは生成後に鍵を破棄する、という流れだ。
 しかしその人が本当に破棄したのか、をどうやって信頼すればいいのだろうか。あるいは悪意がなくとも生成プロセスがハッキングされていたら、秘密鍵がばれてしまう。
 そこでこの過程で誰一人、秘密鍵を知ることのないまま鍵生成をしてしまおう、というのが DKG なのである。

 それを実現するための数学は、長くなるのでここでは省略するが、賭けてもいい、もしちゃんと理解すれば感動ものである。

 ブロックチェーンをつなぐ際に、不必要な結合を防ぐためには相手の投票者の詳細を知りたくない。だから秘密分散署名のほうが適しているというシーンが増えてくるに違いない。
 秘密分散署名を採用する場合には DKG もセットなるはずだ。そうじゃなければスーパー権限の存在を否定できないから。
  鬼に笑われてもいい、10 年後にはきっとこの方式が主流になるのだろう。

スケーラビリティ

 ブロックチェーンがもっともっと使われるようになると、必ず直面する問題がある。それはスケーラビリティだ。

 一般論として、スケーラビリティ対策には、システムそのもの処理能力を上げるスケールアップと、処理を分散させることでトータルの処理能力を上げるスケールアウト、がある。

 しかしブロックチェーンの場合、そもそも信頼を増すために分散処理を行ってしまっている。だからスケールアウトのために分散処理を利用することに相性の悪さがある。
 ブロックチェーンではビザンチン障害耐性を達成するために、すべてのノードが同じデータを扱うことが普通だ。だからノードごとに扱うデータを変更することは、コンセンサスアルゴリズムの根幹を変えなければならないだろう。

 この分野の研究も今後 10 年で進むことだろう。それには 3 つの方向があると思う。

 1 つはスケールアップの方向性だ。ビットコインの秒間 7 トランザクションから始まり、Libra では秒間 1000 トランザクションと言われている。miyabi なら毎秒 4000 トランザクションをさばける。
 実装の高度化やハードウェアの進化などによりこの数値は年々向上していくのだろう。しかしムーアの法則が終了してしまった今、いずれ頭打ちになってしまうだろう。

 2 つ目の方向は台帳(レジャー)特化型となることである。ブロックチェーンが台帳だけ扱えばいいような場合、それぞれのノードが同じデータを持っていなくても構わない。複数のノードからなるグループだけが同じデータを持ち合えばよい。
 この場合例えば、残高チェックのようなことはあきらめる。台帳として履歴が保持できればいいわけで、残高チェックはブロックチェーンの外でやればいい、という立場だ。

 3 つ目の方向は、残高チェックが可能なままスケールアウトを行うことである。もちろんこれができれば一番いい。
 サイドチェーンなどはこの試みの一つと言っていいだろう。実際の運用がいくつかのクラスターの中で完結し、クラスター間のやり取りが少ない、という場合にはいい選択肢だ。
 この方向の場合、アプリケーションの特性に合わせて何を犠牲にするかを考えなくてはならない。すべてを満たす完璧なソリューションはない。

 実はもう一つの方向がある。それはブロックチェーンの適用範囲を絞る、という方向である。パフォーマンスが出ないのであればその用途に使わなければいい。ビットコインのような性能でも、取引所というシステムがそれを補うことができている。
 同じようにブロックチェーンが不得意なところは任せずに、他のシステムが補えばいい。

 こうやって少しずつブロックチェーンは社会に浸透していき、処理性能は徐々に向上していくに違いない。10 年後にはどのような性能になっているのだろうか。負けないように我々も日々努力するのみである。

MPC( Multi Party Computation )

 個人情報の扱いは頭の痛い問題になりつつある。いや昔から頭の痛い問題ったが、さらに厳しくなろうとしている。それは法的な方面からもそうだし、ユーザーのほうも厳しい目で見るようになってきている。

 個人情報を扱わない、とギブアップすることを選択する企業も増えてくるであろうが、どうしても個人情報を扱わなくてはならない業界が一つある。それは政府だ。

 政府や公共機関はそれこそ相互監視や規定やルールといったもので個人情報を丁寧に管理していると思うが、何百万人もいる公務員すべてがルールを守っている、そんなシステムを作ることはほとんど不可能といえるのではないだろうか。

 そこで注目したいのが MPC である。エストニアの事例などでよく出てくるので、聞いたことがある人も多いだろう。一言でいうと政府機関といえども、個人情報を完全な形で保持せず、複数の機関が、情報をやり取りすることで個人情報を扱おうとする手法である。
 個々のデータを持っている人は、そのデータだけでは何が何だかわからない。しかしデータのやり取りの結果は、あたかも完全な個人情報にアクセスできたかのように振舞う。しかも途中のやり取りしているデータも完全な形では個人情報は含まれないのである。

 これは前述した秘密分散署名に似ていると思っただろうか。実際その通りで両者ともゼロ知識証明という大きな分野の一つの例なのである。
 ゼロ知識証明といえば zk-SNARK というシステムがあり、任意の数式をゼロ知識化できるのだが、汎用のためパフォーマンスが悪い。今後の改良も期待できるが、なによりも特殊な用途には特殊なアルゴリズムが見つかることがあり、その場合は劇的にパフォーマンスが改善されることがある。

 こちらはまだまだ研究途上な技術である。秘密分散署名の場合は何をやりたいのかはっきりしていたが、個人情報をどう扱いたいのかはまだまだ定式化さえできていないだろう。
 これから 10 年でどこまで技術が進むのか、そして社会、特に政府への浸透がどの程度になるのか、注目していきたい領域である。

追跡不可能化

 仮想通貨は匿名化に成功した。そして今や逆に匿名であることが問題視され、交換業者においては本人確認や各種チェックは必要となっている。
 今後ブロックチェーンが社会に進出するにつれ、同じように素朴な匿名性は次第に受け入れられなくなっていくのだろう。通常は匿名であることが求められながら、問題が起きた際にはしかるべき権限を持っている人であれば調べることができるようになっていく。

 匿名化以外にも実はもう一つ考慮しなければならないことがある。それは追跡可能性だ。
 ブロックチェーンでは公開鍵を使うことが多い。だからあなたが同じ公開鍵をいろいろなところで使うことが増える。横着なだけでなく、積極的に同じ公開鍵にしておいたほうがいいシーンもあるだろう。

 しかしそれはあなたのアイデンティティの一部が漏れている、ということでもある。たとえその公開鍵と個人情報が結びついていないとしても、あなたのアクティビティは結びついてしまっている。そうすると今コンビニで購入しているあなたが、昨日高級車を購入した人物と同じであることがばれてしまうかもしれない。

 このようなことは当初は問題にならないのだろう。しかしブロックチェーンが浸透し、あらゆるものがブロックチェーン上に存在するようになると、いずれ大きな社会問題になるに違いない。

 この問題に対処するには単純に公開鍵を変えてしまえばいい。まさにビットコインが採用している方式だ。
 しかし同じ公開鍵を使ったほうがいいこともあるだろう。その時に管理された方法で同じ公開鍵であることを隠したり、公開できたりする方法が必要になるだろう。

ペアリング暗号

 最後にペアリング暗号を紹介しよう。
 双線形という特徴を持つ数学的な操作のことで、今回紹介した技術にも実は使われていたりする。

 タイムリリース暗号、秘密分散署名( BLS 暗号)に使われているほか、ID ベース署名などにも使われる。

 ペアリングの凄いところはその万能性である。あるいは柔軟性というべきか。持たせたい性質を数学的に表現しようと思った時に、いろいろな数学的な事実が使えるが、それを最後にドンピシャな数学オブジェクトにするために使えるのである。

 今回取り上げたようなことは今見えているものに過ぎない。今後 10 年の間、ペアリングを用いて新たな暗号学的ひらめきをもって、なにか面白いものが出てくるに違いない。

 書いているうちに、だんだん地から足が離れていった。そろそろ終わりにしよう。

(お知らせ)bitFlyer Blockchainでは仲間を募集しています!


この記事が気に入ったらサポートをしてみませんか?