📜 [專欄新文章] [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.
👏 歡迎轉載分享鼓掌
同時也有5部Youtube影片,追蹤數超過6萬的網紅BlueBerries詭計星的頻道,也在其Youtube影片中提到,After the next update, no more Traning ground mean lesser mentor badge, ET change to account only mean even lesser mentor badge. But Wait!! I had a tr...
「account for導致」的推薦目錄:
- 關於account for導致 在 Taipei Ethereum Meetup Facebook 的最佳貼文
- 關於account for導致 在 Facebook 的最佳解答
- 關於account for導致 在 17.5英文寫作教室 Facebook 的最佳貼文
- 關於account for導致 在 BlueBerries詭計星的頻道 Youtube 的精選貼文
- 關於account for導致 在 J Channel Youtube 的最佳貼文
- 關於account for導致 在 Dashen大神 Youtube 的最讚貼文
- 關於account for導致 在 [請益] account for 的用法- 看板Eng-Class - 批踢踢實業坊 的評價
- 關於account for導致 在 英文Kao Easy - account (1)... | Facebook 的評價
- 關於account for導致 在 Google品牌帳戶導致YouTube無法登入的解決方法 的評價
- 關於account for導致 在 帳號暫停使用 的評價
account for導致 在 Facebook 的最佳解答
💖💖凱倫泰泰邀請各位一起做公益 💖💖
(即日起至3/15截止)
以前在這邊就讀高中的時候,學校每年都會帶我們去做義工(Community Service),而讓泰泰最深刻的其中一年就是到了愛滋病基金會,陪著各年齡層的病友聊天,幫他們按摩,跟小朋友玩,直到今天都還印象深刻。
高中那四年(美國學校高中是9-12年級)的公益活動意義非凡,其實深深了影響凱倫泰泰❤️,常常都跟自己說,有錢的出錢,有力的出力,所以後續不論在台灣或是泰國,都陸陸續續都有用自己能負擔的範圍內捐物資或款項。
搬回來這幾年,因為時間上的關係,凱倫泰泰都是透過朋友,每年捐物資給不同的公益團體,而去年是幫偏遠鄉村的孩童蓋藤球場,今年凱倫泰泰想發揮小小粉專的力量💞,把大家的愛心做大,泰泰將去盲人基金會,把物資交到他們手中。
這次凱倫泰泰要前往位於那空那育府(Nakhon Nayok)的非營利組織的盲人基金會,มูลนิธิธรรมิกชนเพื่อคนตาบอดในประเทศไทย Foundation of the Saints for the Blind in Thailand✅,泰泰曾經也捐物資給這個基金會,這次剛好有緣分能親自前往。
(👉基金會網站: http://cfbt.or.th/index.php)
因為疫情的關係,許多公益團體的捐款及物資可以說短缺了非常多,相信許多地方都面臨到這樣的困境,所以凱倫泰泰希望藉由大家的愛心一起募資給需要的團體。
這個基金會裡面收容的盲人裡,分為生活可以自理的,及可半自理但有些許智能障礙者,再來就是完全沒有自理能力的盲友,所以這基金會就需要許多志工幫忙,但因為疫情的關係捐款及物資大幅減少,導致基金會除了沒有多餘的捐款來支付給這些志工,生活必需品也嚴重短缺,所以發起這次愛心捐物資的活動,懇請大家能多多響應🙏。
所募得的款項,將去購買盲友的生活必需品,若有剩餘的部份將全數捐給基金會運用,捐贈的相關資料將在活動後,擇期公布在粉專上🙂。
🟢🟡帳號資訊如下🟢🟡
🔸台灣帳號
國泰世華銀行(土城分行) 銀行代號 013
060506107221
🔸泰國帳號
Bangkok Bank (Nongkaem Branch)
236-4-06465-5
Account Name: KUANG YIN CHOU
凱倫泰泰是第一次攜手各位的愛心辦這個公益活動,如有哪裡做得不夠周到,敬請各位見諒🙇♀️,並且先在這裡感謝各位的愛心,希望我們的小小力量能幫助到需要的人!
❣️❣️溫馨提醒:
➡️台幣募得的款項依3/16台灣銀行的匯率換算泰銖。
➡️此活動將不提供個人的捐贈證明,敬請見諒!
account for導致 在 17.5英文寫作教室 Facebook 的最佳貼文
#17來學字根字首 #17終於一歲啦
#106指考翻譯題曾考過的單字
#文末有領指考圖表題講義活動
ship, 狀態、身份、職位、技能。
➡️ condition, character, office, skill
🖊 sportsmanship 運動家精神 (n.)
➡️ display/ show sportsmanship 展現運動家精神
E.g. The athletes gave a good account of themselves and displayed fine sportsmanship.
運動員們展現出很棒的水準以及展現極佳的運動家精神。
🖊censorship 審查、審查制度 (n.)
➡️ practice / impose censorship on 對...進行審查制度
E.g. Kelly considers that publications should be free from censorship.
Kelly認為出版物應免於審查制度。
🖊 internship (醫生) 實習期
➡️ apply for an internship 申請實習
E.g. Alex is applying for a summer internship at KPMG.
Alex正在申請KPMG的夏季實習。
🖊 entrepreneurship 創業家精神 (n.)
➡️ foster / develop entrepreneurship 培養創業家精神
E.g. Leadership endorsement generates awareness and commitment to developing entrepreneurship.
領導階層的支持能夠激發創業精神的發展與投入。
🖊 scholarship 獎學金、學術成就、學業成績 (n.)
➡️ apply for a scholarship 申請獎學金
➡️ obtain / receive / win / hold a scholarship 獲得、贏得獎學金
E.g. Ivan won a scholarship at the middle school.
Ivan在中學贏得獎學金。
🖊 fellowship 夥伴關係、研究員、研究基金 (n.)
➡️ award / grant fellowship 提供研究員的職位
➡️ cordial fellowship 真摯的情誼
E.g. You will lose our fellowship if you do that.
你如果那樣做的話,你將失去研究員職位。
🖊 championship 冠軍頭銜、擁護 (n.)
➡️ capture / chalk up the championship 贏得冠軍
E.g. Dai has chalked up championships around the world.
Dai已經在世界各地多次獲得冠軍。
今天分享的主題是ship結尾的單字
加上這個結尾在英文單字中也蠻長出現的
主要是用來表達精神、身分、職位等概念
值得注意的是sportsmanship 曾出現在106指考的翻譯中喔‼️
當時17.5我在考試時壓根不知道該怎麼翻
現在TEEN學到後不只要會拼更要會用
才不會愧對我今天和你們分享這些內容喔🤣
2020.3.4 是17.5發布第一篇貼文的日子
這一年期間17.5英文寫作教室總共和大家分享183篇貼文
平均每2天就會和TEEN分享一篇貼文
支持17我經營下去的動力就是我深深相信
透過自己每天的分享以及持續壯大的社群
就能夠有機會幫助更多沒有時間、金錢去補習的同學
或著是一些很努力但缺乏學習資源的同學
而在這一年期間也真的收到不少粉絲的回饋
和我分享他們是怎麼透過這些社群內容學習
以及和我分享他們進步以及在大考獲得的成果
未來我也會持續經營這個社群並產出更多內容
也希望TEEN幫我多多分享給身邊的親朋好友😂
📈圖表題講義領取
圖表題是只有在指考時會特別入題的作文題目
很多同學可能會因為不知道要怎麼準備和下筆
導致考試時因為缺乏練習而與高分擦身而過
因此這邊17提供你們一份指考圖表題講義
希望能夠幫助你們在準備這個大魔王題時能夠有些幫助
之後也會有一份圖表題相關單字的整理會提供給大家
講義領取方式✅
1️⃣ 按讚這篇貼文
2️⃣ 在留言處標記2位朋友,並寫下領講義的期望🥰
3️⃣ 分享這篇貼文到主頁再截圖私訊我,我就會將這份講義的連結提供給你們喔
講義發送期限:3/8 (一) 23:59為止‼️
🔥我的線上課程上線了🔥
#目前累積超過500位學員
✍️ 大考英文作文各大題型說明
✍️介系詞連接詞全解析
✍️ 提升大考詞彙量
✍️ 近三年學測指考範文賞析
💰目前課程售價
方案1 👉 單人購買 2490 / 人
方案2👉 三人團購 1990 / 人
✏️追蹤IG聽發音:https://reurl.cc/9ZV47d
✅學測指考線上課程連結:https://9vs1.com/go/?i=59b8627f1776
✏️字根字首推薦學習平台:https://reurl.cc/dVeMeD
account for導致 在 BlueBerries詭計星的頻道 Youtube 的精選貼文
After the next update, no more Traning ground mean lesser mentor badge, ET change to account only mean even lesser mentor badge.
But Wait!! I had a trick for you!
How to get Mentor Badge & use it wisely 如何取得導師證及換什麼好:
https://www.youtube.com/watch?v=XaMdJjyC3mA
How to get Mentor Badge after EP7 Account Only Update 改成賬號限定後 取得導師證路徑:
https://www.youtube.com/watch?v=Av7dtBsqcPQ
經過上週更新後, 互帶/自帶導師塔的人如果姿勢錯誤, 就導致導師證變少哦,
請根據以上影片帶塔吧~
再下個更新 公會遺跡將會改為賬號限定, 每週再減少80x3導師證. 哭.
![post-title](https://i.ytimg.com/vi/Av7dtBsqcPQ/hqdefault.jpg)
account for導致 在 J Channel Youtube 的最佳貼文
2019年10月01日
影片為大家分享精靈寶可夢GO日前某裝置無辜被禁賬號與警告原因曝光及其解決方法的各方面內容與詳情。
先前某些裝置在遊玩GO時遭遇無辜被禁賬號或是警告的主要原因在目前已得到證實,導致這情況出現的原因竟然是?!而訓練師們如果遭遇到該種情況又該如何解決?!更多內容與詳情盡在影片中與大家分享~
影片內容僅供參考,並不能作為標準,遊戲開心就好。
更多資訊與第一手消息請前往(J Channel竹子臉書專頁)
https://www.facebook.com/J-Channel-162244390482389/
更多關於-竹子
►IG Instagram:juno1004
►推特Twitter: https://twitter.com/JunoChannel
►部落格Blogger: https://junochannel.blogspot.my/
工商聯繫方式:
For business inquiry:
►juno-1004@hotmail.com
![post-title](https://i.ytimg.com/vi/HnMO-Nrc_W8/hqdefault.jpg)
account for導致 在 Dashen大神 Youtube 的最讚貼文
大家好!我希望大家可以帮帮忙嘛?!帮findy拿回Instagram 的 account 很简单!
步骤1:
打开你的Email 然后Copy 一下的草稿!
Dear Sir, my account ID " @findyyyy_ " was hacked by someone I don't know, and they changed my email address of my account, please help to change the email address back to my email " findyyong408@gmail.com " and provide the link for me to change the password, if you need any information please don't hesitate to contact me, thank you so much.
客服您好,我的帳號 @findyyyy_ 人盜用了,而且他更改了我帳號的信箱導致我無法登入與取回,請幫忙修改帳號的信箱回到" findyyong408@gmail.com "並且讓我修改回密碼,如需要任何資訊請再不吝告知,謝謝您。
步骤2:
把以上的内容发给
support@instagram.com
help@instagram.com
上一支影片?
https://www.youtube.com/watch?v=SPHYB5YCdzk
前一支影片✌️
https://www.youtube.com/watch?v=Wt5VIdv1XUE&t=88s
请问我是最疯狂Youtuber??!!
如果喜欢这只影片的话
记得点个赞 喝 订阅我哦!
在这里也要感谢大家的支持!
记得Subscribe我们的Youtube Channel
你们的鼓励 「是我们继续制作影片的动力」
记得留意我们的动态:
Eugene Ng:
FB: https://www.facebook.com/kheetatngii.i
IG : https://www.instagram.com/eugenekt/
YouTube : https://www.youtube.com/c/Dashen大神油贱
![post-title](https://i.ytimg.com/vi/mO5l878B1qY/hqdefault.jpg)
account for導致 在 英文Kao Easy - account (1)... | Facebook 的推薦與評價
例如:「account」,卻有(無窮無盡的解釋):帳戶、帳目、帳單、報帳、導致、 解釋、認為、視為、理由等等。碰到這個句子: ... <看更多>
account for導致 在 Google品牌帳戶導致YouTube無法登入的解決方法 的推薦與評價
一、頻道切換器:讓你切回主帳號,使正常登入YouTube。 這一兩天連續接獲通知. 使用YouTube 會出現. Your Primary/Secondary (K-12) School Brand Account ... ... <看更多>
account for導致 在 [請益] account for 的用法- 看板Eng-Class - 批踢踢實業坊 的推薦與評價
最近在看一部犯罪影集
其中一段是探長懷疑死者是pizza店的員工,
所以就要求手下,去盤查員工名單
回報的時候手下說:
"we got through to all their employees.
everybody's accounted for."
字幕上的翻譯是說:「他們都還活著 」
(也就是說死者不是員工之一)
想請問的是 在這裡使用account for的意思是什麼?
怎麼能解釋翻譯成「都還活著」?
先謝謝各位了!
(我事先查了字典,account for 的解釋為
1.說明 (原因、理由) 2.導致、引起 3.占(多少) 4.對...負責
好像都沒辦法直覺聯想
看了例句,也沒有相關的表達方式,我可能需要更多的慧根orz)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 118.160.222.15
※ 編輯: fxckingugly 來自: 118.160.222.15 (09/04 08:39)
... <看更多>