もう一つ簡単な例は、アドレス形式の違いです。P2SH(Pay to Script Hash)形式の入力に対し、P2SH形式とP2PKH(Pay to PubKey Hash)形式という異なるアドレス形式が一つずつ含まれる場合も、やはり簡単に特定できてしまいます。
もちろんウォレットの実装によりますが、お釣りアドレスは殆どの場合入力と同じ形式、つまりP2SH形式になるはずだからです。
プライバシーも含めた改善として、オフチェーントランザクションやライトニングネットワークが検討されています。
ライトニングネットワークには入力が無いため、共通入力所有者ヒューリスティックスの懸念がありません。アドレスの再利用もなく、お釣りアドレスもありません。
もちろん万能というわけではなく、例えば、とある論文”On the difficulty of hiding the balance of lightning network channels“で金額について漏れてしまうことなどが分かっていますが、現在よりも改善されるのは間違いないでしょう。
プライバシーとセキュリティはまさにトレードオフ!双方の開発の最前線を紹介|BTCプライバシー編
坪 和樹
2019年6月8日から9日にかけて、アムステルダムでBreaking Bitcoinというカンファレンスが行われました。
本コラムは、公開された動画や書きおこしをもとに、その発表内容を追いかけ、Bitcoinのセキュリティに関する取り組みの最先端を知ろうという試みです。 発表内容を日本語で、かつ実際の事例などを交えて解説することで、少しでも皆様がBitcoinの仕組みや最新の研究について詳しくなるための一助になれることを願います。 前回に続き、Chris Belcher氏のBreaking Bitcoin Privacyという講演の後半部分を取り上げます。
お釣りアドレスの特定
前回、所有者を特定できてしまうという共通入力所有者ヒューリスティックス、コインジョインなどについて取り上げました。次に、お釣りアドレスについて考えてみましょう。 一番簡単な例は、お釣りアドレスは全く新しいアドレスになるパターンです。
もしウォレットがアドレスを毎回変更する実装になっていた場合、お釣りのアドレスは新規に生成されたものになるはずです。一方、支払先のアドレス(受け取り側)には履歴が残っていることが多いため、このケースの特定は容易です。
もう一つ簡単な例は、アドレス形式の違いです。P2SH(Pay to Script Hash)形式の入力に対し、P2SH形式とP2PKH(Pay to PubKey Hash)形式という異なるアドレス形式が一つずつ含まれる場合も、やはり簡単に特定できてしまいます。 もちろんウォレットの実装によりますが、お釣りアドレスは殆どの場合入力と同じ形式、つまりP2SH形式になるはずだからです。
統合およびバッチ処理による検出も知られています。大規模な商人や事業者は、受け取った資金をバッチ的に、つまり一日に一回などの間隔で統合処理を行うことがあります。したがって、そういった処理が検出された場合、そのアドレスはお釣りアドレスではない、という推測が可能です。
加えて、手数料の置き換え作業も情報漏洩をもたらします。同じ金額の支払いで手数料だけを置き換えるということは、お釣りがそれだけ少なくなるということを意味するからです。 もちろん、支払金額がキリのよい数字かどうか、支払い先がよく知られたアドレスか、など他にも様々な方法が考えられます。 ここで示唆されているのは、お釣りアドレスを特定するのは難しくない、ということです。
アドレスの特定
アドレスを誰が使っているか、特定する方法はたくさんあります。 例えば、お店や取引所を調べたいのであれば、実際にコインを送金し、そのコインがどういった流れで運ばれていくかを見ます。
幾つかのアドレスが分かれば、過去の履歴から芋づる式に辿ることができるでしょう。 また、AML/KYCの情報も有用です。最近ではBinanceが利用していたサードパーティベンダーから漏洩しましたが、そういった情報とリンクさせることも技術的には十分可能でしょう。 もう少し高度なものとしては、タイミング分析があります。タイムゾーン、検索サイトのトレンドなどと照らして、取引がどの国で行われたのかを推測します。また、公開されている情報も含めてリンクさせる他、通信が平文であれば盗聴することも可能でしょう。
コールドウォレットならどうか
一方で、トランザクションが発生しにくいコールドウォレットを探すことは困難を伴います。 2019年はじめ、Quadrigaは顧客の資金を失いました。このとき一部のユーザーがフォーラムなどを介し、デポジット先のアドレスなど、自分の情報を提供しました。
walletexplorer.comというサイトがありますが、ウォレットアドレスのクラスタリング、すなわち分類を行うことでユーザーはホットウォレットを見つけることができました。 しかし、コールドウォレットの発見は困難でした(結果的には、コールドウォレットは無いという結論に至りました)。 お釣りアドレスを生成しない等、コールドウォレットはプライバシーの面からも有用です。
また、1年半前にさかのぼりますが、Bustabitカジノの事例も興味深いものです。 米国ではオンラインギャンブルは禁止されているため、Coinbaseから直接送金した場合、顧客のアカウントは停止されてしまいます。
この対策として、Bustabitはお釣りのない取引(Change Avoidance)を試しました。これによりマイナー費用が抑えられるだけでなく、分析を妨ぐことができました。 また、利用していたデポジットアドレスをjoinmarketにインポートする、といった対策を講じたことで、Coinbaseは以降の分析が難しくなりました。
プライバシーとセキュリティの関係はトレードオフ
現在利用できるコインジョインの実装としては、joinmarketやwasabiウォレットが有名です。これらは、共通入力所有者ヒューリスティックスを無効化し、分類や分析を防ぐことができます。 一方でトランザクションは大きくなりがちなため、マイニングフィーは高くなる傾向があります。
匿名の性質を持つMoneroは、さらにプライベートに特化した実装になっていますが、フルノードとは切り離すことができません。 データは増え続け、トランザクションの出力セットは削除されるわけではないため、フルノードは永続的にデータを保存しなければならないのです。 これではスケーラブルとは言えず、分散化も安定性も高くなりません。
Zcashはどうでしょうか。金額が不透明になる分、Moneroよりもさらに匿名性が高くなっています。 しかしZcashでは”信頼できるセットアップ”を行う必要があり、システムの破壊、監視、インフレの誘発といった可能性があります。 現在の実装では、匿名性がより高ければ高いほど、安定性や分散化といった性質が失われてしまっています。
プライバシーも含めた改善として、オフチェーントランザクションやライトニングネットワークが検討されています。 ライトニングネットワークには入力が無いため、共通入力所有者ヒューリスティックスの懸念がありません。アドレスの再利用もなく、お釣りアドレスもありません。 もちろん万能というわけではなく、例えば、とある論文”On the difficulty of hiding the balance of lightning network channels“で金額について漏れてしまうことなどが分かっていますが、現在よりも改善されるのは間違いないでしょう。
まとめ
現在の実装では、十分にスマートなプログラマが少しの時間と手間を費やせば、簡単にプライバシーが破れるということを見てきました。 ライトニングネットワークはプライバシーを大幅に改善しますが、ペイジョインが解決策になる可能性が高く、BIPで採用されることが期待されます。
次回は、Jonas Schnelli氏のBitcoin P2P Encryptionを取り上げる予定です。