符号说明
- F :有限域
- ∘ \circ ∘ : 内积
1. R1CS
RlCS定义:
(
A
,
B
,
C
,
m
,
n
,
l
)
(A,B,C,m,n,l)
(A,B,C,m,n,l),其中
m
、
n
、
l
m、n、l
m、n、l为正整数,且
m
>
l
m>l
m>l,
A
,
B
,
C
∈
F
m
×
m
A,B,C \in F^{m \times m}
A,B,C∈Fm×m 且至多有n个non-zero entries,给定witness
W
∈
F
m
−
l
−
1
W \in F^{m-l-1}
W∈Fm−l−1 , R1CS满足
(
A
⋅
Z
)
∘
(
B
⋅
Z
)
=
C
⋅
Z
(A \cdot Z) \circ (B \cdot Z) = C \cdot Z
(A⋅Z)∘(B⋅Z)=C⋅Z
其中
Z
=
(
W
,
x
,
1
)
,
x
∈
F
l
Z = (W,x,1), x\in F^l
Z=(W,x,1),x∈Fl 包含公开输入和输出,也称为instance。
给定一个R1CS矩阵 ( A , B , C ) (A,B,C) (A,B,C),两个instance-witness对: ( x 1 , W 1 ) (x_1,W_1) (x1,W1)和 ( x 2 , W 2 ) (x_2,W_2) (x2,W2),按照传统方法,我们需要分别对 ( x 1 , W 1 ) (x_1,W_1) (x1,W1)和 ( x 2 , W 2 ) (x_2,W_2) (x2,W2)进行验证,即我们需要进行两次验证,才能确保 ( x 1 , W 1 ) (x_1,W_1) (x1,W1)和 ( x 2 , W 2 ) (x_2,W_2) (x2,W2)都是正确的instance-witness对。
问题🤔️:能不能将上述两个instance-witness对合并构造一种新的instance-witness对: ( x , W ) (x,W) (x,W),通过对 ( x , W ) (x,W) (x,W)的一次验证,即可证明 ( x 1 , W 1 ) (x_1,W_1) (x1,W1)和 ( x 2 , W 2 ) (x_2,W_2) (x2,W2)都是满足R1CS约束的(当然验证 ( x , W ) (x,W) (x,W)的开销比比验证 ( x 1 , W 1 ) (x_1,W_1) (x1,W1)和 ( x 2 , W 2 ) (x_2,W_2) (x2,W2)的开销要小)?
(上述方案也称为folding scheme,可以用来构造Recursive Zero-Knowledge)
很不幸的是,R1CS本身是不支持folding scheme,R1CS的变种,即后面介绍的relexed R1CS是满足要求的
首次尝试:R1CS是一个代数系统,最先想到的是线性组合。假设prover首先发送
W
1
W_1
W1和
W
2
W_2
W2,verifier随机选择
r
∈
F
r \in F
r∈F作为回复,这时prover和verifier进行如下计算:
x
=
x
1
+
r
⋅
x
2
W
=
W
1
+
r
⋅
W
2
x = x_1 + r \cdot x_2 \\ W = W_1 + r \cdot W_2
x=x1+r⋅x2W=W1+r⋅W2
然后,设置新的instance-witness对为:
(
x
,
W
)
(x,W)
(x,W)
这时对于
Z
1
=
(
W
1
,
x
1
,
1
)
Z_1 = (W_1,x_1,1)
Z1=(W1,x1,1)、
Z
2
=
(
W
2
,
x
2
,
1
)
Z_2 = (W_2,x_2,1)
Z2=(W2,x2,1)、
Z
=
(
W
,
x
,
1
)
Z = (W,x,1)
Z=(W,x,1)有:
A
Z
∘
B
Z
=
A
(
Z
1
+
r
⋅
Z
2
)
∘
B
(
Z
1
+
r
⋅
Z
2
)
=
A
Z
1
∘
B
Z
1
+
r
(
A
Z
1
∘
B
Z
2
+
A
Z
2
∘
B
Z
1
)
+
r
2
(
A
Z
2
∘
B
Z
2
)
≠
C
Z
\begin{align} A Z \circ BZ & = A(Z_1 + r \cdot Z_2) \circ B(Z_1 + r \cdot Z_2)\\ & = AZ_1 \circ BZ_1 + r(AZ_1 \circ BZ_2+AZ_2 \circ BZ_1) + r^2(AZ_2 \circ BZ_2) \\ & \neq CZ \end{align}
AZ∘BZ=A(Z1+r⋅Z2)∘B(Z1+r⋅Z2)=AZ1∘BZ1+r(AZ1∘BZ2+AZ2∘BZ1)+r2(AZ2∘BZ2)=CZ
首次尝试失败,很显然 A Z ∘ B Z ≠ C Z A Z \circ BZ \neq CZ AZ∘BZ=CZ,这里主要存在三个问题:
-
多了一个额外的交叉项: r ( A Z 1 ∘ B Z 2 + A Z 2 ∘ B Z 1 ) r(AZ_1 \circ BZ_2+AZ_2 \circ BZ_1) r(AZ1∘BZ2+AZ2∘BZ1)
-
剔除交叉项后还是不等于 C Z CZ CZ:
A Z 1 ∘ B Z 1 + r 2 ( A Z 2 ∘ B Z 2 ) = C Z 1 + r 2 C Z 2 ≠ C Z 1 + r C Z 2 = C Z AZ_1 \circ BZ_1 +r^2(AZ_2 \circ BZ_2) = CZ_1 + r^2CZ_2 \neq CZ_1+rCZ_2 =CZ AZ1∘BZ1+r2(AZ2∘BZ2)=CZ1+r2CZ2=CZ1+rCZ2=CZ
-
甚至不满足 Z = Z 1 + r ⋅ Z 2 Z=Z_1 + r \cdot Z_2 Z=Z1+r⋅Z2 ,因为 Z 1 + r ⋅ Z 2 = ( W , x , 1 + r ⋅ 1 ) Z_1 + r \cdot Z_2 = (W,x,1+r\cdot 1) Z1+r⋅Z2=(W,x,1+r⋅1)
第二次尝试:
为了解决问题1,通过引入了一个error vector
E
∈
F
m
E \in F^m
E∈Fm 用来抵消交叉项的影响
其次又引入了一个scalar u,用来抵消问题2和问题3中多余的
r
r
r。
我们将这种变种的R1CS称为relaxed R1CS