重點整理
零知識證明讓一方可以向另一方證明某個敘述為真,而不需要揭露任何底層資料。
zk-SNARKs 是一種用於加密貨幣的零知識證明協定類型。它用來驗證某些資訊(例如帳戶餘額)是否正確,同時不揭露任何私密細節。
Binance 以 zk-SNARKs 搭配 Merkle tree,讓使用者能驗證自己的餘額確實包含在總準備金證明(Proof of Reserves)中,而不必揭露個別帳戶資料。
除了交易所準備金之外,ZK 證明正越來越多地用於 ZK-rollups、身分驗證與投票系統,覆蓋整個區塊鏈生態。
簡介
區塊鏈使用者重視透明與隱私。許多情境下,這兩個目標似乎彼此衝突:要證明某件事是真的,往往需要揭露其背後的細節。零知識證明提供了一種方法,用來化解這種矛盾。
透過使用像 zk-SNARKs 這樣的零知識證明協定,並搭配像 Merkle tree 這樣的加密資料結構,就能在不揭露資訊本身的情況下,證明資訊的有效性。本文將說明這些工具如何運作,以及 Binance 如何將它們用於準備金證明。
什麼是零知識證明?
零知識證明允許一方(證明者,prover)說服另一方(驗證者,verifier),證明某個敘述為真,但不分享該敘述內容的任何資訊。這個概念最早出現在 1985 年的學術論文中,之後成為應用密碼學的基礎要素。
一個簡單的比喻:想像你知道一個上鎖保險箱的組合密碼。你可以透過打開保險箱、讀出裡面朋友放進去的一張便條,然後再把保險箱關起來,來向朋友證明你知道密碼。現在你的朋友相信你知道密碼,但你從未說出密碼是什麼。
想要更深入的技術解釋,請參考學院文章《什麼是零知識證明,以及它如何影響區塊鏈》。
為什麼零知識證明很有用?
當你需要在不暴露敏感資料的情況下證明一個主張時,ZK 證明就非常有用。在傳統系統中,證明你擁有某項資產或持有特定憑證,通常需要分享底層資訊,這會帶來隱私與安全性的風險。
在加密貨幣領域,常見的使用案例包括:
在不揭露私鑰內容的情況下證明你擁有該私鑰。
讓交易所能在不揭露個別帳戶餘額的情況下驗證其總用戶準備金。
透過 ZK-rollups 實現可擴充的區塊鏈交易,而不需要將每一筆交易都公開發佈到鏈上。
這些證明使用的演算法會把資料當作輸入,然後回傳 true 或 false,同時不會洩露任何關於輸入本身的細節。
零知識證明的技術特性
有效的零知識證明必須滿足三個性質:
完整性(Completeness)。如果敘述為真,誠實的驗證者會被該證明說服。
可靠性/健全性(Soundness)。如果敘述為假,沒有任何證明者能夠說服驗證者它為真。
零知識(Zero-knowledge)。如果敘述為真,驗證者除了「確實為真」這件事之外,什麼都學不到。
什麼是 zk-SNARK?
zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge,零知識簡潔非交互式知識論證)是一種零知識證明協定類型。它被設計為簡潔(證明大小很小)、非交互式(證明者與驗證者之間不需要來回互動),並且具有加密層級的可靠性(cryptographically sound)。
使用 zk-SNARK 時,驗證者可以證明自己掌握某個隱藏數值,或某項計算已正確執行,同時不揭露任何輸入內容的資訊。以加密貨幣交易所的情境而言,這意味著能夠證明所有使用者餘額的總和確實等於所宣稱的準備金,而不必顯示每一個人的單獨餘額。
驗證步驟的速度極快,遠快於生成證明本身所需的時間。這使得 zk-SNARKs 能夠應用於需要大量規模的情境,例如交易所稽核或區塊鏈的擴充。
什麼是 Merkle Tree?
Merkle tree 是一種加密資料結構,可高效率地組織大量資料。每一份資料會被轉換成雜湊(hash),接著把這些雜湊兩兩配對並再次合併,直到產生單一的根雜湊(root hash)。只要任何一個輸入值發生變更,根雜湊就會改變,因此竄改很容易被偵測。
雜湊函數(Hash functions)
Merkle tree 要能運作,依賴雜湊函數。雜湊會接受任意長度的輸入並產生固定長度的輸出。相同的輸入永遠會得到相同的輸出。甚至輸入只改動一點點,也會產生完全不同的輸出。
例如,將 100 本書的資料丟給 SHA-256 雜湊函數,會得到一個唯一的 64 字元字串。如果把這些書中的任意一個字元改掉,輸出就會完全不同。這項特性讓你能在不逐一比對所有原始內容的情況下,輕鬆驗證資料完整性。
加密貨幣中的 Merkle tree
在區塊鏈中,每一筆交易會先被雜湊成一個唯一的葉節點(leaf node)。接著把兩個葉節點合併後再雜湊,形成分支節點(branch nodes)。此流程會一直持續,直到產生單一的 Merkle root。這個根值以加密方式彙總了某個區塊中的所有交易。
對交易所而言,Merkle tree 提供了一種方式,能將客戶餘額整理成可被稽核的形式,同時不需揭露每一個人的個別帳戶。
僅使用 Merkle tree 的限制
加密貨幣交易所可以根據所有客戶帳戶的餘額建立 Merkle tree,以支援「準備金證明(Proof of Reserves, PoR)」。然而,若沒有額外的保護機制,這種做法仍有弱點。
如果沒有 ZK 層,交易所可能會把某些帳戶從樹中排除,或新增帶有負餘額的假帳戶,以降低看似的總負債。若使用者只檢視自己的葉節點,而看不到其他所有帳戶,便無從察覺這種問題。
使用可信的第三方稽核者是一個可能的解決方案,但這需要你同時信任稽核者,以及稽核者所能存取的資料。
zk-SNARKs 與 Merkle tree 如何協同運作
將 zk-SNARKs 與 Merkle tree 結合,可以免除對第三方的信任需求。交易所會先建立包含所有使用者餘額的 Merkle tree,接著生成一份 zk-SNARK 證明,能在數學上保證:
每位使用者的餘額都包含在 Merkle tree 中(不省略任何帳戶)。
沒有任何使用者的淨餘額為負(不存在被偽造的資料)。
Merkle root 有效,且沒有被更動。
使用者可以驗證自己的餘額確實有貢獻到 Merkle root。他們也可以驗證 zk-SNARK 證明,確認該樹是正確建立的,同時不必看到任何其他人的餘額。
Binance 如何套用這套系統
Binance 將它想要證明的內容定義為一個可程式化電路。對於 Merkle tree 中每位使用者的餘額葉節點,電路會檢查三個條件:
使用者的資產被納入總淨餘額的計算。
使用者的總淨餘額大於或等於零。
在納入該使用者資料後,Merkle root 有效。
接著,Binance 會為整棵 Merkle tree 生成 zk-SNARK 證明。在每次釋出準備金證明時,Binance 會發布每位使用者的 Merkle 證明,以及附帶其公開輸入(public inputs)的 zk-SNARK 證明。任何人都能使用公開可取得的開源程式碼,彼此獨立地完成驗證。
這種方法提供的是數學上的保證,而不是只依賴稽核者的信任。
準備金證明之外的更廣泛應用
ZK 證明技術已大幅超出交易所稽核的範圍。ZK-rollups 目前是以太坊上最主要的第二層(Layer 2)擴充方案之一:將交易在鏈下處理,並提交 ZK 證明到主鏈以確認有效性。這能在維持安全性的同時提升吞吐量。
除了擴充性之外,人們也正在探索用 ZK 證明進行身分驗證(在不揭露你完整身分的情況下證明你符合年齡或司法管轄要求)、私密投票系統,以及機密智慧合約的執行。這項技術仍在成熟中,但它在金融、治理與數位身分等領域的潛在應用非常可觀。
常見問題(FAQ)
用簡單的說法,零知識證明是什麼?
零知識證明讓你能證明你知道某件事情,或某個敘述為真,但同時不揭露底層資訊。這就像你透過打開保險箱來證明你知道保險箱的組合密碼,然後又把它關回去;你的朋友相信你知道密碼,但你從不需要說出密碼本身是什麼。
為什麼 Binance 在準備金證明中使用 zk-SNARKs?
Binance 使用 zk-SNARKs 來證明客戶餘額已完整被支撐(fully backed),同時不揭露個別帳戶細節。ZK 證明提供數學層級的驗證:所有帳戶都有被包含,且不存在負餘額,而不需要使用者信任稽核者。
zk-SNARKs 與 ZK-rollups 的差異是什麼?
zk-SNARKs 是一種零知識證明協定。ZK-rollups 是一種第二層(Layer 2)的擴充解決方案,它使用 zk-SNARKs(或類似的證明)把大量交易打包在一起,並向主區塊鏈提交單一的有效性證明。zk-SNARKs 是底層的加密工具;ZK-rollups 則是該工具的一種應用。
使用者能否自行獨立驗證 Binance 的準備金證明?
可以。Binance 會發布每位使用者的 Merkle 證明,以及連同其公開輸入的 zk-SNARK 證明。使用者可以使用 Binance 先前公開釋出的開源程式碼,驗證自己的餘額確實包含在 Merkle tree 中,並且 zk-SNARK 證明也證實該樹是被正確建立的。
零知識證明是否僅用於交易所準備金?
不是。ZK 證明有廣泛的應用。在區塊鏈中,它們用於 ZK-rollups 的交易規模擴充、身分系統,以及機密合約執行。在加密貨幣之外,也正在被研究用於隱私保護的投票、年齡驗證,以及在不揭露資料的情況下進行憑證驗證。
最後的想法
透過將 zk-SNARKs 與 Merkle tree 結合,交易所能提供關於準備金的加密證據,同時不會犧牲使用者資料。除了準備金稽核之外,ZK 技術也正在佔據區塊鏈擴充、身分系統與去中心化治理等領域的位置。
延伸閱讀
什麼是零知識證明(Zero-Knowledge Proof),以及它如何影響區塊鏈?
已解釋:zk-SNARKs 與 zk-STARKs
什麼是 ZK-Rollups?
什麼是準備金證明(Proof of Reserves),以及它在 Binance 上如何運作
已解釋:Merkle Trees 與 Merkle Roots
免責聲明:本內容僅以「現況(as is)」提供給你,目的僅限於一般資訊與教育用途,不作任何形式的聲明或保證。內容不應被視為財務、法律或其他專業建議,也不意在推薦購買任何特定產品或服務。你應向合適的專業顧問尋求自身建議。若內容由第三方提供者貢獻,請注意其中表達的觀點屬於該第三方提供者,未必反映 Binance Academy 的立場。數位資產價格可能波動。你的投資價值可能下跌或上漲,且你可能無法取回投資金額。你對自己的投資決策自行負責,且 Binance Academy 不對你可能遭受的任何損失負責。欲了解更多資訊,請參閱我們的《使用條款(Terms of Use)》、《風險警示(Risk Warning)》以及《Binance Academy 條款(Binance Academy Terms)》。
