讓一對夫妻付出 36 億美元代價的迷思
2016 年 8 月,約 119,754 枚 BTC 從 Bitfinex 交易所遭竊。竊賊做了多數人以為能讓加密貨幣無法追蹤的事:把贓款打碎成數千筆微小交易,在數百個地址之間反覆跳轉,然後靜待風頭過去。他們以為線索已斷,事實並非如此。每一次跳轉都被寫進一個永不遺忘的公開帳本。六年後,2022 年 2 月,調查人員一跳接一跳地追蹤這筆錢,查扣了約 94,636 枚 BTC——當時價值約 36 億美元,是美國史上最大的金融查扣案。Ilya Lichtenstein 後來對洗錢罪認罪。
這正是區塊鏈隱私的核心一課:區塊鏈並不匿名,它是化名(pseudonymous)的,而這兩個詞天差地別。匿名(anonymity)意味著你的行為永遠無法被連回到你身上;化名則意味著你以一個固定的假名——也就是地址——行動,而這個假名做過的一切都是公開且永久的。一旦有人把這個化名連上現實中的你,他得到的就不只是你最近一筆交易,而是當場解開你的整段歷史。
一個地址究竟藏住了什麼——又藏不住什麼
回想密碼學那一階:地址是公鑰的雜湊——在以太坊上,是公鑰經 Keccak-256 後的最後 20 個位元組。它不含姓名、電子郵件、護照號碼。就這狹義而言,它確實私密:`0x742d…f44e` 完全看不出你是誰。錯誤在於以為故事到此為止。
更貼切的想法是:地址是印在公開廣告看板上的一個筆名,並永久記錄你用這個筆名做的每一筆付款。這個筆名能保護你,只到兩件事發生為止,而在公開的鏈上這兩件事不斷發生:(1) 這個筆名被連結到你控制的其他筆名;(2) 其中某個筆名被綁定到你的法律身分。第 (1) 步是統計上的偵探工作,第 (2) 步通常只需要你不小心碰一次受監管的服務。兩者合起來,就是鏈上分析這門學問。
有兩個結構性事實讓這一切變得可行。第一,帳本是公開的:任何人用一個區塊鏈瀏覽器就能讀到每一筆交易、餘額與關聯,完全不需特殊權限。第二,它是永久的:由於不可竄改性,去匿名化是可回溯的。一項 2025 年發明的分群技術,可以瞄準一筆 2014 年的交易,因為那筆交易仍逐位元組地躺在那裡。你無法刪除自己的過去。
分析師的工具箱:分群啟發式
奠基性的論文是 Meiklejohn 等人的《A Fistful of Bitcoins》(2013),它證明只用幾條簡單可靠的規則,就能把數百萬個比特幣地址收攏成數量少得多的現實實體。Chainalysis 之類的商業公司,再把這些規則做成工業級工具。兩條主力啟發式是:
1. 共同輸入所有權。 要在一筆交易中花掉多個 UTXO,你必須用每一把對應的私鑰簽名。所以若一筆交易的輸入同時來自地址 A 和 B,壓倒性的預設假設就是同一個錢包同時掌控兩者——把它們併入同一群。2. 找零地址偵測。 當你從一枚 1.8 BTC 的幣中支付 1.5 BTC,鏈會把約 0.3 BTC 當作找零退還給你。分析師靠幾個特徵辨認出找零輸出:它流向一個從未出現過的地址、它是那個不湊整的「剩餘」金額、它與輸入採用相同的腳本類型。找零地址也是你的——把它收進同一群。
// Two Bitcoin-style transactions, as a block explorer would show them.
// TX_a: a single wallet (keys A and B) pays a merchant and gets change.
{
"txid": "a1f0...9c",
"vin": [
{ "addr": "bc1q...A", "value": 0.80 }, // signed by key A
{ "addr": "bc1q...B", "value": 1.00 } // signed by key B
],
"vout": [
{ "addr": "bc1q...M", "value": 1.50 }, // merchant: round, long-lived address
{ "addr": "bc1q...C", "value": 0.29 } // change: odd amount, brand-new address
]
// fee = (0.80 + 1.00) - (1.50 + 0.29) = 0.01
}
// TX_b: later, that same change is forwarded to an exchange deposit address.
{
"txid": "b7e2...4d",
"vin": [ { "addr": "bc1q...C", "value": 0.29 } ],
"vout": [ { "addr": "bc1q...KRAKEN_DEPOSIT", "value": 0.289 } ]
}- 對 TX_a 套用共同輸入所有權:A 與 B 都簽了名,因此將它們分為同一群 →{A, B}。
- 對 TX_a 做找零偵測:輸出 M 是整數 1.5、流向一個重複使用的商家地址;輸出 C 是零頭 0.29、流向一個全新地址,因此 C 是找零 →{A, B, C}。
- 追蹤 TX_b:C 被花進一個 Kraken 的入金地址。Kraken 是一家受監管、需驗證身分的交易所。
- 去匿名化:向 Kraken 發出一張傳票,便能取得該入金地址的已驗證持有人——而整個群 {A, B, C} 連同它的全部歷史,如今都歸屬於一個有名有姓的人。
瓶頸所在:從分群到法庭
光靠分群,得到的是一張化名圖:成千上萬個地址被歸成一個個標記為「實體 1、實體 2……」的群。要貼上真名,分析師需要一個錨點,讓鏈上化名與鏈下身分在此相撞。這個錨點幾乎總是受監管的法幣出入金管道——也就是依反洗錢法、必須先驗證客戶身分(KYC)才放行法幣進出的託管型交易所。
一旦某個群裡的資金流入(或流出)一個完成 KYC 的交易所入金地址,整個群便可應要求被去匿名化。執法機關發出傳票,交易所交回該地址背後的姓名、身分證件與 IP 紀錄。這也是為何污點分析——追蹤一筆餘額中有多少比例源自已知非法來源——在商業上至關重要:交易所會篩查進來的入金,凍結或通報「被污染」的幣。一個與現實世界的連結,會回溯性地把上游與下游的一切都染上顏色。
這並非紙上談兵。2013 年 Silk Road 市集的查緝、2019 年「Welcome To Video」兒少性剝削網站的瓦解(跨數十國數百人被捕),以及前述 Bitfinex 的追回,靠的都是同一招:先在鏈上把地址分群,再透過受監管服務把其中之一釘到一個身分上。區塊鏈成了檢方最佳的證人——它記下了一切,而且無法被命令遺忘。這就是最純粹形式的去匿名化攻擊。
為什麼帳戶模型可能洩漏得更多
比特幣的 UTXO 模型至少鼓勵每次收款用一個新地址,這也是為何 UTXO 隱私的實務強調絕不重複使用地址。以太坊的帳戶模型在隱私上預設更糟:一個長存帳戶持有你的餘額,而你拿它做所有事。沒有找零地址可供躲藏——你的全部餘額與歷史,都掛在單一、固定的識別碼之下。再加上一個像 `alice.eth` 這樣人類可讀的 ENS 名稱,你等於公布了一筆電話簿條目,把一個好記的代號連到那個帳戶。
分析師還有比分群更豐富的手法。灰塵攻擊(dusting attack)會把極微量的「灰塵」送往數千個地址;若受害者日後把這些灰塵與自己其他的幣一起花掉,共同輸入啟發式便替攻擊者把這些地址併在一起。金額與時間的關聯會把 03:11 提出的 4.917 ETH,與別處 03:14 入帳的 4.915 ETH 配對起來。而網路層級的去匿名化則完全不看帳本:透過觀察交易傳播在點對點網路中的擴散,一個運行大量連線節點的對手,往往能猜出是哪個 IP 位址最先廣播了某筆交易——在它進區塊之前,就把錢包綁到一個實體位置上。
化名讓你付出什麼代價——以及接下來是什麼
除了被監控之外,透明的鏈還悄悄侵蝕可替代性(fungibility)——也就是任一單位的貨幣都可與另一單位互換的特性。一枚同質化的幣,理應與下一枚等值;但若每一枚幣都背負著永久、可稽核的歷史,交易所就能拒收一枚曾經過受制裁地址的「被污染」幣——哪怕那是五任持有人以前的事,與你毫無關係。一張鈔票不會記得誰拿過它,一枚透明的 UTXO 卻會。這份記憶很適合用來抓賊,對只想要一種「行為像錢」的錢的普通使用者卻具腐蝕性。
本階接下來的內容,就是這場反擊,強度層層遞增。首先,混幣器與 CoinJoin藉由把眾多使用者匯聚在一起,斬斷幣與幣之間的關聯。接著,隱私幣用隱形地址與屏蔽池,直接隱藏金額與當事人。再來,零知識讓全私密的智慧合約成為可能。最後,是那道棘手的政策張力:像隱私池這樣的隱私工具,與法規遵循及制裁正面相撞。每一種工具都用不同的貨幣換來隱私——可用性、匿名集、信任,或合法性。