<aside>
💡 KZG Commitment用于Ethereum的Danksharding和Verkle Tree、zkSync、Aleo等项目中,是零知识证明算法PLONK和Marlin的重要组成部分
</aside>
<aside>
💡 本篇概述其基本原理,后续再根据播放情况来决定后面深入讲解计算过程的篇幅
</aside>
<aside>
💡 学习完本篇之后,预期能理解零知识证明算法为什么能用简短的proof来证明庞大的knowledge,并且不暴露knowledge的信息给验证者
</aside>
Polynomial
- 系数形式(Coefficient)
- $f(x) = x^3-2x+1$
- 4个系数(1, 0, -2, 1)
- 点值形式(Point-Value)
- (0, 1) , (1, 0), (2, 5) , (3, 22)
- 系数形式→点值形式:代入计算(evaluation)
- 点值形式→系数形式
-
需要几个点值才能求解所有系数?
- 定义Degree为最高次数
- 则需要d+1个点值确定d+1个系数
-
方法1:需要d+1元方程组求解d+1个系数
![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/c3530929-9399-43f4-a2eb-34fcc5b2b556/Untitled.png)
-
方法2:拉格朗日插值(Lagrange interpolation)
![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/e409caea-d351-42f1-a6bf-f19fdf50422d/Untitled.png)
-
用途:Reed-Solomon erasure code
- d+1个点值记录原始数据,多取n个点值作为冗余
- Schwartz–Zippel Lemma
- 对于Degree为d的多项式$f(x)=0$最多只有d个解
- $f(x) = x^2+1=0$ 无解
- $f(x)=x^2-1=(x+1)(x-1)=0$ 2个解
- 因为最多分解成d个因式
- 如果x的取值范围大小是s,那随机取一个$x_0$,$f(x_0)=0$发生的概率$\le \frac{d}{s}$
- s远大于d,则不可能发生
- 衍生为:对于随机的$x_0$、$y_0$,$f(x_0)=y_0$不可能发生
- 衍生为:对于随机的$x_0$,如果我在不知道$f(x)$的情况下随机猜测$f(x_0)$的值,则不可能正好猜对
- 如果我能给出$f(x)$对于随机$x_0$的正确evaluation结果$f(x_0)$,则证明我知道$f(x)$的完整信息
- 用简洁的proof来证明我知道庞大的knowledge
- 这就是零知识证明中的Proof of Knowledge的核心原理
- 基于Schwartz–Zippel Lemma的Proof of Knowledge:形象表述
-
一段音乐的时间长度为d,频率范围长度为s,s远大于d
-
如果我能给出音乐在随机频率上的正确强度,则证明我知道这段音乐的完整信息
-
因为任一频率上的强度,需要所有时间点上的强度来参与计算
![Untitled](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3e763dd4-a9d7-43d8-b88e-05ec7dbc76fc/Untitled.png)
Vector Commitment
-
Vector Commitment
- 将一组数据(vector)压缩后唯一表示为Commitment;类似hash算法
- 然后Open其中的一个数据,并在不展示其他数据基础上提供一个Proof证明其属于vector
-
实现1:Merkle tree
- Merkle root即Commitment,Merkle path即proof
- Merkle的缺点是proof长度为O(log n)
![https://bitcoin.org/bitcoin.pdf](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/a91d85a6-58e7-4efd-b09f-20a32f216ea9/Untitled.png)
https://bitcoin.org/bitcoin.pdf
-
实现2:Polynomial Commitment
- 将长度为n+1的vector转换为多项式的点值$(v_0, v_1, ..., v_n)$→$(0, v_0), (1, v_1), ...,(n, v_n)$
- 将唯一对应的Degree=n的多项式$f(x)$,生成为Commitment
- Open其中的一个点,提供一个Proof证明点值$(k,v_k)$符合多项式$f(k)=v_k$
Interactive Oracle Proofs (IOP)
- 回顾Schwartz–Zippel Lemma和Polynomial Commitment
- 如果我能给出$f(x)$对于随机$x_0$的正确evaluation,则证明我知道$f(x)$的完整信息
- 可以用$f(x)$的Polynomial Commitment来证明$(x_0, y_0)$是正确的evaluation
- 两者的意义
- Schwartz–Zippel Lemma将Proof of Knowledge问题转化为证明Polynomial中一个随机evaluation正确性的问题
- Polynomial Commitment给出了证明Polynomial的一个evaluation正确性的方法,并且不会暴露Polynomial给Verifier
- 两者结合:基于Polynomial Commitment的交互式(Interactive) Proof of Knowledge
- Alice将Knowledge vector作为点值生成$f(x)$
- Alice生成$f(x)$的Commitment C告诉Bob
- Bob随机选取$x_0$给Alice
- Alice返回$y_0$和Proof给Bob
- Bob根据C、$(x_0,y_0)$、Proof验证正确性
- 正确则说明Alice知道$f(x)$的完整信息
- 基于Random Oracle的Non-interactive Proof of Knowledge
- Bob随机选取$x_0$给Alice → Alice计算$x_0=hash(C)$
KZG commitment
Knowledge -> Point-Values -> Coefficients -> Commitment -> Open&Prove&Verify
FFT MSM
^
|
Trusted Setup