Develop with pleasure!

福岡でCloudとかBlockchainとか。

How Much Privacy is Enough? at Scaling Bitcoin 2018

2019年になったけど、Scaling Bitcoin 2018 復習シリーズ。今回は、Zcashのファウンダーの1人でもあるCornell TechのIan Miersによる「How Much Privacy is Enough?」↓(1時間あたりから)

youtu.be

書き起こしは↓

http://diyhpl.us/wiki/transcripts/scalingbitcoin/tokyo-2018/how-much-privacy-is-enough/

内容は、プライバシーとスケーラビリティのトレードオフを評価しながら、どれだけのプライバシーがあれば十分かについての発表。新しい技術提案というわけではないけど、今まではどちらかというとブロックチェーンの分析を行う会社による、ブロックチェーンのデータ分析によるプライバシー漏洩のリスクをふわっと考えることはあったけど、実際の脅威とは何か?その脅威を現実するエンティティは何か、さまざまなプライバシーに関する提案がある中で、デコイベースのプライバシー効果は?などが、まとめられていて個人的に暗号通貨に関するプライバシーの課題を捉え直すことができる内容でよかった。

プライバシー技術

Bitcoinが登場したばかりの頃は、送金の匿名性が注目されていたが、最近ではBitcoinで提供されるのはあくまで疑似匿名性のレベルであり、完全なプライバシーを提供するものではないということが認知されてるようになってきている。実際にブロックチェーンを監視しトランザクションの分析を行う企業も存在する。一方、暗号通貨のプライバシーを向上させるため様々な提案も活発にされている。アドレスの再利用の禁止といったものから、

  • coinjoin
  • mixcoin
  • coinswap
  • coinjoinxt
  • joinmarket
  • Tumblebit
  • Zerocash
  • Bolt
  • Confidental Transaction
  • Ring Signature

などの複雑な暗号プロトコルまで、多数の提案がある。これらの技術を実際に自分で使用する場合、使用する前にそれがどう動作し、それによってどの程度のプライバシーを得るのか正確に評価する必要がある。エンジニアはパフォーマンスベンチマークの実行方法や概算の方法を知っているが、どの程度のプライバシーを確保するか計測し判断するのは難しい。

プライバシーの評価

ではどうやってプライバシーを評価するかという点だが、これにも課題がある。暗号通貨が利用可能であるといっても現状の使用状況を考慮すると、それはcookiesやターゲット広告、監視などより前の唯一のウェブサイトがCERNであった1992年のプライバシーを評価しようとしているようなものだ。

  • 経験的な側面からは計測できない
    • ブロックチェーン上のほとんどのトランザクションは投機的なものであるため
    • 日常生活で暗号通貨を利用するほどの環境はなく、そういった意味で制限が多い
    • 研究者にはデータやコスト、倫理的な限界がある。

そのため、各プライバシー技術がどれほどのプライバシーを提供するかについて、経験的に見積もることはできず、思考実験で検討するしかない。そしてそのためには現実的な脅威を理解しなければならない。

実社会におけるプライバシーの脅威

じゃあ、現実的な脅威とは何だろうか?共通の脅威としてブロックチェーンの取引内容を見ている政府や法の執行機関が挙げられるが、それは確かに1つの脅威かもしれないが唯一の脅威でもなければ最も現実的な脅威でもない。

例えば、GoogleではVISAとMastercardから決済データを収集し、それを使ってターゲットを絞った広告を行うことでユーザーのプロファイルを作り上げることができる。同様に、企業は顧客の行動に関する豊富なプロファイルを構築したいと考えている。有名な例が↓ techland.time.com アメリカのディスカウント百貨店チェーンのTargetが、ミネソタ在住の女子高生が妊娠していることを彼女の父親より早く知って起きた事件。Targetでは顧客1人1人にポイントカードを配布し、購入内容をチェックすることができるようになっている。Targetは彼女の購買データから彼女が妊娠していると判断し、ベビーグッズのクーポンを配信した。彼女の父親は当初娘に関係の無いベビーグッズのクーポンが続くため店に抗議したが、その後妊娠の事実を知り謝罪する。

このように人々が何を買うのか、購入と習慣が何なのかというデータから起こる深刻なプライバシー問題がある。↑はブロックチェーンから取得するよりももっと細かい情報をベースにしているが、ブロックチェーンの取引履歴にも同様のことが言える。

もう1つの例は、Venmoだ。Venmoは個人間送金が可能なアプリで、友人同士でバーやレストランで支払いを割り勘できたりもする。Venmoを使用するとすべての取引について、利用者の名前、受取人の名前、金額、メモ欄がデフォルトで公開されるようになっている。これらはブロックチェーンから得られるものに近いが、Venmoの場合そういったデータを匿名化するような事はせず単純に提供しているだけで、大きなプライバシーリスクがある。

そして通常の決済と違い、暗号通貨ならではの問題としてFungibilityが挙げられる。Fiatと異なりBitcoinのような暗号通貨は、その通貨がどのように流通してきたかブロックチェーンの取引履歴を遡ることで確認することができる。そういった側面があるため、

  • マイニングされたばかりのコイン(これまでの取引履歴がなく汚染されていないことが確実なため)がプレミアで売られている。
  • 取引所は取引履歴をベースに顧客をブロックすることが可能。
  • 取引所は単なる第三者オブザーバーではない。

これはGMailGoogle MapやAndroidを使いながら、Googleからプライバシーを保護しようとするのに似ている。

暗号通貨のプライバシーのための防御とは何か?

↑のような脅威から自身を守るために、暗号通貨において必要な防御とは何だろうか?自身が何も知らなかったから問題はない、どんな使われ方ををしていようが自分はそれについて知らなかった、だから自分は関係ないというのは防御にはならない。法の執行機関はそのようなことは気にしない。そのため我々は何をする必要があるか?

Bitcoinのプライバシーを侵害しようとするエンティティは?

通常、ブロックチェーン上のプライバシーの脅威というと、サードパーティブロックチェーンの観察者などをイメージするが、そういった脅威だけではなく、現実には以下のような積極的な攻撃を行うエンティティ

  • ターゲットとなるユーザーから支払いを受け取るエンティティ
  • ターゲットとなるユーザーへ支払いを行うエンティティ
  • 三者とのやりとりが可能なエンティティ

や以下のような明確な攻撃者が考えられる。

  • 自身の顧客を追跡しようとするマーチャント
  • 受信者のリアルな身元を特定しようとするユーザー
  • 特定の取引行動をした顧客をBANする取引所

プライバシーのアプローチ

暗号通貨のプライバシーを改善するための技術は↑のように数多く広い範囲に渡って提案されているが、それらをすべて個別に調べたくはない。これらの提案は3つの種類のシステムという観点で分類できる。

  • Bitcoin:支払いのソースを明示的に識別している
  • デコイトランザクションをベースにしたシステム:
    • CoinjoinやMimblewimbleなど(現在のトランザクションからデコイを選択するタイプ)
      複数人のユーザーの送金を1トランザクションで行うミキシングベースのアプローチで、インプットのどのコインがどのアウトプットに流れたのかを難読化する。
    • Cryptonote/RingCT(Moneroなど)(全履歴からデコイを選択するタイプ)
      未使用/使用済み関係なく、ブロックチェーンからTXOをサンプリングし、本当に使用するUTXOと混ぜてどれが使用するコインか分からないようコインのソースを難読化する。
  • ZerocinやZerocashなど
    支払いのソースを識別することができないプライベートトランザクション。強力なアプローチで、コインの送信元、送金先、送金量が秘匿され、周りのノードはそれが正しいことを一緒に付与されたゼロ知識証明を使って検証する。

Bitcoinの支払いの場合

Bitcoinでマーチャントに支払いをする場合、支払いに使用するコインがどこから来たものなのかソース明確に特定する必要がある=インプットでUTXOを指定する。これが基本的にプライバシーを持たない理由。

デコイベース支払いの場合

デコイベースのシステムで支払いをする場合、この場合も同様に支払いに使用するコインがどこから来たものなのかソース明確に示す必要があるが、それとは別にデコイ用のソースを混ぜ、デコイ入りの複数のソースとして指定することで、本物のソースを隠す。トランザクションを見てもどれが本物のソースか誰も分からない。

Zerocashの支払いの場合

最後にZerocashで支払いをする場合、コインのソースを識別する情報は何もない。

デコイシステムはプライベートか?

Bitcoinのプライバシーの制限についてはよく研究されている。Zerocashのプライバシーの制限は、学術文献と実際に研究がされている。しかしデコイベースのシステムは実際どうだろうか?

f:id:techmedia-think:20190121164230p:plain

↑のTaint treeは、支払いに使われた資金について、その資金およびデコイの源(ソース)となる可能性を追っていってできる歴史のツリーだ。

そしてコインをマーチャントに支払った場合、買い手はそのコインがどこにいくのか見ることが可能だ↓

f:id:techmedia-think:20190121173358p:plain

ただ、コインはマーチャントとは別のユーザーによりデコイの支払いとして使われる可能性もあり、その場合コインがどこにいったのかは分からない。つまりコインの送信先の可能性のみが分かるというだけだ。

顧客の識別

この状態でどういったことができるだろうか?

できることの1つは、あなたがマーチャントか共謀するマーチャントグループだった場合、繰り返しの支払いにより顧客を追跡することができる。私が毎日Target(小売店)に行き、現金で買い物をする分には誰も私を追跡できないだろう。じゃあ暗号通貨で支払いをするとどうだろうか?理想的には、例えば3つ商品を別々に購入した場合、3つの購入は別々のものでリンクされるべきではない。単純に考えるとこれらが結びつくようなことは無いように思える。しかし、私が何かを購入し、代金として$20を支払い、お釣りを$5受け取る。私は3つの各支払でこれと同じことをする。すると遅かれ早かれ受け取ったお釣りを使わなくてはならなくなる。その場合、そのデコイを含むトランザクションのインプットの1つはマーチャントから前回購入した際のお釣りになる。基本的にデコイは今までのトランザクションの中から一様にランダムに選択しているため、このような状況でそれがデコイとして選ばれる可能性は低い。

また別の観点として、3つの支払いで使われたコイン(デコイを含む)についてTaint treeを構成し、それぞれ3つの支払いのコインが同じ祖先を指しているケースを考えてみよう↓

f:id:techmedia-think:20190121193121p:plain

暗号通貨で支払いをするために取引所で多額のコインを入手し、それが祖先となる支払いのリンクが形成される。デコイが含まれていても共通の祖先に遡ることができれば、同じ人物による支払いであることが特定できる情報をマーチャントに与えることになる。これは1つのマーチャントに限った話ではなく、複数のマーチャントが結託した顧客を追跡する可能性も考えられ、これも問題である。

匿名マーチャントの識別

もう1つ別の視点の攻撃について考える。あなたが民主主義の活動家で、匿名で寄附を受け付けるサイトを持っているとしよう。ただ、あなたが働いている国での生活が危険にさらされるため、自分の身元は明らかにしたくない。活動のために資金を得たいが、政府はあなたを特定したがっている。プライバシーが保護されたシステムでは、あなたがその寄付金を受け取り取引所に預けるのは安全なはずだ。例え取引所が政府によって管理されていても、彼らがあなたを特定する方法はない。あなたは安全なはずだが、これは事実ではない。

政府があなたを特定したい場合、政府いくつかの(Torでしかアクセスできないものを含む)Webサイトに載っているあなたのアドレスを知っているだろう。彼らにできるのは、3つの追跡用の支払いをすることだ。あなたはそれを受け取り取引所に預ける。すると、取引所の記録を入手した人物であれば誰でも(召喚状を入手したり、取引所にハックしたり)、預金されたコインのセットとTaint treeを見ることで、匿名の支払いを受けているこの民主主義活動家が誰なのかを調べることができる。

f:id:techmedia-think:20190122150406p:plain

3つの追跡用の支払いのペイントされたコインがデコイとして使われることも考えられる。デコイはそれぞれがランダムに選択するので、誰であろうと預金をする際にペイントされたコインをデコイとしてピックアップする可能性がある。しかしペイントされたコインの選択を3回も5回も100回もすることはないだろう。政府があなたの預金を調べてTaint treeに送った痕跡の支払いが全てにおいて存在するなら、それは圧倒的な確率で本人であることの証拠になる。その証拠を持ってあなたが民主主義活動家であることが判明してしまう。これについてはかなり問題がある。暗号通貨にはプライバシーがあると直観で思っている人が多いのに反し、実際にそれを使用する人が学ぶと驚くような方法でプライバシーの侵害が見つかるだろう。

そのため悪意ある送信者/受信者とのやりとりを繰り返すことは実際に危険だ。

ダスト攻撃:どこでお金が使われているかを確認する

さて↑でマーチャントに支払ったコインが送金される先が(正確には候補が)分かるとといった内容を覚えているだろうか? 支払いをするということは、同時に将来そのコインを含む可能性のあるトランザクションを知ることができ、これを悪用することもできる。例えば、友人がどこでお金を使っているのか調べるのに利用できる。小額の支払いを、マーチャントと友人にそれぞれする。そしてTaint treeとトランザクショングラフを監視する。するとある時点で面白いことが起こるかもしれない。

f:id:techmedia-think:20190122164220p:plain

この両方の資金を含む可能性のあるトランザクションが公開された場合、誰かがデコイとしてランダムに選択したものなのか、それとも友人とマーチャントに支払ったコインが実際一緒に使われたのか。そしてマーチャントがホットウォレットから資金をコールドウォレットに移したのか、それとも請求への支払いにあてたのか。もちろんデコイの可能性もあるが、こういうトランザクションが何度も観測される場合、あなたの友人はこのマーチャントで定期的な購入をしているという強い証拠になる。

デコイアプローチの制限

↑のようにデコイベースのアプローチには実際には限界がある。

  • 顧客の追跡が可能
  • 匿名マーチャントも特定される
  • 三者にお金の行き先が分かる

さまざまなプライバシー向上のための技術や暗号通貨について思う共通の認識は、Bitcoinはおそらくプライベートではない(チェーン的な意味ではなくて)、しかしデコイやZerocashのような仕組みにより意味のあるプライバシーが追加される。技術が何かが問題ではなく、これらの技術の間にはどれくらいプライベートであるかという点でトレードオフがある。そしてそのトレードオフが何を意味するのかについてこそ理解する必要がある。

デコイアプローチを使う場合

何らかの理由でデコイスキームを使用する場合、5つの起源ではなく5000もしくは500万の起源の可能性があるような非常に大きな匿名セットを使える場合、実行可能であるかもしれない。

以下のようなケースであれば機能すると思われる

  • デコイのセットが非常に多い(5とかではなく500万のデコイなど)
  • デコイのセットは直近のすべてのトランザクションで実質的に重なっている
  • デコイは本当に慎重に選択されること

しかし、

  • どの程度のプライバシーが提供されているのかの厳密な分析
  • 物事がどこで失敗するかを注意深く理解する
  • 制限を認める

といった点に十分注意する必要がある。実際以前、Moneroがデコイをサンプリングした分布と、実際の人々がコインを使用する分布が一致しなかったことを示す一連の論文があった。そこにはギャップがあり、これは現在やや修正されているが、Moneroの旧バージョンでは、圧倒的な確率で最後のトランザクションが本物のトランザクションであった。

もしこのデコイベースのアプローチを取るなら、繰り返しになるがそれがどれくらいのプライバシーを提供するのかについての様々な分析を知る必要がある。

スケーラビリティ

制限を定めることはスケーラビリティに帰着する。デコイシステムを利用していて、本当に大きなデコイセットを得るにはスケーリングが必要になる。

対数スケーリング

デコイの数によってリニアにスケールするシステムは持てない。例えばbulletproofをサポートしたMoneroは、デコイを追加するのトランザクション内に1〜2 KB必要とする。もしデコイの数によりトランザクションサイズがリニアに増加するなら100や500、1000個のデコイを持つトランザクションはとても現実にはワークしない。リニアスケーリングのデコイシステムはワークしないので、必要なのはトランザクションサイズやトランザクションの生成、検証時間がデコイの数に対して対数になるようなシステムが必要となる。

Zcashスタイルのシステム

デコイベースではなくZcashライクなシステムを採用する手もある。Zcashでは、トランザクションアウトプットは(金額や受診者)へのコミットメントとなり、金額や宛先は誰にも分からず、それが確かに未使用なUTXOであること、またそれを所有していることの証明をゼロ知識証明で行う。こういったZcashスタイルのシステムを設計するのも1つの方法だ。

  • ゼロ知識証明技術のピックアップ
    スケーラビリティを向上させるためには、暗号が安全で仮定が保証され、セットアップ特性があらゆる運用要件に対応したゼロ知識証明技術をピックアップする必要がある。zk-SNARKだったりbulletproofだったりzk-STARKだったり。
  • zkが効率的であるマークルツリーの深さdを選択
    ゼロ知識証明技術を選択したら、ベンチマークを行い、効率的に動作するようパラメータを選定する。ZcashではUTXOセットはマークルツリーで管理されているが、マークルツリーが長くなれば深さも深くなり、デコイセットでトランザクションは大きくなり、生成や検証は遅くなる。そのためパフォーマンス要件を満たすマークルツリーの深さdを見つける。dが決まるとデコイのセットは2dで決まる。
  • デコイをサンプリングする際の安全性

スケーラビリティ vs プライバシー

暗号通貨にはプライバシーソリューションが必要である。オンチェーンソリューション?またはオフチェーンで解決した方がいいかもしれない。

ソリューションが上手く動作することを期待するが、

  • 何が起きているのか批判的に考え
  • 現実的な脅威モデルは何か?
  • 対処しなければならない問題は何か?

を究明する必要がある。

そして、プライバシーよりもスケーリングを優先させるが、制限についてきちんと理解すること。

  • 実際の脅威モデルは傍観者ではない。
  • プライバシーを追加してもプロトコルが完全にプライベートになるわけではない。
  • 攻撃というものは良くなるだけだ。

現在は、プライバシーソリューションがどう機能するのか黎明期にあり、プライバシーソリューションを構築し、攻撃する方法について多くの経験はまだない。インターネットのプライバシー問題がどれほど悪いか理解するのに20年かかったように、暗号通貨をベースとしたプライバシー問題の理解にも時間がかかるだろう。そして最後にプライバシー問題はプロトコルへの小さな微調整で魔法のようになくすことはできない。