📜 [專欄新文章] [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萬的網紅站長路可,也在其Youtube影片中提到,完整圖文教學,請到新手站長網站觀看: https://newbieboss.com/freehost 想要學習更多網路創業的方法,歡迎加入我的Line@,會公布相關的開課消息: https://line.me/R/ti/p/%40ofv8829l...
「vps架設」的推薦目錄:
- 關於vps架設 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於vps架設 在 Johntool-工具王阿璋 Facebook 的最佳貼文
- 關於vps架設 在 Johntool-工具王阿璋 Facebook 的最佳貼文
- 關於vps架設 在 站長路可 Youtube 的最佳貼文
- 關於vps架設 在 [討論] 粗略整理VPS 架設SS 等相關工具筆記- 看板WorkinChina 的評價
- 關於vps架設 在 OpenShift 教學(一):申請免費VPS空間、架設WordPress 的評價
- 關於vps架設 在 一介資男- [VPS] 使用Docker 架設Nextcloud 搭配AWS S3 建立 ... 的評價
vps架設 在 Johntool-工具王阿璋 Facebook 的最佳貼文
【#最新文章】架站教學 | 新手快速架站教學 使用Cloudways架設WordPress網站!
Cloudways 是一個近期阿璋接案很喜歡使用的架站平台,他們本身並不是一個主機商,而是配合 VPS 主機商,將效能調到最佳化!
此外,他們架站的流程也是非常方便,一開始可能會有一些驗證身份的程序。
Cloudways 優勢:
1. 速度非常快
2. 適合高流量網站
3. 主機資源監控方便
4. 全年無休的線上客服
5. 搭配 Cloudways 開發的快取外掛 breeze
6. 配合 CDN 服務
7. 網站安全機制良好
8. 3天免費使用,不用綁定信用卡
9. 本身有提供專門的搬家方式
Cloudways 缺點:
1. 價位高 (每個月10美元起跳)
2. 英文介面
Cloudways 適合對象:
1. 一直頻繁換主機的人(基本上不太有人不喜歡)
2. 有較高主機預算的人
3. 電商網站
4. 高流量網站
5. 高速度需求網站
6. 接案者 (透過 Project 管理案子)
Cloudways 優惠碼:JOHNTOOL
在註冊的時候輸入優惠碼,可以享前兩個月8折的優惠,想要使用 Cloudways 的人,別忘記輸入哦!
https://www.johntool.com/cloudways-wordpress/
操作上有問題的人,可以在文章或是粉專留言!
#Johntool #工具王阿璋 #Cloudways #架站 #WordPress #教學 #優惠碼 #主機
vps架設 在 Johntool-工具王阿璋 Facebook 的最佳貼文
【#最新文章】架站教學 | 新手快速架站教學 使用Cloudways架設WordPress網站!
本篇文章將會教你如何使用Cloudways架設WordPress網站,提供新手一個快速的 架站教學 ,讓你擁有一台自己的虛擬主機。
不會遭受廣告刊版的干擾、不需要自己操作 Linux 指令、不需要跟別人共享主機,不用多少時間就可以完成自己的第一個網站。
https://www.johntool.com/cloudways-wordpress/
Cloudways 是一間專門幫客戶配置 VPS 主機的公司,能夠讓 WordPress 與主機之間的效能最佳化!
此外,有24/7全年無休的克服可以聯絡,並且搭配 Cloudways 開發的 breeze 快取外掛,可以讓網站超快速。
Cloudways 的優點:
1. 全年無休的線上客服
2. 網頁效能最佳化
3. 免費 SSL 憑證
4. 安全性很高
5. 可以輕易地監控主機資源
Cloudways 適合對象:
1. 網站資料量龐大
2. 公司、電商
3. 完全不懂技術、架站
4. 接案者
#Johntool #工具王阿璋 #Cloudways #WordPress #架站 #新手架站 #架站教學
vps架設 在 站長路可 Youtube 的最佳貼文
完整圖文教學,請到新手站長網站觀看:
https://newbieboss.com/freehost
想要學習更多網路創業的方法,歡迎加入我的Line@,會公布相關的開課消息:
https://line.me/R/ti/p/%40ofv8829l
![post-title](https://i.ytimg.com/vi/C4g199L2Q48/hqdefault.jpg)
vps架設 在 OpenShift 教學(一):申請免費VPS空間、架設WordPress 的必吃
OpenShift 教學(一):申請免費VPS空間、架設WordPress Hybrid Cloud, ... OpenShift 這個伺服器環境主要是針對開源程式開發者,若是一般單純想架設網站的使用者,可能 ... ... <看更多>
vps架設 在 一介資男- [VPS] 使用Docker 架設Nextcloud 搭配AWS S3 建立 ... 的必吃
[VPS] 使用Docker 架設Nextcloud 搭配AWS S3 建立雲端NAS 的做法https://www.mxp.tw/9107/ 整個把昨天架設的流程記錄下來,有想自己弄一個雲端儲存空間,避免被iCloud ... ... <看更多>
vps架設 在 [討論] 粗略整理VPS 架設SS 等相關工具筆記- 看板WorkinChina 的必吃
關於 SS 等相關議題,
在 PTT 似乎在 WIC 版,
比較切身感受,
討論交流比較活絡,
所以PO 文彙整一些資料鏈接。
大概是三月中,
翻閱到 Vultr 的新用戶充值補貼優惠訊息:
https://tr.im/1bu1u
Paypal 儲值 USD 5$,
額外獲得一年有效的25 $。
開始我的首次購買 VPS 體驗。
(現在四月似乎還仍提供此優惠)
接下來,
翻閱網路相關資料,
陸續安裝,設定科學上網工具,
如:SSR,Brook,goflyway,WireGuard。
連線,依據上網 IP資訊等
確認科學上網是否成功。
以下筆記幾乎都是轉載於網路資料,
算是拾人牙慧,
但也因為有這些資料,
也才能夠順利科學連外成功。
VPS 服務品牌的挑選考量有幾點,
如:
1。以小時計費,
刪除VPS系統即停止扣費,
而無需使用完整一個月的計費週期。
2。可彈性,免額外付費,
或是少許花費即可彈性,
更換另一個IP位址。
Vultr 以小時計費址,
VPS更換另一個IP位址也不麻煩,
新建立系統即可產生另一組IP位址,
刪除原有的系統,
即可擺脫原本的IP位址,
和連帶依附的費用也就停止計費。
3。KVM 架構。
4。VPS 品牌知名,使用者眾多,
相關用戶評測好找好問。
短時間不致於關閉服務,
退出經營市場影響下游用戶。
而 VPS 分配的IP 位址在各地區連線品質,
會透過多點ping測試網站
https://ping.pe/
確認中外各地服務器連線的響應速度有無逾時。
所以會選擇Vultr ,
是基於這些理由,
而新用戶充值補貼優惠,
些許評估短期不妨試試的念頭。
當然,
也是有現成已架設好的SS/SSR服務,
拿出來提供用戶選購。
我是偏好搜尋依據網路資料,
一步一步慢慢動手架構出個人翻牆系統。
此外,
這些資料大都有完整的中文資料,
並且還可以多方嘗鮮其他比較不一樣,
小眾的第三方工具。
以下是後續安裝設定的資料整理:
Github 的 Alvin999
Vultr 購買教學:
https://tr.im/1Vggl
贊助帳號:
https://tr.im/21dhT
新建立系統OS,
我習慣以Ubuntu 16.04 為主。
系統開通後遠端SSH連線登入後,
會先修改預設DNS,
nano /etc/resolv.conf
nameserver 改成9.9.9.9 或是1.1.1.1。
然後更新套件資料庫
apt-get update
安裝特定套件後,
直接系統升級到Ubuntu 18.04 LTS beta:
https://tr.im/1wJHx
apt-get install update-manager-core
do-release-upgrade -d
系統升級完成後,
VPS重開機再優化系統和安裝相關工具。
優化系統:
BBR:
https://tr.im/21Tne
Ubuntu 18.04 LTS 內核版本已是4.1x以上,
直接就可以開啟BBR。
sudo modprobe tcp_bbr
echo "tcp_bbr" | sudo tee -a /etc/modules-load.d/modules.conf
echo "net.core.default_qdisc=fq" | sudo tee -a /etc/sysctl.conf
echo "net.ipv4.tcp_congestion_control=bbr" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
其他相關優化設定指南:
https://tr.im/1uOKz
翻牆工具:
直接使用牛人的SSR 單一指令稿一鍵安裝設定:
https://shadowsocks.be/9.html
SS/SSR的 建議配置: https://tr.im/1vM7D
而其他同同質性的類Socks5 Shadowsocks 代理工具,
我則是用 Brook/goflyway/go-shadowsocks2
Brook:
https://github.com/txthinking/brook
goflyway:
https://github.com/coyove/goflyway
go-shadowsocks2:
https://github.com/riobard/go-shadowsocks2
這三個均是用Go程式語言編寫,
所以直接發布提供靜態編譯單一執行檔,
VPS和用戶端,
下載同一個檔案,
各別執行和對應附掛的參數,
即可相互連通使用,
非常簡單。
另一個現階段還在摸索的工具:WireGuard,
它和 Socks5 代理協議的SS/SSR 完全不一樣,
網路上大多都是和 OpenVPN 比較分析,
目前還仍還在進行開發,
釋出的套件僅掛上測試版本,
還有待日後修正改良更新。
也僅有 Linux 版本可用,
沒有Windows版,沒有手機App,
限縮用戶端也必須是 Linux 才可用。
相關討論:
https://tr.im/1VGe3
https://tr.im/1X6dR
加密技術協議資料:
https://www.wireguard.com/protocol/
目前我是參考這個文章:
https://tr.im/243NG
逐步照著文字裡的指令,
在VPS 端和自己的電腦設定。
如:產生 key,VPS設定虛擬網卡,
設定檔內容等。
當然這些指令,
都還在找時間慢慢釐清設定目的。
不過比較粗淺好懂的資訊,
如依據自身VPS環境,
知道要換成自己VPS的分發 IP。
而其他的內網IP和連線port。
如:
VPS 10.0.0.1,
自己的電腦 10.0.0.2,
連線port改成其他數值。
一番折騰後,
總算可以連通VPS 端通自己的電腦。
在自己的電腦測試
ping 10.0.0.1 VPS 內網IP OK,
ping google.com 對外連線 OK。
透過瀏覽器開啟IP 查詢網站,
如:
https://browserleaks.com/ip
也能秀出IP位址為VPS IP,
而不是自己電腦的IP。
最後,
一篇文章的開場白:
https://tr.im/1fPyV
也算是能解釋,
如此豐富的中文教學文章的來由。
==========
沒有哪個國家的開發者像我們一樣熱衷於網絡擁塞的解決,
數據加密傳輸,以及各種代理技術的開發。
=========
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.40.184.89
※ 文章網址: https://www.ptt.cc/bbs/WorkinChina/M.1523786098.A.960.html
關於這點,我想用買智慧型手機來類推。
對一般不太熟悉 3C科技 的人士,
原則上會推薦一線大廠,
如:OV小米華為的主流機種。
性價比當然不是最好,
但是考量原廠軟硬體的售後保固支援,
親朋好友的親身體驗分享等。
操作上的疑難雜症會比較好處理。
如果對手機規格非常清楚,
會比較CPU,RAM,鏡頭等硬件規格,
和售價做比較,
當然可以挑選適合自己喜歡,
而且性價比最好的手機。
回到主題,
我入門剛開始挑選VPS,
也在對岸相關VPS評測網站查詢資料:
https://tr.im/1koYW
https://tr.im/1gDwL
https://tr.im/24Xmm
推薦新手用戶可以選擇哪些知名一線,
有口碑的廠牌。
當然,
對進階用戶而言,
可以多方比價,比規格,
國際間一卡車牌子的VPS任君挑選:
https://tr.im/1hiJA
https://tr.im/1oxd1
但是有些無形的風險是多方嘗試才知道:
網速不如意,退款不透明,
TOS 不允許開Proxy服務等嚴苛要求等。
這也是必須承擔的。
※ 編輯: shengshampoo (220.142.224.46), 04/18/2018 00:42:38
... <看更多>