这是零知识证明从数学基础到基本算法的一个总结,我很久没看了,准备从头看一遍,会持续更新。
数论基础
模运算与同余
-
核心概念与直觉
直觉: 时钟算术,想象一个只有 12 个刻度的时钟(0 到 11,把 12 看作 0)。10点再过3个小时,时钟指向1点(时钟世界)
模运算: 我们把所有数字限制在一个范围内(例如 0 到 11)。无论怎么加减乘,结果永远都会“卷”回这个范围。
-
数学定义与公式
a≡b(modn) ,读作“a 与 b 在模 n 下同余”,意思是:a 和 b 除以 n 的余数相同。
-
基础运算规则
- 加法: (a+b)(modn)=((a(modn))+(b(modn)))(modn)
例子: (8+5)(mod12)=13(mod12)=1
- 减法: (a−b)(modn)
例子:(2−5)(mod12)=−3(mod12)=(−3+12)=9
- 乘法: (a×b)(modn)=((a(modn))×(b(modn)))(modn)
例子:(4×4)(mod12)=16(mod12)=4
-
作用
ZK系统为了安全和效率,不能处理无限大的数,也不能处理小数(精度丢失会破坏证明)。 通过模运算,我们把计算限制在一个巨大的素数域中。这就像一个巨大的时钟,指针转一圈需要极其漫长的时间,这让攻击者很难通过“逆向旋转”来破解密码(离散对数难题的基础)。
欧拉函数与费马小定理
- 核心概念与直觉
-
互质: 它们没有共同的基础因子(除了1)
- GCD(8,12)=4 ——>不互质,因为都有公因子4
- GCD(8, 9) = 1 -> 互质(虽然它们自己不是素数,但它们之间没关系)。
-
欧拉函数 ϕ(n) (计数器): “在小于 n 的正整数里,有多少个是和 n 互质的?” ,
我们在模p的世界里,关注有多少个素数能进行可逆运算
关键结论: 如果 p 是一个素数(Prime),那么比它小的所有正整数都和它互质。
ϕ(p)=p−1
-
费马小定理(复位键):如果在模 p (素数)的世界里,你随便拿一个整数 a(a 不是 p 的倍数),把它对自己乘 p−1 次,结果等于1
ap−1≡1(modp)
直觉:魔方。不管你怎么乱转(只要遵循规则),如果你重复同一个操作足够多次(这里是 p−1 次),魔方最终会回到原样(变成 1)。
- 作用:
在 ZK 电路中,我们需要做除法。但在有限域里,没有“除以 5”这种操作,只有“乘以 5 的逆元”。
逆元(记作 a−1)是指满足 a×a−1≡1 的那个数。
那么利用费马小定理,我们可以把除法变成乘法:
- 根据费马小定理: ap−1≡1(modp)
- 拆分一下: a×ap−2≡1(modp)
- 对比定义 a×a−1≡1,你会发现:
a−1≡ap−2(modp)
结论: 在模 p(素数)的世界里,“除以 a” 等于 “乘以 ap−2”。这就是为什么 ZK 系统必须构建在素数域上的原因——为了保证除法永远可行。
群、环、域