前言
Bulletproofs,又一个有意思的零知识证明算法,相信读者已经很熟悉它了。和zk-snark相比,它不需要可信设置;和zk-stark算法相比,它具有较小的proof size。根据论文,它有两个方面的应用:1. 用于range proof;2. 用于一般算术电路的零知识证明。下面,让我们先看一下Bulletproofs是如何高效的实现第一点。
Range proof
1. 预备知识
aL:表示向量{a1,a2……an}
2n:表示向量{20,21…2n-1}
:表示向量内积 ∑ ai*bi,结果是一个值
a o b:向量对应位相乘,{a1*b1……an*bn},结果是一个向量
2. 证明
Alice想要证明 v ⸦ [0, 2n-1]
=>则,需要证明一个relation得成立,如下所示:
{(g、h ⸦ G,V,n;v,r ⸦ Zp):V = grhv ^ v ⸦ [0, 2n-1] }
public-x witness-w relation-R
即,对于公开信息x,Alice有隐私信息w,使得关系R成立。
令 aL为金额v的在范围[0, 2n-1]内的二进制形式,则