2023年1月20日 6 min read

MADトランザクションはゼロ承認取引の代用たりうるか

MADトランザクションはゼロ承認取引の代用たりうるか
Photo by Ilja Nedilko / Unsplash

2022年にビットコインの世界でにわかに盛り上がったトピックの1つにゼロ承認取引がありました。具体的には、Bitcoin Core 24.0からFull RBFという設定項目ができ、既定で有効化されていないにせよゼロ承認取引をもって決済とするリスクがより広く認知されました。こちらの記事で解説したとおりです。

未承認トランザクションを置き換え可能にするRBFが既定ではない理由と、既定にするメリット
先月、bitcoin-devメーリングリストで「Bitcoin Core 24.0にFull RBFを導入しよう」という提案が話題になりました。これは機能自体の歴史的経緯のほかにも、レイヤー2の設計やコンセンサスの変更 (ソフトフォーク・ハードフォーク)とは異なる「ポリシールールの変更」がネットワーク利用者に及ぼしうる影響という面で興味深い提案です。 今日はRBFとはなにか、なぜ現状ではすべてのトランザクションがRBFではないのか、そしてすべてのトランザクションがRBFになるメリットをまとめます。 RBFとは RBFとはReplace-by-Feeの略で、あるトランザクションがブロック…

その一方で、原理的にセキュアではないゼロ承認取引を、よりセキュアな形に改変しようという提案がありました。Mutually Assured Destrcution (MAD)トランザクション、訳して相互確証破壊トランザクションです。物騒な名前ですね。

今日はそのMADトランザクションについて、トレードオフの中身などを見ていきます。

MAD Transactions: Mutual Assured Destruction Transactions.
An attempt at better zero confirmation transactions in a full-RBF world.

ゼロ承認取引のリスクプロファイル

ゼロ承認取引で支払いを受け取った側(以下「店主」とします)が損をするのは、自分の目で確認したはずの支払いのトランザクションがブロックに取り込まれなかったときです。これは細かく分けると以下の場合になります:

① 店主が確認したトランザクションの入力UTXOが別のトランザクションに先に使われたとき(二重支払いされたとき)。確かに自分のメモリプールにトランザクションが着金したが、その後違うトランザクションに置き換えられた、など。

② 店主が確認したトランザクションが偽物だったとき(シビル攻撃)。自分のノードやウォレットで確認したが、ノードのピアが全て攻撃者で情報統制されていた、など。

③ 店主がトランザクションを確認していないとき。客の見せた画面を信じた、など。

ビットコインは二重支払いを防ぐシステムですが、ゼロ承認取引は定義的にブロックチェーンに取り込まれていないため、二重支払いされるリスクがあります。

現実には①と③が多く、②は必要なコストと難易度がほとんどの場合リターンに対して大きすぎるでしょう。また、③はリテラシーの問題であるため、ビットコイン側の工夫で防げるのは①のみでしょう。

さて、MADトランザクションとは何者なのでしょうか。

PayjoinをベースにしたMADトランザクション

Payjoinは以前紹介したことのある、店舗決済等のトランザクションにおいて客に加えて店主もUTXOを1つ提供することでオンチェーン分析に用いられる"Common Input Ownership Heuristic" (CIOH)という知見を騙す1つのプライバシー機能です。CIOHは「1つのトランザクションにおいて、入力側はすべて同一のユーザーである」という知見で、実際にほとんどのケースでそうであることは感覚的に裏付けられるでしょう。Payjoinは店側と客側が共同でトランザクションを生成するとオンチェーン分析が難しくなる、というものです。

Payjoinについて詳しくは以下の記事からどうぞ。

CoinJoinの進化版としてのPayJoin
先日、コロナウイルスの影響もあってかVRが流行しているビットコイナーたち数十名が、Altspace VRというアプリを使って学会発表のようなものを行っていました。そこでのプレゼンテーションはPayJoinというCoinJoinの新形態についてでしたが、興味深い内容でしたので共有させていただきます。ちなみに、このようなイベントの企画が行われているBitcoin VR Degeneratesというテレグラムグループがあるので、参加したい方はどうぞ。 COINJOIN ご存知の方も多いかもしれませんが、CoinJoinとは複数の主体が1つのトランザクションに参加して、outputが誰のコインかわ…

MADトランザクションはPayjoinと同じく、客側と店側が共同でトランザクションを作成します。この際、まず店側がUTXOと送り先アドレスを客に伝え、客は通常通りのPayJoinトランザクションに加え、それと1つ以上の入力UTXOを共有するMADトランザクションを作成します:

(店側UTXO、客側UTXO(複数可)) → (店側アドレス、客側お釣りアドレス)

この際、客側UTXOの総額は商品価格の2倍以上にします。そして署名時に「あるカラクリ」を利用します。

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.