BulletProof-内积证明
Inner Product Proof Full Math Defination
首先,我们观察到 Prover 可以简单发送向量
l
(
x
)
\mathbf{l}(x)
l(x) 和
r
(
x
)
\mathbf{r}(x)
r(x),Verifier 可以直接检查向量内积
t
(
x
)
t(x)
t(x) 和承诺 P 是否正确。我们给出内积
t
(
x
)
t(x)
t(x) 和一个承诺 P 的关系:
t
(
x
)
=
<
l
(
x
)
,
r
(
x
)
>
P
=
<
l
(
x
)
,
G
>
+
<
r
(
x
)
,
H
>
\begin{matrix} t(x)=<\mathbf{l}(x),\mathbf{r}(x)> \\ \\ P = <\mathbf{l}(x),\mathbf{G}>+<\mathbf{r}(x),\mathbf{H}> \end{matrix}
t(x)=<l(x),r(x)>P=<l(x),G>+<r(x),H>
为了保证符号的简洁性,我们使用内积参数的常用符号表示:
a
,
b
∈
Z
p
n
G
,
H
∈
G
n
c
=
<
a
,
b
>
P
=
<
a
,
G
>
+
<
b
,
H
>
\begin{matrix} \mathbf{a,b} \in Z_p^n \\ \\ \mathbf{G,H} \in G^n \\ \\ c=<\mathbf{a},\mathbf{b}> \\ \\ P = <\mathbf{a},\mathbf{G}>+<\mathbf{b},\mathbf{H}> \end{matrix}
a,b∈ZpnG,H∈Gnc=<a,b>P=<a,G>+<b,H>
在以上的定义中我们需要有以下关系的知识证明:
我们使用一个不确定的变量
w
∈
Z
p
∗
w \in Z_p^*
w∈Zp∗ 并且使用生成元
B
∈
G
B\in G
B∈G 加上第二个等式,来结合上述的两个论证:
P
=
<
a
,
G
>
+
<
b
,
H
>
+
c
w
B
=
<
a
,
b
>
w
B
P = <\mathbf{a},\mathbf{G}>+<\mathbf{b},\mathbf{H}>+ cwB=<\mathbf{a},\mathbf{b}>wB
P=<a,G>+<b,H>+cwB=<a,b>wB
我们使用以下的符号定义来简化这个结果等式:
k
=
l
g
n
,
P
′
=
P
+
c
w
B
,
Q
=
w
B
k=lg n, P' = P + cwB, Q = wB
k=lgn,P′=P+cwB,Q=wB
这个等式就变成了:
P
′
=
<
a
,
G
>
+
<
b
,
H
>
+
<
a
,
b
>
⋅
Q
P' = <\mathbf{a},\mathbf{G}>+<\mathbf{b},\mathbf{H}>+ <\mathbf{a},\mathbf{b}>\cdot Q
P′=<a,G>+<b,H>+<a,b>⋅Q
让我们加入不确定的变量
u
k
∈
Z
p
∗
u_k \in Z_p^*
uk∈Zp∗ 并且通过变量
u
k
u_k
uk 将左右部分相加来压缩这些向量:
a
(
k
−
1
)
=
a
l
o
⋅
u
k
+
u
k
−
1
⋅
a
h
i
b
(
k
−
1
)
=
b
l
o
⋅
u
k
−
1
+
u
k
⋅
b
h
i
G
(
k
−
1
)
=
G
l
o
⋅
u
k
−
1
+
u
k
⋅
G
h
i
H
(
k
−
1
)
=
H
l
o
⋅
u
k
+
u
k
−
1
⋅
H
h
i
\begin{matrix} \mathbf{a}^{(k-1)} = \mathbf{a}_{lo}\cdot u_k + {u_k}^{-1}\cdot \mathbf{a}_{hi} \\ \\ \mathbf{b}^{(k-1)} = \mathbf{b}_{lo}\cdot {u_k}^{-1}+ u_k \cdot \mathbf{b}_{hi} \\ \\ \mathbf{G}^{(k-1)} = \mathbf{G}_{lo}\cdot {u_k}^{-1}+ u_k \cdot \mathbf{G}_{hi} \\ \\ \mathbf{H}^{(k-1)} = \mathbf{H}_{lo}\cdot u_k + {u_k}^{-1}\cdot \mathbf{H}_{hi} \end{matrix}
a(k−1)=alo⋅uk+uk−1⋅ahib(k−1)=blo⋅uk−1+uk⋅bhiG(k−1)=Glo⋅uk−1+uk⋅GhiH(k−1)=Hlo⋅uk+uk−1⋅Hhi
我们使
P
k
=
P
′
P_k = P'
Pk=P′ 并且使用与
P
k
P_k
Pk 相同的等式来定义
P
k
−
1
P_{k-1}
Pk−1 ,但是使用压缩向量:
P
K
−
1
=
<
a
(
k
−
1
)
,
G
(
k
−
1
)
>
+
<
b
(
k
−
1
)
,
H
(
k
−
1
)
>
+
<
a
(
k
−
1
)
,
b
(
k
−
1
)
>
⋅
Q
P_{K-1} = <\mathbf{a^{(k-1)}},\mathbf{G^{(k-1)}}>+<\mathbf{b^{(k-1)}},\mathbf{H^{(k-1)}}>+ <\mathbf{a^{(k-1)}},\mathbf{b^{(k-1)}}>\cdot Q
PK−1=<a(k−1),G(k−1)>+<b(k−1),H(k−1)>+<a(k−1),b(k−1)>⋅Q
展开这个等式得到:
P
′
=
<
a
l
o
⋅
u
k
+
u
k
−
1
⋅
a
h
i
,
G
l
o
⋅
u
k
−
1
+
u
k
⋅
G
h
i
>
+
<
b
l
o
⋅
u
k
−
1
+
u
k
⋅
b
h
i
,
H
l
o
⋅
u
k
+
u
k
−
1
⋅
H
h
i
>
+
<
a
l
o
⋅
u
k
+
u
k
−
1
⋅
a
h
i
,
b
l
o
⋅
u
k
−
1
+
u
k
⋅
b
h
i
>
⋅
Q
\begin{matrix} P' = <\mathbf{a}_{lo}\cdot u_k + {u_k}^{-1}\cdot \mathbf{a}_{hi},\mathbf{G}_{lo}\cdot {u_k}^{-1}+ u_k \cdot \mathbf{G}_{hi}> + \\ \\ <\mathbf{b}_{lo}\cdot {u_k}^{-1}+ u_k \cdot \mathbf{b}_{hi},\mathbf{H}_{lo}\cdot u_k + {u_k}^{-1}\cdot \mathbf{H}_{hi}>+ \\ \\ <\mathbf{a}_{lo}\cdot u_k + {u_k}^{-1}\cdot \mathbf{a}_{hi},\mathbf{b}_{lo}\cdot {u_k}^{-1}+ u_k \cdot \mathbf{b}_{hi}> \cdot Q \end{matrix}
P′=<alo⋅uk+uk−1⋅ahi,Glo⋅uk−1+uk⋅Ghi>+<blo⋅uk−1+uk⋅bhi,Hlo⋅uk+uk−1⋅Hhi>+<alo⋅uk+uk−1⋅ahi,blo⋅uk−1+uk⋅bhi>⋅Q
拆分成更简单的形式:
P
k
−
1
=
<
a
l
o
,
G
l
o
>
+
<
a
h
i
,
G
h
i
>
+
u
k
2
<
a
l
o
,
G
l
o
>
+
u
k
−
2
<
a
h
i
,
G
l
o
>
+
<
b
l
o
,
H
l
o
>
+
<
b
h
i
,
H
h
i
>
+
u
k
2
<
b
h
i
,
H
l
o
>
+
u
k
−
2
<
b
l
o
,
H
h
i
>
+
(
<
a
l
o
,
b
l
o
>
+
<
a
h
i
,
b
h
i
>
)
⋅
Q
+
(
u
k
2
<
a
l
o
,
b
h
i
>
+
u
k
−
2
<
a
h
i
,
b
l
o
>
)
⋅
Q
\begin{matrix} P_{k-1} = <\mathbf{a}_{lo},\mathbf{G}_{lo}>+<\mathbf{a}_{hi},\mathbf{G}_{hi}> \quad \quad +u_k^2<\mathbf{a}_{lo},\mathbf{G}_{lo}>+u_{k}^{-2}<\mathbf{a}_{hi},\mathbf{G}_{lo}>+ \\ \\ <\mathbf{b}_{lo},\mathbf{H}_{lo}>+<\mathbf{b}_{hi},\mathbf{H}_{hi}> \quad \quad +u_k^2<\mathbf{b}_{hi},\mathbf{H}_{lo}>+u_{k}^{-2}<\mathbf{b}_{lo},\mathbf{H}_{hi}>+ \\ \\ (<\mathbf{a}_{lo},\mathbf{b}_{lo}>+<\mathbf{a}_{hi},\mathbf{b}_{hi}>)\cdot Q \quad +(u_k^2<\mathbf{a}_{lo},\mathbf{b}_{hi}>+u_{k}^{-2}<\mathbf{a}_{hi},\mathbf{b}_{lo}>)\cdot Q \end{matrix}
Pk−1=<alo,Glo>+<ahi,Ghi>+uk2<alo,Glo>+uk−2<ahi,Glo>+<blo,Hlo>+<bhi,Hhi>+uk2<bhi,Hlo>+uk−2<blo,Hhi>+(<alo,blo>+<ahi,bhi>)⋅Q+(uk2<alo,bhi>+uk−2<ahi,blo>)⋅Q
我们发现左边的内容就是
P
k
P_k
Pk 的定义:
P
k
=
<
a
k
,
G
k
>
+
<
b
k
,
H
k
>
+
<
a
k
,
b
k
>
⋅
Q
P_k = <\mathbf{a}^k,\mathbf{G}^k>+<\mathbf{b}^k,\mathbf{H}^k>+ <\mathbf{a}^k,\mathbf{b}^k>\cdot Q
Pk=<ak,Gk>+<bk,Hk>+<ak,bk>⋅Q,右边的式子是
u
k
u_k
uk 和
u
k
−
2
u_{k}^{-2}
uk−2 将
P
k
P_k
Pk 分为左右两部分。我们将被
u
k
u_k
uk 划分的部分为
L
k
L_k
Lk,被
u
k
−
2
u_{k}^{-2}
uk−2 划分的部分为
R
k
R_k
Rk:
P
k
−
1
=
P
k
+
u
k
2
⋅
L
k
+
u
k
−
2
⋅
R
k
L
k
=
<
a
l
o
,
G
h
i
>
+
<
b
h
i
,
H
l
o
>
+
<
a
l
o
,
b
h
i
>
⋅
Q
R
k
=
<
a
h
i
,
G
l
o
>
+
<
b
l
o
,
H
h
>
+
<
a
h
i
,
b
l
o
>
⋅
Q
\begin{matrix} P_{k-1}=P_k+u_k^2\cdot L_k+u_k^{-2}\cdot R_k \\ \\ L_k=<\mathbf{a}_{lo},\mathbf{G}_{hi}>+<\mathbf{b}_{hi},\mathbf{H}_{lo}>+<\mathbf{a}_{lo},\mathbf{b}_{hi}>\cdot Q \\ \\ R_k=<\mathbf{a}_{hi},\mathbf{G}_{lo}>+<\mathbf{b}_{lo},\mathbf{H}_{h}>+<\mathbf{a}_{hi},\mathbf{b}_{lo}>\cdot Q \end{matrix}
Pk−1=Pk+uk2⋅Lk+uk−2⋅RkLk=<alo,Ghi>+<bhi,Hlo>+<alo,bhi>⋅QRk=<ahi,Glo>+<blo,Hh>+<ahi,blo>⋅Q
我们使用
u
k
−
1
u_{k-1}
uk−1 来压缩
P
k
−
1
P_{k-1}
Pk−1 就像
u
k
u_k
uk 的压缩方法一样,不断的重复这样的步骤,直到我们得到向量
P
0
=
a
0
(
0
)
G
0
(
0
)
+
b
0
(
0
)
H
0
(
0
)
+
a
0
(
0
)
b
0
(
0
)
Q
P
0
=
P
k
+
∑
j
=
1
k
(
L
j
u
j
2
+
u
j
−
2
R
j
)
\begin{matrix} P_{0}=a_0^{(0)}G_0^{(0)}+b_0^{(0)}H_0^{(0)}+a_0^{(0)}b_0^{(0)}Q \\ \\ P_{0}=P_k+\sum_{j=1}^{k}(L_ju_j^2+u_j^{-2}R_j) \end{matrix}
P0=a0(0)G0(0)+b0(0)H0(0)+a0(0)b0(0)QP0=Pk+∑j=1k(Ljuj2+uj−2Rj)
重写以上定义:
P
k
=
P
′
=
P
+
c
w
B
P_k = P' = P + cwB
Pk=P′=P+cwB 并且
Q
=
w
B
Q=wB
Q=wB,得到了最终表述结果:
P
+
c
w
B
=
a
0
(
0
)
G
0
(
0
)
+
b
0
(
0
)
H
0
(
0
)
+
a
0
(
0
)
b
0
(
0
)
w
B
−
∑
j
=
1
k
(
L
j
u
j
2
+
u
j
−
2
R
j
)
\begin{matrix} P+cwB = a_0^{(0)}G_0^{(0)}+b_0^{(0)}H_0^{(0)}+a_0^{(0)}b_0^{(0)}wB-\sum_{j=1}^{k}(L_ju_j^2+u_j^{-2}R_j) \end{matrix}
P+cwB=a0(0)G0(0)+b0(0)H0(0)+a0(0)b0(0)wB−∑j=1k(Ljuj2+uj−2Rj)
此时 Prover 可以传送两个标量
a
0
(
0
)
a_0^{(0)}
a0(0) 和
b
0
(
0
)
b_0^{(0)}
b0(0) 给 Verifier,Verifier 通过计算,检验等式两边是否成立。
这个协议压缩产生结果有 lg n 步,Prover 需要发送每一步 j = k , . . . , 1 j = k,...,1 j=k,...,1 产生的 ( L j , R j ) (L_j,R_j) (Lj,Rj) 给 Verifier,到最后一步也是发送一对标量 ( a 0 ( 0 ) , b 0 ( 0 ) ) (a_0^{(0)},b_0^{(0)}) (a0(0),b0(0)) 并检查最终关系的正确性。