📜 [專欄新文章] [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影片,追蹤數超過3萬的網紅孫在陽,也在其Youtube影片中提到,Tableau大數據分析-校務資料分析 3.ELT, Cross Join, 外部資料更新, 儀表板 統計中,最直觀取得的數據,就是平均數與標準差;標準差的平方,就是變異數。平均數與變異數,可以幫助我們進行二個樣本間,是否存在很大的差異。虛無解設H0,預設為二樣本是相同;若p值小於0.05,拒絕虛無...
「虛無假設」的推薦目錄:
- 關於虛無假設 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於虛無假設 在 劉昱佑 Facebook 的最讚貼文
- 關於虛無假設 在 劉昱佑 Facebook 的精選貼文
- 關於虛無假設 在 孫在陽 Youtube 的最讚貼文
- 關於虛無假設 在 [問題] 虛無假設和對立假設- 看板Statistics - 批踢踢實業坊 的評價
- 關於虛無假設 在 7-1-1 虛無假設與對立假設(難度: ) - YouTube 的評價
- 關於虛無假設 在 是什麼?樣本數跟檢定力究竟有什 - Facebook 的評價
- 關於虛無假設 在 第5單元單一樣本的推論統計 的評價
- 關於虛無假設 在 問#統計#虛無假設- 考試板 - Dcard 的評價
虛無假設 在 劉昱佑 Facebook 的最讚貼文
前幾天,台中的空氣品質並不好,引起很多民眾批評。我是過敏兒,同樣能夠理解吸入污濁空氣的痛苦感受。但於此同時呢,洪慈庸、林佳龍竟然像看到血饅頭一樣見獵心喜,大肆抨擊盧秀燕中火降載只是徒勞,真的非常不厚道。
我認為,一個好的批評必須有所本,解決空污不是用嘴砲,應該先釐清台中空污的主要成因,才能找出正確的手段改善空污。因此,我自己跑了一個簡單的計量模型,試著解釋空氣污染的來源,給大家做參考,到底中火降載是不是可欲的手段?
先說結論,中火減煤不但有效改善空氣品質,而且是影響至為關鍵的重要因素。
#模型架構
普遍來說,「台中電廠的用煤量」、「境外污染源」、「降雨」、「風速」一直被認為是影響PM2.5的重要因子。因此,我的模型將用以上四個變數為自變數、PM2.5濃度為依變數。
#資料說明
在資料處理上,由於台灣屬於季風氣候,空氣品質容易遭受鄰近國家影響,PM2.5濃度不但具有強烈的季節性,我們也必須以方便觀察的指標來評估境外污染源。
PM2.5濃度資料採用台中西屯測站的月資料,時間是2014年1月到2019年12月,總共72筆,並作去除季節因子的資料處理。
在境外污染方面,環保署在冬天時,將馬祖測站的資料作為參考標準、夏天則選擇小琉球,因為這兩個測站都是在季風來臨時首當其衝之處,空汙濃度也較少因當地人為活動而大幅變動。
但由於小琉球測站的資料取得不易,數值將以距離小琉球最近的潮州代替。而此模型的選擇的標準是,平均風向介於180度到270度之間視為西南季風,採用潮州測站的資料衡量境外污染程度;平均風向介於-45度到90度之間視為東北季風,採用馬祖測站的資料衡量境外污染程度。
平均降雨和平均風速都採用台中測站的數據,至於台中電廠的用煤量就比較麻煩,因為沒有細緻到以月為準的用煤量資料,只能以季為準創建單位為萬噸的變數。
#估計結果
以最小平方法進行估計,結果顯示四種變數其實都相當顯著,整個模型的解釋力也算不錯,P-value趨近於0.000,R-square則為0.37。
只是若要比較各種因素的效果大小,應該將整體模型取自然對數後,對各項自變數微分,才能消弭單位大小對於係數的影響,是為邊際效果 (marginal effect)。
從下圖來看,台中火力電廠的用煤量影響最大,#每多燒1單位的煤炭 #就會增加 0.62單位濃度的PM2.5,效果非常驚人。我們時常譴責的境外污染雖然顯著,卻僅有0.08的邊際效果。這意味著「境外污染」每嚴重一單位,只會惡化0.08單位的空氣品質。不可否認,這與去季節性的處理程序不盡然無關,但實際上,境外污染也沒有我們想像中的那麼具有主宰性。
#效度檢測
為了謹慎起見,我們再利用Hausman Test檢測「中火用煤量」是否具有內生性、White Test 檢測迴歸模型是否具有異質變異,結果都顯示接受虛無假設,並無內生性、異質變異的問題。
此時再著眼殘差的時間序列關係,一般而言,PM2.5的觀察值是24小時取平均,所以假設會有時間序列相關,但使用D-W test 偵測時卻否定了這個預想,因此也沒有一階的序列關係。
#小結
簡而言之,此一計量模型是不偏且有效率的估計,堪作參考。但更重要的是,從邊際效果來看,我們實證了中火用煤量是不可小覷的空污因子。
—————
或許,面對嚴峻的空污問題,你可以跟著林佳龍、洪慈庸痛罵台中市政府降載失能,這完全是作為公民的權利。
但於此同時,也恰好悲傷地證明,如果我們不願意觸碰這些資料、不願意關心自己生活在怎樣的環境,就注定被政治人物玩弄於股掌之間。
空汙確實是很艱辛的問題,但我不認為盧秀燕是無端發怒或無理取鬧,相信也一定有幕僚在餵給他這些數據和建議。
而且,空污本來就不該是政黨間爭執不休的裂口,我們必須共同面對污染所帶來的困境。#有心者應該想方設法來解決空汙的主要來源(目前看中火是最大宗),#而非企圖解決正在著手解決問題的人。
我真的由衷期盼,有朝一日龍部長、洪委員能夠放下胸中成見,和盧市長一起攜手進前、共同努力,讓台中成為更美好的宜居城市。
(如果有人想要看原始資料的話可以私訊我)
—————
資料來源:
行政院環境保護署-空氣品質監測網 (http://bit.ly/2NbOpNP)
氣象觀測資料查詢系統 (http://bit.ly/37VDi3B )
經濟部能源局能源統計資料查詢系統 (http://bit.ly/2s9lOBl)
—————
[註]境內污染也是因子之一,但台中市環保局有設計一套臺中市固定污染源自動連線監測系統 (http://bit.ly/304b3Np),其中大型的固定污染源的污染排放量比台中電廠還要小非常多,此一模型的用意在檢視中火減煤有沒有用,比起境外因子輕微或嚴重。
—————
📷 instagram.com/liou_yuyou
虛無假設 在 劉昱佑 Facebook 的精選貼文
前幾天,台中的空氣品質並不好,引起很多民眾批評。我是過敏兒,同樣能夠理解吸入污濁空氣的痛苦感受。但於此同時呢,洪慈庸、林佳龍竟然像看到血饅頭一樣見獵心喜,大肆抨擊盧秀燕中火降載只是徒勞,真的非常不厚道。
我認為,一個好的批評必須有所本,解決空污不是用嘴砲,應該先釐清台中空污的主要成因,才能找出正確的手段改善空污。因此,我自己跑了一個簡單的計量模型,試著解釋空氣污染的來源,給大家做參考,到底中火降載是不是可欲的手段?
先說結論,中火減煤不但有效改善空氣品質,而且是影響至為關鍵的重要因素。
#模型架構
普遍來說,「台中電廠的用煤量」、「境外污染源」、「降雨」、「風速」一直被認為是影響PM2.5的重要因子。因此,我的模型將用以上四個變數為自變數、PM2.5濃度為依變數。
#資料說明
在資料處理上,由於台灣屬於季風氣候,空氣品質容易遭受鄰近國家影響,PM2.5濃度不但具有強烈的季節性,我們也必須以方便觀察的指標來評估境外污染源。
PM2.5濃度資料採用台中西屯測站的月資料,時間是2014年1月到2019年12月,總共72筆,並作去除季節因子的資料處理。
在境外污染方面,環保署在冬天時,將馬祖測站的資料作為參考標準、夏天則選擇小琉球,因為這兩個測站都是在季風來臨時首當其衝之處,空汙濃度也較少因當地人為活動而大幅變動。
但由於小琉球測站的資料取得不易,數值將以距離小琉球最近的潮州代替。而此模型的選擇的標準是,平均風向介於180度到270度之間視為西南季風,採用潮州測站的資料衡量境外污染程度;平均風向介於-45度到90度之間視為東北季風,採用馬祖測站的資料衡量境外污染程度。
平均降雨和平均風速都採用台中測站的數據,至於台中電廠的用煤量就比較麻煩,因為沒有細緻到以月為準的用煤量資料,只能以季為準創建單位為萬噸的變數。
#估計結果
以最小平方法進行估計,結果顯示四種變數其實都相當顯著,整個模型的解釋力也算不錯,P-value趨近於0.000,R-square則為0.37。
只是若要比較各種因素的效果大小,應該將整體模型取自然對數後,對各項自變數微分,才能消弭單位大小對於係數的影響,是為邊際效果 (marginal effect)。
從下圖來看,台中火力電廠的用煤量影響最大,#每多燒1單位的煤炭 #就會增加 0.62單位濃度的PM2.5,效果非常驚人。我們時常譴責的境外污染雖然顯著,卻僅有0.08的邊際效果。這意味著「境外污染」每嚴重一單位,只會惡化0.08單位的空氣品質。不可否認,這與去季節性的處理程序不盡然無關,但實際上,境外污染也沒有我們想像中的那麼具有主宰性。
#效度檢測
為了謹慎起見,我們再利用Hausman Test檢測「中火用煤量」是否具有內生性、White Test 檢測迴歸模型是否具有異質變異,結果都顯示接受虛無假設,並無內生性、異質變異的問題。
此時再著眼殘差的時間序列關係,一般而言,PM2.5的觀察值是24小時取平均,所以假設會有時間序列相關,但使用D-W test 偵測時卻否定了這個預想,因此也沒有一階的序列關係。
#小結
簡而言之,此一計量模型是不偏且有效率的估計,堪作參考。但更重要的是,從邊際效果來看,我們實證了中火用煤量是不可小覷的空污因子。
—————
或許,面對嚴峻的空污問題,你可以跟著林佳龍、洪慈庸痛罵台中市政府降載失能,這完全是作為公民的權利。
但於此同時,也恰好悲傷地證明,如果我們不願意觸碰這些資料、不願意關心自己生活在怎樣的環境,就注定被政治人物玩弄於股掌之間。
空汙確實是很艱辛的問題,但我不認為盧秀燕是無端發怒或無理取鬧,相信也一定有幕僚在餵給他這些數據和建議。
而且,空污本來就不該是政黨間爭執不休的裂口,我們必須共同面對污染所帶來的困境。#有心者應該想方設法來解決空汙的主要來源(目前看中火是最大宗),#而非企圖解決正在著手解決問題的人。
我真的由衷期盼,有朝一日龍部長、洪委員能夠放下胸中成見,和盧市長一起攜手進前、共同努力,讓台中成為更美好的宜居城市。
(如果有人想要看原始資料的話可以私訊我)
—————
資料來源:
行政院環境保護署-空氣品質監測網 (http://bit.ly/2NbOpNP)
氣象觀測資料查詢系統 (http://bit.ly/37VDi3B )
經濟部能源局能源統計資料查詢系統 (http://bit.ly/2s9lOBl)
—————
[註]境內污染也是因子之一,但台中市環保局有設計一套臺中市固定污染源自動連線監測系統 (http://bit.ly/304b3Np),其中大型的固定污染源的污染排放量比台中電廠還要小非常多,此一模型的用意在檢視中火減煤有沒有用,比起境外因子輕微或嚴重。
—————
📷 instagram.com/liou_yuyou
虛無假設 在 孫在陽 Youtube 的最讚貼文
Tableau大數據分析-校務資料分析 3.ELT, Cross Join, 外部資料更新, 儀表板
統計中,最直觀取得的數據,就是平均數與標準差;標準差的平方,就是變異數。平均數與變異數,可以幫助我們進行二個樣本間,是否存在很大的差異。虛無解設H0,預設為二樣本是相同;若p值小於0.05,拒絕虛無假設。
虛無假設 在 7-1-1 虛無假設與對立假設(難度: ) - YouTube 的推薦與評價
學習重點:(1)理解假設檢定的邏輯(2) 虛無假設 與對立假設的建立(3)思考+動手練習+自行舉例. ... <看更多>
虛無假設 在 是什麼?樣本數跟檢定力究竟有什 - Facebook 的推薦與評價
【R語言和商業分析:顯著水準與檢定力】 > 72折只剩11天:https://hahow.in/cr/ranalytics 大家在做A/B測試、假設檢定的時候,是不是很疑惑為什麼「虛無假設」是我們傾 ... ... <看更多>
虛無假設 在 [問題] 虛無假設和對立假設- 看板Statistics - 批踢踢實業坊 的推薦與評價
各位大大
大家好
目前我自修統計學,但對與假設檢定該章,
做題目時的碰到"單尾檢定"的題目之虛無假設和對立假設的設定有點困惑,
請各位能不能給小的一點指點,感激不盡。
=====================================
[題1:]
某商品共有舊包裝和新包裝兩種樣式,隨機各抽取二十家條件相同的商店
得到兩個包裝的銷售量及標準差
__
新:X1, S1
__
舊:X2, S2
……..
假設兩種包裝母題變異數不同,
求是否有證據推論新包裝銷售量比舊包裝銷售量佳?
解答:
H0: u1<=u2
H1: u1 > u2
而我卻設
H0: u1 > u2
H1: u1<=u2
(我是想說他主張:新包裝比舊包裝銷售量佳,所以把他放在H0)
==================================
[題2:]
今由甲供應商所提供之零件中隨機抽200件,得不良品17件,另由乙供應商所提供之
同種零件中抽查150件,得不良品7件,
在5%的水準下,是否可以認為甲供應商所提供的零件不良率高於乙供應商,且超過3個百分點。
解答:
H0: p1 - p2 <= 0.03
H1: p1 - p2 > 0.03
而我又會寫成
H0:p1 - p2 > 0.03
H1:p1 - p2 <= 0.03
===================================
以上,我知道是我的問題,因為做單尾檢定的題目,我都會設反
雙尾的就沒有這個困擾,
想請教各位,要怎麼想
好釐清我的觀念><
感激不盡
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.230.17.109
... <看更多>