比特幣 CoinJoin 如何降低鏈上關聯?

比特幣的公開帳本會留下每筆交易的輸入與輸出。分析者因此常做一項合理猜測:同一筆交易若花用多個 UTXO,這些資產大概由同一人控制,否則怎麼能一起完成簽署?
不過,交易資料沒有「付款人姓名」欄位,每個輸入也各自接受授權。不同人可以先同意整份交易內容,再分別簽署自己控制的部分。CoinJoin 正是利用這個結構,讓共同輸入不再必然指向共同擁有者。
因此,CoinJoin 能降低外界把特定輸入配對到特定輸出的把握度,卻不會抹除交易,也不會讓使用者自動變成匿名。理解它的價值,需要同時看懂共同組裝如何成立,以及哪些線索仍會留在鏈上與協調過程中。
多人共同組裝一筆普通交易
假設三位參與者各自提供一筆 UTXO,並各自準備一個新的地址接收輸出。他們先協調所有輸入、輸出與手續費,形成一份每個人都能檢查的完整交易模板。
每位參與者只需用自己的私鑰替所控制的輸入簽署,不必把私鑰交給協調者或其他人。簽章陸續合併後,只有在所有必要授權齊全時,交易才具備被網路接受的條件。任何人若發現金額、收款條件或費用不符預期,都可以拒絕簽署。
這個流程不要求比特幣新增一套專用交易格式。全節點看到的仍是一筆含有多個輸入與輸出的普通交易;它只會檢查資產是否可花、簽章是否有效,以及輸入總額能否支應輸出與費用。礦工也能像處理其他合格交易一樣,把它放進區塊。
相似輸出讓配對失去唯一答案
較容易理解的 CoinJoin 形式,會建立多個金額相同的輸出。若三個參與者都取回相同金額,外部觀察者雖然看得見三組輸入和三個新輸出,單靠金額便很難確定哪一個輸出屬於哪位參與者。
這份模糊空間常被稱為匿名集合。參與者與外觀相近的候選輸出愈多,單一配對通常愈難確定;若只有一個輸出金額特別醒目,或找零的形狀能直接對上某筆輸入,可排除的候選就會增加。
不同協議也可能使用不等額輸出,再以額外的密碼學憑證協助協調者確認每個人沒有拿走超過投入的價值。具體做法可以演進,但核心問題相同:整筆交易必須守住金額與簽章規則,同時盡量減少協調者和鏈上觀察者知道輸入、輸出配對的能力。
協調者能排程,不代表能拿走資產
多人要在相近時間交付資料與簽章,常需要某種協調機制。協調者可以收集候選輸入、安排交易模板並轉送待簽資料,但只要參與者自行核對交易,協調者缺少各輸入的私鑰,就不能單獨完成有效支出。
「不能直接偷走資產」與「完全不知道參與者」仍是兩項不同條件。協調方式若沒有隱藏輸入與輸出的提交關係,協調者可能看見兩者如何配對;連線時間、網路來源、重試紀錄與帳號資料,也可能成為鏈外線索。某位參與者最後拒絕簽署時,整筆交易還可能中止,其他人只能重新組織下一輪。
所以,CoinJoin 降低了參與者必須彼此交付控制權的需求,沒有取消協調、可用性與資料保留風險。不同實作提供的保護範圍可能不同,不能只看到同一個名稱就假定信任邊界完全一致。
後續花費可能重新接回線索
交易完成後,新的輸出依然是公開可追蹤的鏈上資料。若某個錢包很快把兩個原本難以區分的輸出合併花用,觀察者便得到它們可能由同一方控制的新線索。將 CoinJoin 輸出與帶有實名紀錄的交易所帳戶往來,也可能讓鏈上路徑再次接上現實身分。
特殊金額、地址重用、付款時間、網路傳播來源與交易前後的資產合併,都可能縮小原本的模糊空間。參與人數很多也只代表候選關係增加,無法保證每個候選同樣合理,更無法消除其他資料來源。
費用與等待同樣存在。多人交易通常包含較多輸入與輸出,占用的資料量可能增加;參與者還要等待同一輪協調完成。若有人離線、輸入已被另一筆交易花掉,或簽章遲遲沒有湊齊,這一輪就可能失敗。隱私改善因此伴隨額外的時間、費用與操作摩擦。
它削弱推論,沒有改寫公開性
CoinJoin 的關鍵能力,是讓「同一交易的輸入都屬於同一人」以及「某個輸入必然流向某個輸出」這類推論變得不再可靠。它利用比特幣原有的獨立簽署結構,讓多人能在不共享私鑰的情況下建立一筆有效交易。
可是,這項技術保護的是特定交易關係的隱私,沒有把公開紀錄變成秘密資料,也沒有替假名性加上永久保證。交易形狀、協調者掌握的資訊、網路痕跡與後續使用方式,都會影響實際效果。把 CoinJoin 視為降低分析確定度的工具,比把它理解成一鍵清除歷史,更符合它能做到的範圍。