Pedersen Commitment
Com(v)=v⋅B+˜v⋅˜B,其中B,˜B为椭圆曲线上的两个基点,v是需要承诺的秘密数,˜v为(随机)盲化因子。
具备同态加法特性,即:
Com(v1)+Com(v2)=v1⋅B+~v1⋅˜B+v2⋅B+~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,H∈Gn
Inner-Product Range Proof
并将原论文中的乘法群以加法群代替,如下:
{(B,˜B∈G,V,n ; v,˜v∈Zp):V=vB+˜v˜B ∧ v∈[0,2n−1]}
令aL=(a1,…,an)∈{0,1}n表示由v各个比特位组成的向量,即⟨aL,2n⟩=v ← ①
还需要保证aL仅包含{0,1},因此令aR=aL−1n ← ②,有aL∘aR=0n ← ③
做以下整理:
⟨aL,2n⟩=v ∧⟨aL−1−aR,yn⟩=0 ∧ ⟨aL,aR∘yn⟩=0可进一步,令verifier选取随机z∈Zp,将上述转为一个约束:
z2⋅v=z2⟨aL,2n⟩+z⟨aL−1−aR,yn⟩+⟨aL,aR∘yn⟩将其转化为前面论文中提到的”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,~t2⟵Zp
Ti=t1B+~t1˜B∈G,i={1,2}
P→V:T1,T2
V:x⟵Z∗p(Zp∖{0})
V→P:x // a random challenge
P computes:
l=l(x)=aL+sL⋅x−z⋅1∈Znp
r=r(x)=yn∘(aR+sR⋅x+z⋅1)+z2⋅2n∈Znp
t=t(x)=⟨l,r⟩∈Zp
˜t=z2⋅˜v+~t1⋅x+~t2⋅x2∈Zp // blinding value for t
˜e=˜a+˜s⋅x∈Zp // ˜a,˜s blind A,S
P→V:t,˜t,˜e,l,r
而更在上述(分割线内)步骤之前,还需要先于”V→P:challenge value y”,P→V:commitment A,S:
A=⟨aL,G⟩+⟨aR,H⟩+˜a˜B
S=⟨sL,G⟩+⟨sR,H⟩+˜s˜B
但需要对复合变量yn∘aR,yn∘sR作出承诺,且
Com(aL,aR,˜a)=⟨aL,G⟩+⟨aR,H⟩+˜a˜B=⟨aL,G⟩+⟨yn∘aR,y−n∘H⟩+˜a˜B
因此令H’=y−n∘H,即H‘i=y−i+1⋅Hi,i=1,…,n
由 Verifier 将原commitment A, S变形为对应H’以及复合变量的commitment
All based on ECDLP
tB+˜t˜B?=z2V+δ(y,z)B+T1⋅x+T2⋅x2 // ① check that t=z2v+δ(y,z)+t1x+t2x2
A+S⋅x−z⟨1,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)⟩
但校验②③:Prover和Verifier之间直接传输l,r,导致需要2n个标量的带宽
Logarithmic Range Proof
内积协议一般用于证明以下关系:
{(G,H∈Gn,P∈G,c∈Zp; a,b∈Znp): P=aG+bH∧c=⟨a,b⟩}等价于证明:
{(G,H∈Gn,u,P∈G; a,b∈Znp): P=aG+bH+⟨a,b⟩u}引入中间变量x∈Z×p,记n′=n/2,对原始的a,b,G,H作以下变换:
a′=xa[:n′]+x−1a[n′:]∈Zn′pb′=x−1b[:n′]+xb[n′:]∈Zn′pG′=x−1G[:n′]+xG[n′:]∈Gn′H′=xH[:n′]+x−1H[n′:]∈Gn′令P′=⟨a′,G′⟩+⟨b′,H′⟩+⟨a′,b′⟩u
当P=aG+bH+⟨a,b⟩u成立时,上述推导成立,即P′=P+x2L+x−2R
此时传输的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(i−1)+x−2R(i−1))
此时Verifier只需验证
P(0)?=⟨a(k),G(k)⟩+⟨b(k),H(k)⟩+⟨a(k),b(k)⟩u−k∑i=1(x2L(i−1)+x−2R(i−1))即可
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=~t1⋅x+~t2⋅x2+∑mj=1z1+j⋅~vj (其中~vj为对应vj的盲化因子,j=1,…,m)
δ(y,z)=(z−z2)⟨1n⋅m,yn⋅m⟩−∑mj=1zj+2⟨1n,2n⟩
前文的校验①改写为:
tB+˜t˜B?=z2⟨zm,V⟩+δ(y,z)B+T1⋅x+T2⋅x2,其中 V=(V1,V2,...,Vm)∈Gm,zm=(1,z,z2,...,zm−1)∈Zmp校验②的左侧改写为:
A+S⋅x−z⟨1n⋅m,G⟩+⟨zyn⋅m+m∑j=1z1+j⋅(0(j−1)n‖2n‖0(m−j)n,H'⟩−˜e˜BNon-Interactive Proof through Fiat-Shamir
Fiat-Shamir直观表示可看知乎回答https://zhuanlan.zhihu.com/p/95921725