跳到正文

零知識證明

準確理解零知識證明:完備性、可靠性、模擬、見證、設定假設、區塊鏈用途與驗證風險。

更新於

僅供教育參考,不構成投資或安全建議。有效證明只在證明系統的假設下保證已編碼的陳述。

直接答案

零知識證明(ZKP)讓證明者在不洩露用來建立陳述的秘密見證之下,使驗證者相信該陳述為真。其形式化保證並非「互動記錄完全沒有資訊」,而是除了公開陳述本身能推導出的資訊,合規驗證者學到的內容皆可在不知道見證時模擬出來。

證明系統須分別考察三個性質:完備性,即持有有效見證的誠實證明者會被接受;可靠性,即虛假陳述僅以可忽略機率被接受;零知識性,即見證在規定的威脅模型下維持隱藏。許多實用系統屬於計算型論證:可靠性只對計算能力受限的攻擊者成立,並依賴明確列出的密碼學假設。

零知識性也不同於簡潔性和有效性。證明可以是零知識但驗證成本很高,可以很簡潔卻公開資料,也可以正確證明某個已編碼關係,但該關係不符合應用原本想執行的規則。

1
執行

證明者執行一批交易或計算,得到狀態變化。

運作原理

先定義公開陳述 x、私密見證 w 與精確關係 R。證明者產生證明,驗證者使用公共參數或驗證金鑰判斷。預期的可靠性主張可概括為:

Verify(vk, x, proof) = 1 => exists w: R(x, w) = 1

此式只說明已編碼關係存在合適見證。它不會公開見證,也不會認證鏈下輸入,更不能證明 R 已涵蓋應用想執行的所有業務規則。

  • 互動式與非互動式。 早期 ZK 協定交換挑戰與回應。非互動式系統把證據裝入一個證明,通常依賴設定材料、隨機預言機模型或兩者。
  • 設定模型。 Groth16 的證明很小,但需要針對電路的結構化設定。PLONK 類系統可使用通用、可更新的結構化參考字串。STARK 構造不需要結構化可信設定,但通常證明較大,並依賴雜湊與低度測試。
  • 算術化與承諾。 實作會把程式轉換成代數約束,對見證衍生值作承諾,再用隨機化檢查,讓驗證者無須重做計算或查看見證便能檢驗結果。
  • 知識證明。 有些系統還主張藉由證明提取器形式化地說明,被接受的證明者「知道」一個見證。這是獨立性質,不能只由「零知識」標籤推斷。

範例

假設 x 包含一個承諾和 100 units 的門檻,w 包含被承諾的餘額與致盲因子。關係會檢查承諾能否正確開啟,以及餘額是否至少為 100 units。有效零知識證明可確認這項關係而不披露確切餘額。

但結果本身不能證明證明者擁有該帳戶、資金未受限制,或同一承諾未被重複使用。這些主張需要額外約束和公開輸入。

在隱私型加密貨幣中,電路可在隱藏部分交易細節時強制檢查授權、價值守恆與防重複。在有效性 Rollup 中,證明可確認一批狀態轉換;系統仍可能公開交易資料,因此「ZK Rollup」不自動等於私密交易。

風險

  • 不完整或錯誤的電路可能完美證明錯誤規則。
  • 缺少域分離、鏈識別碼、根或承諾,可能把證明綁定到錯誤情境。
  • 對需要可信設定的系統,設定遭入侵或「有毒廢料」未銷毀會破壞可靠性。
  • 證明器、驗證器、互動記錄、曲線、雜湊、編譯器或智慧合約的缺陷可能讓理論保證失效。
  • 公開輸入、證明時間、交易圖、費用與網路中繼資料可能洩露形式化 ZK 陳述之外的資訊。
  • 見證產生、瀏覽器、硬體或遠端證明服務的側通道可能在證明產生前暴露秘密。
  • 驗證證明並不提供資料可用性、排序器活性、結算最終性、抗審查性或安全升級。
  • 不同證明系統的密碼學假設與具體安全餘量不同;不能只按證明大小或驗證速度評定安全性。

常見誤解

  • 「零知識表示不公開任何資料。」 公開陳述和刻意暴露的輸出仍可見,證明模型以外的中繼資料也可能洩露。
  • 「證明有效就代表應用正確。」 它只表示已編碼關係獲接受,電路、整合和政策錯誤仍可能存在。
  • 「所有 ZK 系統的信任假設相同。」 設定儀式、曲線、雜湊、互動記錄模型與升級控制均有實質差異。
  • 「ZK 就是加密。」 加密隱藏資料供獲授權者解密;ZK 證明無須傳送見證供人解密即可建立主張。

相關主題

來源

導覽

搜尋知識庫...