Chaumian CoinJoin
Chaumian CoinJoin 隱私機制
Chaumian CoinJoin 深度技術實作指南
概述
Chaumian CoinJoin 是比特幣隱私保護技術中最具影響力的實現之一,由密碼學先驅 David Chaum 於 1983 年提出的盲簽章(Blind Signature)概念演進而來。2014 年,開發者 Adam Gibson 在比特幣社群中正式提出了 Chaumian CoinJoin 的實現方案,結合了經典密碼學與比特幣腳本技術,創造出一種即使協調者被攻破仍能保障用戶隱私的混幣機制。本篇文章將深入探討 Chaumian CoinJoin 的密碼學基礎、協議流程、實際實現細節,以及其在比特幣隱私生態系統中的地位。
密碼學基礎
盲簽章(Blind Signature)原理
盲簽章是 Chaumian CoinJoin 的核心密碼學原語,其設計理念允許簽名者在不知道訊息內容的情況下對訊息進行數位簽名。這一概念最初由 David Chaum 在 1983 年的論文中提出,旨在解決傳統數位簽名無法保護訊息內容隱私的問題。
盲簽章的數學原理可以簡述如下:假設有一個訊息 m,簽名者持有私鑰 s,其對應的公鑰為 v。傳統數位簽名的過程是對訊息 m 計算簽名 σ = sign(s, m),而驗證者可以透過 verify(v, m, σ) 來確認簽名的有效性。盲簽章的關鍵創新在於引入盲化因子(Blinding Factor)r,具體流程如下:
盲化階段:訊息持有者隨機選擇一個盲化因子 r,計算盲化後的訊息 m' = m × g^r mod p,其中 g 為生成元,p 為大質數。這個盲化過程使得簽名者在看到 m' 時無法推斷出原始訊息 m 的內容。
簽名階段:簽名者使用其私鑰 s 對盲化訊息進行簽名,產生 σ' = (m')^s mod p。由於指數運算的性質,簽名者無法從 σ' 反向推導出與原始訊息相關的任何資訊。
去盲階段:訊息持有者收到 σ' 後,透過計算 σ = σ' × r^(-s) mod p 去除盲化因子,最終得到對原始訊息的有效簽名 σ。這一數學性質確保了 σ = sign(s, m) 且簽名者從未看過 m 的內容。
在比特幣的實現中,橢圓曲線密碼學(Elliptic Curve Cryptography, ECC)取代了上述的 RSA 方案。比特幣使用的 secp256k1 曲線具有更短的密鑰長度更高的安全性。盲簽章在比特幣上下文中的實現需要考慮以下要素:
橢圓曲線上的盲簽章協議使用以下參數:基點 G、、私鑰 dA、公鑰 QA = dA × G。對於一個標量值 r(盲化因子),盲化後的公鑰為 QA' = QA + r × G。協調者對 QA' 進行簽名,產生一個橢圓曲線簽名。參與者隨後可以去盲,得到對其原始公鑰 QA 的有效簽名,證明該公鑰確實是 CoinJoin 交易的參與者之一。
承諾(Commitment)機制
除了盲簽章外,Chaumian CoinJoin 還依賴密碼學承諾(Commitment)機制來確保協議的安全性。承諾允許一方先「承諾」一個值,稍後再「揭示」該值,而在此期間無法修改已承諾的值。
比特幣中常用的承諾方案是 Pedersen Commitment,其形式為 C = x × G + a × H,其中 x 是盲化因子,a 是承諾的金額,G 和 H 是兩個獨立的橢圓曲線基點。Pedersen Commitment 的關鍵特性是加法同態性:即 C1 + C2 = (x1 + x2) × G + (a1 + a2) × H,這使得金額可以在密文狀態下進行運算。
在 Chaumian CoinJoin 中,承諾機制用於確保參與者在註冊階段提交的輸出金額與之後揭示的金額一致,防止參與者在看到其他參與者的輸出後臨時修改自己的輸出金額。
協議架構與流程
三階段協議設計
Chaumian CoinJoin 協議採用三階段設計,每個階段都有明確的安全目標和技術要求。這種設計確保了即使協調者(Coordinator)被惡意攻擊或本身就是敵手,用戶的隱私仍能得到保障。
第一階段:輸出註冊
在輸出註冊階段,所有參與者將其希望收到的輸出地址提交給協調者。這一階段的關鍵挑戰是如何確保協調者無法將輸入與輸出進行關聯。傳統的 CoinJoin 實現要求參與者直接提交輸入與輸出的對應關係,這使得協調者天然地知道每個輸入屬於哪個輸出。
Chaumian CoinJoin 透過盲簽章解決這一問題。每個參與者執行以下步驟:
首先,參與者生成一個隨機的盲化因子 r,並計算其輸出公鑰 Pout 的盲化版本 P'out = P_out + r × G。這個盲化版本被髮送給協調者。
協調者收到所有參與者的盲化公鑰後,對每一個盲化公鑰進行簽名,產生盲簽章 σ_blind。這些盲簽章被返回給相應的參與者。
參與者收到盲簽章後,去除盲化因子,得到對其原始輸出公鑰 P_out 的有效簽章 σ。這使得協調者在第二階段無法確定哪個輸出屬於哪個輸入,因為協調者只看到了盲化後的公鑰及其簽名,而非原始公鑰。
第二階段:輸入簽名
在輸入簽名階段,協調者收集所有參與者的輸入,並構造完整的 CoinJoin 交易。每個參與者需要對其輸入進行簽名,授權該輸入用於 CoinJoin 交易。
協調者將構造好的交易(含所有輸入和輸出)廣播給所有參與者。每個參與者驗證交易包含了自己的輸出,然後使用其私鑰對相應的輸入進行簽名。
這裡存在一個關鍵的安全考量:如果協調者故意構造一筆不公平的交易(例如,只包含部分參與者的輸出),參與者如何檢測?解決方案是每個參與者在第一階段已經獲得了所有其他參與者輸出公鑰的承諾(透過協調者廣播的盲化公鑰列表)。因此,每個參與者可以驗證最終交易中的輸出集合是否與第一階段提交的輸出集合一致。
第三階段:交易廣播
在最後階段,足夠數量的參與者完成簽名後,任何人都可以將最終的 CoinJoin 交易廣播到比特幣網路。通常由協調者負責廣播,但也可能由任何參與者執行。
詳細流程圖
以下是一個具體的六方 Chaumian CoinJoin 流程示例:
步驟 1 - 參與者準備
六個用戶(A、B、C、D、E、F)各自準備一個輸入 UTXO 和一個輸出地址。假設每個用戶準備混合 1 BTC。
步驟 2 - 盲化輸出公鑰
每個用戶生成隨機盲化因子:
- A: r_A = 0x3a5f8b2c...
- B: r_B = 0x7c9e1d4a...
- C: r_C = 0x2b4e6f8c...
- D: r_D = 0x9a1b3c5e...
- E: r_E = 0x5d7f8a2b...
- F: r_F = 0x8c4e6f1a...
每個用戶計算盲化後的輸出公鑰並發送給協調者。
步驟 3 - 協調者盲簽
協調者對六個盲化公鑰進行簽名,返回盲簽章給各用戶。
步驟 4 - 去盲
每個用戶使用其盲化因子去除盲化,獲得對其原始輸出公鑰的有效簽章。
步驟 5 - 交易構造與簽名
協調者構造 CoinJoin 交易:
- 輸入:六個用戶的 UTXO(各 1 BTC)
- 輸出:六個新地址(各 1 BTC 減去礦工費)
每個用戶驗證輸出後,對其輸入進行簽名。
步驟 6 - 廣播
協調者收集足夠簽名後,將交易廣播到網路。
安全性分析
協調者不可信假設
Chaumian CoinJoin 的核心安全假設是「協調者不可信」(Coordinator Do Not Trust)。這意味著即使協調者是惡意的、被駭客入侵的、或被迫交出其記錄的,用戶的隱私仍然得到保護。
為何能達成這個目標?關鍵在於盲簽章機制:協調者只知道哪些輸入參與了 CoinJoin,以及哪些輸出是 CoinJoin 的一部分,但無法將特定的輸入關聯到特定的輸出。協調者看到的是一組盲化後的輸出公鑰及其簽名,但不知道原始的輸出地址是什麼。
然而,存在一些潛在的攻擊向量需要考慮:
聯合計擊:如果協調者與區塊鏈分析公司合作,協調者可以將其第一階段記錄的 IP 地址與第二階段觀察到的交易廣播模式進行關聯。這是為何大多數 Chaumian CoinJoin 實現要求用戶使用 Tor 或其他匿名網路連接。
時間攻擊:如果某個用戶在 CoinJoin 開始後的精確時間內從其已知地址轉帳到 CoinJoin 輸入,外部觀察者可能透過時間關聯推斷輸入-輸出對應關係。先進的實現會在交易構造和簽名階段引入隨機延遲。
金額指紋:如果輸出金額不是標準化金額(例如 0.12345678 BTC),外部觀察者可能透過金額匹配識別特定輸入-輸出對應。解決方案是使用固定金額進行 CoinJoin。
拒絕服務防護
協調者可能對特定用戶發動拒絕服務攻擊,例如:
- 拒絕包含特定輸出的交易
- 在協議中途終止
- 只允許少數用戶參與(降低匿名集大小)
應對措施包括:
- 用戶應選擇聲譽良好、多個協調者競爭的生態系統
- 協調者的聲譽機制激勵其提供穩定服務
- 開源實現允許社區審計和自行運行協調者
實際實現:Wasabi Wallet
架構概述
Wasabi Wallet 是目前最廣泛使用的 Chaumian CoinJoin 實現,由 zkSNACKs 團隊開發。其設計目標是提供最高級別的比特幣隱私保護,同時保持用戶體驗的簡便性。
Wasabi 的架構包含以下元件:
Wallet Client:用戶端錢包,負責管理比特幣私鑰、構造交易、與協調者通信。用戶端使用 .NET Core 開發,支持 Windows、macOS 和 Linux。
Coordinator Service:協調者服務,負責管理 CoinJoin 回合的整個流程。zkSNACKs 運行主要的協調者伺服器,但協議是开放的,任何人都可以運行自己的協調者。
Bitcoin P2P Network:比特幣點對點網路,用於廣播最終的 CoinJoin 交易。
CoinJoin 回合流程
Wasabi Wallet 的 CoinJoin 回合遵循以下詳細流程:
準備階段
用戶在錢包中選擇要混合的 UTXO,指定目標匿名集大小(默認 7 輪,每輪增加匿名度)。錢包為每個輸出生成新的隱私地址(隱藏錢包)。
輸出註冊
錢包向協調者註冊輸出。協調者返回盲簽章。這一步使用 HTTP/2 連接,透過 Tor 網路路由以隱藏用戶 IP。
輸入確認
用戶確認要混合的 UTXO 數量,錢包構造部分簽名的 CoinJoin 交易(PSBT)。協調者驗證所有參與者都已正確註冊。
簽名階段
錢包收到完整的交易結構後,驗證輸出包含了自己的目標地址,然後對輸入進行簽名。簽名透過 Tor 發送給協調者。
廣播階段
協調者收集所有簽名後,廣播最終的 CoinJoin 交易。根據默認設置,Wasabi 會自動進行 7 輪 CoinJoin。
匿名集分析
Wasabi 使用「anon set」概念度量隱私保護程度。每一輪 CoinJoin 都會增加 anon set:
- 初始狀態:UTXO 的匿名集為 1(即只有用戶自己知道這個 UTXO 的歸屬)
- 第一輪 CoinJoin:假設有 100 個參與者,輸出匿名集變為 100
- 第 n 輪:匿名集 = 100^n(理論上)
實際上,由於關聯性分析和其他因素,有效匿名集通常小於理論值。7 輪 CoinJoin 後,匿名集通常在數千到數萬之間,具體取決於當時的參與者數量。
費用結構
Wasabi 的協調者收費約為交易金額的 0.1%(最高 0.3%)。費用,用於覆蓋協調者的運營成本。這種收費模式存在爭議:批評者認為任何中心化收費都會削弱比特的去中心化特性;支持者認為適度收費可以防止垃圾交易攻擊,並激勵協調者提供穩定服務。
實際實現:其他項目
JoinMarket
JoinMarket 是另一個重要的比特幣隱私實現,採用不同的設計理念。其核心是「Maker-Taker」市場模型:
Maker:提供比特幣流動性的用戶。他們創建「提供的 UTXO」,願意參與 CoinJoin 並收取費用。Maker 需要保持其在線狀態,以響應 Taker 的請求。
Taker:發起 CoinJoin 請求的用戶。他們支付費用給 Maker,以獲得即時的隱私保護。
JoinMarket 的特點包括:
- 完全去中心化:沒有單一協調者
- 費用由市場決定:Maker 設定其願意接受的最低費用
- 支持機器人策略:用戶可以運行自動化機器人進行收益生成
Samourai Wallet 與 Whirlpool
Samourai Wallet 提供 Whirlpool 混幣服務,採用類 Chaumian 的設計:
- 零知識證明:用於確認輸出歸屬而不暴露輸入-輸出對應
- 離線準備:用戶可以在離線狀態下準備混幣資料
- Stonewall:特色的「假輸出」技術,增加區塊鏈分析的複雜度
進階主題
多簽名輸出
進階用戶可以選擇將 CoinJoin 輸出设置为多簽名地址,進一步提高資金安全性。例如,使用 2-of-3 多簽名,需要三個私鑰中的任意兩個才能花費資金。這種配置可以防止單點故障(例如單一硬體錢包被盜)。
實現方式是在第一階段,用戶提交的不是單一公鑰,而是一個多簽名腳本的腳本哈希(Script Hash)。協調者對腳本哈希進行盲簽章,後續交易可以驗證該腳本哈希是否包含在 CoinJoin 輸出中。
混合其他隱私技術
Chaumian CoinJoin 可以與其他比特幣隱私技術結合使用:
PayJoin:與 PayJoin(又稱 P2EP)結合,CoinJoin 的輸出可以直接用於支付。接收方的輸出金額與 CoinJoin 輸出金額的差異創造了額外的隱私模糊性。
Taproot:Taproot 腳本結構允許更複雜的輸出條件,同時在區塊鏈上只顯示為單一的公鑰花費。這可以與 CoinJoin 結合,隱藏複雜的腳本條件。
閃電網路:從 CoinJoin 輸出打開閃電網路通道可以提供額外的隱私層,因為閃電網路交易不在鏈上結算。
局限性与最佳實踐
已知的局限性
鏈前/鏈後分析:CoinJoin 只保護 CoinJoin 本身的交易。混幣前的資金歷史仍然可追溯,混幣後的資金若與已知地址交互,身份可能暴露。
金額限制:為了達到最佳隱私效果,通常需要使用標準金額(如 0.1 BTC、0.5 BTC、1 BTC)。非標準金額容易被金額分析識別。
網路層隱私:CoinJoin 協議本身不保護 IP 地址。用戶必須使用 Tor 或其他匿名網路層。
協調者信任:雖然 Chaumian CoinJoin 設計為協調者不可信,但用戶仍需信任協調者不會與區塊鏈分析公司共享額外資訊。
最佳實踐
- 使用標準金額:選擇與其他用戶相同的輸出金額
- 多輪混合:不要只進行一輪 CoinJoin,多輪可以顯著提高匿名集
- 使用 Tor:始終透過 Tor 連接到協調者
- 避免立即合併:從不同 CoinJoin 回合獲得的輸出不應立即合併
- 驗證交易:使用比特幣節點驗證最終交易結構
- 選擇信譽良好的協調者:選擇運行時間長、社區審計的協調者
結論
Chaumian CoinJoin 代表了比特幣隱私保護技術的重要突破。透過結合經典的盲簽章密碼學與比特幣的交易模型,它創造了一種即使協調者被攻破仍能保障用戶隱私的機制。Wasabi Wallet 等實現使得普通用戶也能輕鬆使用這一技術。
然而,用戶必須理解 CoinJoin 不是萬靈丹。它需要正確使用(多輪、標準金額、使用 Tor 等)才能發揮最大效果。隨著比特幣隱私工具的不斷發展,Chaumian CoinJoin 將繼續在比特幣隱私生態系統中扮演重要角色。對於重視財務隱私的比特幣用戶而言,理解並正確使用這些工具是保護自身資產隱私的關鍵。
本文包含
相關文章
- 比特幣隱私技術實作:Chaumian CoinJoin 完整程式碼範例與實戰指南 — 提供完整的 Chaumian CoinJoin 実装程式碼範例,從底層密碼學原理到實際的交易構造,協助開發者深入理解隱私保護技術的實作層面。使用 Python 和 Bitcoin Core RPC 展示完整的混合協調和簽名流程。
- Chaumian CoinJoin 深度技術分析:Wasabi Wallet 隱私保護機制完全解密 — 深入分析 Chaumian CoinJoin 的密碼學原理、盲簽名機制、協調者信任模型,以及在 Wasabi Wallet 中的實際實現細節與安全性分析。
- CoinJoin 實作完全指南 — 深入解析 CoinJoin 協定的運作原理,並提供實際操作教學,幫助比特幣用戶提升交易隱私。
- 比特幣鏈上分析對抗策略 — 深入解析區塊鏈分析技術的運作原理,以及用戶可以採用的隱私保護對抗策略。
- CoinJoin 混幣詳解 — 比特幣隱私保護技術與實現方式。
延伸閱讀與來源
這篇文章對您有幫助嗎?
請告訴我們如何改進:
評論
發表評論
注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。
目前尚無評論,成為第一個發表評論的人吧!