- 作者:LambdaClass 技術負責人 Federico Carrone
- 編譯:Zombit
LambdaClass 技術負責人 Federico Carrone 於今日在推特上介紹了用於檢測 ETH 地址匿名性的開源工具 Tutela。並科普了 Tornado cash 的匿蹤原理與該工具背後的技術原理。
Tornado cash 與 匿名集
我們在 LambdaClass 為 Tornado Cash 進行了一系列工作,Tornado Cash 是一個混幣器,它允許用戶存入以太幣,並透過另一個帳戶提款,打破兩個錢包在鏈上的關聯。以下是關於該項目的討論,其中包含我們正在做的事情的詳細資訊:
目前,Tornado Cash 允許你在池中存入特定數量的以太幣,存入後你會收到一份鏈上證明,你可以再之後使用此證明將存款提取到你選擇的任何一個錢包地址。其邏輯是,因為有很多人會在同一個資金池存入相同數量的以太幣,因此每次提款都可能會是這些人中的任何一個,這個概念被稱為「匿名集(Anonymity Set)」。
隨著存款數量的增加,資金池的隱私性也將隨之提升,因為每筆存款都會與其他存款混合再一起。不幸的是,用戶可能會因為很多因素,在使用 Tornado cash 時損害了自己的隱私。這不僅對濫用應用程式的用戶不利,同時也削弱了所有存款者的隱私,為什麼會這樣呢?
因為如果存款與取款地址因為某些原因而被找到關聯性,便可以推斷其餘提款與存款與此地址沒有關連,換句話說,該地址將不再是匿名集的一部分!這就是為什麼 Tornado cash 社群發起了一項賞金計畫,我們與史丹佛大學的一個團隊一起參與其中,以幫助該平台的用戶。我們正在創建一個工具,讓用戶能夠知道每個資金池的匿名集的真實大小,並幫他們找出影響地址匿名性的潛在錯誤操作。
我們開發了一系列啟發式與工具,使我們能夠找出具有關聯性的存款和提款地址。以下是我們對這些啟發式的個別解釋。我們還有很多工作正在進行中,我們正在將它們遷移到 Julia 和 Pluto。你也可以在這裡看到代碼與實作!
啟發式 1:提款時重複使用存款地址
這是最簡單且直觀的啟發式,如果用戶從一個錢包存款並使用同一個錢包取款,他們的匿名性就完全無效了。
啟發式 2:使用特殊的 Gas 價格
許多錢包都有自己的 Gas 價格估算系統。但是,如果用戶手動設置了欲支付的 Gas 價格,該自定義價格會被錢包儲存並作為其他交易的默認價格。這意味著,如果我們能在存提款的交易紀錄中找出唯一一組 Gas Price 設置相同的錢包地址,就能將兩個地址視為具有潛在關聯性,這就是我們啟發式 2 的邏輯。
啟發式 3:Tornado Cash 之外的錢包地址關聯性
第三個啟發式的概念是對存提款地址在 Tornado Cash 平台以外進行的交易進行分析,若某一對存提款地址曾與某一個第三方地址多次交互,便可以假設這一對存提款地址屬於同一個實體。
這種啟發式的邏輯很簡單,但要實現並不容易,因為需要分析整個以太坊的鏈上交易數據,玄找這些地址之間的交易並經過大量的計算才能找出關聯性。
啟發式 4:多重面額揭露
假設你存入 3×10 ETH、2×1 ETH、1×0.1 ETH,最終提出 32.1 ETH,在這種情況下匿名集將減少至混合相同面額的地址,如果沒有其他錢包地址混合了同樣面額的以太幣,那就能將存提款地址串連起來。
啟發式 5:匿名挖礦的錯誤使用
匿名挖礦是一種透過獎勵的方式提升匿名性的激勵措施,獎勵為「匿名積分」,多寡則取決於用戶留在池中的時間長短。
用戶存入以太幣後,Tornado Cash 會在每個區塊給予固定數量的「匿名積分」,當用戶提款後,可以領取這些積分,而提領的積分數量會被紀錄在交易中。
因此,如果用戶使用相同的提款或存款地址來提領匿名積分,就可以計算出資產在池中的區塊數量!然後我們只需計算存款或取款在哪個區塊即可找出對應的相關地址!針對啟發式 5 的工作還在進行中,但至今為止我們已找出 385 個地址之間的關聯。
檢測地址匿名性的開源工具 Tutela
這些啟發式演算法由眾多參與者共同努力構建,應用程式目前仍處於開發階段,但你可以使用 Tutela,該工具將顯示你輸入之特定地址的相關地址和匿名分數。
這是一項有趣的跨學科工作,涉及來自不同領域的人們。與不認識的人一起工作並不容易,但如果有一個共同的目標,情況就不一樣了。由 Tornado Cash 社群共同構建的產品是 DAO 力量的另一個實例。