📜 [專欄新文章] [ZKP 讀書會] Tornado Cash
✍️ Jerry Ho
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Disclaimer: 本人與Tornade Cash專案及其員工無任何利益往來。
Tornado Cash是一個Ethereum上的原生隱私轉帳解決方案,使用zk-SNARK+Merkle Tree的路徑證明作為其核心隱私保護機制。
你知我知,Ethereum上的交易記錄是公開的,這使得任何一個人只要知道你的address,便可以在https://etherscan.io/ 之類的網站上查出有多少人和這個位置進行過交易,你做過什麼消費行為或是交易行為等。
或許這聽來不像是個問題,而想要隱藏自己的交易記錄甚至聽起來反而像是不法分子的銷贓行為。
但試想下開情境:因為我曾經使用ethereum捐款給一個政治不正確的專案/組織,而我在接受dd/kyc/reference check的時候因為我的ethereum address就寫在自己的blog上而被查了個底朝天,因而被拒絕入職/拒絕開戶/拒絕服務。
這並不是一個很遙遠的情境…
Tl;dr
解決交易隱私問題分為兩個層次,Assuming你的目的是讓自己的金錢流向無法被追蹤。
層次一:我的錢「丟進了」Tornado Cash的contract,我要如何在不使用與轉入時同一個address的情況下— 若是同一個address就沒有隱私可言了 — 取出我的錢?contract如何知道我存過錢,餘額還夠,所以現在我來領錢了他讓我領?
層次二:就算層次一成立,我的隱私如何達成?到底有多隱私?到底有多不隱私?
技術上來說(細節下文詳談),層次一使用zero-knowledge的set-membership proof來證明,透過預先在Merkle Tree中「登記」一個自己的entry/leaf,tornado cash稱為note,爾後在提款時提出該leaf之zk proof,來解決這個提款時的認證問題。
層次二則是所謂的藏樹於林。既然轉出和轉入無法被連結在一起,那麼只要使用Tornado Cash的人數夠多,總轉出和總轉入的交易總筆數就會太多,以致無法輕易重新關聯轉入與轉出地址背後的真人。
使用界面
https://tornado.cash/
當然你也可以直接和合約地址互動啦
上圖左方紅框為存入幣種與金額大小,右方紅框為該額度對應之帳戶內有多少顆「樹」。
記得藏樹於林嗎?右方的 Anonymity set 就是告訴你現在森林的規模有多大。數量一大,跑資料分析試圖重新關聯某筆特定存款到某筆特定提款就變得更為困難。
提款界面如上。
值得注意的是,提款時的以上兩個選項(Wallet/Relayer),是在目前Account Abstraction尚未實現時的一個折衷方案。
這裡有個死循環:既然我提款的時候需要支付gas,那麼我的gas從哪裡來?是不是勢必得從交易所或是其他帳號來?簡言之,若是無法直接新建立一個地址然後直接將其作為Tornado Cash提款用,達到的隱私強度就大打折扣。
Relayer就是針對這個問題所設計的。透過付出一些手續費來提供社群架設relayer node的誘因,提款時該筆轉帳的gas費用,便可以讓relayer node來負責先出。relayer node收到使用者的zk proof後將其轉交給tornado cash的合約,合約就會會將應有的relayer手續費與扣除手續費+gas後的款項分別轉給relayer與使用者。
社群治理
Tornado Cash天生是一個比較沒有銅臭味的專案 — 社群治理和funded的味道相當強烈。
透過預先設計好的proxy contract與staking/locking機制,任何一個Tornado Cash的使用者都能夠提出對合約實行的改動建議,並交由社群來投票決定是否要執行該改動。
技術細節可以參照此篇,同時Tornado Cash的第一輪社群治理提案也剛投票過關,回顧可參考此處之討論。
誘因設計
本文作者比較任性不在意錢,請移駕此處閱讀官方如何設計Anonymity Mining來確保以下兩點:
機制能讓使用者願意加入存錢,提供流動性同時也讓樹林變大,增加隱私程度。
產生TORN(ERC20 token)與領取TORN的機制,透過在原本的tornado cash上面再加一層,來避免TORN激勵層錯誤的設計導致下一層之隱私洩漏(激勵層出事不影響核心隱私之意)。
技術細節
首先本文不打算解釋何為zero-knowledge proof,請接受以下描述:
若有一NP statement分類上是satisfiability problem(例:merkle tree中的hash chaining H(H(H(a,b),c),d) ),則我們可以設計出一個arithmetic circuit來確保能夠有效率的產生proof, 有效率的驗證, 無法產生假的且能說服人的proof…且其電路驗證的statement是我們想要的,像是此例中的merkle tree opening.
存款
存款者透過送出C = H(k, r) 以及存入之數額給tornado cash的合約來進行存款的動作。其中k在之後會成為存款者領錢的憑證,稱為nullifier,r則是增加randomness而已,此二值需要記下。此時合約端會將這個C(commitment)丟入Merkle Tree上其中一個空的leaf,並更新root hash。存款者還需要記下自己的C對應之leaf index。
產生proof,用此proof作為提款憑證
用一段話來概括,若是我
知道Merkle Tree上某個leaf的commitment的preimage, 代表我能在電路中證明我知道H(k, r) 中的 k, r, 同時不洩漏k, r到底是多少(zk特性, magic)。
我知道該leaf至root的路徑上會經過哪些點,我也提供了一個可以讓電路驗證root hash的hash chaining過程,代表我知道他是從哪個leaf開始走的。因而,這證明了我提出的1.中的commitment確實屬於某顆公開的、大家都知道的merkle tree中的特定leaf(就是我之前存款對應到的leaf)。
就可以在不需要提供像是原本存款地址的簽章之類的驗證機制情況下,透過zk proof,亦能正確做permission control讓unlinkable的提款能夠成真。
另,讀者可以看到在proof中已然預設了relayer的存在。這使得上開所提到之「使用者提款, 拜託relayer執行=>relayer預付gas發起transaction,將內容送給tornado cash合約=>合約處理proof並將款項拆成兩份給relayer與使用者」這個行為得以成立,且relayer無法得知或假造proof內容。
提款流程
基本上在上方的產生證明都講過一次了,這邊就是pseudo code順過一次提款流程而已,大家自己看啊。
值得一提的是,使用者除了需要提出上一部分提到的證明之外,還需要將k的部分額外拿出來再做一次H(k),將值一併傳給contract。
這裡的設計哲學,簡單來講是這樣的:zero-knowledge太強了,強到就算證明了我知道H(k, r)的k跟r, 收到的驗證者並沒有辦法知道H(k)是什麼東西。為了讓同一筆款項不會被提領兩次,在提款流程中合約會將「每一筆成功提款中的H(k)」記錄下來,另外開個表存著。爾後若是其他提款交易中的H(k)與表中的重複了,這就代表有人試圖想要騙合約重複提款,自然該提款嘗試就不會成立。
洗錢失敗例
工程師都知道使用者從來不看說明書,看了可能也不會懂。
Koh Wei Jie分析了Kucoin的駭客事件。Kucoin的駭客使用Tornado Cash來洗錢,但忽略了Tornado Cash官方一直三令五申的使用需知,因而讓款項在進入Tornado Cash跑了一輪之後還是能夠被追蹤,哈哈UCCU。
簡單來說,hacker為了節省多次使用relayer的手續費,而將大多數的提領過程都變成直接提領到wallet。雖然該wallet的位置是全新產生的沒有gas,但是透過只讓第一次的提款使用relayer,hacker便能從第一次提款中取得手續費並分發給其他全新產生的wallet address。
那問題在哪?還要問?
要達到隱私需要保持藏樹於林原則,同時使用者不應自己破壞tornado cash幫你達成的address unlinkability。這位hacker因為愛省手續費,所以違背了後者;同時他因為太心急又愛省手續費,太快、分太少次提領、每次提領的數額又太大了,所以side-channel去給他做簡單的traffic analysis就能夠用虛無假設推出:「綜觀歷史上所有的存款位置與數額,扣掉駭客存錢的那些位址之後,我們還需要14個unique address/user共謀,才能有能力一次提這麼多錢。」
這看起來可能嗎?自然是不可能的。
所以這位駭客就是錯誤的沒有遵守藏樹於林的原則,才導致自己的金流重新被和帳號聯繫在一起。
提供一些延伸閱讀,圈子內的”名人”對這種不看說明書的使用者的看法:
tornado * Gavin Andresen
如何避免洗錢失敗
我自己的投影片,我自己翻譯:
打開你的VPN 打開你的TOR 打開你的無痕瀏覽器分頁 用上你全新的VM PC VPS instance 最好連data-link layer安全都顧到 產生全新的地址不要懶惰 自己跑一個fullnode 乖乖用relayer付手續費提款 領錢之後記得把C(k,r)的記錄刪掉 不要急一次存或提領大額 時間拉長數目減少…..
簡而言之:要設計相對安全但又讓使用者可以直覺上手的安全系統真的很他媽難 - 使用者永遠會想辦法抄近路,然後系統的security assumption就爆炸了。
結論上來講,你想要多安全取決於你在臺大水源校區的腳踏車平常都上幾個大鎖=想付出多少成本。只要不要學Kucoin Hacker那樣連鎖都不鎖車還是新的,大部分時間都沒啥問題 lol。
參考資料與文中出現過的連結,不按先後順序:
https://tornado.cash/Tornado.cash_whitepaper_v1.4.pdf
https://tornado.cash/audits/TornadoCash_cryptographic_review_ABDK.pdf
https://tornado.cash/audits/TornadoCash_circuit_audit_ABDK.pdf
https://torn.community/t/whats-next-for-tornado-cash-governance/250
https://weijiek.medium.com/deanonymising-the-kucoin-hacker-418fa5e9911d
https://tornado-cash.medium.com/tornado-cash-governance-proposal-a55c5c7d0703#2084
https://eips.ethereum.org/EIPS/eip-2938
http://gavinandresen.ninja/private-thoughts
[ZKP 讀書會] Tornado Cash was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
同時也有1部Youtube影片,追蹤數超過2萬的網紅ANTON 安東妮亞,也在其Youtube影片中提到,去旅行之前六件一定要做既事 ✈️ 聽日就去旅行啦~??? 今日趁住哩個機會同大家分享一下 我去旅行之前一定會做既幾件事~ ps 今次試左一個新既editing style,希望大家會喜歡 ~ *內有少量合作內容 Edited and filmed by Antonia -----------...
d link 說明書 在 Facebook 的精選貼文
🔥🔥【玩具腦!漲知識的超狂團購組合!】🔥🔥
#把數學英文邏輯變好玩
#最優質的兒童節禮物
🌟團購時間:2021/03/10 ~ 03/15 (一) PM23:59
🌟團購表單:https://reurl.cc/jqWQRL
這次開團,以下熱門商品全都享 #團購價!
滿2000免運,
滿5000再加送一個可愛的Oogi 麻吉兒
▶美國LEARNING RESOURCES
▶丹麥NEWMERO教學積木玩具
▶PLUGO互動式益智玩具組
▶土耳其TOYI自由創意教具組
簡單介紹一下每一款的特點
▶美國LEARNING RESOURCES
(每款限量50組)
這兩組可是這一次的熱門大爆款!
噗媽追貨追好久啊~
來自美國的兒童教育品牌《Learning Resources》
噗媽陸續介紹過許多款他們的桌遊和教玩具
【分數玩具塔】超熱門!私訊快爆了!
讓「分數概念」一目瞭然!
4個1/8等於多少?爲什麼跟1/2一樣?
1/4比較大還是1/6 ?
那些分數組合起來會等於1?
透過24題教學卡,讓孩子動動手就能記住分數概念
【智能基礎數學積木】3歲以上就可以玩
加減法、排列、分類、建構、顏色
方塊積木的四面還有不同形狀,玩法更多
15張教學卡,共30題
10種顏色,每種顏色10顆積木
噗噗一拿到,直接當成積木拼組成可愛的小動物
還可以變身魔術方塊!這創意太有趣了~
▶丹麥NEWMERO教學積木玩具◀
文章介紹:https://reurl.cc/dV1b98
讓孩子用「看」的,就能 #明白數學 的積木
可以認識數字,數量,還能搞懂乘除法的積木
阿拉伯數字對孩子來說,就是一個圖像而已
搞不懂11跟7哪一個比較大?
不懂534的概念,原來是500+30+4
從基礎開始玩起,就可以感受到積木神奇的設計
A.認識數字和數量
B.用數字來玩,從1數到10,再數到20
C.10,20,30…練習10的倍數
D.跳著數:2,4,6,8,10
E.兩個數字比大小,大多少?
F.顏色練習
G.加減法練習
H.10的好朋友
I.多位數的數字概念
J.乘除法練習
▶PLUGO互動式益智玩具組◀
文章介紹:https://reurl.cc/Q7Eroq
結合STEAM與AR的互動式益智教具組
字母款和邏輯款真的很受大家喜歡
重點是可以根據孩子的年齡來設定合適的程度
【四款現貨】#字母款只剩最後8組
邏輯思考(Link) – 工程概念、邏輯分析、創意
數學計算(Count)-數感、理解、運算能力
樂器曲調(Tunes)-音感、韻律、專注力、反應力
字母學習(Letters)-語言、拼字、聽力
▶土耳其TOYI自由創意教具組◀
來自土耳其的TOYI是一個沒有限制的創意玩樂組,
沒有說明書,這樣的東西爸媽最害怕,
卻是讓小孩想像力能夠無止盡奔馳的好玩意兒!
只要是身邊能拿到的東西,
TOYI都可以讓他們變成獨一無二的玩具!
d link 說明書 在 塞牙縫都不夠 - 黏土袖珍食物 Facebook 的精選貼文
除了鐵板牛排~我也做了中卷的版本XD
·
【實體課程資訊】
12月鐵板牛排團體課程現正招生中!課程還附有特殊的麵條製作工具唷!
·
🏫台北場:12/19(六) (下午12:30~17:00±30min)迷你鐵板牛排
·
課堂上我們將從縮小比例計算以及材料特性開始一步步帶大家打造迷你可愛的袖珍模型~因此也不需要任何經驗~
有興趣的朋友可以在下面連結看到更詳細的教學內容及報名表
https://docs.google.com/forms/d/e/1FAIpQLScNeoFlTKX2ZuPWroKJdZRT9Y81MYzLDCzW2_E2rcB1HMFrPA/viewform?usp=sf_link
·
【線上課程資訊】
實體課的時間或地點總是對不上嗎?
我們現在也有線上課程囉!
從最基本的材料及工具開始~帶大家完成5款蛋糕2款麵包以及1款日式定食~也會示範如何加工變成飾品唷~
有興趣的朋友可以在下面連結看到線上課程資訊
https://www.pressplay.cc/link/283E7086
有任何疑問都可以在底下留言或是透過私訊聯絡我唷~
·
【材料包購買資訊】
第一款超商零食材料包內有正版授權的北海鱈魚香絲以及其他各種糖果零食等等共20種物件+2款塑膠提袋!
並附有非常詳細的圖解說明書~初學者也完全不用擔心做不出來呢!
現在可以到我的蝦皮賣場(https://shopee.tw/linjahao3333?smtt=0.0.9)選購唷!詳細資訊可以參考先前宣傳的貼文唷~
之後也會在蝦皮賣場陸續上架一些袖珍相關的商品或材料唷~
·
#手作 #手工藝 #handmade #黏土 #軟陶 #polymerclay #袖珍 #miniature #miniatur #dollhouse #微縮 #diorama #迷你 #mini #tiny #袖珍食物 #miniaturefood #tinyfood #仿真食物 #食玩 #fakefood #療癒 #可愛 #cute #ミニチュア #ドールハウス #미니어처 #鐵板中卷 #中卷 #透抽
d link 說明書 在 ANTON 安東妮亞 Youtube 的精選貼文
去旅行之前六件一定要做既事 ✈️
聽日就去旅行啦~???
今日趁住哩個機會同大家分享一下
我去旅行之前一定會做既幾件事~
ps 今次試左一個新既editing style,希望大家會喜歡 ~
*內有少量合作內容
Edited and filmed by Antonia
--------------------------------------------------------------------------
1. - 買電話卡
我通常都係深水埗C出口D攤位買~
今次就買左$80蚊既日本Sim卡
8日可以用3GB,然後限速200KB/S
大家要留心唔同電話卡既使用條款~
因為有時話「無限」唔係真係「無限」架 :(
2. 去買相機電
通常買電/代用電都係去星際買~
大家要去信譽良好既商店買
唔係輕則用唔到,重則會爆炸sosad
買之前記得格下價
同一間商場 唔同店鋪都有唔同定價的
行左幾次都係二樓果間買代用電價位平D
3. 做Facial同執定一大袋野上機保濕
去旅行之前我都會去做facial~
一來清下皮膚D污糟野,皮膚透亮D,影相都自然會靚D
二來就實際地去修下眉~
因為我條眉生得好快 -_-"
好感謝DERMA21既邀請,
趁哩個機會我就去做左21肌齡療程。
而家只要WhatsApp 65152121 ,
講MAJORINTRAVELLING就可以免費體驗一次「21肌齡療程」~
或者係呢條link登記都得: bit.ly/DERMA21TryMinT
DERMA 21 Website :http://www.derma21.com/
DERMA 21 Facebook :https://www.facebook.com/derma21
DERMA 21 Instagram :@derma21medical
*是次療程由品牌提供,本文章所發表的全部內容均屬個人意見及真心感受,並不代表品牌之言論及立場。
**TREATMENT sponsored by DERMA21
4. 撚熟D相機器材同列一個Gear List
相機器材哩d 的確又唔係今日先應該睇說明書
但係有D器材十年都唔用一次
趁今日要臨急抱佛腳一下:P
5。買旅遊保險
旅遊保險買邊間好?
通常我都會買豐隆保險、藍十字同MSIG~
今次唔係我畀錢所以買左MSIG :P
如果平時要我畀錢就會買豐隆保險~
因為佢既價錢平D 但係保障既條款都係差唔多:P
一句講哂 大家買保險前要睇清楚D terms呀 ~
6. 執行李
今次去六日五夜東京
希望一大一細gip夠用 :)
去日本外套要夠厚
但係入面件衫唔好咁厚
周圍都帶暖氣 真係會好熱
希望大家會鐘意我既分享:D