CoinJoinの進化版としてのPayJoin
先日、コロナウイルスの影響もあってかVRが流行しているビットコイナーたち数十名が、Altspace VRというアプリを使って学会発表のようなものを行っていました。そこでのプレゼンテーションはPayJoinというCoinJoinの新形態についてでしたが、興味深い内容でしたので共有させていただきます。ちなみに、このようなイベントの企画が行われているBitcoin VR Degeneratesというテレグラムグループがあるので、参加したい方はどうぞ。
COINJOIN
ご存知の方も多いかもしれませんが、CoinJoinとは複数の主体が1つのトランザクションに参加して、outputが誰のコインかわからなくする(混ぜる)ということが目的で行われます。プライバシーを向上することが目的の場合、inputとoutputの金額を比較されても完全には解析されないように、すべての参加者が一定の金額で行うことが多いです(0.1BTC単位のinputを任意の数追加して、出力として同じ数だけ受け取るなど)。そうすると、等しい金額のinputとoutputの対応は確率的にしか判断できません。この過程で問題視されるのが、「お釣り」などです。全員がたまたまキリの良いUTXOを持っていたら別ですが、端数は混ざりにくく、CoinJoinの前後でも対応がわかりやすいままです。なので、その端数に関してはプライバシーが向上されませんし、確率に隠れることができないので簡単に追跡できてしまいます。さらに、このようなCoinJoinはほぼ同額の大量のinputとoutputが並ぶので素人にもぱっと見でわかりやすく、ブロックチェーン解析を行っている会社にとっては更に簡単に見分けがつきます。ですので、取引所への入金前や出金後にCoinJoinに参加することでアカウント停止や資産凍結の処分を受ける可能性すらあります。
PAYJOIN (P2EPとも呼ばれる)
PayJoinの革新的なところは、それが「普通の支払いと見分けがつかない」という点にあります。その名のとおり、PayJoinはCoinJoinを「支払いと同時に開催する」というコンセプトで、店舗や友人への支払いの際に行われるものです。支払いのトランザクションを受け手と共同で作り「受け手と2者でのCoinJoin」を行うことで、支払い金額を知らない他者からはinputとoutputがどの主体に属するのか判断することができなくなります。例えば、このトランザクションはPayJoinなのですが、ぱっと見ではoutputが「金額」「お釣り」の普通の送金に見えます。しかし、実際には左側のUTXOのうちいくつかは受け手のもので、しかも支払いでもあるため、トランザクション前後の金額を比較してもどれが該当するかはわかりません。ほとんどの(特に普通の支払いに見える)トランザクションのinput側はすべて同一人物であるという仮定をCommon-input-ownership heuristicといいます。現在のブロックチェーン解析の大部分はこの仮定に基づいているので、PayJoinが広く使われるようになればブロックチェーンを解析してトランザクションの流れを追うことがより難しくなります。
デメリット
PayJoinにはデメリットもいくつかあります。代表的なものをいくつか挙げていきます。まず、PayJoinはトランザクションのサイズが大きくなるので、送金者にとってコストが増加します。これはプライバシーの対価という側面があります。次に、PayJoinを主催するリスクです。支払いを受ける主体が店舗や企業の場合、トランザクションの生成に支払者との共同作業が必要な積極的な手法であるPayJoinを主催することが当局に目をつけられる原因となる可能性があります。ブロックチェーンだけを見ても気づきませんが、決済ページまで行けば誰でもその相手がPayJoinを主催する意思があることに気づきます。最後に、受け取ることが目的にも関わらずトランザクションの作成に受け手の秘密鍵も使うため、受け手がホットウォレットを使用する必要があります。通常はコールドウォレットを使い、xpubからアドレスだけを生成して支払いを受け付けるので、それに対してセキュリティ面では劣ります。
まとめ
PayJoinは簡単なCoinJoinと比較してほぼすべての面で優位性があるように思います。もしPayJoinの手順がウォレットとBTCPayServerなどに実装されればPayJoinが使える店舗などが出てくるでしょう。ただし、メリットを主に享受するのは送り手にも関わらず、デメリットは特に受け手にとって重いものなので、実際に広く導入されるかは少し疑問が残ります。
次の記事
読者になる
一緒に新しい世界を探求していきましょう。
ディスカッション