【一起打造安全交易所】系列專文 — 交易所用戶資產「負債證明」:從 Merkle tree 開始的三代技術演化
如同我們在前一篇文章《FTX 破產後:「償付證明」才可證明沒有挪用用戶資產,不是「儲備證明 》中所說,加密貨幣交易所要證明自己沒有挪用用戶資產,必須要出具用戶資產的「代管資產償付能力證明」,而這個償付能力證明,必須包含用戶資產的「代管資產證明」與「代管負債證明」。
「代管負債證明」的目的,是為了證明交易所出具的的「代管資產證明」(部分同業稱「儲備證明」),也就是交易所錢包中所代管,屬於用戶的數位資產,是否等同用戶存入交易所的數位資產類別與數量,當用戶存入 1 枚比特幣,「代管負債證明」與「代管資產證明」中,也都應該有 1 枚比特幣,而不是等值或不等值的其他數位資產。
經由「代管資產證明」與「代管負債證明」交叉比對,才能知道交易所是任意移動或盜用其所代管的用戶資產。
「代管資產證明」因為都是區塊鏈上的資產,受惠於區塊鏈公開透明的技術特性,比較容易準備,但是「代管負債證明」相對困難,因為使用者餘額資料,都存在於中央化的資料庫中。其實先前就已有相關的演算法來驗證「代管負債證明」,並且已經歷經了三代的演進,只是 FTX 破產的風暴,讓這項技術受到更多的關注,也有越來越多多團隊與人才,願意投注資源和時間去優化。這方面最早被產業應用的技術,就是近期引發許多討論的 Merkle tree。
備註:本文中所探討的「代管負債證明」,主要聚焦於交易所代管用戶資產的負債證明,如圖二所示,為紅色框中所涵蓋的範圍,也就是用戶在交易所存放的數位資產餘額,之後文章中所提及「代管負債」,也皆是以代管用戶資產部分,為聚焦討論領域。
本文將討論從 Merkle tree 開始的三代技術演化,分享「代管負債證明」的實作方式與挑戰外,也會揭露一些常見的作弊手法,讓大家更能知道如何防範與判別。
第一代 Merkle Tree 負債證明
Merkle tree 又被稱為「雜湊樹」或「默克樹」,是一個基於哈希演算法 (hash,或稱雜湊演算法) 的數位簽章技術,是 1988 年由喬治亞理工學院資訊安全中心主任 Ralph Merkle 教授所提出。
雖然因為 FTX 破產,Merkle tree 才似乎因為大家追求「償付能力證明」而再次被關注,但是中本聰 2008 年發表的比特幣白皮書中僅有七篇的引述,其中就有三篇是與 Merkle tree 相關;Merkle tree 扮演了中本聰設計區塊鏈的核心,特別是「無需信任」(trustless)的驗證機制。
2013 年,比特幣社群中就開始有聲音,討論如何將 Merkle tree 運用於中心化錢包的「負債證明」上。著名的密碼學家,也是加密貨幣 Zcash 創辦人之一的 Bryce “Zooko” Wilcox 於 2014 年提出了很具體的實作討論,還點評了當時主要的中心化平台,如:BitGO、Bitstamp、Coinbase、Kraken 與其他共約 20 家當時具有代表性的中心化交易所。
使用 Merkle tree 來實作「代管負債證明」,最主要的好處,是可以達到每一位使用者,都能夠對於代管負債證明報告,具有獨立的稽核能力。大家不需要盲目地相信交易所或為其背書的會計師,而是每個人都可以在每個時刻,獨立進行稽核。
Merkle tree 的步驟如下:
- 對於每一類不同的數位資產,如:比特幣、以太幣、美元穩定幣 USDT、SOL 等等,由交易所根據其記錄之中心化帳本,產生「樹」的最底層;將每一位使用者的(ID、餘額)資料打亂混合,重新建立「雜湊值」,又稱為「哈希值」(hash),也就是「樹」上的「樹葉」,並記錄每個 hash 的餘額加總。
- 延請外部會計師協助人工稽核,檢查整顆 Merkle tree 是否精準產生,沒有作弊。
- 會計師公布總「代管負債」與整棵 Merke tree的 root hash,但不含整棵樹中每個節點以及每個樹葉的餘額加總,以利保護使用者隱私。
- 每個使用者利用交易所開放源碼的工具,只要輸入兩個資訊: 自己的 ID 與自己的餘額,就可以產生自己的 hash,並比對會計師公布的整棵樹中的樹葉,看是否能找到自己的 hash。有找到,就表示自己的餘額有被算進交易所的負債證明裡面。
Merke tree 的精神,是賦予每一位使用者都具有獨立驗證能力,其關鍵在於:每位使用者都擁有一個「事實」(truth):自己每天的餘額。
雖然一個使用者,不會知道任何其他使用者的餘額,但因為自己知道自己的餘額,所以,可以拿著這個「事實」,去驗證整份報告的正確性。
如果有夠多使用者,願意執行獨立驗證並且頻繁地這麼做,就越有可能利用這種「去中心化」的驗證方式,去稽核交易所自動出具的「負債證明」,並且可以將整個驗證機自動化。
第一代的 Merkle tree 實作於「代管負債證明」上,主要面臨了以下三個的挑戰:
- 去中心化稽核能力與使用資料隱私相互衝突。
- 「負數餘額」的作弊法,意指交易所創造假帳號,並給予負數的餘額,如:-1000 顆比特幣,藉此降低代管負債的比特幣顆數,掩蓋挪用事實。
- 其他實作細節上的作弊。
第一點的挑戰指的是,如果要達成交易所每天(或每小時)公布一次「代管負債證明」,並且允許每一位使用者都可以獨立驗證,那就代表交易所會把 Merkle tree 的葉子,也就是用戶餘額以及整棵樹的「總餘額」公佈出來,雖然大家並無法知道這些「餘額」實際上是屬於誰的,因為使用者名字並沒有公開,但還是會有隱私的疑慮。
但如果考量使用者隱私,而不公開上述資料,那麼就可能出現以下問題:
- 每位使用者無法獨立建構出整份「代管負債證明」。
- 需要外部會計師介入,產生並公布「代管負債證明」與僅有 hash 部分的 Merkle tree。
- 每位使用者僅能使用自己的餘額,去驗證會計師公布的「代管負債證明」是否包含自己的餘額。也就是:只能驗證自己的餘額與是否有被會計師計算到,卻沒有辦法驗證整份報告產生過程的正確性,也沒辦法驗證交易所沒有使用上述的一些作弊方式,例如:前文中提及的負數餘額。
有實作並開放源碼的交易所中,每家考量不一樣,Gate.io(2020 年初 Github)與 Kraken(2014 年)等,都是選擇不公開 Merkle tree 中的所有「餘額」以及「餘額加總」,而倚賴外部會計師介入稽核。BitMEX(2021 年末 Github)則是選擇公開整顆 Merkle tree 的「餘額」以及「餘額加總」,但沒有對所有資產類別獨立做,僅做 BTC 的「代管負債證明」。
此種第一代的 Merkle tree 負債證明,2013 年由 Bryce “Zooko” Wilcox 提出,並由比特幣兩位核心開發人員 Gregory Maxwell 與 Peter Todd 在 Bitcoin Forum 上討論,所以普遍又被稱作「Maxwell 方法」或「Maxwell-Todd 方法」。
第二代 Merkle Tree 優化隱私的負債證明
第二代 Merkle tree在演算法上與第一代差異不大,主要是在實作上,改良做到「餘額」以及「餘額加總」的最小揭露,讓「代管負債證明」可以去中心化地被每個使用者自行驗證,而不需要倚賴外部會計師。
以太坊創辦人 Vitalik 本月 19 號公布的《做出一個安全的中心化交易所:償付能力證明與更多 》Having a safe CEX: proof of solvency and beyond中,就包含了一個簡單可行的機制:
- 不公開 Merkle tree 整棵樹的所有「餘額」以及「餘額加總」給所有人。
- 每個使用者,會得到一份不一樣的部分「餘額」以及「餘額加總」,降低隱私擔憂,達到最小揭露。
第三代零知識證明實作的負債證明
由密碼學教授 Dr. Gaby Dagher 於 2015 年發表了一套使用非交互式零知識證明(Non-interactive zero-knowledge proof, NIZKP)來大幅提升隱私性,達到最小揭露的「代管負債證明」演算法。Vitalik 則是於 19 號也公布了一套利用簡潔零知識證明(zk-SNARK)來達成的「代管負債證明」演算法,也在 Github 上開源了一套程式碼。
「代管負債證明」實作上的作弊手段與防範方法
當然,「負債證明」雖然過去有研究與實作經驗,但還有很多的進步與優化空間。魔鬼藏在細節裡,XREX 團隊過去在資訊安全產業深耕超過 15 年,我們深知,演算法再怎麼完美,實作上因為有太多的細節,所以交易所要作弊還是有非常多的方法。2019 年,中國科學院教授 Kexin Hu 整理了許多對 Merkle tree 負債證明的作弊方式,以及防範的方法。
今年,新公鏈 SUI 的共同創辦人兼首席密碼學家 Kostas Kryptos 發表了非常完整的整理,
發表了《中心化錢包與交易所壞掉的償付能力證明 》 Broken Proofs of Solvency in Blockchain Custodial Wallets and Exchanges,不但清楚地描述了各種可能作弊的方式,例如:總額相同但個別數字有誤,(5+5) 並不直接等於 (4+6),也研究了具有代表性的中心化交易所,如:Kraken、BitMEX 和 Gate.io 等等,在提供「代管資產償付能力證明」上的漏洞,以及大型會計事務所,如:Armanino、勤業眾信 (Deloitte) 現行的稽核工具的缺點。
這其中許多手法非常有趣,某些作弊方式,在思維上很像駭客的思路,某些則很像魔術師,欺騙人類大腦,值得深入研究並加以防範。
高品質的「代管償付能力證明」將成為交易所的基本功
Web3 產業的所有參與者與使用者,都應該可以清楚地感受到這個趨勢與剛需,在 FTX 破產引爆骨牌效應之後,出具一份高品質的「代管償付能力證明」,是所有負責任且嚴謹的中心化平台的基本責任。但是,即便交易所出具了「代管償付能力證明」,在監督不足的情況之下,有心的不良業者總是能找得到欺瞞舞弊的方式。
考量上述隱憂,XREX 倡議使用去中心化的稽核方式來做「代管負債證明」,於每日或每小時自動公布,並提供充分、透明的資訊及簡便的驗證體驗。讓每一位使用者都可以不受阻礙地行使獨立驗證交易所的權利。越多使用者對平台進行驗證,平台就越難舞弊,這樣的機制也更具公信力。若再配合定期的外部會計師稽核與客觀查驗,對使用者會再增添了一層保障。在此,我們也呼籲外部會計師,將其所使用的工具開放源碼,接受社群與所有參與者的檢視。
唯有這樣一層又一層彼此獨立又可銷差比對的多方參與及驗證,「代管資產償付能力證明」才能真正發揮其功能,不只是交易所要負責任,使用者和所有的參與者也是,這才能真正地實踐去中心化的精神,落實「不要相信,要稽核」精神,讓像 FTX 這樣的災難不再重演。
本文感謝日桓事務所與 AppWorks 駐點會計師 蔡金鳳 Jasmine Tsai、urCFO 創辦人與前勤業眾信合夥人 張鼎聲 Dien Chang、XREX 顧問 CFO 徐懿文 Wendy Hsu 指導。
撰寫本篇專文的 XREX 作者群:黃耀文 Wayne Huang 、黃建超 Vince Huang、尤芷薇 Yoyo Yu、陳安祖 An-Tsu Chen、李威進 Wegin Lee、廖嘉豪 Nick Liao、Sun Huang、蕭滙宗 Winston Hsiao。
【一起打造安全交易所】系列專文相關閱讀:
《FTX 破產後:「償付證明」才可證明沒有挪用用戶資產,不是「儲備證明」》
關注 XREX:Facebook | Twitter | Telegram | LinkedIn
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!
- 来自作者
- 相关推荐