零知識證明(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 進入了更爲廣泛的應用場景。
傳統的ZKP需要的遵守的原則有三點:
ZKP的原理可用簡單的例子來理解:如果我需要曏A證明我擁有B的電話號碼,我不需要直接把B的電話號碼告訴B,而是可以直接通過撥打B的電話,在打通後即可證明我確實擁有B的電話號碼,這個過程併不會泄露B的號碼信息。
而zk-SNARK則是在此基礎進一步升級,其具有以下特點:
在Groth的論文中, 他提出基於配對的非交互式零知識論證方法將一個計算問題轉化爲一個二次算術程序(QAP),然後利用橢圓曲線密碼學和哈希函數構造一個有效的證明。後來的zk-SNARK一般在設計時分爲四個步驟:
過程也涉及到多項式的計算、橢圓曲線的運算和哈希函數的運算,最終得到一個布爾值,錶示證明是否有效。
舉個簡單的例子理解就是,假設你有一張藏寶圖,它能指引你到一個埋藏寶藏的確切位置。你想證明給某人看你知道寶藏的位置,但你不想揭露寶藏圖的內容或寶藏的實際位置。如果你使用zk-SNARK技術的話,你需要製作了一份藏寶圖的覆雜拼圖。你選擇了一小塊關鍵拼圖(一個證明),併展示給對方看,足以讓他們確信你知道完整的拼圖如何組合,即寶藏的位置,而無需看到整個拼圖。但是,爲了做到這一點,你需要從一個可信的印刷廠穫取一些特殊的標記,這些標記用來證明你的拼圖片段是真實的。
上文中提到了zk-SNARK是允許設置公共參考字符串的,即可以在運行的電路上設置約束,以Gate儲備金爲例,其在電路中設置了五個核心約束:
①用戶凈資産插入Merkle樹之前,用戶ID對應的節點爲空。
②根據用戶的資産列錶及每種資産的價格計算用戶的總資産/負債,總資産必鬚大於總負債。
③將用戶的資産/負債加到交易所的資産/負債中。
④使用用戶ID、總資産/負債、資産列錶計算用戶狀態哈希,將用戶狀態插入Merkle樹得到新的Merkle Root。
⑤前一個用戶在創建用戶的操作之前,樹的根節點的哈希值必鬚與後一個用戶創建用戶的操作之後的樹的根節點的哈希值相等。
(①操作可避免節點數據不真實,②操作可避免負值賬戶,⑤操作可保證操作前後,用戶數據不被更改。)
這樣就可以保證負值問題的解決。交易所數據隻需要通過電路後就會自動進行約束檢查,然後得到資産數。不過這種方案需要一定的運算能力和硬件條件。在一颱32核、運行內存128G的機器上計算1,000萬用戶的資産證明需要15天。儲備金證明的計算可以併行化,如果是10颱機器,則隻需要1.5天。
通過設置相關的約束,zk-SNARK可以避免負值問題的出現,衕時更好的保護用戶的隱私安全。Gate現在的儲備金證明已經可以針對100+幣種進行儲備金率證明,隻需要點擊鏈接即可進入儲備金頁麵查看。在下一節中,我們將會帶您3min內驗證您的資産安全。
零知識證明(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 進入了更爲廣泛的應用場景。
傳統的ZKP需要的遵守的原則有三點:
ZKP的原理可用簡單的例子來理解:如果我需要曏A證明我擁有B的電話號碼,我不需要直接把B的電話號碼告訴B,而是可以直接通過撥打B的電話,在打通後即可證明我確實擁有B的電話號碼,這個過程併不會泄露B的號碼信息。
而zk-SNARK則是在此基礎進一步升級,其具有以下特點:
在Groth的論文中, 他提出基於配對的非交互式零知識論證方法將一個計算問題轉化爲一個二次算術程序(QAP),然後利用橢圓曲線密碼學和哈希函數構造一個有效的證明。後來的zk-SNARK一般在設計時分爲四個步驟:
過程也涉及到多項式的計算、橢圓曲線的運算和哈希函數的運算,最終得到一個布爾值,錶示證明是否有效。
舉個簡單的例子理解就是,假設你有一張藏寶圖,它能指引你到一個埋藏寶藏的確切位置。你想證明給某人看你知道寶藏的位置,但你不想揭露寶藏圖的內容或寶藏的實際位置。如果你使用zk-SNARK技術的話,你需要製作了一份藏寶圖的覆雜拼圖。你選擇了一小塊關鍵拼圖(一個證明),併展示給對方看,足以讓他們確信你知道完整的拼圖如何組合,即寶藏的位置,而無需看到整個拼圖。但是,爲了做到這一點,你需要從一個可信的印刷廠穫取一些特殊的標記,這些標記用來證明你的拼圖片段是真實的。
上文中提到了zk-SNARK是允許設置公共參考字符串的,即可以在運行的電路上設置約束,以Gate儲備金爲例,其在電路中設置了五個核心約束:
①用戶凈資産插入Merkle樹之前,用戶ID對應的節點爲空。
②根據用戶的資産列錶及每種資産的價格計算用戶的總資産/負債,總資産必鬚大於總負債。
③將用戶的資産/負債加到交易所的資産/負債中。
④使用用戶ID、總資産/負債、資産列錶計算用戶狀態哈希,將用戶狀態插入Merkle樹得到新的Merkle Root。
⑤前一個用戶在創建用戶的操作之前,樹的根節點的哈希值必鬚與後一個用戶創建用戶的操作之後的樹的根節點的哈希值相等。
(①操作可避免節點數據不真實,②操作可避免負值賬戶,⑤操作可保證操作前後,用戶數據不被更改。)
這樣就可以保證負值問題的解決。交易所數據隻需要通過電路後就會自動進行約束檢查,然後得到資産數。不過這種方案需要一定的運算能力和硬件條件。在一颱32核、運行內存128G的機器上計算1,000萬用戶的資産證明需要15天。儲備金證明的計算可以併行化,如果是10颱機器,則隻需要1.5天。
通過設置相關的約束,zk-SNARK可以避免負值問題的出現,衕時更好的保護用戶的隱私安全。Gate現在的儲備金證明已經可以針對100+幣種進行儲備金率證明,隻需要點擊鏈接即可進入儲備金頁麵查看。在下一節中,我們將會帶您3min內驗證您的資産安全。