📜 [專欄新文章] [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影片,追蹤數超過11萬的網紅CashLab卓倫,也在其Youtube影片中提到,如何在熊市獲得更多比特幣 -------------------------------------------------------------------------------------------------------------------- 這個方式不適合在牛市中使用 而偏偏在熊市...
「vps是什麼」的推薦目錄:
vps是什麼 在 Vps韓國連線 Facebook 的最佳貼文
有時候真的都不得不佩服
我哥的靈魂裡面是住了一個廚師是不是什麼都會超厲害的🤭🤭🥰
手工雪Q餅怎麼那麼好吃啦!!
昨天前天現貨剩下一點點囉🌚🌚
#vps#vpsootd#koreaootd#現貨直播
vps是什麼 在 Vps韓國連線 Facebook 的精選貼文
忙1個忘了今天是什麼時候😂😂
各位...
平安夜快樂啊
#突然懷念起東海的人山人海😆
已經好幾年的平安夜沒有像今年有冷的感覺了☺☺☺
#2天現貨好美
#你追了嗎🤓
#VPS#VPSOOTD#KOREAOOTD#12月新品#韓國現貨
vps是什麼 在 CashLab卓倫 Youtube 的最佳解答
如何在熊市獲得更多比特幣
--------------------------------------------------------------------------------------------------------------------
這個方式不適合在牛市中使用
而偏偏在熊市里 完美匹配
--------------------------------------------------------------------------------------------------------------------
「關於投資」
₿ 【加密貨幣投資開戶】:
如持BNB抵扣享75%折扣手續費優惠
買幣賣幣必備:
https://www.binance.com/zh-CN/register?ref=12196252
-------------------------------------
?【美股投資開戶】:
【微牛證券 WEBULL】:
開戶入金美股賬戶送5只美股股票
https://act.webullzone.com/invitation/cn/shareV3.html?hl=zh&inviteSource=wb_kol_us&inviteCode=cRVuQv6XNxMo
【老虎證券】:
??中國身份證開戶:
1:開戶即可1港幣兌換1股小米(01810.HK);
2:首次入金3000美金以上送10股小米+200港幣
3:首次入金10000美金以上額外送1股蘋果股票
https://itiger.com/accounts?invite=CASHLAB
??美國SSN開戶:
1、註冊開戶後抽2~15美金股票;
2、首次入金100/1000/2500/5000美元,則可以額外獲得1/2/3/4次抽取大額贈股機會,單股價值15~1000美元
https://tradeup.marsco.com/accounts/signup?invite=CASHLAB
?境外護照開戶:
開戶即送:180天60次免傭卡
入金≥ 2000SGD:送一股蘋果、5股小米
入金≥ 300000SGD:送一股亞馬遜
【TGM交易平台】
外匯/股指/貴金屬/期貨/比特幣
TMGM 開戶鏈接:
英文:https://portal.tmgm-cn.com/register?node=NjIxNjM=&language=en
中文:https://portal.tmgm-cn.com/register?node=NjIxNjM=&language=zh
Referral code: 5138132
使用卓倫的TMGM開戶邀請,將終身享受低至0點差ECN交易賬戶!
福利1、積分商城,交易兌換蘋果手機, AO門票,名表,旅遊等禮品
福利2、每日市場行情、分析師觀點無限期免費
福利3、每月交易7手 即可免費使用Forex VPS 或 阿裏雲VPS
中國大陸ID開戶客戶:6千/1萬美金入金免費好禮,限時雙倍積分
東南亞ID開戶客戶:入金$500 即可獲得$30 歡迎贈金
--------------------------------------------------------------------------------------------------------------------
【自媒體創業】
?♦限免YouTube教程:從毫無經驗的路人到月賺$1000美金只用2個月♦?
點擊獲取教程?:https://bit.ly/2VHEN2k
--------------------------------------------------------------------------------------------------------------------
?加入我的會員,窺探私密投資情況,第一時間掌握卓倫是暴富還是破產:
https://www.youtube.com/channel/UCKFrY_VVbvDwvQ3Mmd3DvUg/join
--------------------------------------------------------------------------------------------------------------------
聲明:
感謝你閱讀到這裡,以上信息中包含鏈接可能有部分為聯盟營銷鏈接,意味著本頻道會獲得很少的佣金,當然這並不會有損你個人的所有權益或收益,所有聯盟營銷的收益都將再投入進頻道以給大家提供更好的視頻內容,特此說明,謝謝。
#虛擬貨幣
#加密貨幣
#投資理財
vps是什麼 在 網站架設教學:去哪裡買網址?虛擬主機 - YouTube 的推薦與評價
什麼是網址呢?網址通常是一串英文組成的, ... 而主機就像是你家的房子,有房子才能夠容納裡面的傢俱擺設。 ... 虛 ... ... <看更多>
vps是什麼 在 戰國策集團- 認識VPS眾多優點 - Facebook 的推薦與評價
認識VPS眾多優點,為自家網站找尋可靠高效的伺服器主機VPS主機是近年問世的伺服主機類型,提供需要架設網站的人除了實體主機與虛擬主機外多了一個新選擇。 ... <看更多>
vps是什麼 在 [心得] [VPS掛卡回本]新手黑五VPS購物推薦- 看板Steam 的推薦與評價
各位好,今天要跟大家推薦一些黑色星期五VPS購物的心得
原本第二篇建置免費VPS的文寫到一半配我坑了之後就一直處於一種裝死的狀態
不過最近因為黑色星期五快到了,開始有版友在詢問VPS購買的建議,雖然感覺發在Steam
版上有點怪怪的,不過就當是接續上一篇VPS掛卡回本吧
於是...恩...咱們開始吧~
首先,VPS是什麼呢?
VPS是虛擬專屬主機(VPS – Virtual Private Server),將一部伺服器主機分割成多個相
互隔離的單位,每個單位(又稱虛擬專屬主機VPS)與一般實體主機的運作方式完全相同。
簡單的說法就是一台遠端可操作的系統
那這個VPS的用途可以拿來做什麼呢?
一般來說可以拿來建置網站、跑跑腳本、建置VPN、當備份空間、建置聊天機器人、Steam
掛卡、美區IP購物、需要長時間開機運行的事情...
進階點的可以透過LINE來控制掛卡或是執行Steam某遊戲掛時數,或定期檢視版區文章,
將符合序號格式的那一串文字自動嘗試啟用遊戲(理論上可行,但我沒做)
總之,想要在自己電腦上完成的事情都可以在VPS上面進行
看到這邊應該會有人有疑惑,既然自己電腦就可以做的事情,我幹嘛要放到VPS上面弄
原因還是在於成本,像是建置網站和掛卡也能在自家電腦上運行,但長時間開機所需的電
費其實還是蠻高的
而且因為VPS內的系統是24小時不關機的,所以只要有IP,隨時偷可以透過任何一台電腦
或行動裝置連接上去進行操作
另外VPS購買後通常都會依照購買的VPS機房地點給你一組該地區的固定IP,有了這麼一個
IP通常可以來做很多事
回到正題,因應黑色星期五主機商們一年一度的大特價,本次主題將稍微介紹一下幾家之
前我有用或名氣比較大的商家
那麼開始吧~
購買VPS時我們會依需與穩定度求來選擇不同國家的VPS,大體上有幾個地方是需要注意的
第一個是虛擬化技術
在上面我們有提到VPS是將一部伺服器主機分割成多個相互隔離的單位,這個虛擬化技術
大多使用OpenVZ、Xen、KVM,在購買VPS時會以OpenVZ和KVM為主(方案上通常都會標示是
用何種技術)
OpenVZ的優點是同價位下規格會比KVM的還要好,因為廠商的可調度性比較高,但是缺點
也是很明顯的。
OpenVZ的缺點是因為資源是互相共享的,所以廠商超賣的狀況十分常見,在系統上僅能安
裝Linux,無法使用Windows。
舉個例子來說,假設這台主機總共有64G的RAM,今天主機商開出了一個RAM有8G的方案,
照理說這台主機正常只能賣8個方案,但因為資源是共享的,主機商評估覺得大家沒是不
可能會用滿8G RAM,於是在這台主機上賣出了16份的8G方案。
如果平時沒那麼多人使用時還沒問題,當所有人都使用並且跑滿RAM的話就會出現狀況,
因為RAM只有64G,不可能每個人都使用到8G,常常就會出現實際可使用的資源比標示的還
少的狀況,CPU、硬碟讀寫速度也都會有這種狀況。
KVM的優點是相較於OpenVZ比較不會超賣,並且除了只要是KVM的架構下都可以裝,Linux
和Windows,不管主機商有沒有寫清楚,只要你的規格夠就一定裝的進去,。
KVM的缺點是因為可以裝Windows與Linux,如果你的鄰居(同一台主機)中有幾個硬要在一
個規格不高的方案下裝windows(如:128M RAM的方案裝Windows,512M RAM的方案裝WIN7)
,因為Windows在你的RAM不夠時會拿硬碟空間來做虛擬記憶體輔助,依但這樣做的人多了
,這台主機的硬碟寫入速度就會變得非常差。
因為這些小容量的KVM在一台主機上通來會開很多,本來也不是為了讓你裝Windows,當用
各種方法裝Windows的人多了後就是拖慢大家的寫出寫入速度。
--------------
懶人包:KVM比OpenVZ還要好,但同時也會比較貴,因為可以裝Windows
--------------
以下介紹幾個較為知名的主機商(以歐美為主,Google、AWS和Azure就不介紹了)
網頁介面與溝通方式通常以英文為主
搬瓦工Bandwagonhost
https://bandwagonhost.com/
OpenVZ和KVM主機方案都有,主要的機房分布在美國鳳凰城、洛杉磯等西岸地區,穩定性
不錯,系統建置的介面也算簡單,之前還有常駐的年付費方案,不過最近好像沒看到了,
前幾次的黑五都有看到年付優惠,算是新手的好選擇之一。
Linode
https://www.linode.com/
個人沒使用過,不過在面的評價蠻高,穩定性與售後的服務好又快速(有些主機商你發
ticket時會等很久才有回應),主打KVM為主的方案,機房有新加坡、美國、日本等,需使
用信用卡付款。
Vultr
https://www.vultr.com/
穩定跟價錢衡量下的好選擇,使用的架構是KVM與SSD硬碟,機房遍布十幾個國家(日本、
美國、英國、歐洲等),其中包括了比較難得的日本機房(日本機房連亞洲較穩定),有以
小時計費與月計費的兩種方案,支持用戶自己上傳ISO檔安裝Windows系統,新用戶註冊會
送免費使用金,時常會有一些優惠活動,印象中上次黑五也有活動。
DigitalOcean
https://www.digitalocean.com/
再2012年成立,跟Vultr的運營模式一樣,也是KVM架構跟SSD硬碟,機房遍布十幾個國家
,有以小時計費與月計費的兩種方案,同樣的布時會有活動,大體上跟Vultr差不多,個
人是比較偏好Vultr。
Virmach
https://virmach.com/
想要便宜的KVM架構VPS嗎?這家就是啦!
他的方案有OpenVZ和KVM架構,KVM 1G以上的方案支持官方Windows系統,只要是這個方案
以上的,可以直接在後台面板上選擇安裝Windows,會直接幫你將Windows裝好(有些提供
KVM架構的主機商不會幫你裝,因為Windows也需要授權),根據經驗他家512MB的KVM方案
也可自行安裝Windows,機房主要分布在美西地區,時常會有各種折價活動,每年黑五都
有一些好東西可以搶,
整體評價還OK,發ticket的處理速度我可以接受(1-3小時內),我自己的Windows系統目前
開了幾個月還沒掛過,唯一要注意的是,這家的TOS(服務條款)執行上蠻嚴格的。
最後自己在私心推一家
ChicagoVPS
https://www.chicagovps.net/
ChicagoVPS是美國一家老牌的VPS主機商,提供OPENVZ和KVM架構的VPS主機方案,主機大
多放置於ColoCrossing機房,一樣以美西為主,口碑、服務、評價都一般,時常會有些些
個價與優惠方案,主打價格優勢,特價時還是可以買來玩玩。
上述提到的幾家主機商我自己目前還有再用的有ChicagoVPS和Virmach,兩個都是年費特
價時購買的。
ChicagoVPS 系統為Linux,主要是用來架站並放一些小玩意(大逃殺網頁版),因為瀏覽量
並不大,所以目前用起來還可以接受,但絕不是架站最優的選擇。
Virmach有兩個空間,一個是去年黑五買的1美金OpenVZ架構與30美的KVM架構,1美金目前
主要掛卡(畢竟規格爛能做的事少),30美的安裝Windows,主要用來跑一些排程與美區IP
用途(慈善包...)
針對這兩家主機商如果想要測試連線狀況的話再私信,我再提供連結提供測試
年費1美金方案的主機商不常有,上次黑五我印象也只有virmach、Serverhub這兩家有出
Serverhub續費的還不是1美金,如果想要看看今年會不會有1美金VPS的話可以關注
virmach這家主機商。
懶人包:Bandwagonhost與Virmach適合新手,黑五應該也會有優惠,可優先關注這兩家,
如果想要穩定、備份佳、處理迅速和適合大流量網站的話還是請找Google、AWS和Azure這
三大家,費用不便宜就是了。
最後,如何安裝購買與問題排除,因為每家的模式不太一樣,也不是本篇要討論的重點,
這部分就請自行google了,有問題的部分可以私信或留言,可以解答的部分我會再幫忙。
看到這邊大家也辛苦了,祝大家黑五能夠順利買到自己想要的VPS來掛卡、買包~
我是Sacacat,我們下次再見~
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.217.143.217
※ 文章網址: https://www.ptt.cc/bbs/Steam/M.1511258612.A.EA5.html
... <看更多>