本文作者江小白,来自安比技术社区的小伙伴,本系列文章将对 Bulletproof 算法在 Range Proof 和 general arithmetic circuits 上的应用展开介绍。
前言
Bulletproofs,又一个有意思的零知识证明算法,相信读者已经很熟悉它了。和zk-snark相比,它不需要可信设置;和zk-stark算法相比,它具有较小的proof size。根据论文,它有两个方面的应用:1. 用于 range proof;2. 用于一般算术电路的零知识证明。下面,让我们先看一下Bulletproofs是如何高效的实现第一点。
Range Proof 1
aL:表示向量{a1, a2 ……an}
2n:表示向量{20,21…2n-1}
<a, b>:表示向量内积 ∑ ai · bi,结果是一个值
a o b:向量对应位相乘,{a1· b1……an · bn},结果是一个向量
2
Alice想要证明
v ∈ [0, 2n-1]
=>则,需要证明一个relation得成立,如下所示:
public-x witness-w relation-R
即,对于公开信息x,Alice有隐私信息w,使得关系R成立。
令 aL 为金额 v 的在范围 [0, 2n-1] 内的二进制形式,则aL = {a1,a2……an} ∈ {0,1}n,且满足<aL, 2n> = v。因此,证明者需要证明以下几个等式相等:
等式(1)确保了承诺V和金额v的绑定关系,等式(2)确保了v的范围,等式(3)(4)确保了 aL 元素只属于{0,1}。等式(2)/(3)/(4)总共包含了2n+1个约束,其中公式(2)1个,公式(3)(4)各n个。接下来,为了效率,我们需要把2n+1个约束转换成1个约束。
3
=>预备:从Zp中任意选择一个数y,则b = 0n是等式<b, yn> = 0成立的充分条件;因为当b != 0n,等式成立的概率仅有n/p,p是有限域,远大于n。(理解:如果b != 0n ,把等式看作求n阶一次多项式的零点即可)因此,如果有<b, yn> = 0,那么验证者愿意相信b != 0n 。
利用这个理论,我们把等式(2)/(3)/(4)做以下转换:
验证者随机选取一个数y发送给证明者;
证明者要证明:
验证者随机选取一个数z发送给证明者:
证明者利用z对公式(5)(6)(7)进行线性组合,得到如下公式:
4
=> 令
5
6
&&
总结
附录
往期回顾
长按二维码添加微信进群讨论零知识证明
info@secbit.io
安比(SECBIT)实验室
Scan to Follow