BIP119の話題でどのようにコンセンサスを測るかという問題について、基本的にどの方法もシビル攻撃が簡単にできてしまうのでいっそフォーク覚悟で提案したほうがいいという意見に傾倒している今日このごろです。
シビル攻撃の防ぎ方といえばJoinmarketというミキシングプロトコルが昨年、シビル攻撃耐性を強化するために流動性提供者に預託金を求める変更を加えていました。ビットコインのプロトコル変更の例に適用できるものではありませんが、ミキシングのプライバシーに関する問題提起から解決策、そしてその副作用までがわかりやすくて面白い事例だったので紹介したいと思います。
ミキシングとは
ミキシングが何かご存知の方がほとんどだと思いますが、今回の記事を理解しやすいような捉え方で整理します。
ミキシングサービスの利用者は、自分のコインと他人のコインを混ぜることでコインの来歴を追跡しにくくし、プライバシーを得ることが目的です。カストディアルなミキシングサービスは単純に資金をコミングルにしてから取り出すため強力ですが資金の持ち逃げリスクがあります。一方ノンカストディアルなミキシング(CoinJoin)ではトラストレスに参加者間でコインをミキシングしますが、何回で何人とミキシングしたかによって確率的な追跡ができる場合があります。
Joinmarketではユーザーを利用者(テイカー)と流動性提供者(メイカー)に分け、テイカーがメイカーにお金を払って資金を混ぜてもらいます。例えばメイカー2人が参加するJoinmarketでは、最終的に3つの同額のUTXOと2つのお釣りUTXOが生まれ、本人以外にはどれがどの利用者のものかわかりません。この仕組みのおかげで任意の金額をミキシングすることができます。
Wasabiにはメイカーという概念はなく、すべての流動性は参加者が金銭的な見返りなしに提供しています。(この構造に対する批判も後述)
また、そのため0.01BTC、0.1BTCのように出力されるUTXOの金額が一致するように決められており、どうしてもプライバシー面で厄介なお釣りが発生します。
シビル攻撃
さて、ミキシングをする目的は誰からも追跡できないプライバシーを得ることです。つまり、ランダムにたくさんの人とミキシングする必要があります。なぜなら、もし毎回同じ相手とミキシングしていたらその相手には完全に追跡されてしまうからです。