2022年にビットコインの世界でにわかに盛り上がったトピックの1つにゼロ承認取引がありました。具体的には、Bitcoin Core 24.0からFull RBFという設定項目ができ、既定で有効化されていないにせよゼロ承認取引をもって決済とするリスクがより広く認知されました。こちらの記事で解説したとおりです。
その一方で、原理的にセキュアではないゼロ承認取引を、よりセキュアな形に改変しようという提案がありました。Mutually Assured Destrcution (MAD)トランザクション、訳して相互確証破壊トランザクションです。物騒な名前ですね。
今日はそのMADトランザクションについて、トレードオフの中身などを見ていきます。
ゼロ承認取引のリスクプロファイル
ゼロ承認取引で支払いを受け取った側(以下「店主」とします)が損をするのは、自分の目で確認したはずの支払いのトランザクションがブロックに取り込まれなかったときです。これは細かく分けると以下の場合になります:
① 店主が確認したトランザクションの入力UTXOが別のトランザクションに先に使われたとき(二重支払いされたとき)。確かに自分のメモリプールにトランザクションが着金したが、その後違うトランザクションに置き換えられた、など。
② 店主が確認したトランザクションが偽物だったとき(シビル攻撃)。自分のノードやウォレットで確認したが、ノードのピアが全て攻撃者で情報統制されていた、など。
③ 店主がトランザクションを確認していないとき。客の見せた画面を信じた、など。
ビットコインは二重支払いを防ぐシステムですが、ゼロ承認取引は定義的にブロックチェーンに取り込まれていないため、二重支払いされるリスクがあります。
現実には①と③が多く、②は必要なコストと難易度がほとんどの場合リターンに対して大きすぎるでしょう。また、③はリテラシーの問題であるため、ビットコイン側の工夫で防げるのは①のみでしょう。
さて、MADトランザクションとは何者なのでしょうか。
PayjoinをベースにしたMADトランザクション
Payjoinは以前紹介したことのある、店舗決済等のトランザクションにおいて客に加えて店主もUTXOを1つ提供することでオンチェーン分析に用いられる"Common Input Ownership Heuristic" (CIOH)という知見を騙す1つのプライバシー機能です。CIOHは「1つのトランザクションにおいて、入力側はすべて同一のユーザーである」という知見で、実際にほとんどのケースでそうであることは感覚的に裏付けられるでしょう。Payjoinは店側と客側が共同でトランザクションを生成するとオンチェーン分析が難しくなる、というものです。
Payjoinについて詳しくは以下の記事からどうぞ。
MADトランザクションはPayjoinと同じく、客側と店側が共同でトランザクションを作成します。この際、まず店側がUTXOと送り先アドレスを客に伝え、客は通常通りのPayJoinトランザクションに加え、それと1つ以上の入力UTXOを共有するMADトランザクションを作成します:
(店側UTXO、客側UTXO(複数可)) → (店側アドレス、客側お釣りアドレス)
この際、客側UTXOの総額は商品価格の2倍以上にします。そして署名時に「あるカラクリ」を利用します。