ZK 密碼學的數學推導互動指南:從零知識證明到底層電路設計

本文以互動式學習方式解析零知識證明的數學原理,跳過抽象的符號推導,用大量具體數字例子展示 zk-SNARKs 和 zk-STARKs 的運作原理。我們從 Schnorr 識別協議開始,逐步過渡到 R1CS 約束系統、多項式承諾、同態加密等核心概念,最後分析為什麼這些技術對 Layer 2 的發展至關重要。適合想要建立 ZK 密碼學直覺但被複雜數學符號阻擋的讀者。

ZK 密碼學互動學習指南

用數字例子來理解零知識證明,比看公式輕鬆多了。

Schnorr 識別協議

目標:證明我知道私鑰 x,但不透露 x

三輪互動

1. Prover 選 random v → 發 V = v·G
2. Verifier 拋硬幣 → 發 challenge e (0 或 1)
3. Prover 計算 r = v + e·x → 發 r
4. Verifier 驗證 r·G = V + e·P

數字例子(mod 7)

設:

第一輪

第二輪

第三輪

驗證

如果不知道 x,能猜對 e=0 或 e=1 但不能同時兩個都對。

Fiat-Shamir 轉換

把互動式改成非互動式:

# 原本:Verifier 拋硬幣產生 e
e = random_bit()

# Fiat-Shamir:用哈希代替
e = hash(V || P || message)

好處:不需要 Verifier 在線,可以生成「一次性證明」。

從識別到計算

Schnorr 只能證「我知道某個數」。要證明更複雜的計算,需要把計算轉成電路。

例子:證明 a + b = c

約束:c - a - b = 0

在有限域中,這是一個簡單的線性約束。

例子:證明 a × b = c

約束:a · b - c = 0

這是非線性約束,需要乘法門。

為什麼 ZK 電路要「平坦化」?

因為電路只能做簡單操作(加法、乘法、比較)。

複雜邏輯必須拆成基本步驟。

結語

密碼學沒那麼可怕,換成數字例子就好懂了。

COMMIT: Add ZK cryptography interactive learning guide

延伸閱讀與來源

這篇文章對您有幫助嗎?

評論

發表評論

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

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