跳至主要內容
高級

CoinJoin 隱私技術

CoinJoin 是一種透過合併多個使用者交易來打破交易圖分析的隱私技術。本文將深入介紹其原理、主要協議實作和實務考量。

25 分鐘

為什麼需要 CoinJoin?

比特幣區塊鏈是完全公開的,任何人都可以追蹤交易流向。這種透明性帶來了嚴重的隱私問題:

鏈上隱私威脅

  • * 交易圖分析:追蹤資金從一個地址流向另一個地址
  • * 共同輸入啟發法:假設同一交易的所有輸入屬於同一人
  • * 找零輸出辨識:透過金額推斷哪個輸出是找零
  • * 地址聚類:將多個地址關聯到同一實體

CoinJoin 的核心想法是打破「共同輸入啟發法」:讓多個不相關的使用者共同建構一筆交易, 使分析者無法確定哪個輸入對應哪個輸出。

基本原理

CoinJoin 由 Gregory Maxwell 在 2013 年提出。其核心機制非常簡單:

CoinJoin 交易結構

普通交易:
Alice: 1 BTC → Alice': 0.7 BTC + 手續費
Bob:   1 BTC → Bob':   0.8 BTC + 手續費

CoinJoin 交易:
┌─────────────────────────────────────────┐
│ 輸入                    輸出            │
│ ─────                   ─────           │
│ Alice: 1 BTC     →      0.5 BTC (?)     │
│ Bob:   1 BTC     →      0.5 BTC (?)     │
│                  →      0.5 BTC (?)     │
│                  →      0.3 BTC (找零?) │
│                  →      0.2 BTC (找零?) │
└─────────────────────────────────────────┘
觀察者無法確定哪個 0.5 BTC 屬於誰

關鍵特性

  1. 無需信任:每個參與者只簽署自己的輸入,沒有人能偷取他人資金
  2. 等額輸出:相同金額的輸出無法被區分
  3. 原子性:交易要麼完全成功,要麼完全失敗

簽名流程

// 1. 協調者收集所有輸入和輸出
inputs = [alice_utxo, bob_utxo, carol_utxo]
outputs = [
  alice_output,   // Alice 提供的輸出地址
  bob_output,     // Bob 提供的輸出地址
  carol_output,   // Carol 提供的輸出地址
  alice_change,   // Alice 的找零
  bob_change,     // Bob 的找零
]

// 2. 建構未簽名交易
unsigned_tx = create_transaction(inputs, outputs)

// 3. 每個參與者驗證並簽署自己的輸入
alice_sig = alice.sign(unsigned_tx, alice_utxo)
bob_sig = bob.sign(unsigned_tx, bob_utxo)
carol_sig = carol.sign(unsigned_tx, carol_utxo)

// 4. 組合所有簽名並廣播
final_tx = combine_signatures(unsigned_tx, [alice_sig, bob_sig, carol_sig])
broadcast(final_tx)

匿名集 (Anonymity Set)

匿名集是衡量 CoinJoin 隱私強度的關鍵指標:

前向匿名集

一個 UTXO 可能來自多少個輸入?如果有 10 個等額輸入, 觀察者有 1/10 的機率猜對來源。

後向匿名集

一個輸入可能對應多少個輸出?這決定了追蹤資金去向的困難度。

匿名集計算

// 假設一筆 CoinJoin 有以下等額輸出
outputs = [
  0.1 BTC,  // 等額輸出
  0.1 BTC,  // 等額輸出
  0.1 BTC,  // 等額輸出
  0.1 BTC,  // 等額輸出
  0.1 BTC,  // 等額輸出
  0.05 BTC, // 找零(可辨識)
  0.03 BTC, // 找零(可辨識)
]

// 等額輸出的匿名集 = 5
// 找零輸出的匿名集 = 1(可能被關聯到輸入)

// 多輪 CoinJoin 後,匿名集會累積
// 例如:5 x 5 x 5 = 125(三輪後)

主要協議實作

JoinMarket

JoinMarket 採用做市商模式,分為 Maker(提供流動性)和 Taker(發起 CoinJoin):

JoinMarket 架構

Maker(流動性提供者):
┌─────────────────────────────────────┐
│ * 在訂單簿發布報價                  │
│ * 提供 UTXO 參與 CoinJoin           │
│ * 收取少量手續費(約 0.01-0.1%)    │
│ * 被動等待 Taker 選擇               │
└─────────────────────────────────────┘

Taker(隱私需求者):
┌─────────────────────────────────────┐
│ * 選擇多個 Maker 參與               │
│ * 建構 CoinJoin 交易                │
│ * 支付 Maker 手續費                 │
│ * 獲得隱私保護                      │
└─────────────────────────────────────┘

優點:
* 去中心化,沒有中央協調者
* Maker 可以賺取收益
* 任何時候都可以發起 CoinJoin

缺點:
* 需要技術知識設定
* Taker 付費,Maker 獲益

Wasabi Wallet (WabiSabi)

Wasabi Wallet 使用 WabiSabi 協議,這是一種基於 Keyed-Verification Anonymous Credentials 的進階方案:

WabiSabi 協議

WabiSabi 流程:

1. 輸入註冊階段
   ┌─────────────────────────────────────┐
   │ 用戶向協調者註冊輸入                │
   │ 協調者簽發匿名憑證(代表金額)      │
   │ 憑證隱藏實際金額                    │
   └─────────────────────────────────────┘

2. 輸出註冊階段
   ┌─────────────────────────────────────┐
   │ 用戶透過 Tor 以新身份連接           │
   │ 使用憑證註冊輸出                    │
   │ 協調者無法關聯輸入和輸出            │
   └─────────────────────────────────────┘

3. 簽名階段
   ┌─────────────────────────────────────┐
   │ 用戶驗證交易包含自己的輸出          │
   │ 簽署自己的輸入                      │
   │ 協調者廣播完整交易                  │
   └─────────────────────────────────────┘

特點:
* 支援任意金額(不限於固定面額)
* 協調者無法學習輸入輸出對應
* 內建 Tor 匿名網路支援

Whirlpool (Samourai)

Whirlpool 使用固定面額池(Pool)設計:

Whirlpool 池設計

可用池:
┌─────────────────────────────────────┐
│ 池名稱        │ 面額      │ 最低輸入 │
│ ─────────────│───────────│─────────│
│ Pool 100k    │ 0.001 BTC │ ~0.001  │
│ Pool 01      │ 0.01 BTC  │ ~0.0101 │
│ Pool 05      │ 0.05 BTC  │ ~0.0505 │
│ Pool 5       │ 0.5 BTC   │ ~0.505  │
└─────────────────────────────────────┘

交易結構(Tx0):
┌─────────────────────────────────────┐
│ 輸入: 用戶原始 UTXO                 │
│                                     │
│ 輸出:                               │
│ * 多個池面額 UTXO(準備混幣)       │
│ * 協調者手續費                      │
│ * 找零(送回錢包)                  │
└─────────────────────────────────────┘

混幣特點:
* 每輪 5 個等額輸入 → 5 個等額輸出
* 首次混幣付費,後續免費重混
* 完美的等額輸出,無找零

等額輸出 vs PayJoin

等額輸出 CoinJoin

傳統 CoinJoin 要求等額輸出以確保不可區分性:

優點

  • * 輸出完全不可區分
  • * 明確的匿名集
  • * 易於分析隱私增益

缺點

  • * 找零輸出會洩露資訊
  • * 明顯是 CoinJoin 交易
  • * 可能被某些服務拒絕

PayJoin (P2EP)

PayJoin(Pay-to-EndPoint)是一種看起來像普通支付的 CoinJoin:

PayJoin 原理

普通支付:
Alice (1 BTC) → Bob (0.3 BTC) + Alice 找零 (0.699 BTC)

PayJoin:
Alice (1 BTC) + Bob (0.5 BTC) →
  Bob (0.8 BTC) +     // Bob 收款 + 他自己的輸入
  Alice (0.699 BTC)   // Alice 找零

分析者看到:
* 2 個輸入,2 個輸出
* 看起來像普通的雙輸入支付
* 無法確定支付金額(0.3? 0.8? 其他?)
* 打破「共同輸入啟發法」

BIP-78 標準化了 PayJoin 協議

實務挑戰

協調問題

挑戰:
1. 參與者發現
   * 如何找到其他想混幣的人?
   * 中央協調者 vs 去中心化

2. 拒絕服務攻擊
   * 惡意參與者拒絕簽名
   * 浪費其他人時間
   * 解決方案:保證金、信譽系統

3. 隱私洩露給協調者
   * 協調者可能看到輸入輸出對應
   * 解決方案:盲簽名、WabiSabi

4. 時間協調
   * 所有參與者必須同時在線
   * 超時處理機制

找零問題

找零輸出是 CoinJoin 最大的隱私漏洞:

問題示例:
┌─────────────────────────────────────┐
│ 輸入              │ 輸出            │
│ ─────────────────│─────────────────│
│ Alice: 1.234 BTC │ 0.1 BTC (混合)  │
│ Bob:   0.567 BTC │ 0.1 BTC (混合)  │
│                  │ 0.1 BTC (混合)  │
│                  │ 1.131 BTC (找零)│ ← 可推斷屬於 Alice
│                  │ 0.464 BTC (找零)│ ← 可推斷屬於 Bob
└─────────────────────────────────────┘

解決策略:
1. 選擇適當的池大小,最小化找零
2. 將找零也納入後續混幣
3. 使用找零作為 Maker 流動性
4. 捐贈找零作為礦工費

合規風險

注意事項

  • * 某些交易所可能標記或拒絕 CoinJoin 輸出
  • * 不同司法管轄區對隱私工具有不同態度
  • * CoinJoin 本身是中性技術,用於合法隱私保護
  • * 建議了解當地法規再使用

協議比較

特性 JoinMarket Wasabi Whirlpool
協調方式 去中心化 中央協調 中央協調
輸出類型 等額 任意金額 固定面額
費用模式 Taker 付費 協調費 首次付費
最小金額 靈活 ~0.01 BTC ~0.001 BTC
找零處理 可混幣 自動處理 隔離
技術門檻

最佳實務

CoinJoin 使用建議

  • 1. 多輪混幣:單次混幣提供有限保護,多輪累積匿名集
  • 2. 隔離找零:不要將找零與混合輸出合併使用
  • 3. 使用 Tor:隱藏 IP 地址,避免網路層關聯
  • 4. 等待時間:不要立即花費混合輸出,等待更多區塊確認
  • 5. UTXO 管理:避免合併不同匿名集的輸出
  • 6. 金額考量:選擇適當的池大小,減少找零

Silent Payments

避免地址重用,每次收款使用新地址。與 CoinJoin 互補, 提供接收端隱私。

了解更多 →

Taproot

使複雜腳本看起來像普通支付,提升 CoinJoin 和多簽的隱私性。

了解更多 →

總結

CoinJoin 是目前最實用的比特幣鏈上隱私技術。通過讓多個使用者共同建構交易, 打破了交易圖分析的基本假設。雖然各協議有不同的權衡,但核心原理相同: 使觀察者無法確定輸入和輸出之間的對應關係。

隨著 WabiSabi 等新協議的發展,CoinJoin 變得更加靈活和隱私。 結合 Silent Payments 和 Taproot,比特幣的隱私工具箱正在不斷完善。

已複製連結
已複製到剪貼簿