ZK-SNARKs 數學推導完整指南:從零知識證明基礎到 Groth16 協議工程實踐

本文從工程師的視角出發,提供零知識證明數學基礎的完整推導。從密碼學安全假設出發,逐步建立零知識證明的理論框架,深入分析 zk-SNARKs 的核心協議——包括 Groth16、PLONK 與 Halo2 的設計原理與數學推導,並提供完整的程式碼範例說明如何在以太坊上實際部署零知識證明系統。

ZK-SNARK 數學推導

這篇深入 ZK-SNARK 的數學原理,適合對密碼學有興趣的讀者。

Schnorr 協議

最基礎的零知識證明協議,用於證明知道離散對數。

設定

協議步驟

  1. 承諾:證明者選 r,計算 t = g^r,發送 t
  2. 挑戰:驗證者選 c,發送
  3. 回應:證明者計算 s = r + c·x mod q,發送 s
  4. 驗證:檢查 g^s = t · Y^c

數學推導

g^s = g^(r+cx) = g^r · g^(cx) = t · (g^x)^c = t · Y^c ✓

橢圓曲線上的應用

以太坊使用 BN128 曲線:y² = x³ + 3

點加法公式:

λ = (y₂ - y₁) / (x₂ - x₁) mod p
x₃ = λ² - x₁ - x₂
y₃ = λ(x₁ - x₃) - y₁

Groth16 協議

目前最高效的 ZK-SNARK 實現之一。

可信設置

需要生成公共參考字串(CRS):

SRS = (g^τ⁰, g^τ¹, ..., g^τⁿ, g^α·g^τ⁰, ..., g^β·g^τ⁰, ...)

τ 必須被銷毀,否則可以被偽造證明。

證明生成

給定 QAP 多項式 A(x), B(x), C(x):

  1. 計算 A = A_τ(τ) + α + β
  2. 計算 B = B_τ(τ) + β
  3. 計算 C = C_τ(τ) + δ·H(τ)
  4. 輸出證明 π = (A, B, C)

驗證

e(A, B) = e(g, g)^(αβ) · e(g^δ, g^β) · e(C, g)

只需要 3 個配對運算,極快。

安全性分析

知識假設:如果能偽造證明,就能解決 q-SDH 問題。

模擬安全性:存在模擬器可以模擬任何真實證明者的視角。

結語

ZK-SNARK 的數學很優雅,但核心思想很簡單:用多項式承諾和配對來實現「簡潔、可驗證、零知識」的證明系統。

COMMIT: Add ZK-SNARK mathematical derivation guide

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

注意:由於這是靜態網站,您的評論將儲存在本地瀏覽器中,不會公開顯示。

目前尚無評論,成為第一個發表評論的人吧!