Pedersen Commitment

Com(v)=vB+˜v˜B,其中B,˜B为椭圆曲线上的两个基点,v是需要承诺的秘密数,˜v为(随机)盲化因子。

具备同态加法特性,即:

Com(v1)+Com(v2)=v1B+~v1˜B+v2B+~v2˜B=(v1+v2)B+(~v1+~v2)˜B=Com(v1+v2)

同态保证了UTXO交易中的Input/Output总和均是Pedersen Commitment

(Pedersen Vector Commitment)

B=(B1,,Bn)Gn

Com(v=(v1,,vn);˜v)=v,B+˜v˜B

Bullet Proofs

Notation

小写字母a,b,c表示Zp下的标量,大写字母G,H,P,Q表示群G下的元素。向量被粗体表示,例如a,G

用到的Pedersen Vector Commitment定义为:

Com(aL,aR)=aL,G+aR,H+˜a˜B

其中G,HGn

Inner-Product Range Proof

并将原论文中的乘法群以加法群代替,如下:

{(B,˜BG,V,n ; v,˜vZp):V=vB+˜v˜B  v[0,2n1]}

aL=(a1,,an){0,1}n表示由v各个比特位组成的向量,即aL,2n=v ← ①

还需要保证aL仅包含{0,1},因此令aR=aL1n ← ②,有aLaR=0n ← ③

做以下整理:

aL,2n=v aL1aR,yn=0  aL,aRyn=0

可进一步,令verifier选取随机zZp,将上述转为一个约束:

z2v=z2aL,2n+zaL1aR,yn+aL,aRyn

将其转化为前面论文中提到的”a single inner-product constraint”(并令aL只出现在左侧,aR只出现在右侧,不含witness的项合并即为δ):

将此时内积的左侧记作unblinded l(X),右侧记作unblinded r(X)

下面是盲化后新定义的多项式l(X),r(X),以及二次多项式t(X)

Prover需要证明t0=z2v+δ(y,z)l(X),r(X)正确,以及t(X)=l(X),r(X)


P computes:

~t1,~t2Zp

Ti=t1B+~t1˜BG,i={1,2}

PV:T1,T2

V:xZp(Zp{0})

VP:x // a random challenge

P computes:

l=l(x)=aL+sLxz1Znp

r=r(x)=yn(aR+sRx+z1)+z22nZnp

t=t(x)=l,rZp

˜t=z2˜v+~t1x+~t2x2Zp // blinding value for t

˜e=˜a+˜sxZp // ˜a,˜s blind A,S

PV:t,˜t,˜e,l,r


而更在上述(分割线内)步骤之前,还需要先于”VP:challenge value y”,PV:commitment A,S

A=aL,G+aR,H+˜a˜B

S=sL,G+sR,H+˜s˜B

但需要对复合变量ynaR,ynsR作出承诺,且

Com(aL,aR,˜a)=aL,G+aR,H+˜a˜B=aL,G+ynaR,ynH+˜a˜B

因此令H’=ynH,即Hi=yi+1Hi,i=1,,n

Verifier 将原commitment A, S变形为对应H’以及复合变量的commitment


All based on ECDLP

tB+˜t˜B?=z2V+δ(y,z)B+T1x+T2x2 // ① check that t=z2v+δ(y,z)+t1x+t2x2

A+Sxz1,G+zyn+z22n,H’˜e˜B?=l,G+r,H’ // ② check that l(X),r(X) are correct

t?=l,r // ③ check that t(X)=l(X),r(X)


但校验②③:ProverVerifier之间直接传输l,r,导致需要2n个标量的带宽

Logarithmic Range Proof

内积协议一般用于证明以下关系:

{(G,HGn,PG,cZp; a,bZnp): P=aG+bHc=a,b}

等价于证明:

{(G,HGn,u,PG; a,bZnp): P=aG+bH+a,bu}

引入中间变量xZ×p,记n=n/2,对原始的a,b,G,H作以下变换:

a=xa[:n]+x1a[n:]Znpb=x1b[:n]+xb[n:]ZnpG=x1G[:n]+xG[n:]GnH=xH[:n]+x1H[n:]Gn

P=a,G+b,H+a,bu

P=aG+bH+a,bu成立时,上述推导成立,即P=P+x2L+x2R

此时传输的a,b就转为了a,b(带宽/2)

因此我们可以递归压缩P(记作P(0)),得到

P(k)=a(k),G(k)+b(k),H(k)+a(k),b(k)u

P(k)=P(0)+ki=1(x2L(i1)+x2R(i1))

此时Verifier只需验证

P(0)?=a(k),G(k)+b(k),H(k)+a(k),b(k)uki=1(x2L(i1)+x2R(i1))

即可

Proofer需要发送(a(k),b(k))以及k轮的(L,R),消耗带宽从2n降到了2logn+2.

将前文的校验②③改用这种方法,来实现对数级的压缩。

Aggregating Logarithmic Proofs

红框中为mj=1(z1+j),而非z2,是因为下面原有式子中的z2,在m个individual range proofs整合时,采用不同的幂次z3,z4,(仍然成立)

进一步的,定义新的 ˜t=~t1x+~t2x2+mj=1z1+j~vj (其中~vj为对应vj的盲化因子,j=1,,m

δ(y,z)=(zz2)1nm,ynmmj=1zj+21n,2n

前文的校验①改写为:

tB+˜t˜B?=z2zm,V+δ(y,z)B+T1x+T2x2, V=(V1,V2,...,Vm)Gm,zm=(1,z,z2,...,zm1)Zmp

校验②的左侧改写为:

A+Sxz1nm,G+zynm+mj=1z1+j(0(j1)n2n0(mj)n,H'˜e˜B

Non-Interactive Proof through Fiat-Shamir

Fiat-Shamir直观表示可看知乎回答https://zhuanlan.zhihu.com/p/95921725

TODO