第3課

儲備金如何與zk-SNARK技術結合?

本章將講解什麽是zkSANRK技術以及儲備金是如何利用zk-SANRK技術得到優化的

背景知識

零知識證明(Zero-Knowledge Proof,ZKP)是一種密碼學技術,最早由由S.Goldwasser、S.Micali及C.Rackoff在20世紀80年代初的一篇名爲《The Knowledge Complexity Of Interactive Proof Systems》的論文中提出。在該文中,它是作爲一個理論模型被構想出來,解決的是在不透露證據的情況下如何驗證數學陳述的問題。這一概念在學術界引起了廣泛關註,因爲它挑戰了傳統加密技術的界限,併爲處理敏感信息提供了全新的方法。
隨著時間的推移,ZKP從一個抽象的理論構想逐步演變成具體的協議,它們能夠被集成進各種應用中。在2010年,Groth髮錶了一篇名爲《Short Pairing-based Non-interactive Zero-Knowledge Arguments》的論文,這篇論文成爲了ZKP中重要的解決方案zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)的理論先驅文章。零知識證明在應用上最重要的進展就是 2015 年 Z-cash 使用的零知識證明繫統,實現了對交易及金額隱私的保護,後來髮展到 zk-SNARK 和智能合約相結合,zk-SNARK 進入了更爲廣泛的應用場景。

zk-SANRK的基本原理

傳統的ZKP需要的遵守的原則有三點:

  • 完備性(Completeness,也譯作完整性) - 如果陳述是真實的,誠實的證明者總能夠通過驗證者的檢驗。
  • 健壯性(Soundness,也譯作合理性) - 如果陳述是假的,任何欺詐的證明者都將隻有微小的概率能夠誤導驗證者相信該陳述是真的。
  • 零知識性(Zero-knowledge) - 如果陳述是真實的,驗證者除了得知該陳述是正確外,將無法學習任何其他的信息。換句話説,驗證過程不會泄露任何能夠用於構造證明的信息。

ZKP的原理可用簡單的例子來理解:如果我需要曏A證明我擁有B的電話號碼,我不需要直接把B的電話號碼告訴B,而是可以直接通過撥打B的電話,在打通後即可證明我確實擁有B的電話號碼,這個過程併不會泄露B的號碼信息。

而zk-SNARK則是在此基礎進一步升級,其具有以下特點:

  • 零知識:驗證者不能從證明中穫得任何有用的信息;
  • 簡潔:證明的大小很小(通常隻有幾十字節),驗證時間很短(通常隻需幾毫秒);
  • 非交互式:證明者隻需要髮送一次證明給驗證者,無需進一步溝通;
  • 可信參數:證明者和驗證者都需要使用一個由可信第三方生成的CRS(公共參考字符串),這個CRS可能包含一些敏感信息,如果泄露或篡改,可能會導緻繫統的安全性受到威脅。

在Groth的論文中, 他提出基於配對的非交互式零知識論證方法將一個計算問題轉化爲一個二次算術程序(QAP),然後利用橢圓曲線密碼學和哈希函數構造一個有效的證明。後來的zk-SNARK一般在設計時分爲四個步驟:

  • 繫統設置:由一個可信第三方執行,生成一個CRS,包括一個用於生成證明的密鑰 pk 和一個用於驗證證明的密鑰 vk。這個過程隻需要執行一次,CRS可以被多次重用。
  • 問題編碼:將一個計算問題 f(x) = y 轉化爲一個 QAP 的形式 A(x)·B(x) = C(x)·Z(x),其中 A(x)、B(x)、C(x) 是由 f 的電路結構決定的多項式,Z(x) 是一個固定的多項式,x 是一個隨機選擇的點,y 是 f 的輸出。這個過程可以由證明者或驗證者執行,或者由第三方提前完成。
  • 證明生成:由證明者執行,使用 pk、x 和 f 的輸入 w 生成一個證明 \pi ,證明他知道一個滿足 f(w) = y 的 w,而不透露 w 的具體值。這個過程涉及到多項式的計算、橢圓曲線的運算和哈希函數的運算,最終生成一個由幾個橢圓曲線點和一個哈希值組成的 \pi 。
  • 證明驗證:由驗證者執行,使用 vk、x、y 和 \pi 進行驗證,判斷證明者是否真的知道一個滿足 f(w) = y 的 w。這個

過程也涉及到多項式的計算、橢圓曲線的運算和哈希函數的運算,最終得到一個布爾值,錶示證明是否有效。
舉個簡單的例子理解就是,假設你有一張藏寶圖,它能指引你到一個埋藏寶藏的確切位置。你想證明給某人看你知道寶藏的位置,但你不想揭露寶藏圖的內容或寶藏的實際位置。如果你使用zk-SNARK技術的話,你需要製作了一份藏寶圖的覆雜拼圖。你選擇了一小塊關鍵拼圖(一個證明),併展示給對方看,足以讓他們確信你知道完整的拼圖如何組合,即寶藏的位置,而無需看到整個拼圖。但是,爲了做到這一點,你需要從一個可信的印刷廠穫取一些特殊的標記,這些標記用來證明你的拼圖片段是真實的。

交易所儲備金與zk-SANRK的結合

上文中提到了zk-SNARK是允許設置公共參考字符串的,即可以在運行的電路上設置約束,以Gate儲備金爲例,其在電路中設置了五個核心約束:

①用戶凈資産插入Merkle樹之前,用戶ID對應的節點爲空。
②根據用戶的資産列錶及每種資産的價格計算用戶的總資産/負債,總資産必鬚大於總負債。
③將用戶的資産/負債加到交易所的資産/負債中。
④使用用戶ID、總資産/負債、資産列錶計算用戶狀態哈希,將用戶狀態插入Merkle樹得到新的Merkle Root。
⑤前一個用戶在創建用戶的操作之前,樹的根節點的哈希值必鬚與後一個用戶創建用戶的操作之後的樹的根節點的哈希值相等。
(①操作可避免節點數據不真實,②操作可避免負值賬戶,⑤操作可保證操作前後,用戶數據不被更改。)

這樣就可以保證負值問題的解決。交易所數據隻需要通過電路後就會自動進行約束檢查,然後得到資産數。不過這種方案需要一定的運算能力和硬件條件。在一颱32核、運行內存128G的機器上計算1,000萬用戶的資産證明需要15天。儲備金證明的計算可以併行化,如果是10颱機器,則隻需要1.5天。

小結

通過設置相關的約束,zk-SNARK可以避免負值問題的出現,衕時更好的保護用戶的隱私安全。Gate現在的儲備金證明已經可以針對100+幣種進行儲備金率證明,隻需要點擊鏈接即可進入儲備金頁麵查看。在下一節中,我們將會帶您3min內驗證您的資産安全。

免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。
目錄
第3課

儲備金如何與zk-SNARK技術結合?

本章將講解什麽是zkSANRK技術以及儲備金是如何利用zk-SANRK技術得到優化的

背景知識

零知識證明(Zero-Knowledge Proof,ZKP)是一種密碼學技術,最早由由S.Goldwasser、S.Micali及C.Rackoff在20世紀80年代初的一篇名爲《The Knowledge Complexity Of Interactive Proof Systems》的論文中提出。在該文中,它是作爲一個理論模型被構想出來,解決的是在不透露證據的情況下如何驗證數學陳述的問題。這一概念在學術界引起了廣泛關註,因爲它挑戰了傳統加密技術的界限,併爲處理敏感信息提供了全新的方法。
隨著時間的推移,ZKP從一個抽象的理論構想逐步演變成具體的協議,它們能夠被集成進各種應用中。在2010年,Groth髮錶了一篇名爲《Short Pairing-based Non-interactive Zero-Knowledge Arguments》的論文,這篇論文成爲了ZKP中重要的解決方案zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge)的理論先驅文章。零知識證明在應用上最重要的進展就是 2015 年 Z-cash 使用的零知識證明繫統,實現了對交易及金額隱私的保護,後來髮展到 zk-SNARK 和智能合約相結合,zk-SNARK 進入了更爲廣泛的應用場景。

zk-SANRK的基本原理

傳統的ZKP需要的遵守的原則有三點:

  • 完備性(Completeness,也譯作完整性) - 如果陳述是真實的,誠實的證明者總能夠通過驗證者的檢驗。
  • 健壯性(Soundness,也譯作合理性) - 如果陳述是假的,任何欺詐的證明者都將隻有微小的概率能夠誤導驗證者相信該陳述是真的。
  • 零知識性(Zero-knowledge) - 如果陳述是真實的,驗證者除了得知該陳述是正確外,將無法學習任何其他的信息。換句話説,驗證過程不會泄露任何能夠用於構造證明的信息。

ZKP的原理可用簡單的例子來理解:如果我需要曏A證明我擁有B的電話號碼,我不需要直接把B的電話號碼告訴B,而是可以直接通過撥打B的電話,在打通後即可證明我確實擁有B的電話號碼,這個過程併不會泄露B的號碼信息。

而zk-SNARK則是在此基礎進一步升級,其具有以下特點:

  • 零知識:驗證者不能從證明中穫得任何有用的信息;
  • 簡潔:證明的大小很小(通常隻有幾十字節),驗證時間很短(通常隻需幾毫秒);
  • 非交互式:證明者隻需要髮送一次證明給驗證者,無需進一步溝通;
  • 可信參數:證明者和驗證者都需要使用一個由可信第三方生成的CRS(公共參考字符串),這個CRS可能包含一些敏感信息,如果泄露或篡改,可能會導緻繫統的安全性受到威脅。

在Groth的論文中, 他提出基於配對的非交互式零知識論證方法將一個計算問題轉化爲一個二次算術程序(QAP),然後利用橢圓曲線密碼學和哈希函數構造一個有效的證明。後來的zk-SNARK一般在設計時分爲四個步驟:

  • 繫統設置:由一個可信第三方執行,生成一個CRS,包括一個用於生成證明的密鑰 pk 和一個用於驗證證明的密鑰 vk。這個過程隻需要執行一次,CRS可以被多次重用。
  • 問題編碼:將一個計算問題 f(x) = y 轉化爲一個 QAP 的形式 A(x)·B(x) = C(x)·Z(x),其中 A(x)、B(x)、C(x) 是由 f 的電路結構決定的多項式,Z(x) 是一個固定的多項式,x 是一個隨機選擇的點,y 是 f 的輸出。這個過程可以由證明者或驗證者執行,或者由第三方提前完成。
  • 證明生成:由證明者執行,使用 pk、x 和 f 的輸入 w 生成一個證明 \pi ,證明他知道一個滿足 f(w) = y 的 w,而不透露 w 的具體值。這個過程涉及到多項式的計算、橢圓曲線的運算和哈希函數的運算,最終生成一個由幾個橢圓曲線點和一個哈希值組成的 \pi 。
  • 證明驗證:由驗證者執行,使用 vk、x、y 和 \pi 進行驗證,判斷證明者是否真的知道一個滿足 f(w) = y 的 w。這個

過程也涉及到多項式的計算、橢圓曲線的運算和哈希函數的運算,最終得到一個布爾值,錶示證明是否有效。
舉個簡單的例子理解就是,假設你有一張藏寶圖,它能指引你到一個埋藏寶藏的確切位置。你想證明給某人看你知道寶藏的位置,但你不想揭露寶藏圖的內容或寶藏的實際位置。如果你使用zk-SNARK技術的話,你需要製作了一份藏寶圖的覆雜拼圖。你選擇了一小塊關鍵拼圖(一個證明),併展示給對方看,足以讓他們確信你知道完整的拼圖如何組合,即寶藏的位置,而無需看到整個拼圖。但是,爲了做到這一點,你需要從一個可信的印刷廠穫取一些特殊的標記,這些標記用來證明你的拼圖片段是真實的。

交易所儲備金與zk-SANRK的結合

上文中提到了zk-SNARK是允許設置公共參考字符串的,即可以在運行的電路上設置約束,以Gate儲備金爲例,其在電路中設置了五個核心約束:

①用戶凈資産插入Merkle樹之前,用戶ID對應的節點爲空。
②根據用戶的資産列錶及每種資産的價格計算用戶的總資産/負債,總資産必鬚大於總負債。
③將用戶的資産/負債加到交易所的資産/負債中。
④使用用戶ID、總資産/負債、資産列錶計算用戶狀態哈希,將用戶狀態插入Merkle樹得到新的Merkle Root。
⑤前一個用戶在創建用戶的操作之前,樹的根節點的哈希值必鬚與後一個用戶創建用戶的操作之後的樹的根節點的哈希值相等。
(①操作可避免節點數據不真實,②操作可避免負值賬戶,⑤操作可保證操作前後,用戶數據不被更改。)

這樣就可以保證負值問題的解決。交易所數據隻需要通過電路後就會自動進行約束檢查,然後得到資産數。不過這種方案需要一定的運算能力和硬件條件。在一颱32核、運行內存128G的機器上計算1,000萬用戶的資産證明需要15天。儲備金證明的計算可以併行化,如果是10颱機器,則隻需要1.5天。

小結

通過設置相關的約束,zk-SNARK可以避免負值問題的出現,衕時更好的保護用戶的隱私安全。Gate現在的儲備金證明已經可以針對100+幣種進行儲備金率證明,隻需要點擊鏈接即可進入儲備金頁麵查看。在下一節中,我們將會帶您3min內驗證您的資産安全。

免責聲明
* 投資有風險,入市須謹慎。本課程不作為投資理財建議。
* 本課程由入駐Gate Learn的作者創作,觀點僅代表作者本人,絕不代表Gate Learn讚同其觀點或證實其描述。
It seems that you are attempting to access our services from a Restricted Location where Gate.io is unable to provide services. We apologize for any inconvenience this may cause. Currently, the Restricted Locations include but not limited to: the United States of America, Canada, Cambodia, Thailand, Cuba, Iran, North Korea and so on. For more information regarding the Restricted Locations, please refer to the User Agreement. Should you have any other questions, please contact our Customer Support Team.