【🌪隱私保護還是洗💰工具?區塊鏈混幣器Tornado Cash 】簡介及受🇺🇸OFAC制裁情況介紹 | 訪問及使用演示 | 通過Merkle Tree及零知識證明保護隱私原理詳解

歡迎來到臺科技,minimoss
公屏和隱私是一把雙刃劍
按照設計,區塊鏈上的一切都是公開的
與傳統金融不同
任何人都可以查看他人在區塊鏈上的整個財務紀錄
儘管用戶地址是假名的
但如果真實世界的身份與用戶地址相關聯
則可以追溯該用戶的完整財務歷史
導致隱私權的喪失
Tornado Cash是一個基於以太坊區塊鏈的開源隱私工具
它的名字起得很形象
龍捲鋒利的現金
俗稱加密貨幣混合器
Tornado的主要思路是
爲了實現隱私
Tornado使用智能合約
接受來自一個地址的代幣存款
這些智能合約作爲合併所有存入資產的資金池
資金池將大量的存款行爲混合在一起
提款時
提款人通過零知識證明證明自己存過款
再用一個新地址提款
一旦資金被從這些池中的新地址提取出來
原地址和目標地址之間的鏈上鍊接
就會通過匿名被打破
爲了讓存取款行爲看起來具有同質性
存款地址每次向Tornado資金池存入的資金
與取款地址每次取出的資金都保持一致
例如某個資金池的100個存款者和100名取款者
雖然公開可見
但看起來彼此沒有任何聯繫
而且每個人存入的金額取出的金額都是一樣的
這時就可以混淆視聽
沒法按照存取款金額判斷關聯性
從而切斷資金轉移痕跡
可以把Tornado想象成銀行的保險箱式
任何人都可以去那個房間
並且假設鎖是好的
只有擁有鑰匙的人才能取回這些貴重物品
如果只看到一個人進出房間
那麼我們就知道那個房間裏的任何貴重物品都是他的
另一方面
如果許多人經常進出房間
那麼我們就無法知道誰在哪個箱子裏
存放了哪些貴重物品
2022年8月8日
美國財政部外國資產控制辦公室OFAC
對Tornado實施制裁
稱其幫助朝鮮黑客洗錢超過70億美元的虛擬貨幣
這是歷史上首次對一段代碼實施制裁
2024年11月26日
美國第五巡迴上訴法庭裁定
OFAC無權直接制裁Tornado Cash軟件
而是應針對濫用該軟件的個人和實體採取行動
這一裁決導致Tornado Cash的代幣
價格飆升至兩年來的最高點
Tornado的實現
號稱最精妙的零支持證明應用
今天的節目不是教大家如何洗錢
而是通過學習Tornado的原理與業務邏輯
來了解爲區塊鏈技術發展做出貢獻的聰明的設計思路
接下來我先來演示如何使用Tornado
實現原理
我將放在視頻的最後來講
由於OFAC的制裁
Tornado的域名及Github源碼遭到封禁
要訪問Tornado的服務
最靠譜的方法是通過其X賬號發佈的網址進行訪問
Tornado主要在以太坊網絡上運行
同時擁有ETH、DAI、CDAI、USDC、USDT和WBTC匿名池
匿名池按照固定金額存款和取款的原則運作
這意味着每個支持的資產都有多個池組成一個匿名集
每個池將交易限制爲固定金額
例如ETH有四個不同的池
每個池對應如下金額
0.1、1、10和100ETH
自2021年6月起
智能合約也已部署在其他側鏈和區塊鏈上
從而實現更快更便宜的交易
存入資金前
需要先選擇對應的區塊鏈網絡
下一步選擇對應的代幣
存入的代幣金額爲固定金額
選擇好代幣及金額後
需要連接加密錢包將資金存入資金池
Tornado支持直接連接Metamask錢包
或通過掃描Wallet Connect生成的二維碼連接錢包
點擊存款deposit
當用戶將代幣轉移到資金池中時
會生成一張私人票據
該票據即適用於從Tornado資金池中提款的證明密鑰
將代幣轉移到資金池之後
不要着急立即取款
讓代幣在資金池中存放得越久
代幣的來源就越難被追蹤到
提款前同樣需要選擇提款的網絡
然後將存款時生成的證明密鑰粘貼在Note輸入框中
並填入一個新的提款地址
點擊取款withdraw
等待靈智識證明驗證
驗證成功後
代幣即可從Tornado資金池轉移到你提供的新地址
通過Etherscan查看新地址資金的到賬詳情
可以看到
入賬地址顯示的是Tornado Cash
即Tornado資金池的地址
從而打破了原地址和目標地址之間的鏈上連接
實現了隱私保護
以太坊是透明的
在每筆交易中
都有一個發送者和一個接收者的角色
任何人都可以查看任何用戶賬戶的交易歷史和餘額
Tornado希望能夠隱藏交易中的發送者
讓第三方無法通過交易記錄得知交易是由哪個發送者發起的
這樣一來
即使交易被記錄在區塊鏈上
也無法追蹤到發送者的身份
如何才能實現
答案在於靈智識證明
靈智識證明是一種加密方法
通過該方法
一方證明者可以向另一方
驗證者證明給定的陳述是真實的
而證明者無需傳達該陳述之外的任何其他信息
在Tornado應用中
證明者是用戶從池中提取代幣的行爲
而驗證者是Tornado池中的合約之一
當用戶向Tornado池智能合約提取其代幣時
用戶必須提供靈智識證明
Tornado池的代碼自動檢查輸入證明
僅在證明有效時才處理提款
要證明我在Tornado資金池裏存過款
可以被轉化爲
我的存款記錄可以在Tornado合約裏找到
Tornado的所有存款記錄
都存儲在鏈上構造的一顆Merkle Tree中
Merkle Tree最底層的一個葉子節點
由於存儲每一筆實際的存款數據哈希
每個非葉子節點
尤其子節點兩兩座哈希值計算得到
Merkle Tree最頂層的Merkle Root
存儲整個存款信息的哈希值
代表所有存款的集合
每當有新存款行爲發生時
用戶生成一個包含Secret和Nullifier的哈希
稱爲Commitment
合約把存款憑證Commitment
寫入一個葉子裏
然後更新Merkle Tree的Merkle Root
提款時
用戶需要提供以下信息
收據
即存款時生成的哈希Commitment
用於證明用戶曾經存入資金
Merkle Proof
一系列節點哈希
用於證明該收據對應的葉子節點
確實存在於Merkle Tree中
一個全新的錢包地址
Merkle Proof本身很簡潔輕便
若要證明某筆數據是這個Merkle Tree的葉子之一
只需要提供該數據的葉子
到根的中間經過的負哈希值
就可以證明該數據
確實是構成Merkle Tree的葉子之一
例如
若要證明圖中的R6
是這個Merkle Tree的葉子之一
只需要提供R5
R6
R7與R8的哈希
以及R1與R2的哈希
和R3與R4的哈希
再做哈希計算的結果
即藍色框中的這五個數據即可
Tenando的Merkle Tree
葉子節點數量爲2個32次冪
總數約爲830萬個
對擁有龐大葉子節點的Merkle Tree
Merkle Proof也只需要包含32個節點的數值
非常短
提款流程如下
第一步 驗證收據
提交Merkle Proof和Nullifier的哈希
合約計算路徑上的哈希值
並以Merkle Root進行比較
第二步 使用靈智識證明
Tenando使用VKP來確保用戶
可以證明他們有權提款
而不暴露具體的存款來源
存取款過程中有兩個細節
存款時
使用了兩個隨機數
Secret和Nullifier
生成Commitment哈希
而不是單個隨機數
這是因爲單個隨機數不夠安全
有一定的概率發生碰撞
取款時
隨Merkle Proof一同提交的Nullifier的哈希
作爲識別碼
是爲了防止重放攻擊
由於混幣器在設計上的特性
取款時不知道用戶提走的幣
對應了Merkle Tree的哪個葉子節點
也就不知道提款人和哪些存款人關聯
因此無法確定
提款人到底提過幾次款
提款者可以利用這一特性頻繁提款
發起重放攻擊
多次從混幣器資金池中取走Token
直到把資金池抽乾
NF識別碼的作用
類似於每個以太坊地址
都有的交易技術器Nonce
都是爲了防止某筆交易
被重放而設置
當一筆取款發生時
提款者需要提交一個NF
檢查這個NF是否已經被使用過
如果有,此次取款無效
如果沒有,表示該NF尚未被使用
取款有效
對應的NF會被記錄下來
下次再有人提交這個NF時
對應的取款行爲直接被判定爲無效
綜上所述
Finetel Cash的驗證原理
通過結合Merkle Tree和靈芝士證明
實現了對資金來源的隱私保護和合法性驗證
用戶在存款時生成收據
通過Merkle Tree記錄存款信息
在提款時
通過提供收據和相應的Merkle Proof
來驗證提款權限
在使用者量很大的情況下
就如同一個鬧市區
罪犯混進人羣后
警方就難以追蹤
這種精妙的設計
成就了Finetel Cash
成爲區塊鏈靈芝士證明
最經典的應用之一