Tornadoプライバシー観察報告:本当に100%発見されないことができるのか?
出典:創宇ブロックチェーンセキュリティ研究所
前言
Tornado.Cashは、イーサリアムネットワーク上で最も人気のある分散型プライバシーソリューションとして、預金者と引き出し者のアドレス間のオンチェーンリンクを断ち切り、取引の機密性を実現し、ユーザーのプライバシーを保護しています。
ますます多くのプライバシー(マネーロンダリング)を必要とするユーザーがTornado.Cashを使用し始めていますが、Tornado.Cashの実際のプライバシー性はどのようなもので、100%の安全性を実現できるのでしょうか?
創宇ブロックチェーンセキュリティ研究所は、Tornado.Cashの多次元分析を行い、Tornado.Cashの真のプライバシーの信頼性を探求します。
Tornado.Cashの動作原理
Tornado.Cashを分析する前に、Tornado.Cashの動作原理を理解する必要があります。
Tornado.Cashはスマートコントラクト(匿名プール)を使用して、1つのアドレスからトークンを預け入れ、異なるアドレスから引き出すことを可能にし、ゼロ知識証明を通じて預金アドレスと引き出しアドレス間の接続を遮断し、プライバシーを保護します。
その中で、匿名プールのサイズはTornado.Cashのプライバシーの信頼性の高さを直接決定します。もし匿名プールに1件の預金しかなければ、どのアドレスから引き出しても、必ず預金アドレスと同じ人物であることがわかります。
興味のある読者は公式ドキュメントを読むことができます:how-does-tornado.cash-work。
前期準備
Tornado.Cashは現在、ETHおよびERC20トークン(DAI、cDAI、USDC、USDT、WBTC)の預金および引き出し取引をサポートしています。私たちはその中で取引量が最も多いETHを選択し、プライバシー性の分析を行いました。2021年11月4日以前のすべてのTornado.Cashコントラクトの取引記録を抽出し、データは以下の表に示されています:
見ての通り、プロキシコントラクトを有効にした後、大量の取引がプロキシを通じて行われており、匿名プールの取引量の割合図(下表)から、1 ETH匿名プール(33%)と10 ETH匿名プール(30%)が最も多く使用されていることがわかります。
取引分析
取引分類
すべての取引を預金、引き出しに分類した後、各アドレスの預金/引き出し総額(単位ETH)、回数、最大預金/引き出し額、最小預金/引き出し額を統計しました。22714の預金アドレス、31737の引き出しアドレスが得られ、その中の預金/引き出し総額Top 10データは以下の通りです:
預金総額Top 10
引き出しアドレス総額Top 10
見ての通り、預金アドレスと引き出しアドレスは一対一に対応しておらず、預金アドレスと引き出しアドレス間の関係を知ることはできません。
マイニングアドレスのフィルタリング
Tornado.Cashは匿名マイニングインセンティブを導入しました(参照:anonymity-mining)、これは匿名プール内の取引数を増やし、Tornado.Cash全体のプライバシーの信頼性を向上させるためのものです。
したがって、最初のステップは匿名プール内のマイニング取引をフィルタリングすることで、匿名プール内の取引数を大幅に減少させることができます。
分析の結果、マイニングアドレスには以下の特徴があることがわかりました:
マイニングアドレスはTornado.Cashマイニングプールコントラクトアドレス0x746aebc06d2ae31b71ac51429a19d54e797878e9からTRONトークンを引き出します;
マイニングアドレスはプライバシー保護の必要がなく、引き出し時には一般的に自分のウォレットアドレスを使用して手数料を支払います;
マイニングアドレスは一般的に使用頻度が高く、取引が多い古いアドレスです;
この方法を使用して、条件を満たす1051のマイニングプールアドレスを取得しました。マイニングアドレスを除外した後、預金、引き出しアドレスの数の変化は以下の通りです:
マイニングアドレスを除外した後の預金総額Top 10
マイニングアドレスを除外した後の引き出しアドレス総額Top 10
同一アドレスのフィルタリング
預金アドレスと引き出しアドレスが同じ取引は、取引のプライバシーがないため、すべてフィルタリングできます(この部分は大半がマイニングまたは初心者ユーザーである可能性が高いです)。フィルタリング後のデータの変化は以下の通りです:
預金アドレス総額Top 10
引き出しアドレス総額Top 10
リレーアドレスのフィルタリング
引き出しアドレスのプライバシーの安全性を最大化するために、大部分のユーザーは引き出し時にリレーを使用して手数料を支払うことを選択します。したがって、一度の引き出し操作で2件の取引が発生します。
そのうちの1件はリレーに支払う手数料であり、もう1件が実際の引き出し取引です。以下の図のように:
私たちはフィルタリング条件:max > 0.8 | (max <= 0.1 & max >= 0.08)を使用してリレー取引をフィルタリングし、フィルタリング後のデータの変化は以下の通りです:
リレーアドレスを除外した後の引き出しアドレス回数Top 10:
同一ユーザーの関連アドレス関係
次に、Tornado取引プール内のアドレスに関連関係が存在するかを分析します。分析の前に、まずマイニングプールアドレスとリレーアドレスを除外してから分析を行います。
分析方法は、直接取引相手分析方式を採用します。仮にAが充電アドレス、Bが引き出しアドレスで、AとBの間に直接的な関係がない場合、CアドレスがAの直接取引相手であり、Cアドレスが同時にBの直接取引相手であれば、AとBは関連していると判断できます。直接取引相手のデータはチェーン探査から取得します。
アドレスのタイプによって関係を分類すると、充電アドレスと充電アドレス、引き出しアドレスと引き出しアドレス、充電アドレスと引き出しアドレスの3種類の関係に分けることができます。この3種類の関連関係は異なるシナリオに適用されます。
- 充電アドレスと充電アドレス間の関係
Tornadoは0.1ETH、1ETH、10ETH、100ETHしか預け入れられないため、実際の送金プロセスでは資金の分配、手数料の分配、または預け入れ後のアドレスに残ったETHの集約などが発生する可能性があります。
- 引き出しアドレスと引き出しアドレス間の関係
引き出しが必要な場合、引き出しアドレス間でも集約が発生する可能性があります。例えば、取引所に集約されることがあります。
- 充電アドレスと引き出しアドレス間の関係
充電アドレスと引き出しアドレス間に関連が存在するかが重要です。もし非常にプライバシー取引に精通したハッカーであれば、重要なアドレス間の接続を断つためにあらゆる手段を講じるかもしれません。しかし、実際の操作プロセスでは人間が操作しているため、疎漏や見落としが避けられず、手がかりを残す可能性があります。
以上の3つのシナリオと関連タイプに基づいて、100ETHの取引プールを分析します。直接取引相手データを使用して、関連図を生成します(図中のアドレスの後ろのdは充電アドレス、wは引き出しアドレスを示します)。
第一のケース
充電アドレスと充電アドレス間に関連関係が存在する場合、0x0022d8bda338fd7e5c7248f32090252fd6dc11efを例にとります:
このアドレスは複数の充電アドレス間で取引相手の重複が発生しており、チェーン上でこれらのアドレスの関係を分析することで、このアドレスがTornadoに対して100ETHと10ETHを充電した後、残りのETHが0x6bafcd65f9ad3a99509d8d7d987acfa393db7c39アドレスに集約され、そのアドレスが残りの0.1ETHもTornado取引プールに充電したことが判断できます。
第二のケース
引き出しアドレスと引き出しアドレス間に関連関係が存在する場合、0x9c67d8383f1eeb6e2ff2b0d296aa6a51ea2858a1を例にとります:
このアドレスは複数の引き出しアドレス間で関連関係を持ち、これらのアドレスはすべてTornadoの100ETH取引プールから引き出しを行い、各アドレスは1000ETHを引き出しました。
引き出し後、すべてのETHは0x120cffb605c8127442c2f8515eb25749cce52947アドレスに集約されました。
さらに分析を進めると、0x120cffb605c8127442c2f8515eb25749cce52947はETHを何度も周転させ、最終的に0x32e9dc9968fab4c4528165cd37b613dd5d229650などのアドレスに到達し、最終的にはスワップを経てETHを他のトークンに交換し、バイナンスなどの取引所に送金されました。
上記の2つのケースでは、プライバシー取引は充電端または引き出し端の後にのみ関連が生じました。情報を追跡することは可能ですが、充電と引き出しの間の接続は依然として断たれています。次に、第三のケースを探求します。
人は完璧ではなく、どんなに綿密な計画でも手がかりを残す可能性があります。もしTornadoのユーザーが使用時にアドレスを完全に隔離していなければ、取引相手の関係を通じて関連付けられる可能性があります。0x167ae15b74cd20482e80f7e425b4ae6d2cc631c4を例にとります。
上記の関連関係では、5つのアドレスが直接取引相手0x4278314c1a50da6014e580cbff34fc383b335049を通じて関連付けられています。これにより、ある程度この5つのアドレスの入出金関係を確立することができます。さらに金額やその後の資金の流れを掘り下げることで、さらなる追跡が試みられる可能性があります。
全体の実験において、100ETHプールには4132の充電アドレスがあり、703の引き出しアドレスがあり、直接取引相手の重複がある関連アドレスは2859件で、全体のアドレスの約59%を占めています。これは、大部分の人がTornadoプライバシープロトコルを使用する際に、使用上の疎漏により100%のプライバシーを実現できていないことを示しています。
関連アドレスを掘り出すことは、Tornadoの追跡が可能であることを意味します(この記事のサンプルは直接取引相手のみを対象としていますが、より深い取引相手を取ることで精度が向上します)。大量の関連アドレスを取得した後、取引所アドレスのKYCやENS、Twitterなどのチャネルを通じて、実際の情報をさらに掘り下げることができます。
ケース検証結果データ
私たちは、チェーン探査のハッカー事件データベースから過去に発生したいくつかのセキュリティ事件を掘り起こし、Tornadoを使用した関連アドレスを選別し、上記の理論に基づいて分析を行いました。
KuCoin盗難事件の分析
直接取引相手の関連アドレス分析
ハッカーは8つのアドレスを通じてETHをTornadoの100ETH取引プールに預け入れました。これら8つの充電アドレスは、直接取引相手0x23156749a0acefc8f07b9954d181d50084c1519eおよび0x82e6b31b0fe94925b9cd1473d05894c86f277398を通じて関連付けられました。
上記の関連図から、ハッカーの疎漏により、充電アドレス0x34a17418cec67b82d08cf77a987941f99dc87c6が直接取引相手アドレス0x82e6b31b0fe94925b9cd1473d05894c86f277398および引き出しアドレス0xc609b3940be560c8c00e593bea47fb6ecef6b2c6と関連付けられたことがわかります。
0xc609b3940be560c8c00e593bea47fb6ecef6b2c6は2900ETHのみを引き出しました(8つの充電アドレスが預け入れたETH総量のごく一部です)。
ハッカーは0x82e6b31b0fe94925b9cd1473d05894c86f277398から十分な手数料が得られなかったため、0xc609b3940be560c8c00e593bea47fb6ecef6b2c6および0x23156749a0acefc8f07b9954d181d50084c1519eから手数料を転送しました。
充電アドレスの手数料もこれら2つのアドレスから転送されているため、引き出しアドレスと充電アドレスが関連付けられました。
さらに追跡を進めると、引き出されたETHが他のアドレスに転送され、全体のチェーン上でさらに深く掘り下げると、ETHが多くのアドレスに分散され、バイナンスの充電アドレス0x28c6c06298d514db089934071355e5743bf21d60に大量のETHが転入したことがわかります。
これにより、全体のチェーン追跡がバイナンスで断たれ、バイナンスのKYC情報を取得できれば、具体的な人物を特定することができます。
取引所Liquidの盗難
4つの充電アドレスが100ETHのプールに充電したことが確認され、直接取引相手0x5578840aae68682a9779623fa9e8714802b59946を通じて関連付けられています。
FinNexus DeFiプロジェクトの盗難
2つの充電アドレスが関連付けられていることが確認され、0x5271b379f3e1954e20791142d734596a3de28efdおよび0x5ebc7d1ff1687a75f76c3edfabcde89d1c09cd5fが100ETHのプールにETHを充電し、直接取引相手0xfe381bc045b85e0acd93e85ecfe65ecb0fec2a44を通じて関連付けられています。