Plonk 证明系统:电路+多项式承诺
-
将电路变成多项式,多项式的一些方程。
-
多项式承诺,发送多项式承诺,保证我的多项式不会再变。(通过承诺能够证明我的多项式满足这些关系)。
门约束
电路中的门分为三种类型:加法门、乘法门和常数门。
我们将门的关系转化为 1 个方程来表示:
q
L
i
a
i
+
q
R
i
b
i
+
q
O
i
c
i
+
q
M
i
a
i
b
i
+
q
C
i
=
0
q_{L_i}a_i+q_{R_i}b_i+q_{O_i}c_i+q_{M_i}a_ib_i+q_{C_i}=0
qLiai+qRibi+qOici+qMiaibi+qCi=0
-
表示 a i × b i = c i a_i \times b_i = c_i ai×bi=ci;只需要将 q M i = 1 , q O i = − 1 q_{M_i} = 1, q_{O_i} = -1 qMi=1,qOi=−1;
-
表示 a i + b i = c i a_i + b_i = c_i ai+bi=ci;只需要将 q L i = 1 , q R i = 1 , q O i = − 1 q_{L_i} = 1, q_{R_i} = 1, q_{O_i} = -1 qLi=1,qRi=1,qOi=−1;
-
表示 a i = 5 a_i = 5 ai=5;只需要 q L i = 1 , q C i = − 5 q_{L_i} = 1 , q_{C_i} = -5 qLi=1,qCi=−5;
但用这种序号 i i i 的形式后面不太好处理,我们想要进一步将其转化成多项式的问题,因为每 1 个 i i i 都对应一个方程(之前是横着看这个方程,现在是竖着看)。那么可以通过拉格朗日插值法将其都转化为多项式的形式。
也就是: q L i , q R i , q O i , q m i , q C i → 5 q_{L_i}, q_{R_i}, q_{O_i}, q_{m_i}, q_{C_i} \rightarrow 5 qLi,qRi,qOi,qmi,qCi→5 个多项式, a i , b i , c i → 3 a_i,b_i,c_i \rightarrow 3 ai,bi,ci→3 个多项式。
上述方程化简为多项式形式:
q L ( x ) a ( x ) + q R ( x ) b ( x ) + q O ( x ) c ( x ) + q M ( x ) a ( x ) b ( x ) + q C ( x ) = 0 q_{L}(x) a(x) + q_{R}(x) b(x) + q_{O}(x) c(x) + q_{M}(x) a(x)b(x) + q_{C}(x) = 0 qL(x)a(x)+qR(x)b(x)+qO(x)c(x)+qM(x)a(x)b(x)+qC(x)=0
这个多项式成立的条件是 x ∈ ( x 1 , . . . , x n ) x\in(x_1,...,x_n) x∈(x1,...,xn),在这些坐标点上成立。而且整个电路有 3 n 3n 3n 个数: a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an, b 1 , b 2 , . . . b n b_1,b_2,...b_n b1,b2,...bn, c 1 , c 2 , . . . , c n c_1,c_2,...,c_n c1,c2,...,cn。
复制约束
电路中的这些 3n 个数: a 1 , a 2 , . . . , a n a_1,a_2,...,a_n a1,a2,...,an, b 1 , b 2 , . . . b n b_1,b_2,...b_n b1,b2,...bn, c 1 , c 2 , . . . , c n c_1,c_2,...,c_n c1,c2,...,cn,我们发现其实他们还是有一定的关联,因为上一个门的输出可能就构成了下一个门的输入。比如上图就有 c 1 = a 2 c_1=a_2 c1=a2 和 c 2 = a 3 c_2=a_3 c2=a3,这样的关系。那么我们怎么来表示这个相等关系呢?
答案是通过置换,将电路中所有具有相等关系的元素划分为 ( F 1 , . . . , F k ) (F_1,...,F_k) (F1,...,Fk) 个子集:
那么 ( a , b , c ) (a,b,c) (a,b,c) 的相等关系就将其表示为 :
那就将整个电路的相等关系给固定住了。这里还要进行一下转换,将:
- 下标 ( 1 − N ) → ( S 1 − S N ) (1-N) \rightarrow (S_1-S_N) (1−N)→(S1−SN), ( S 1 − S N ) (S_1-S_N) (S1−SN) 为 F p F_p Fp 中取的随机数;
- 元素 ( a , b , c ) → ( U 1 − U N ) (a,b,c) \rightarrow (U_1 - U_N) (a,b,c)→(U1−UN) , ( U 1 − U N ) (U_1 - U_N) (U1−UN) 为 ( S 1 − S N ) (S_1-S_N) (S1−SN) 对应的具体的值。
一个具体的例子
比如:
( U 1 − U n ) (U_1-U_n) (U1−Un) 取值为: ( U 1 − U n ) : { 2 , 3 , 2 , 4 , 1 } (U_1-U_n) :\{2,3,2,4,1\} (U1−Un):{2,3,2,4,1};
对应的下标(编号)为: ( S 1 − S n ) : { S 1 , S 2 , S 3 , S 4 , S 5 } (S_1-S_n):\{S_1,S_2,S_3,S_4,S_5\} (S1−Sn):{S1,S2,S3,S4,S5}。
置换过程为: { U 1 + S 1 , U 2 + S 2 , . . . , U n + S n } → { U 1 + S 1 σ , U 2 + S 2 σ , . . . , U n + S n σ } \{U_1+S_1,U_2+S_2,...,U_n+S_n\} \rightarrow \{U_1+S_1^{\sigma},U_2+S_2^{\sigma},...,U_n+S_n^{\sigma}\} {U1+S1,U2+S2,...,Un+Sn}→{U1+S1σ,U2+S2σ,...,Un+Snσ}
我们将其代入得到两个集合:
{ 2 + s 1 , 3 + s 2 , 2 + s 3 , 4 + s 4 , 1 + s 5 } \{2+s_1,3+s_2,2+s_3,4+s_4,1+s_5\} {2+s1,3+s2,2+s3,4+s4,1+s5}, { 2 + s 3 , 3 + s 2 , 2 + s 1 , 4 + s 4 , 1 + s 5 } \{2+s_3,3+s_2,2+s_1,4+s_4,1+s_5\} {2+s3,3+s2,2+s1,4+s4,1+s5}
即可说明,如果置换的两个元素的值相等,那么这两个集合也是相等的(集合不论顺序)。
我们将这两个集合(抽象化):
{
x
1
−
x
n
}
=
{
y
1
−
y
n
}
⇔
∏
x
i
=
∏
y
i
⇔
∏
(
x
+
x
i
)
=
∏
(
y
+
y
i
)
\{x_1-x_n\} = \{y_1-y_n\} \Leftrightarrow \prod x_i = \prod y_i \Leftrightarrow \prod (x+x_i) =\prod(y+y_i)
{x1−xn}={y1−yn}⇔∏xi=∏yi⇔∏(x+xi)=∏(y+yi)
如果两个多项式相等,那么对应的解,构成的集合也相等(充要条件)。
加入随机数 β \beta β:
σ ( U 1 − U n ) = ( U 1 − U n ) σ ( S 1 − S n ) = ( s 1 σ − s n σ ) { U 1 + β S 1 , U 2 + β S 2 , . . . , U n + β S n } = { U 1 + β S 1 σ , U 2 + β S 2 σ , . . . , U n + β S n σ } \begin{matrix} \sigma(U_1-U_n)=(U_1-U_n) \\ \\ \sigma(S_1-S_n)=(s_1^\sigma-s_n^\sigma) \\ \\ \{U_1+\beta S_1,U_2+\beta S_2,...,U_n+\beta S_n\}=\{U_1+\beta S_1^\sigma,U_2+\beta S_2^\sigma,...,U_n+\beta S_n^\sigma\} \end{matrix} σ(U1−Un)=(U1−Un)σ(S1−Sn)=(s1σ−snσ){U1+βS1,U2+βS2,...,Un+βSn}={U1+βS1σ,U2+βS2σ,...,Un+βSnσ}
将其变为多项式:
∏
(
U
i
+
β
S
i
+
x
)
=
∏
(
U
i
+
β
S
i
σ
+
x
)
\prod (U_i+\beta S_i+x)=\prod(U_i+\beta S_i^\sigma +x)
∏(Ui+βSi+x)=∏(Ui+βSiσ+x)
加入随机常量
γ
\gamma
γ:
∏
(
U
i
+
β
S
i
+
γ
)
=
∏
(
U
i
+
β
S
i
σ
+
γ
)
\prod(U_i+\beta S_i+\gamma)=\prod (U_i+\beta S_i^\sigma +\gamma)
∏(Ui+βSi+γ)=∏(Ui+βSiσ+γ)
移项:
∏
(
U
i
+
β
S
i
+
γ
)
∏
(
U
i
+
β
S
i
σ
+
γ
)
=
1
\frac{\prod(U_i+\beta S_i+\gamma)} {\prod (U_i+\beta S_i^\sigma +\gamma)} =1
∏(Ui+βSiσ+γ)∏(Ui+βSi+γ)=1
更为抽象:
P
i
=
∏
i
i
<
n
γ
+
(
U
i
+
β
S
i
)
γ
+
(
U
i
+
β
S
i
σ
)
=
1
P_i={\textstyle \prod_{i}^{i<n} \frac{\gamma+(U_i+\beta S_i)} { \gamma+(U_i+\beta S_i^\sigma )} =1}
Pi=∏ii<nγ+(Ui+βSiσ)γ+(Ui+βSi)=1
是我还是不想使用这种连乘的形式,由 i i i 来控制;我们还是回归最初的问题将其转化为多项式。我们引入一个中间向量 Z ⃗ \vec{Z} Z,连乘规则为:
{ Z i = 1 , i = 0 Z i + 1 = Z i ∗ P i , i ≠ 0 \begin{cases} Z_i=1, i=0 \\Z_{i+1}=Z_i*P_i,i\ne0 \end{cases} {Zi=1,i=0Zi+1=Zi∗Pi,i=0
那么如果
x
x
x 取值为
{
ω
1
,
ω
2
,
.
.
.
,
ω
N
=
1
}
\{\omega^1,\omega^2,...,\omega^{N}=1\}
{ω1,ω2,...,ωN=1},那么就可以转化为以下多项式:
Z
(
ω
x
)
=
P
(
x
)
Z
(
x
)
Z(\omega x)=P(x)Z(x)
Z(ωx)=P(x)Z(x)
多项式承诺
那么此时我们之前的工作是将电路的门约束和复制约束都转化成为了多项式问题,根据 KZG 多项式承诺方案,那么说明这两个方程成立,就说明了 Prover 的确是拥有电路的秘密输入。
{ q L ( x ) a ( x ) + q R ( x ) b ( x ) + q O ( x ) c ( x ) + q M ( x ) a ( x ) b ( x ) + q C ( x ) = t g ( x ) + Z H ( x ) Z ( ω x ) − P ( x ) Z ( x ) = t c ( x ) Z H ( x ) \begin{cases} q_{L}(x) a(x) + q_{R}(x) b(x) + q_{O}(x) c(x) + q_{M}(x) a(x)b(x) + q_{C}(x)=t_g(x)+Z_H(x) \\ \\ Z(\omega x)-P(x)Z(x)=t_c(x)Z_H(x) \end{cases} ⎩ ⎨ ⎧qL(x)a(x)+qR(x)b(x)+qO(x)c(x)+qM(x)a(x)b(x)+qC(x)=tg(x)+ZH(x)Z(ωx)−P(x)Z(x)=tc(x)ZH(x)
其实我们把 P ( x ) P(x) P(x) 展开为
P ( x ) = ( a ( x ) + β S ( x ) + γ ) ⋅ ( b ( x ) + β S ( x ) + γ ) ⋅ ( c ( x ) + β S ( x ) + γ ) ( a ( x ) + β S ( x ) σ + γ ) ⋅ ( b ( x ) + β S ( x ) σ + γ ) ⋅ ( c ( x ) + β S ( x ) σ + γ ) P(x)=\frac{(a(x)+\beta S(x)+\gamma)\cdot(b(x)+\beta S(x)+\gamma)\cdot(c(x)+\beta S(x)+\gamma)}{(a(x)+\beta S(x)^{\sigma}+\gamma)\cdot(b(x)+\beta S(x)^{\sigma}+\gamma)\cdot(c(x)+\beta S(x)^{\sigma}+\gamma)} P(x)=(a(x)+βS(x)σ+γ)⋅(b(x)+βS(x)σ+γ)⋅(c(x)+βS(x)σ+γ)(a(x)+βS(x)+γ)⋅(b(x)+βS(x)+γ)⋅(c(x)+βS(x)+γ)
那么 Prover 有以下的几个秘密多项式: a ( x ) , b ( x ) , c ( x ) , Z ( x ) , t g ( x ) , t c ( x ) a(x), b(x), c(x),Z(x),t_g(x),t_c(x) a(x),b(x),c(x),Z(x),tg(x),tc(x),这6个多项式只有 Prover 自己知道,Prover 只需要根据公共参数计算相应多项式的承诺 c o m ( a ) , c o m ( b ) , c o m ( c ) , c o m ( z ) , c o m ( t g ) , c o m ( t c ) com(a),com(b),com(c),com(z),com(t_g),com(t_c) com(a),com(b),com(c),com(z),com(tg),com(tc) 发送给 Verifier ,然后 Verfier 验证承诺就确信了 Prover 是的确有这个电路的秘密输入。