63 / 736CJ

CoinJoin

共同取引によるプライバシーの工夫

ビットコインの取引は公開されますが、新しい出力の持ち主まで記録から分かるとは限りません。CoinJoin はこの違いを利用し、複数の人が一つの取引を作ります。資金の流れを追いにくくする可能性はありますが、履歴を消したり匿名性を保証したりするものではありません。

CoinJoin は、複数の人の資金を一つのビットコイン取引にまとめる方法です。各自が鍵を管理し、署名する内容を確認します。参加者やその送金先に新しい出力が作られ、観察者には元の持ち主と新しい出力の対応が分かりにくくなる場合があります。効果は取引の構造、プロトコル、観察者が持つ他の情報によって変わります。

アンナはサービスの代金を払う際、受取人に自分の他の資金まで簡単に追跡されたくないと考えています。しかし、ビットコインには非公開の銀行明細に相当するものがなく、取引履歴は公開されています。取引は以前の未使用出力、つまり UTXO を使い、新しい出力を作ります。出力には、金額と、その資金を使うための条件が記録されています。通常の支払いが複数の出力を使うと、分析者は同じ人がそれらを管理していると推測しがちです。これはヒューリスティックと呼ばれる経験則であり、証明ではありません。CoinJoin は異なる持ち主を一つの取引に集め、その前提を崩します。過去を書き換えるのではなく、公開記録から関係を推測する確かさを変えるのです。 [1]

簡単な例として、アンナとパヴェルがそれぞれ 100 500 sat の出力を持っているとします。sat は satoshi の略で、ビットコインの最小単位を表します。二人は各自に 100 000 sat の新しい出力を渡す取引を作り、残りの合計 1 000 sat をネットワーク手数料にします。この例では追加のサービス料金は含めません。コーディネーター、または互いに通信するウォレットが取引案を用意します。デジタル署名は、秘密鍵を使って作る、検証可能な承認の証明です。秘密鍵は署名するための秘密のデータであり、署名しても鍵そのものは公開されません。各自は自分の入力に署名する前に、自分が受け取る出力のアドレス、金額、手数料、取引条件全体を確認します。コーディネーターだけでは他人の鍵も資金を使う権限も持ちません。必要な署名がそろわなければ、この取引は有効に完成しません。ただし、正しいソフトウェアと取引案の確認が前提です。詐欺師の宛先への送金に署名してしまえば、この保護は役に立ちません。 [1] [5]

例の取引をブロックチェーンだけで見る人には、同額の新しい出力が二つ見えます。金額だけでは、どちらがアンナのもので、どちらがパヴェルのものか分かりません。しかし、確率が必ず半々になるわけでも、匿名性が保証されるわけでもありません。観察者が片方のアドレスや別の手掛かりを知っている可能性があるからです。実際の取引では、見分けやすいお釣り、金額差、出力の種類、時刻などが対応関係を示すことがあります。匿名集合とは、その観察者が区別できない候補の集まりであり、単なるラウンドの登録人数ではありません。ウォレットのスコアも特定のモデルに基づく推定で、すべての観察者があなたについて知る範囲を保証する数字ではありません。 [1] [4]

お金を盗めることと、情報を得られることは別です。単純なコーディネーターは入力と出力の対応を知る場合があります。一方、暗号技術でその対応を隠すプロトコルもあります。IP アドレスや接続時刻といった通信上の情報も重要です。Sybil Attack という問題もあります。一人の攻撃者が多数の参加者を装い、自分の出力を知っていることで残りの候補を絞り込む攻撃です。参加者が署名を拒み、ラウンド全体を止めることもできます。そのため、具体的な参加条件や、大量の要求・妨害による DoS への対策を見る必要があります。入力が多いというだけでは、こうした問題への答えになりません。 [1] [4]

後日、アンナが新しい出力を、本人確認済みの取引所から引き出した資金と一緒に使ったとします。曖昧にしたかった関係を、観察者が再び結び付けられるかもしれません。アドレスの再利用や、複数の出力を一つにまとめる集約でも、似たことが起こり得ます。Coin Control ではウォレットが使う UTXO を選べるため、異なる用途の資金を分ける助けになります。ただし、完全なプライバシーを得るスイッチではありません。受取人が支払人を知っていたり、サービスが独自の記録を保管していたりする場合もあります。成功したラウンドの後もプライバシーへの配慮は続きます。一つの取引の形だけで決まるものではないのです。 [5]

まず、誰からどの情報を守りたいのかを考えます。知りたがりの受取人、コーディネーター、ネットワークの観察者では、できることが違います。そのうえで、誰が鍵を持つのか、アプリが何に署名するのか、どんな費用がかかるのか、新しい出力をどう扱うのかを確認します。先に資金を預けるサービスと、鍵を渡さない CoinJoin では、必要な信頼が異なります。CoinJoin はビットコインに特別なルールを加えません。ノードは通常の取引とその条件を検証します。ノードとは、ビットコインの取引やブロックを検証するソフトウェアを動かすコンピューターです。CoinJoin は取引所や受取人の記録も消せず、あるサービスが支払いをどう扱うかも保証できません。初心者にとっては、アプリの「匿名」という表示よりも、これらの限界を理解することが役立ちます。 [1] [5]

Gregory Maxwell は 2013 年 8 月に CoinJoin を公に説明しました。ネットワークのルール変更は不要でしたが、人々が互いを見つけて協力する方法は必要でした。JoinMarket は市場型の方法を示しました。共同取引を企画する人が、参加用の資金を提供する他の人に料金を払います。コーディネーターを使うプロトコルには別の進め方があります。例えば WabiSabi は異なる金額に対応し、匿名の資格情報を使って、入力との関係をそのまま明かさずに出力を受け取る権利を証明できるようにします。CoinJoin を一つのアプリと同一視したり、どの方式でも出力がすべて同額だと考えたりしないことが大切です。 [1] [2] [4]

Maxwell の投稿は基本的な発想を、個別ウォレットの文書は操作の流れを、WabiSabi の論文はプロトコルの性質を説明しています。扱っている層が違う資料です。この編集時点で、元の JoinMarket クライアント・サーバーのリポジトリはアーカイブ済みです。ここでは歴史・技術資料として参照し、インストールを勧めるものではありません。BIP 78 の PayJoin は、支払人と受取人の両方が入力を出す、関連する協力方式です。通常、大きな同額出力の集団を作ることは目的としません。方式を比べるときは「プライバシー」という共通の言葉だけでなく、誰が協力し、何を知ることができ、本人とウォレットが署名前に何を確かめるのかを見ましょう。 [1] [2] [3] [4] [5] [6]

例 · CJ

共同トランザクションは単独所有者の証明ではない

Alice と Bob は共同トランザクションの別々の入力を管理し、それぞれ自分の出力を受け取ります。全入力が1人に属するという仮定はここでは誤りです。入力をまとめるだけでは出力の帰属を隠せる保証はありません。金額、他の情報、後の支出で関連が分かる場合があります。

理解を深めるには、この項目とあわせて次もお読みください Bitcoin, Bitcoin のプライバシー, 仮名性, ウォレット, UTXO, トランザクション. 次の項目からも参照されています Change Address, Bitcoin のプライバシー, 仮名性, KYC.

01CoinJoin のコーディネーターは入力の資金を盗めますか?

正しく設計された非保管型の CoinJoin では、参加者が自分の鍵を持ち続けます。署名前には取引全体、特に自分の出力、金額、手数料を確認します。必要な署名なしにコーディネーターは有効な支出を作れませんが、ラウンドを妨害したり参加を拒んだりできます。ただし、自分のお金を詐欺師に送る取引に署名すれば、その支払いを自分で承認したことになります。

02CoinJoin 後の出力は永遠に匿名ですか?

いいえ。履歴は公開されたままです。アドレス再利用、統合、既知の相手への支払い、識別可能なウォレットの動作、ネットワークメタデータによって帰属の曖昧さが減るか失われます。結果はプロトコルとその後の出力の扱いに依存します。

DOC · 001Gregory Maxwell — CoinJoin: Bitcoin privacy for the real world一次資料 DOC · 002JoinMarket client/server一次資料 DOC · 003JoinMarket — Architecture Notes (archived)文書 DOC · 004WabiSabi: Centrally Coordinated CoinJoins with Variable Amounts一次資料 DOC · 005Wasabi Wallet — CoinJoin documentation文書 DOC · 006BIP 78 — Payjoin仕様
改訂日: 一次資料を優先 · 投資助言ではありません