zk-SNARK如何改進Gate.io的儲備金證明

進階10/12/2023, 4:19:14 PM
作爲業內率先推出儲備金證明的先行者,Gate.io將採用zk-SNARK這種零知識證明技術改進儲備金證明,爲用戶帶來更加卓越的資産安全保護和隱私保護。

擁有1,300萬用戶的Gate.io深知資金安全的重要性,併在行業中率先採取了有效措施。Gate.io是最早實施儲備金證明的交易所之一,在2020年5月就進行了儲備金證明的披露。而2022年交易所FTX挪用用戶資産導緻流動性危機破産後,儲備金證明才作爲保障用戶資金安全、提高平颱信任度的解決方案被大衆熟知。

Gate.io在FTX事件髮生後,也立即進行了第二次儲備金證明的髮布。在髮布後不久,以太坊創始人Vitalik Buterin髮布了一篇名爲《Having a safe CEX: proof of solvency and beyond》的文章討論交易所如何更好的證明償付能力。文中提到可以在傳統儲備金證明的基礎上引入zk-SNARK等新型技術來保證更加公開、透明、真實的儲備金證明。Gate.io也將使用文中提到的這種新技術升級儲備金證明,來爲用戶帶來更加隱私和真實的資産安全保護。

什麽是儲備金證明

儲備金證明(Proof of Reserves,PoR)是指對加密貨幣交易所或任何其他金融機構持有的餘額進行審查,核實公司記録在案的資産量與實際資産持有量是否相當的證明。證明中,如果儲備金中資産的金額大於用戶存入的資産金額,即抵押率大於100%,證明用戶資金有1:1的真實資産支持。

在儲備金證明出現前,也有人提出了資産轉賬和債務證明兩種方法來證明交易所擁有足夠資金。

資産轉賬-證明交易所擁有足夠資産

2011年,當時最大的比特幣交易所MtGox,通過髮送一筆移動424,242個BTC到預先公布地址的交易,來證明他們擁有該筆資金。該方法隻能對資産進行證明,無法對交易所負債進行證明。

債務證明(Proof of Liabilities)

交易所的債務就是用戶存入的資産。如果想證明用戶的資産,最簡單的方法就是公布一個含有用戶賬號和餘額的列錶,每個用戶可以打開錶格,查詢自己賬號對應的餘額是否正確。

但這個方法有著明顯的缺陷:
①無法保證交易所提供的列錶是真實的。

②過程中,用戶的賬號信息和餘額都會被泄露。

這種方法也可以使用Merkle這種數據結構來減少用戶信息的泄露,也就衍生出了現在的儲備金證明(Proof of Reserves,PoR)。

如下圖,默剋爾樹是種類似於“樹”的數據結構,最下層數據稱爲“葉節點”,中間可以稱爲“中間節點”,左右兩個葉節點可以經過哈希處理(把任意輸入值通過特定處理方式得出特定值)輸出中間節點的值,左右中間節點經過哈希處理得到上層中間節點唯一的輸出值,層層處理後,最終得到默剋爾樹的根節點(Root)。該值是唯一的,任何葉節點的變動都會導緻根節點的變動。

儲備金證明中的默剋爾樹(來源:Vitalik

這種方法下,通過層層相加得到交易所持有的用戶的資産數量,但直接在葉節點中放入用戶賬戶和餘額兩個數據後,仍存在小範圍的信息泄露問題。以上圖爲例,緑色標記的用戶Charlie不僅可以知道David的部分信息,還可以知道左側Alice和Bob的餘額和。於是在葉節點方麵有了新的技術改進:
(1)如上圖所示,將用戶賬戶ID和一個特定值一起進行哈希處理。

(2)將用戶餘額分散開,比如Charlie的10ETH,可以分成兩個5ETH放入兩個葉節點。

(3)將用戶ID和餘額分別經過哈希處理,然後再將得到的值進行一次哈希處理。Gate.io儲備金證明採用的就是這一種方法。

盡管在葉節點層有了新的改進,有一個問題仍未解決:負值賬戶。在實際使用中,用戶存入加密貨幣後,會體驗交易所杠桿交易、永續合約等産品,假如髮生虧損,最大虧損也應爲100%本金,也就是説用戶賬戶餘額應大於或等於0。

所以負值賬戶一般由作惡的交易所端髮起,如果交易所挪用了500ETH的資産,按照正常計算,交易所實際擁有的資産小於應有資産抵押率很可能小於100%,暴露出其挪用資産的行爲。但交易所可以通過如下圖例中的的名爲Henry的餘額爲-500ETH的賬戶,讓默剋爾樹生成的總資産等於或者小於交易所挪用後實際擁有的資産數,從而僞造出抵押率大於100%的假象。

負值賬戶對默剋爾樹的影響圖例(來源:Vitalik

爲了解決這個問題,Gate.io等多家交易所開始使用zk-SNARK這種零知識證明技術來改進儲備金證明。

什麽是零知識證明和zk-SNARK

零知識證明是一種可以在不暴露隱私情況下曏對方證明一件事情的技術。舉個簡單的例子來理解這項技術,用戶A知道用戶B的電話號碼,當用戶C詢問A是否知道B電話號碼時,用戶A可以通過當場撥打B電話的方式證明自己確實擁有,而無需將B的號碼告訴C,這個保留用戶隱私卻能知道答案的過程就是進行“零知識證明”的過程。

在加密貨幣領域,零知識證明允許用戶無需透露私鑰或電子簽名即可證明自己擁有私鑰。加密貨幣交易平颱則也希望能在不泄露用戶機密信息(個人賬戶餘額等)的情況下證明平颱儲備金的狀態。

zk-SNARK是一種簡潔化、非交互式的零知識證明技術。其提前進行“可信初始化”,從而生成公共參考字符串(CRS),使得所有的示證者都可以直接訪問它。這就相當於在考試評分時,zk-SNARK 直接上傳了正確答案,然後讓考生自己對答案(把自己解的某道題髮送給後颱繫統,就會直接得到正確與否的最終結果),非常高效。

借助zk-SNARK,用戶可證明自己知道經哈希處理的原始值,而無需透露該值的具體內容。在不透露具體金額、數值或地址等相關信息的情況下,用戶還可以證明某筆交易的有效性。zk-SNARK常用於隱私交易中。在儲備金證明設計中,其可以通過提前設置約束,剔除非零賬戶,衕時保護用戶隱私。

Gate.io如何使用zk-SNARK改進儲備金證明

Gate.io將zk-SNARK技術與默剋爾樹相結合,打造更加透明、隱私保護和防作惡的儲備金證明。

具體實現過程

【1】冷錢包確權

使用所有的冷熱錢包,分別曏審計公司指定地址轉入特定隨機數量,證明錢包所屬權。審計公司將所屬地址餘額相加,穫得交易所掌控中的所有金額(包括用戶資金與自有資金)。

【2】用戶餘額快照

某一時間點對平颱用戶餘額進行快照,通過掛單中、已借入、應還利息、未實現盈虧等信息計算實際賬戶權益。

【3】導出餘額

將所有用戶加密UID與餘額提供給審計公司,用於計算用戶纍計資産與髮布默剋爾數。

【4】將用戶資産分批處理

保證交易所的凈資産由每個用戶的凈資産纍加而來,然後根據用戶凈資産建立一棵Merkle樹。 \
(分批處理的主要原因是Gate.io擁有1,300萬用戶,一次性涵蓋所有用戶數據進行處理對硬件、軟件設計要求達到極爲苛刻的要求,分批處理在時間和成本上更加具有效率,且不會影響安全和數據隱私。)

【5】進行電路限製

①用戶凈資産插入Merkle樹之前,用戶ID對應的節點爲空。

②根據用戶的資産列錶及每種資産的價格計算用戶的總資産/負債,總資産必鬚大於總負債。

③將用戶的資産/負債加到交易所的資産/負債中。

④使用用戶ID、總資産/負債、資産列錶計算用戶狀態哈希,將用戶狀態插入Merkle樹得到新的Merkle Root。

⑤前一個用戶在創建用戶的操作之前,樹的根節點的哈希值必鬚與後一個用戶創建用戶的操作之後的樹的根節點的哈希值相等。
(①操作可避免節點數據不真實,②操作可避免負值賬戶,⑤操作可保證操作前後,用戶數據不被更改。)

【6】生成儲備金證明

通過zk-SNARK電路得到用戶資産數,併出具儲備金證明報告。

如果您想了解更加詳細的儲備金計算過程及代碼實現,請點擊這裡進行深入了解。

性能

在一颱32核、運行內存128G的機器上計算1,000萬用戶的資産證明需要15天。儲備金證明的計算可以併行化,如果是10颱機器,則隻需要1.5天。

結論

啟用zk-SNARK是Gate.io儲備金證明的重要升級,也是Gate.io在用戶資産安全保護上的重要行動之一。卓越的安全和隱私雙重保障,將爲用戶帶來了更多的信心,也爲整個加密貨幣行業樹立新的典範。

作爲行業引領者的Gate.io現已將代碼開源,希望借助此機推動行業曏更加透明化、安全化髮展。在未來,Gate.io將繼續保持創新精神,與用戶一衕探索和開創出更加安全、隱私保護更加完備的加密未來。

作者: Wayne
譯者: Piper
審校: Edward、KOWEI、Elisa、Ashley He、Joyce
* 投資有風險,入市須謹慎。本文不作為Gate.io提供的投資理財建議或其他任何類型的建議。
* 在未提及Gate.io的情況下,複製、傳播或抄襲本文將違反《版權法》,Gate.io有權追究其法律責任。

zk-SNARK如何改進Gate.io的儲備金證明

進階10/12/2023, 4:19:14 PM
作爲業內率先推出儲備金證明的先行者,Gate.io將採用zk-SNARK這種零知識證明技術改進儲備金證明,爲用戶帶來更加卓越的資産安全保護和隱私保護。

擁有1,300萬用戶的Gate.io深知資金安全的重要性,併在行業中率先採取了有效措施。Gate.io是最早實施儲備金證明的交易所之一,在2020年5月就進行了儲備金證明的披露。而2022年交易所FTX挪用用戶資産導緻流動性危機破産後,儲備金證明才作爲保障用戶資金安全、提高平颱信任度的解決方案被大衆熟知。

Gate.io在FTX事件髮生後,也立即進行了第二次儲備金證明的髮布。在髮布後不久,以太坊創始人Vitalik Buterin髮布了一篇名爲《Having a safe CEX: proof of solvency and beyond》的文章討論交易所如何更好的證明償付能力。文中提到可以在傳統儲備金證明的基礎上引入zk-SNARK等新型技術來保證更加公開、透明、真實的儲備金證明。Gate.io也將使用文中提到的這種新技術升級儲備金證明,來爲用戶帶來更加隱私和真實的資産安全保護。

什麽是儲備金證明

儲備金證明(Proof of Reserves,PoR)是指對加密貨幣交易所或任何其他金融機構持有的餘額進行審查,核實公司記録在案的資産量與實際資産持有量是否相當的證明。證明中,如果儲備金中資産的金額大於用戶存入的資産金額,即抵押率大於100%,證明用戶資金有1:1的真實資産支持。

在儲備金證明出現前,也有人提出了資産轉賬和債務證明兩種方法來證明交易所擁有足夠資金。

資産轉賬-證明交易所擁有足夠資産

2011年,當時最大的比特幣交易所MtGox,通過髮送一筆移動424,242個BTC到預先公布地址的交易,來證明他們擁有該筆資金。該方法隻能對資産進行證明,無法對交易所負債進行證明。

債務證明(Proof of Liabilities)

交易所的債務就是用戶存入的資産。如果想證明用戶的資産,最簡單的方法就是公布一個含有用戶賬號和餘額的列錶,每個用戶可以打開錶格,查詢自己賬號對應的餘額是否正確。

但這個方法有著明顯的缺陷:
①無法保證交易所提供的列錶是真實的。

②過程中,用戶的賬號信息和餘額都會被泄露。

這種方法也可以使用Merkle這種數據結構來減少用戶信息的泄露,也就衍生出了現在的儲備金證明(Proof of Reserves,PoR)。

如下圖,默剋爾樹是種類似於“樹”的數據結構,最下層數據稱爲“葉節點”,中間可以稱爲“中間節點”,左右兩個葉節點可以經過哈希處理(把任意輸入值通過特定處理方式得出特定值)輸出中間節點的值,左右中間節點經過哈希處理得到上層中間節點唯一的輸出值,層層處理後,最終得到默剋爾樹的根節點(Root)。該值是唯一的,任何葉節點的變動都會導緻根節點的變動。

儲備金證明中的默剋爾樹(來源:Vitalik

這種方法下,通過層層相加得到交易所持有的用戶的資産數量,但直接在葉節點中放入用戶賬戶和餘額兩個數據後,仍存在小範圍的信息泄露問題。以上圖爲例,緑色標記的用戶Charlie不僅可以知道David的部分信息,還可以知道左側Alice和Bob的餘額和。於是在葉節點方麵有了新的技術改進:
(1)如上圖所示,將用戶賬戶ID和一個特定值一起進行哈希處理。

(2)將用戶餘額分散開,比如Charlie的10ETH,可以分成兩個5ETH放入兩個葉節點。

(3)將用戶ID和餘額分別經過哈希處理,然後再將得到的值進行一次哈希處理。Gate.io儲備金證明採用的就是這一種方法。

盡管在葉節點層有了新的改進,有一個問題仍未解決:負值賬戶。在實際使用中,用戶存入加密貨幣後,會體驗交易所杠桿交易、永續合約等産品,假如髮生虧損,最大虧損也應爲100%本金,也就是説用戶賬戶餘額應大於或等於0。

所以負值賬戶一般由作惡的交易所端髮起,如果交易所挪用了500ETH的資産,按照正常計算,交易所實際擁有的資産小於應有資産抵押率很可能小於100%,暴露出其挪用資産的行爲。但交易所可以通過如下圖例中的的名爲Henry的餘額爲-500ETH的賬戶,讓默剋爾樹生成的總資産等於或者小於交易所挪用後實際擁有的資産數,從而僞造出抵押率大於100%的假象。

負值賬戶對默剋爾樹的影響圖例(來源:Vitalik

爲了解決這個問題,Gate.io等多家交易所開始使用zk-SNARK這種零知識證明技術來改進儲備金證明。

什麽是零知識證明和zk-SNARK

零知識證明是一種可以在不暴露隱私情況下曏對方證明一件事情的技術。舉個簡單的例子來理解這項技術,用戶A知道用戶B的電話號碼,當用戶C詢問A是否知道B電話號碼時,用戶A可以通過當場撥打B電話的方式證明自己確實擁有,而無需將B的號碼告訴C,這個保留用戶隱私卻能知道答案的過程就是進行“零知識證明”的過程。

在加密貨幣領域,零知識證明允許用戶無需透露私鑰或電子簽名即可證明自己擁有私鑰。加密貨幣交易平颱則也希望能在不泄露用戶機密信息(個人賬戶餘額等)的情況下證明平颱儲備金的狀態。

zk-SNARK是一種簡潔化、非交互式的零知識證明技術。其提前進行“可信初始化”,從而生成公共參考字符串(CRS),使得所有的示證者都可以直接訪問它。這就相當於在考試評分時,zk-SNARK 直接上傳了正確答案,然後讓考生自己對答案(把自己解的某道題髮送給後颱繫統,就會直接得到正確與否的最終結果),非常高效。

借助zk-SNARK,用戶可證明自己知道經哈希處理的原始值,而無需透露該值的具體內容。在不透露具體金額、數值或地址等相關信息的情況下,用戶還可以證明某筆交易的有效性。zk-SNARK常用於隱私交易中。在儲備金證明設計中,其可以通過提前設置約束,剔除非零賬戶,衕時保護用戶隱私。

Gate.io如何使用zk-SNARK改進儲備金證明

Gate.io將zk-SNARK技術與默剋爾樹相結合,打造更加透明、隱私保護和防作惡的儲備金證明。

具體實現過程

【1】冷錢包確權

使用所有的冷熱錢包,分別曏審計公司指定地址轉入特定隨機數量,證明錢包所屬權。審計公司將所屬地址餘額相加,穫得交易所掌控中的所有金額(包括用戶資金與自有資金)。

【2】用戶餘額快照

某一時間點對平颱用戶餘額進行快照,通過掛單中、已借入、應還利息、未實現盈虧等信息計算實際賬戶權益。

【3】導出餘額

將所有用戶加密UID與餘額提供給審計公司,用於計算用戶纍計資産與髮布默剋爾數。

【4】將用戶資産分批處理

保證交易所的凈資産由每個用戶的凈資産纍加而來,然後根據用戶凈資産建立一棵Merkle樹。 \
(分批處理的主要原因是Gate.io擁有1,300萬用戶,一次性涵蓋所有用戶數據進行處理對硬件、軟件設計要求達到極爲苛刻的要求,分批處理在時間和成本上更加具有效率,且不會影響安全和數據隱私。)

【5】進行電路限製

①用戶凈資産插入Merkle樹之前,用戶ID對應的節點爲空。

②根據用戶的資産列錶及每種資産的價格計算用戶的總資産/負債,總資産必鬚大於總負債。

③將用戶的資産/負債加到交易所的資産/負債中。

④使用用戶ID、總資産/負債、資産列錶計算用戶狀態哈希,將用戶狀態插入Merkle樹得到新的Merkle Root。

⑤前一個用戶在創建用戶的操作之前,樹的根節點的哈希值必鬚與後一個用戶創建用戶的操作之後的樹的根節點的哈希值相等。
(①操作可避免節點數據不真實,②操作可避免負值賬戶,⑤操作可保證操作前後,用戶數據不被更改。)

【6】生成儲備金證明

通過zk-SNARK電路得到用戶資産數,併出具儲備金證明報告。

如果您想了解更加詳細的儲備金計算過程及代碼實現,請點擊這裡進行深入了解。

性能

在一颱32核、運行內存128G的機器上計算1,000萬用戶的資産證明需要15天。儲備金證明的計算可以併行化,如果是10颱機器,則隻需要1.5天。

結論

啟用zk-SNARK是Gate.io儲備金證明的重要升級,也是Gate.io在用戶資産安全保護上的重要行動之一。卓越的安全和隱私雙重保障,將爲用戶帶來了更多的信心,也爲整個加密貨幣行業樹立新的典範。

作爲行業引領者的Gate.io現已將代碼開源,希望借助此機推動行業曏更加透明化、安全化髮展。在未來,Gate.io將繼續保持創新精神,與用戶一衕探索和開創出更加安全、隱私保護更加完備的加密未來。

作者: Wayne
譯者: Piper
審校: Edward、KOWEI、Elisa、Ashley He、Joyce
* 投資有風險,入市須謹慎。本文不作為Gate.io提供的投資理財建議或其他任何類型的建議。
* 在未提及Gate.io的情況下,複製、傳播或抄襲本文將違反《版權法》,Gate.io有權追究其法律責任。
即刻開始交易
註冊並交易即可獲得
$100
和價值
$5500
理財體驗金獎勵!