ブロックチェーン × プライバシーの偏見と実際

分散プロトコルの代表であるブロックチェーンに関して、多くの人が色々な解釈をします。「これが革新的なのは〇〇な点だ!」と色んな人が別々の視点を発することが非常に楽しいのですが、逆に共通する視点として、プライバシーの強化と個人へのデータ権利の回帰というものが挙げられます。Facebookを筆頭にした大手のIT企業による個人情報の勝手な扱いへの対抗手段というわけです。

「非中央集権」・「暗号」・「データベース」というブロックチェーンを説明する単語からこの認識が持たれるのは当然の帰結なのですが、実際はどうなのでしょう?

#1 ビットコイン・イーサリアムのプライバシー

ビットコインはよく「匿名性があるから犯罪につかわれる」と言われますが、おそらく多くの方がご存知のとおり、匿名性があるのは口座=アドレスだけです。ここが個人と結びついた後は、すべての情報が匿名性を失います。これはインターネットに匿名性があるかというのと似た議論でもありまして、IPアドレスを匿名だと言うなら匿名でしょう。匿名通信の専門家からしたら、匿名性のあるインターネットはダークウェブ(Tor)のみです。

イーサリアムはブロックチェーンのデータベースとその完全な変更能力を持つため、ある種ブロックチェーンの可能性そのものと見られることも多いように見受けられます。

このプライバシーもビットコインと同様、アドレスのみが匿名です。口座の残高だけでなく、「コントラクト」と呼ばれるブロックチェーン上の機能のデータ全てが公開情報になっています。

プログラマーの方はWeb3のドキュメントにあるeth.getStorageAt という関数を呼び出すことでほぼ全部見れますので、知っておくと便利かと思います。これで見れないデータも他の方法で簡単に見ることができます。誤解が多いですが、pravate関数はコントラクト内データの参照をEVM上で制限できますが、privacyは一切作りません。

非常に簡単な結論を言えば、これら2大ブロックチェーンそれ自体には充分なプライバシーはありません。

#2 ゼロ知識証明とZcashのプライバシー

ここでにわかには信じられないものとして、ビットコインのデータを全て匿名にして機能させる技術が存在します。

Zcashではアドレスと個人が結び付けられたとしても、その後の履歴=トランザクションを分からなくする匿名送金機能があります。
すべてのブロックチェーンのシステムにおいて最も情報をもっているのは、システムの認証を行っているマイナーですが、マイナーが情報を持たずに認証することを可能にするアルゴリズムが「ゼロ知識証明」です。

ゼロ知識証明(Wiki)は「改変可能な問題について相手が答えを知っていることを、自分が答えを知らずに確認するアルゴリズム」と言えます。
この改変可能な問題には、楕円曲線暗号での問題が含まれます。ビットコインのアドレス保有者であることを証明するための電子署名で使われるのが楕円曲線暗号です。

マイナーと送金(トランザクション)者の間でこの認証方法が使われ、相手が誰だかを知らずにトランザクションが承認されます。ブロックにはハッシュ化されて読めなくなったデータしか入らないのですが。

基本的にブロックチェーンのプライバシーの問題を考える時は、マイナーが何を知っているか考えればよいと思います。マイナーが基本的に最も情報を持っているので。
ゼロ知識証明のイメージをつかむためにはWikipediaの洞窟の例を読むと分かりやすいです。「知っている人は知らない人より多くのことができる」という特性を利用します。相手が身分を偽っていることを見抜くのに、「甥っ子の名前は?」と聞いてから、100個くらい他の身分の質問をして、もう1回「甥っ子の名前は?」と聞けばよいのと似たようなもんだと思えば速いかもしれません。この例えからもお察しの通りですが、非常に計算量が多いです。

さて、ZcashとEthereumのチームはとても仲が良く、「プライバシーは人権」というスタンスである創始者VitalikはZcashのシステムzk-SNARKsを取り入れるプロジェクトを進めました。Zcash On Ethereumです。

このzk-SNARKsはトランザクションを秘匿することができますので、Ethereumのコントラクトを使って、誰がどう票を入れたかは公開されない投票システムを構築することが可能です
すごくこれで、状況が好転したように見えるのですが、トランザクションを秘匿するのであって、その結果を秘匿できるわけではありません。つまり、Ethereumのコントラクト内のデータであり、コントラクトの実行結果である「票数」自体は秘匿できません。つまりこれは色々な人の投票というデータから票数だけ抜き出し後は捨てたことにより、匿名性が保たれている多数ノード間特有の方法です。

個人情報の取り扱いを考えた時、例えば肥満度BMIを記録したいとしましょう。身長と体重を秘匿して送ったとしても、コントラクトで計算されたBMIのデータは惜しげもなく晒されます。何か個人情報をコントラクトの中に秘匿して記録しておくことはできません。先ほどの「票数」にあたるものが、秘匿したい個人情報になっているのです。多数ノードで混じっても良い情報なら扱えますが、個人情報をその保管方法でやったなら、あなたのFacebookページはわけのわからないものになるでしょう。平均された誕生日が全員で一緒に祝われたりとか。

VitalikはNewsPicksによるインタビューで次の主旨ことを言っています。

Facebookの個人情報流出問題もブロックチェーンで解決すればいいとみんな言うけど、ブロックチェーンだと全部公開してしまうよ

なぜ、zk-SNARKsがあるのに、こう一笑に付したのでしょう?
端的に言ってEthereumでコントラクトは情報を秘匿できないからです。

#3 Ethereumが悪い??

ここで、「トランザクションを秘匿できたのだから、コントラクト自体を秘匿すれば良いじゃないか!!?」という当然の疑問が生まれます。つまり、Ethereumの仕様が問題であって、zk-SNARKsで全部達成できると。

ハッカーの祭典DevconではZk-Snarksに対して次のような分析がされました。

(うどん氏のブログ「Enigma(エニグマ)ガイド」より)

ここで笑えるのはBlockchainのPrivacy:Noneですが、zk-SNARKsの機能性・効率が悪評価である理由を次の思考実験で検証しましょう。

とりあえず、匿名生と知名度がありすぎて、もはやフリー素材になってしまった創造主ナカモト・サトシに登場願います。ナカモト・サトシが好きな女優を仮想通貨を払ったら教えるコントラクトを作りたいとします

面白いことに、こんな簡単なことが今のEthereumはもちろんZoEのやり方でもなかなか作れません。
①コントラクト外で暗号化すると、秘密鍵をコントラクトに置かなければ、相手に伝えることができない。
②コントラクト内で暗号化すると、少なくとも暗号化作業を行うマイナーが事前に名前を知ってしまう

2者+コントラクトの3者間のトランザクションを条件や時間差をつけてZoEで匿名化できないことに起因します。もしEthereum以外でそういう仕様のコントラクトがあれば、目的を達成できますので、原理上zk-SNARKsで秘匿コントラクト・システムは構築可能と言えます。ただし、非常に問題が多いです。

まず、その秘匿計算を全てのマイナーが行うということです。
前述の通り、zk-SNARKsが改変した問題を大量に作って確かめるので、この例で言えば、「ジョディー・フォスター」の文字列変換の正当性検証を全世界の数千数万のノードが繰り返し行うわけで、正気の沙汰とは思えません。Plasmaを待ちましょう。
これが「効率:Very Low」の理由です。

さらに、今回は「女優の名前を教える」という単なる記録のプログラムでしたが、スマートコントラクトというのは色々なプログラムを実行可能(Turing完全)のはずです。しかし、if分分岐やループ処理を行うと楕円曲線暗号のような改変可能な問題ではなくなってしまい、ゼロ知識証明は不適合になります。つまり、凄く限られた計算しか秘匿できないのです。
これが「機能性:Very Limited」の理由です。もちろん、これはデータを秘匿したままいろいろな計算を外部でできないことも意味し「相互運用性:Not All」につながります。

結論としては、zk-SNARKsでスマートコントラクトの秘匿化は今現実的でないと考えて良いでしょう。

## 「サトシと女優の例題」の現実的な解答

①コントラクトに相手のEtherをデポジットさせ、
②一人一人に対し相手のアドレスから作れる公開鍵を使って名前を暗号化し、コントラクト内に保存させるトランザクションを送るととそのEtherを受け取れる

のようなコントラクトです。つまり、要求・デポジットがあるごとにEOA=個人アドレスからトランザクションを送ります。

最初は自動販売機を作ろうとしていたのに結局自分でジュースを売ることにしたような印象を受けますが、そんなもんなのかもしれません。

#4 準同型暗号とEnigma

準同型というのは、数学的には写像、プログラムでいえば関数の性質なんですが、簡単に言えば対応関係の保存です。これが掛け算と足し算どちらも保存できて完全になると、暗号化したまま計算(秘匿計算)ができます

今までの話の流れからすると
は?なら最初からそれ使えよ、ZKナントカとかいらんし
と言われますが、少し見てください。

この図を見て気づくかと思いますが、2者間のコントラクトの場合だと困りますよね。もし結果が欲しい場合、相手の秘密鍵で復号化してもらう必要がありますので。

ただ、復号化せずに暗号のまま、有益な結果が出ることもあります。たとえばデータサイエンスなんですが、この分野ではデータそのものより個々のデータ同士の関係性が重要である場合が多く、関係性を表すデータつまり差分さえ分かればよい時があります。これを直接使ったのがプライバシー保護が差分プライバシーです。

この性質と準同型暗号を使えば、データを暗号化したまま、統計モデルをつくることができます。Ethereumを使った集合ヘッジファンドNemeraiは、稼働中であり、この性質なしには成り立たない仕組みです。人に見られたくないデータを皆で暗号化してアップロードして、そのまま統計計算に使い投資をするのです。

この方法でもまだ、大きなコントラクトは秘匿できません。準同型暗号の計算もまた、全マイナーのEVMで動かすのであれば、やるひとは破産しますし、鍵を2つ以上使う場合について考えられていません。

## Enigma

さてコントラクトを秘匿することができないことをずっと悩んでいるわけですが、Enigmaではそれが解決されています。
ではEnigmaでは何をやっているのでしょう?

まず、EnigmaはEthereumを拡張して使っているオフチェーン・コンセンサスであり、ブロックチェーン内ではありません。

(1)シャミア秘密分散
シャミア秘密分散はデータをn個に分割して、そのうちn-k個集めたらデータを復元できる仕組みです。マルチシグのデータ版のようなものなんですが、この暗号化が準同型なので複数ノードで別々の秘匿計算ができます。
これで、相手がEthereum上でコントラクトの署名があるものであれば、計算結果だけをn-k個の分散ノードを使って相手に復元させて上げることができます。

先ほどの準同型暗号を使った他のシステムでは、復号化したくないので差分をとっていましたが、この方法では差分情報以外も全部使うことができます。本質的に秘匿されたストレージを作ることが可能です。とうとう以下の図を得ます。

(2)特化バーチャルマシン
イーサリアムで動くEVMは準同型暗号での計算に向いていませんでした。向いているものを作れば、計算量を減らすことができます。詳しい方法は分かりませんが、EnigmaVMはこれらの計算を効率的に行うそうです。

### 計算方法さえ秘匿したい場合は?
たしかに色々な需要があり、こういうケースもあるでしょう。
回路プライバシーという方法があり、特定条件を満たす準同型暗号を使って秘匿可能です。コントラクトコードの場合、流石にコードを見る必要があるとは思いますが、信頼のあるものなら秘匿して良いのかもしれません。

#5 ここまでする必要は?

技術は大切ですが、たぶんその目的はもっと大切でしょう。この狂気じみてさえいる努力をなぜ暗号専門家だけでなく、多くのエンジニアが行うのでしょうか?
1つの答えとして、個人データは経済ではなく政治の話だということです。

「データは石油だ」という言葉が聞かれるとおり、大手テックはそれらを使って主に広告事業で収益化しています。これらのデータをそのまま、政治思想誘導に使った企業が現れました。トランプ現大統領が選挙時に工作を依頼したケンブリッジ・アナリティカ(CA)です。
この企業が使ったアルゴリズムは、コジンスキー博士の発明であるデータからの人格決定アルゴリズムを転用したもので、博士は選挙前からCAを激しく非難していました。
2016年の選挙の直後にはこんな記事が出て、もう米国では問題になっていました。

SNSの活動・アクセスしたウェブサイト・検索履歴、男性であればポルノサイトの閲覧履歴。これさえあれば、個人の思想や行動など丸裸であり、データを持つ企業を軍事的な保護に置く、国家からも同様でしょう。これが米国での文脈であり、CAに個人情報を提供したFacebookへの拒否反応の理由です。

Webサイトに超強力な暗号化をしてアクセスするだけではプライバシーの保護にはなりません。例えば量子暗号で完璧な安全を確保しながらFacebookにデータを送るわけですから。
充分プロトコル技術の発達した未来の人からみたら、プライバシーを失いたくて仕方がないように見えるであろう我々に必要なのは、完璧な暗号ではなく、コントラクトとプロトコルです。

これがデータ非中央集権ムーブメントの本流でしょう。おそらく、この行動にも関わったであろうトランプ陣営の戦略参謀のスティーブ・バノンが暗号通貨の活動に転じていることは、何か気づいてのことかもしれません。


Author

分散型システムの欠点をセキュリティの面とインセンティブの面から考えています。1年半ほど色々なプラットフォームを調べ、今はEthereumでの開発に注力しています。

EthereumTech Lab.ではブロックチェーン、特にイーサリアムに対して強い興味を持った学生または社会人のメンバーを募集しています。
発信はMedium上で行い、本格的な開発状況に関する分析、または開発者それぞれの思想をリサーチし、日本語にて発信するなど様々な方向性の記事を作成しています。

EthereumTech Lab.はイーサリアムのモバイルウォレットを開発している”Wei Wallet Team”(*https://github.com/popshootjapan/WeiWallet-iOS) が中心となり、活動を行っています。そのため、オフラインでのイベント/ミートアップ実施の機会も多く開催していく予定です。

ご興味のある方は、こちらよりご応募お待ちしております!!


EthereumTech Lab | イーサリアム研究所

今後の記事更新のお知らせ・イベント情報・最新ニュースはFacebookグループへの参加がおすすめです。