Joinmarketのシビル攻撃の防ぎ方
BIP119の話題でどのようにコンセンサスを測るかという問題について、基本的にどの方法もシビル攻撃が簡単にできてしまうのでいっそフォーク覚悟で提案したほうがいいという意見に傾倒している今日このごろです。
シビル攻撃の防ぎ方といえばJoinmarketというミキシングプロトコルが昨年、シビル攻撃耐性を強化するために流動性提供者に預託金を求める変更を加えていました。ビットコインのプロトコル変更の例に適用できるものではありませんが、ミキシングのプライバシーに関する問題提起から解決策、そしてその副作用までがわかりやすくて面白い事例だったので紹介したいと思います。
ミキシングとは
ミキシングが何かご存知の方がほとんどだと思いますが、今回の記事を理解しやすいような捉え方で整理します。
ミキシングサービスの利用者は、自分のコインと他人のコインを混ぜることでコインの来歴を追跡しにくくし、プライバシーを得ることが目的です。カストディアルなミキシングサービスは単純に資金をコミングルにしてから取り出すため強力ですが資金の持ち逃げリスクがあります。一方ノンカストディアルなミキシング(CoinJoin)ではトラストレスに参加者間でコインをミキシングしますが、何回で何人とミキシングしたかによって確率的な追跡ができる場合があります。
Joinmarketではユーザーを利用者(テイカー)と流動性提供者(メイカー)に分け、テイカーがメイカーにお金を払って資金を混ぜてもらいます。例えばメイカー2人が参加するJoinmarketでは、最終的に3つの同額のUTXOと2つのお釣りUTXOが生まれ、本人以外にはどれがどの利用者のものかわかりません。この仕組みのおかげで任意の金額をミキシングすることができます。
Wasabiにはメイカーという概念はなく、すべての流動性は参加者が金銭的な見返りなしに提供しています。(この構造に対する批判も後述)
また、そのため0.01BTC、0.1BTCのように出力されるUTXOの金額が一致するように決められており、どうしてもプライバシー面で厄介なお釣りが発生します。
シビル攻撃
さて、ミキシングをする目的は誰からも追跡できないプライバシーを得ることです。つまり、ランダムにたくさんの人とミキシングする必要があります。なぜなら、もし毎回同じ相手とミキシングしていたらその相手には完全に追跡されてしまうからです。
この状況をJoinmarketで例えてみましょう。もし大多数の流動性提供者が実は同一人物だったら、数回ミキシングした程度では全くといっていいほど効果がありません。ミキシングはマネロン目的の場合もあるため、大半のミキシング相手が捜査機関やブロックチェーン解析企業である可能性も否定できません。自分は無関係でもプライバシー効果が低かった上に、たまたま容疑者とミキシングしただけで捜査対象になりかねないので大問題です。
Joinmarketにおいてはこのコストが安いことが問題視されました。ミキシングに流動性を大量に提供するだけで良く、Joinmarketに開発者の想定よりメイカーが少なかったためです。つまりシビル攻撃耐性が低かったのです。
Wasabiでも参加に必要な手数料程度のコストに見合った情報が得られると判断された場合は捜査機関などが参加している可能性を否定しきれません。例えば大規模なハックや詐欺の資金洗浄が行われそうなタイミングだけでもコストをかけてシビル攻撃を試される可能性があります。
FIDELITY BONDとは
シビル攻撃のコストを上げるために提案されたものはFidelity Bondと呼ばれるもので、和訳すると身元保証金みたいなものです。具体的には流動性提供にはCheckLockTimeVerifyによるタイムロックで別途保証金を積むことを必須にしました。
単純に流動性を提供するだけならいつでもやめられる上に収入が得られるのに対し、Fidelity Bondは何も生まないロックアップでビットコインの時間的価値を浪費します。このコストでシビル攻撃コストが上昇するという理屈です。
この変更を加える前であれば数千万円という現実的なコストでシビル攻撃が成功しうるという状況から、流動性提供者の大半を同一人物が行うためには数万BTCを用意しロックする必要があるという状況にできました。ロックアップの期間に応じて重み付けするという仕組みでシビル攻撃に必要なBTCの枚数を超短期なら数万BTC、ロックアップ期間が無限(つまりバーンと同等)なら数十BTCというレベルまで引き上げることに成功しました。
対策の副作用
勘のいい読者様はもう気づいているかもしれませんが、この施策には副作用があります。そう、メイカーにとっては資金効率が下がり、コストが増大するという点です。ただでさえ予想より少なくて困っていたメイカーをこれ以上減らすこと自体がシビル攻撃耐性を弱めるという副作用を持ちます。
Joinmarketの流動性供給状況がFidelitiy Bondの導入前後でどう変化したかの定量的なデータは見つかりませんでしたが、この副作用が主目的の達成とどれくらいバランスしたかが気になるところです。
まとめ
Joinmarketというミキシングサービスはシビル攻撃に弱い可能性があったため、ミキシングのリクエストに応える流動性供給者に資金のロックアップを課した。ロックアップ期間による重み付けがあり、95%の確率でトランザクションを追えるようなシビル攻撃を行うために超短期では数万BTCを用意するか、あるいは数十BTCをバーンする必要がある状態にした。しかし、流動性供給のコストを上昇させたことで、流動性供給者を減少させる副作用があった可能性もある。
特に教訓があるわけではありませんが、シビル攻撃について考えていたら教材っぽい出来事を思い出したので紹介しました。
次の記事
読者になる
一緒に新しい世界を探求していきましょう。
ディスカッション