Tornado Cash:駭客最愛的混幣器與平民的隱私工具

上週區塊勢的文章討論 Ronin 跨鏈橋遭駭 6 億美元,這幾天駭客又有新動作。

根據鏈上紀錄,直至昨天晚上駭客仍持續轉出數千顆 ETH 到多個錢包地址,並以每次 100 顆 ETH 的速度將贓款放入以太坊上的混幣器 —— Tornado Cash —— 簡直是在眾目睽睽下洗錢。

Tornado Cash 的名號響亮,不少人會將它與犯罪溫床劃上等號。之前我受邀到台灣高檢署參加跨境金流追查研討會時,就有檢察官指定想瞭解 Tornado Cash 的運作原理,以及如何追查資金流向。

其實 Tornado Cash 的本意是要保護個人的交易隱私,而非成為洗錢工具。這篇文章討論 Tornado Cash 的用途與運作原理,也會教大家實際操作,並一窺究竟駭客如何濫用它來洗錢。

幣圈監視器

加密貨幣是無記名且去中心化的數位資產。更直白地說,加密貨幣就像是數位現金。它具有現金的特質,卻又可以在網路上傳遞。

人們拿現金到 50 嵐買飲料,不必透過中間人轉交給店員,這筆交易就能馬上銀貨兩訖,更不會洩漏個資。用加密貨幣支付也相當類似。創建加密貨幣錢包不用提供任何個資,轉帳則是在錢包之間私下轉移,不必事先將加密貨幣存到中心化機構,而且這筆交易普遍都能在幾分鐘之內完成。

當然數位現金的比喻有其極限,加密貨幣實際上並不像現金這麼能保障個人隱私。因為鏈上紀錄就是幣圈無所不在的「監視器」,而且全世界都可以透過它查看其他人在鏈上的一舉一動。

舉例來說,Nansen 這家公司就專門分析鏈上富豪們的行為舉止,讓投資者都能「Follow the Smart Money」。而 Chainalysis 則是專門追蹤鏈上犯罪金流,幫助企業和政府追蹤加密貨幣的贓款流向。現在還有許多幣圈公司會以 Zerion 分析求職者提供的個人錢包地址,透過「鏈上履歷」更認識未來的合作夥伴。

這些都是運用鏈上數據的可追溯性衍生出來的正面應用,卻也凸顯加密貨幣缺乏隱私的一面 —— 所有鏈上行為都被攤在陽光下檢視。有些人可能會說:「如果沒做什麼見不得人的事,為什麼要怕別人知道?」

這是將隱私與隱匿混為一談。之前區塊勢曾討論過這個議題,這邊我簡要摘錄文章內容:

家人之間的日常對話沒什麼大不了,卻沒必要讓全世界都知道,這是隱私(privacy)。但去便利商店偷吃一顆茶葉蛋不希望被任何人知道,這就是隱匿(secrecy)。

換句話說,隱私是預設匿名但事後可以選擇性地自我揭露,但隱匿則是希望永遠不被任何人知道。Tornado Cash 的開發者就是希望打造一款保障用戶隱私的交易工具,但駭客卻常將它用來隱匿贓款。

Tornado Cash

根據官網介紹

Tornado Cash 是個完全去中心化的非託管協議,它讓人們能在鏈上進行私下交易。Tornado Cash 藉由打破來源地址和目標地址之間的鏈上關聯性來提升交易隱私性。它透過智慧合約接受用戶的加密貨幣存款,並允許用戶從不同的錢包地址提款。

下圖就是 Tornado Cash 的操作畫面。它的功能很單純,只有存款、提款兩種選項,並支援 8 種不同的區塊鏈。

如果你想要試試看,可以先從交易手續費最便宜的 Polygon 或是完全不用花「真錢」的以太坊測試網 Goerli 開始。只要到這裡輸入 MetaMask 錢包地址,就可以免費領取測試網上的 ETH 並將錢拿到 Tornado Cash 上做實驗。

操作步驟非常簡單,總共只有三步:存款、等待和提領。使用者得先將加密貨幣存入 Tornado Cash,並等待一段時間。理論上等待的時間越久,交易的隱私性就越高。

每次存款 Tornado Cash 都會(在鏈下)交給用戶一張存款憑證,它的用途類似於錢包私鑰。未來 Tornado Cash 只認這張存款憑證,唯有持有存款憑證的人才能向 Tornado Cash 提領這筆錢。最後,只要再以另一個錢包地址從 Tornado Cash 將錢提領出來就能保障個人交易隱私了。

簡單來說,Tornado Cash 實際上在做的事情就是將不同來源的加密貨幣混在一起,並讓用戶從其他的錢包地址領幣,藉此打斷資金追蹤鏈。只要混得夠徹底,即便是再厲害的鏈上數據分析公司,追查到 Tornado Cash 的智慧合約時就會卡關,難以再向上追溯資金來源。

下圖就是我透過 Tornado Cash 提領到新錢包的 0.1 顆 ETH。

如果透過鏈上數據溯源,就只能找到最初的資金來源是 Tornado Cash 的智慧合約。

但這個智慧合約在過去一年內共有 16,981 筆交易記錄,裡面可能有數千筆都是 0.1 顆 ETH 的存款。到底哪一筆 0.1 顆 ETH 才是我當初的存款紀錄與錢包地址,外人根本無從得知。

這就是 Tornado Cash 所說的「鏈上私下交易」。

當然心術不正的駭客也可以利用同樣手法,先將加密貨幣存入 Tornado Cash,日後再神不知鬼不覺地提領到新的地址。將黑錢洗白之後,就能光明正大地轉到交易所出金。

以上週的駭客事件為例,駭客就陸續將 17 萬顆 ETH 拆成多筆 100 顆 ETH 存入 Tornado Cash。這是因為以太坊上的 Tornado Cash 目前只接受 4 種存款金額,分別是 0.1 ETH、1 ETH、10 ETH 和 100 ETH,藉此將特殊金額「標準化」。

如果駭客一口氣將偷來的 17 萬顆 ETH 通通存入 Tornado Cash 再一次提領。即便存的時間再久、使用的錢包地址完全不同,日後人們也可從提領金額「17 萬顆 ETH」輕易推斷那筆錢就是當初 Ronin 駭客事件的贓款。

因此,Tornado Cash 才強制使用者必須先將金額拆分成 4 種數字的組合,讓數據分析公司難以分辨這 100 顆 ETH 到底是誰、在什麼時候存入的資產。畢竟 Tornado Cash 的使用者並非全都是駭客,更多是希望藉此保有鏈上交易隱私的個人。

只是龍蛇雜處之下,人們容易將 Tornado Cash 貼上標籤,認爲它就是不法的洗錢工具。Tornado Cash 也在官網上承認,有些用戶會濫用這套維護隱私的工具來從事非法活動。因此,Tornado Cash 在 2020 年就推出「清白證明」工具,希望能與犯罪洗錢切割。

清白證明

根據部落格指出

財務隱私對於維護人們的財務自由至關重要,但它不應該以非法為代價。我們相信誠實和透明。存款時 Tornado.cash 會產生一張存款憑證給使用者。不僅人們日後可以憑它提領資金,也可以用來證明資金來源。

使用者只要將存款憑證輸入 Tornado.cash 開發的法遵工具,就能產生 PDF 報告並轉交給特定對象。但 Tornado.cash 是非託管的隱私工具。因此,必須完全由用戶自行決定是否向特定對象揭露交易隱私或者將其永久保密。但如果用戶弄丟了存款憑證,我們也幫不上忙。因為 Tornado.cash 不保留任何用戶數據。

下方這段以 tornado 開頭的字串,就是在存款之後會拿到的存款憑證。

tornado-eth-0.1-5-0x282696b256429c1bf1bf96bf7f75a85cab322c1fd5304897b624b4be13aa3162849a48a9308aa86175ee0b5cbdf4cf1338362fa785258cda3c4f72661203

別小看這串文字。

它不僅是我向 Tornado Cash 領取 0.1 ETH 的重要憑證,也可以用它來產生 PDF 報告來證明自己的資金清白。如下圖所示,報告上就清楚記載我在什麼時候以哪個錢包地址存入 0.1 ETH,並在哪個時候以另一個錢包地址提領出來。

這相當於跳過 Tornado Cash 直接還原資金流向。

萬一哪天交易所或執法人員懷疑我從 Tornado Cash 提領的資金來源不正當,我就可以視情況出示這張憑證來證明自己的清白。

清白證明的設計也凸顯隱私和隱匿的差異。注重隱私的用戶可以在必要時刻出示報告,證明資金來源並無不法。但隱匿贓款的駭客一旦出示報告就會原形畢露。

未來如果交易所發現用戶的資金源頭是 Tornado Cash,或許就會要求用戶必須出示這份清白證明才能完成入金。這不僅能避免交易所收到不法贓款,也增加駭客從合法管道變現的難度。

最終,駭客可能忙了半天還是只能回到暗網進行私下交易。如果交易的賣方也謹慎地要求買家證明資金來源,避免自己收到了錢卻不能花,恐怕最終這筆錢還是「走投無路」。

以往人們普遍會以為 Tornado Cash 這種混幣器是駭客的專屬工具,但它其實是設計給你我使用的隱私工具。只要大眾對這些工具越來越熟悉,駭客要將犯罪得來的加密貨幣變現就會更加困難。

加密貨幣不只是數位現金,它是比現金更好的錢。


區塊勢是由讀者付費訂閱來維持營運的獨立媒體,內容不接受廠商業配。如果你覺得區塊勢的文章不錯,歡迎將它分享出去。若行有餘力,也能以定期定額支持區塊勢營運。若想查閱過往的出刊內容,可以參考文章列表