2023年3月17日 5 min read

Tornado Cashからの出金時に利用できる"Proof of Innocence"の概要と実情

Tornado Cashからの出金時に利用できる"Proof of Innocence"の概要と実情
Photo by Tanja Cotoaga / Unsplash

皆さんはTornado Cashを覚えていますか?

イーサリアム上のスマートコントラクトとして実装されたミキシングサービスで、もちろんプライバシー目的のユーザーにも利用されていましたが、昨夏までは特に数多のDefiハックを行うためのトランザクション手数料などの資金源を隠したり、盗難した資金を追いにくくするために使われていることで有名でした。

ところが2022年8月にアメリカ財務省OFACによりTornado Cashのコントラクトが制裁対象(SDNリスト入り)となり、また主要な開発者がオランダで逮捕され、未だ保釈されず勾留されています。

Web上に公開されていたフロントエンドの閉鎖や当局リスクを恐れたカジュアルユーザーの離脱によって流動性がほぼ消滅したTornado Cashは参加者数の少なさによって有意にプライバシーを改善することができなくなったため、犯罪資金洗浄にも使われることがなくなり、存在感が消えてしまっています

ところが最近、Proof of InnocenceというプロトコルをTornado Cash上に追加することで自分が引き出す資金源が既知のハッカーからの入金でないことを証明できるという文章を読み、興味を持ったので調べてみました。

Introducing Proof of Innocence built on Tornado Cash
Tornado Cash is a popular protocol on Ethereum that allows users to make private transactions by breaking the on-chain link between the…
ちなみに無関係ですが当時Tornado CashのGitHub上のリポジトリも削除されて見ることができなくなりました。「制裁対象はコードではなくサービス」という整理により今は復活していますが、ロシア関連の制裁でロシア人開発者によるOSSのリポジトリが削除されるなど、アメリカ政府の意向によるGitHubリスクが年々大きくなっています。

Tornado Cashの仕組み

Proof of Innocenceを理解するには先ずTornado Cashの仕組みを理解する必要があります。

ミキシングサービスとしてTornado Cashに必要な要件の最たるものは「出金時にどの入金に対応するコインが取り出されたか第三者に判らないこと」です。ユーザーがゼロ知識証明を使ってとある入金者であることをその入金がどれかを明かさずにコントラクトに伝えるのがTornado Cashです。

入金時、ユーザーはSecretとNullifierという2つの値を生成し、それらの値へのコミットメントを1つ生成します。プールの指定金額を送金した時にこれがコントラクト内に記録されます。SecretとNullifierは手元に保管します("note")。

出金の際には、SecretとNullifierの値、コントラクト内のVerifier Keyを使ってマークルプルーフのゼロ知識証明を行うとともに、二重出金を防止するためにNullifier自体をコントラクトに提出して記録します。これで入金時と出金時で第三者が比較できる情報はありません。

ゼロ知識証明を実現するために2020年のセレモニーで作成された鍵が利用されているようです。残念ながらSNARKsなどの数学については詳しくないので説明しきれません…。GitHubはこちら

話が逸れますが、Tornado Cashが刺された理由の1つは実質的に運営チームや投資家が存在したことが大きいのではないかと感じています。2019年にバグを直すためにコントラクトをアップグレードしユーザーを強制的に移行させたり(ただし2020年に大半のコントラクトについて管理者権限をバーン)、開発チームやその支援者に配分されるガバナンストークンを発行して他チェーンに展開したりと、ソフトウェアを開発しているだけという言い訳は苦しいと感じます。Immutableなコントラクトを公開して終わり、だったら話は違っていたかもしれません。‌‌

ガバナンス関連の細かい部分が知りたい方などは仮想通貨関連のロビイングを行うアメリカの団体CoinCenterのブログ記事が大変参考になります。英語で団体のポジトークの側面もありますが、興味のある方はぜひ読んでみてください。

Proof of Innocenceの仕組み

Proof of Innocenceは一言で言えば「Tornado Cashから引き出す際に利用したnoteが任意のブラックリストに含まれるアドレスからの入金によって生成されたものではないというゼロ知識証明」です。どういうことか詳しく見ていきましょう。

Great! You’ve successfully signed up.
Welcome back! You've successfully signed in.
You've successfully subscribed to ビットコイン研究所.
Your link has expired.
Success! Check your email for magic link to sign-in.
Success! Your billing info has been updated.
Your billing was not updated.