簡明非交互零知識證明 (zk-SNARK) 如何改善幣安的儲備證明系統

2023-02-10

關鍵要點

  • 2022 年 11 月,幣安推出利用雜湊樹密碼學的儲備證明 (PoR) 系統,可讓用戶驗證持有資產。

  • 現在幣安更採用 zk-SNARK (零知識證明形式之一) 改善儲備證明解決方案。

  • 用戶現在能夠以私密、安全的方式,確認所有帳戶的總淨餘額皆非負值,而且所有用戶資產皆為幣安所聲稱的用戶資產總淨餘額的一部分。

一起深入了解幣安最新的儲備證明解決方案吧。最新儲備證明解決方案結合 zk-SNARK 和雜湊樹,提供用戶驗證幣安儲備金狀態的最新升級方法。

過去幾個月以來,幣安開發團隊持續努力,建構更先進的償債能力證明 (Proof of Solvency) 解決方案。FTX 倒閉事件後,信任危機瀰漫整個加密貨幣產業,對於中心化加密貨幣交易所,償債能力證明解決方案儼然成為至關重要的工具。用戶儲存在幣安的資金皆以 1:1 的比率擔保,此外還有額外儲備金。找出能夠即時無落差向大眾證明上述事實的方法,已經成為幣安產業信任恢復計畫的重點之一。 

2022 年 11 月,幣安推出利用雜湊樹密碼學技術的儲備證明系統,可讓用戶驗證其在幣安持有的資產。雖然這是幣安推動用戶資金透明度的一大進步,但解決方案最初的設計有兩大缺點:

  1. 雜湊證明中的葉片節點代表用戶持有資產的雜湊,但為了保護用戶隱私,雜湊根不能反映出所有葉片節點餘額資訊的加總。

  1. 接受儲備金驗證的實體,有機會在雜湊樹的某處加上負餘額假帳戶,藉此讓所需總儲備金看起來更小。以下取自 Vitalik Buterin 部落格的圖表,呈現此類惡意雜湊樹的範例。此例中,雜湊根反映出所有葉片節點餘額的加總,這可能會造成隱私問題。

現在幣安已經找到能夠解決上述缺點的解決方案,藉此強化幣安的儲備證明系統。利用零知識證明協定 zk-SNARK,我們便能證明:

  1. 幣安聲稱的所有資產總用戶餘額包含了雜湊樹的所有葉片節點餘額。

  2. 雜湊樹中沒有任何用戶持有負值的總淨餘額 (用戶持有總資產的美元價值加總)。

負餘額和幣安目標淺談

由於幣安提供保證金、加密貨幣貸款和合約交易產品,因此用戶的個別加密貨幣資產餘額皆可能包含資產負債。用戶的特定加密貨幣資產餘額可能為負值,但因為所有貸款皆須完全得到抵押擔保,故橫跨所有加密貨幣資產的總淨餘額不應為負值。

在以下假想情境中,艾莉絲於幣安儲值 10,000 BUSD,隨後使用 4,000 BUSD 作為抵押品借入 2 BNB (匯率為 1 BNB = 1,000 BUSD,這裡假設幣安永遠採用超額抵押)。下表為艾莉絲的資產負債表。

BNB (價格:1,000 BUSD)

BUSD (價格:1 BUSD)

總淨資產餘額 (BUSD)

資產

負債

資產

負債

艾莉絲

2

2

10,000

0

10,000

如果艾莉絲隨後將 1 BNB 以 1,000 BUSD 的價格賣給 Bob (Bob 也儲值了 10,000 BUSD),兩人的資產負債表在交易後的狀況如下表:

BNB (價格:1,000 BUSD)

BUSD (價格:1 BUSD)

總淨資產餘額 (BUSD)

資產

負債

資產

負債

艾莉絲

1

2

11,000

0

10,000

Bob

1

0

9,000

0

10,000

此例中,艾莉絲的 BNB 餘額會變成 -1,這並非雜湊樹的有效節點,且僅包含 BNB 一種資產。艾莉絲的總淨餘額應仍為 10,000 BUSD。

另一項挑戰則是,由於幣安用戶群規模龐大,可行的解決方案必須產生數千萬用戶的用戶證明和 zk-SNARK 證明,某些用戶在幣安平台上可能持有超過 300 種加密貨幣資產。 

總結來說,幣安想要在合理時間內提供以下事實的證明:

  1. 每位幣安用戶的資產皆包含顯示在幣安聲稱的總用戶餘額快照中。用戶可以使用區塊鏈瀏覽器驗證幣安聲稱的用戶餘額是否與幣安控制地址持有的資產一致。類似使用 Etherscan 驗證以太坊錢包,或者使用 BscScan 驗證 BNB Chain 錢包。

  2. 每位用戶的總淨餘額皆非負值,這代表幣安並沒有創造負餘額假帳戶來刻意減少幣安受驗證的儲備金規模。

什麼是 zk-SNARK?

深入探討幣安的解決方案前,我們先簡要概述零知識證明機制。zk-SNARK 此類零知識協定能夠讓證明單位向驗證者證明其已在特定限制下輸入資訊並正確執行計算,全程無須透露輸入資訊。計算可能十分耗時,但零知識的數學機制基礎能夠幫助驗證者快速且安全地評估證明。

證明者 (幣安) 首先定義欲證明計算結果的一組限制。限制會使用能夠以高階程式語言 (幣安使用 gnark分叉版本) 表達的迴路定義。

證明者隨後執行複雜的計算,雜湊處理所有用戶的 ID 和資產負債表,然後產生符合先前設定限制的計算證明。為了達成此目的,幣安使用計算追蹤 (見證者) 以及公開或私有輸入值。 

驗證者 (用戶) 取得證明後,可以使用迴路的公開輸入值驗證,確定計算已經正確執行,並且滿足所有限制。相較於證明花費的時間,驗證計算花費時間極短。如果證明者沒有在預先定義的迴路上產生證明,就無法產生能夠通過驗證的有效證明。

若要深入了解 zk-SNARK,請參閱本系列文章

幣安的解決方案

升級後的儲備證明解決方案依然以雜湊樹作為基石。就上述例子而言,升級的解決方案如下圖:

除了雜湊樹外,幣安也擁有代表每名幣安用戶持有的各種資產總淨餘額清單之全域狀態 (global state)。

為了證明幣安擁有足夠儲備金,我們會產生雜湊樹結構的 zk-SNARK 證明。幣安的迴路會確保每名用戶的餘額組合 (即雜湊樹的葉片節點) 符合以下條件:

  1. 用戶的所有資產餘額都包含在上述的全域狀態清單中。

  2. 用戶的總淨資產餘額非負值。 

  3. 更新用戶資訊到葉片節點雜湊後,雜湊樹根變化正確。

若想深入了解實作細節,請參閱迴路 (限制) 的技術規格原始碼。 

每次證明幣安儲備金時,我們都會公佈:

1. 雜湊證明:每名用戶的雜湊 (艾莉絲的雜湊為上圖的藍色節點)。

2. 所有用戶迴路的 zk-SNARK 證明和公開輸入值 (即各種資產總淨餘額清單的雜湊以及雜湊根)。 

用戶藉由驗證雜湊證明確保其資產負債表包含在雜湊樹根中。然後用戶再驗證 zk-SNARK 證明,就能確保雜湊樹結構符合迴路中定義的限制。

此解決方案的安全性十分仰賴證明金鑰和驗證金鑰的設定。幣安正在研究去中心化的金鑰設定方法。以太坊的可信設置儀式是現有去中心化可信設置儀式的最佳範例。幣安即將推出多方計算 (MPC) 解決方案,以去信任化設置。

效能

由於雜湊證明中所須包含的幣安用戶資產餘額數量龐大,並無法產生一次包含所有用戶的單一雜湊樹結構證明。解決方法可將每 864 名用戶分為一批次,藉此便能使用較小的迴路和平行證明程序。

假設一批資料包含 864 名用戶,每名用戶持有 350 種不同資產,則每種資產餘額落在 [0, 2^64-1] 的範圍中。如果使用 32 核心 128GB 的伺服器,則產生零知識證明的時間約為 110 秒,而驗證證明的時間則少於 1 毫秒。 

幣安會同時啟動 1,000 台證明伺服器,因此 2 小時內就能產生所有帳戶的證明。證明伺服器運作一小時的成本約為 0.56 美元,因此產生涵蓋所有用戶的零知識證明總成本約為 1,000 美元。

結論

後續的儲備證明公告中,幣安將會提供用戶新解決方案產生的零知識證明首次迭代。此外,幣安也開源用戶資料處理、證明者、迴路和驗證者的原始碼,讓所有仰賴與幣安相同模型的中心化交易所,都能輕鬆產生其用戶和資產的零知識證明。 

幣安希望開放原始碼有助於推升數位資產產業的透明度到全新層次。 幣安也正在研究實作 Vitalik 部落格 中提到的解決方案,以達更佳效能,從而提供更低成本、更頻繁的零知識證明。

這是幣安 zk-SNARK 的第一個版本,因此我們很期待能獲得社群回饋,協助我們持續改善系統。

程式碼及延伸閱讀