2019年6月8日から9日にかけて、アムステルダムでBreaking Bitcoinというカンファレンスが行われました。
本コラムは、公開された動画や書きおこしをもとに、その発表内容を追いかけ、ビットコインのセキュリティに関する取り組みの最先端を知ろうという試みです。発表内容を日本語で、かつ実際の事例などを交えて解説することで、少しでも皆様がビットコインの仕組みや最新の研究について詳しくなるための一助になれることを願います。
今回はWasabiウォレットへの攻撃を取り上げる記事の後半回となります。
- 前回の記事はこちら
- 前回のコラムでは、Wasabiウォレットの紹介とともに、このウォレットが受ける不正行為の可能性について検証しています。本コラムを読まれる前にこちらの記事で概要を掴んでおくことをオススメします! Wasabiウォレットユーザーは必見!考えられる攻撃手段とは?
リミックス攻撃でユーザーが特定される?
リミックスとは、ご存知のように複数のものが混在しているということです。ここではWasabiウォレットについて扱うので、なぜリミックスと呼んでいるのか、もう少し解説します。
例えばユーザーが匿名性を50として設定したとしましょう。Wasabiウォレットは設定された匿名性に達するまでコインをミキシングし、ラウンドが不足する場合は追加でcoinjoinを行います。
Wasabiウォレットは追加のミキシングが必要かどうかを判断する基準として、出力がCoinjoinの一部かどうか、ヒューリスティックに分析します。
2人のユーザーがcoinjoinを実行し、複数回のラウンドを経たのち、異なる公開鍵で同じ出力が得られたとしましょう。トランザクションはすべて公開されていますし、それがcoinjoinだということを判別することも簡単です。この時には、2人のユーザーには何の影響もありません。
さてここで、2人のユーザーと言った部分を変え、2つのアドレスが同じ個人のものである可能性を考えて見ましょう。同じウォレットを使っていて、異なるアドレスという場合です。 この場合の攻撃として、2つのアドレスについて、4つの出力を作成するcoinjoinを発生させます。ユーザーの側から見ると、ウォレットアドレスあたり2つの出力が見え、これが不足と判断されれば、追加のcoinjoinが必要と判断されて待ち状態のキューに追加されます。
同じウォレットを使っていて、かつキューへの追加が同時に発生した場合、攻撃者は2つのアドレスが同一人物のものだと断定することができます。これはwasabiウォレットが追加のミキシングが必要だと判断したために発生するのであり、不具合などではありません。しかし、いずれにせよプライバシーが漏洩してしまうのです。
リミックス攻撃が成功するためには、当然ですがウォレットがアンロックされていて、coinjoinのために秘密鍵が分かっている必要があります。もちろん、秘密鍵に対応するパスワードも必要です。
また、プライバシーを漏洩させるためのcoinjoinトランザクションを構築するために0.1BTCぐらいの送金が必要になります。これは安い金額ではありませんが、攻撃は可能ということです。当然ながら、プライバシーを漏洩させたい対象として、同じウォレットを使っていると思われる複数のアドレスが分かっていなければなりません。この点も、攻撃が簡単とは言えない部分です。
とはいえ、攻撃者が貧乏であることを期待するのは難しいでしょう。技術的には可能であり、明確な目的があれば、攻撃は成立するのです。
攻撃で手数料を不正に騙し取ることも可能
次は、wasabiウォレットオペレーターへ支払う手数料に関する攻撃です。
wasabiウォレットは非中央集権型のウォレットで、自己管理、つまり自分でキーを保有して、自分で送金先を指定します。各ユーザーは、指定した匿名性、つまりラウンドとサイズに0.003%の掛け算で手数料を算出して支払います。
さて、オペレーターが攻撃者であり、あるいはハッキングされ、資金を盗もうとしたらどうなるでしょうか。手数料を最大化しようというのが、ここでの考えです。0.003%はハードコードされており、固定の値です。しかし、他のパラメーターとして、例えばラウンド数などは変動させることができます。
例として、10000人の偽の参加者がいて、そこへ参加してきた100人を標的に攻撃を行うパターンでは、0.003%で0.1BTCの支払いとすると、ひとりあたり0.003BTC、全体では0.3BTCの手数料となります(偽の参加者分は除く)。この場合は多数の参加者がいるため、segwitブロック全体を埋めることが可能です。そして非標準的なトランザクションとして、マイナーに手数料が直接支払われることになります。
ビットコインでは標準のルールに基づいて判断を行い、そのようなトランザクションはリレーしません。攻撃者はマイナーになることもできるため、手数料をより多く盗み出すという試みは、必ず成功するとは言えませんが可能です。
対策としては、ラウンドの参加者数について、クライアント側で制限を設定できます。例えば100前後にしてしまえば、手数料に関する攻撃は難しくなります。これは、プロトコルを考えると、恐らく技術的に妥当な最大値になるでしょう。合理的な設定と思われますし、変更できないハードリミットにしてしまうことも可能なはずです。
こういったアイディアはすでに議論されており、将来的には修正されていくでしょう。
まとめ
以上、wasabiウォレットに対する攻撃について、前後編で解説しました。
wasabiウォレットについては、ドキュメントやFAQでもプライバシーについて言及されているので、興味がある方は御覧頂くと良いと思います。
ドキュメント:https://docs.wasabiwallet.io/
FAQ:https://wasabiwallet.io/#faq
記事中の表現については講演資料を筆者なりに読み解きつつ、前後で独自の解説を加えておりますが、なにぶん新しい技術に関する内容ですので、もしも間違いなどございましたらお気軽にご指摘くださいませ。(特に技術的な指摘は大歓迎です)