Bulletproofs+: Shorter Proofs for Privacy-Enhanced Distributed Ledger学习笔记

1. 引言

Chung等人2020年论文《Bulletproofs+: Shorter Proofs for Privacy-Enhanced Distributed Ledger》,暂无收录信息。

代码实现参见:

  • https://github.com/ZenGo-X/bulletproofs

要点:
1)实现了zero-knowledge inner product proof,proof size为 2 ⌈ log ⁡ 2 ( n ) ⌉ + 2 2\left \lceil\log_2(n) \right \rceil +2 2log2(n)+2 个elements in G \mathbb{G} G 3 3 3个elements in Z p \mathbb{Z}_p Zp。Bulletproofs中的non-zero-knowledge inner product proof size为 2 ⌈ log ⁡ 2 ( n ) ⌉ 2\left \lceil\log_2(n) \right \rceil 2log2(n) 个elements in G \mathbb{G} G 2 2 2个elements in Z p \mathbb{Z}_p Zp
2)Bulletproofs+ 构建的range proof size为 2 log ⁡ 2 n + 3 2\log_2n+3 2log2n+3个elements in G \mathbb{G} G 3 3 3个elements in Z p \mathbb{Z}_p Zp。而Bulletproofs中的range proof size为 2 log ⁡ 2 n + 4 2\log_2n+4 2log2n+4个elements in G \mathbb{G} G 5 5 5个elements in Z p \mathbb{Z}_p Zp。Bulletproofs+比Bulletproofs算法的communication cost节约 1 1 1 G \mathbb{G} G 2 2 2 Z p \mathbb{Z}_p Zp
3)Bulletproofs+ 构建的aggregate range proof size为 2 ⌈ log ⁡ 2 ( n ⋅ m ) ⌉ + 3 2 \left \lceil\log_2(n\cdot m) \right \rceil+3 2log2(nm)+3个elements in G \mathbb{G} G 3 3 3个elements in Z p \mathbb{Z}_p Zp。而Bulletproofs中的range proof size为 2 ⌈ log ⁡ 2 ( n ⋅ m ) ⌉ + 4 2 \left \lceil\log_2(n\cdot m) \right \rceil +4 2log2(nm)+4个elements in G \mathbb{G} G 5 5 5个elements in Z p \mathbb{Z}_p Zp。Bulletproofs+比Bulletproofs算法的communication cost节约 1 1 1 G \mathbb{G} G 2 2 2 Z p \mathbb{Z}_p Zp


本文为range proof和arithmetic circuit提供了无需trusted setup的zero-knowledge argument,proof size为当前最短的。以prove a committed values is positive integer less than 64 bits为例,128-bit security情形下,proof size为576 byte,大约为Bulletproofs的85.7%,而Prover 和 Verifier的计算开销与Bulletproofs相当。

Bulletproofs的精髓在于 logarithmic inner product argument with no zero-knowledge,本文重温了Groth 2009年论文《Linear Algebra with Sub-linear Zero-Knowledge Arguments》,对Bulletproofs进行了改进,形成了Bulletproofs+。Bulletproofs+中的核心元素为:zero-knowledge weighted inner product argument (zk-WIP)。借助zk-WIP,可减小range proof和arithmetic circuit proof的proof size,从而降低transmission cost。zk-WIP具有inner product argument的所有nice features,如支持aggregate range proof以及支持batch verification。

在分布式账本中,非常需要 short NIZK without a trusted setup。
2018年 B¨unz等人 在 2016年Bootle等人《Efficient Zero-Knowledge Arguments for Arithmetic Circuits in the Discrete Log Setting》论文的基础上 提出了《Bulletproofs: Short Proofs for Confidential Transactions and More》,基于Bulletproofs构建的range proof的proof size要远远短于其它需要trusted setup的range proof NIZK。

相关研究成果:

Bulletproofs具有 trustless feature和short proof size,目前有不同的代码实现:

  • https://github.com/bbuenz/BulletProofLib (Java)
  • https://github.com/dalek-cryptography/Bulletproofs (Rust)
  • https://github.com/mimblewimble/rust-secp256k1-zkp (Rust)
  • https://github.com/ing-bank/zkrp/tree/master/bulletproofs (Go)
  • https://github.com/apoelstra/secp256k1-mw/tree/bulletproofs (C)
  • https://github.com/monero-project/monero/tree/master/src/ringct (C++)

本文提出的Bulletproofs+,在Bulletproofs的基础上进行了改进,具有更短的proof size。当前NIZK without trusted setup中,Bulletproofs+实现的proof的size最短。
Bulletproofs+和Bulletproofs在不同bit range proof下的proof size对比如下图所示:( × 0.8 ∼ 0.857 \times 0.8\sim 0.857 ×0.80.857
在这里插入图片描述
Bulletproofs中的关键元素是inner product argument without zero-knowledge。
而2009年Groth论文《Linear Algebra with Sub-linear Zero-Knowledge Arguments》和Bulletproofs+ 的主要元素是 zero-knowledge weighted inner product argument (zk-WIP),可用于减少range proof和arithmetic circuit proof的proof size。

2009年Groth论文《Linear Algebra with Sub-linear Zero-Knowledge Arguments》中,关注bilinear map有2种:(参见博客 Linear Algebra with Sub-linear Zero-Knowledge Arguments学习笔记 第3节内容。)

  • 标准的dot product of vectors (标准的inner product)为: x ⃗ ∗ y ⃗ = x ⃗ y ⃗ T \vec{x}*\vec{y}=\vec{x}\vec{y}^T x y =x y T
  • Weighted inner product (WIP) 为: x ⃗ ∗ y ⃗ = x ⃗ ( y ⃗ ∘ t ⃗ ) T \vec{x}*\vec{y}=\vec{x}(\vec{y}\circ\vec{t})^T x y =x (y t )T,其中 t ⃗ ∈ Z p n \vec{t}\in\mathbb{Z}_p^n t Zpn为由Verifier选择的public vector。

本文采用不同的符号 ⨀ c \bigodot_c c来表示Weighted inner product (WIP):(For a constant vector c ⃗ ∈ Z p n \vec{c}\in\mathbb{Z}_p^n c Zpn
⨀ c : Z p n × Z p n → Z p \bigodot_c: \mathbb{Z}_p^n\times\mathbb{Z}_p^n\rightarrow \mathbb{Z}_p c:Zpn×ZpnZp
( a ⃗ , b ⃗ ) → < a ⃗ , < c ⃗ ∘ b ⃗ > > (\vec{a},\vec{b})\rightarrow <\vec{a},<\vec{c}\circ\vec{b}>> (a ,b )<a ,<c b >>
其中 < , > <,> <,>表示标准的inner product, ∘ \circ 表示component-wise product (又称为Hadamard product)。

WIP (weighted inner product) argument 的一个核心作用是可用于batch several equations so that the communication overhead is reduced。如,Hadamard product a ⃗ ∘ b ⃗ = c ⃗ ∈ Z p n \vec{a}\circ\vec{b}=\vec{c}\in\mathbb{Z}_p^n a b =c Zpn 为a set of n n n个方程式,通过引入随机数 y y y,可合成为一个方程式:
< a ⃗ , ( y , y 2 , ⋯   , y n ) ∘ b ⃗ > = < c ⃗ , ( y , y 2 , ⋯   , y n ) > ∈ Z p n <\vec{a},(y,y^2,\cdots,y^n)\circ \vec{b}>=<\vec{c},(y,y^2,\cdots,y^n)>\in\mathbb{Z}_p^n <a ,(y,y2,,yn)b >=<c ,(y,y2,,yn)>Zpn …… (1)

为了证明 a ⃗ ∘ b ⃗ = c ⃗ ∈ Z p n \vec{a}\circ\vec{b}=\vec{c}\in\mathbb{Z}_p^n a b =c Zpn成立,可转换为证明上述方程式(1)成立。方程式(1)的左右两侧可看成是对应coefficient vector ( y , y 2 , ⋯   , y n ) (y,y^2,\cdots,y^n) (y,y2,,yn) 的WIP。此时需要一个高效的WIP argument算法。

目前来看,当WIP的两个input vectors都是hidden时,目前暂无concrete construction for logarithmic WIP proof protocol with full zero-knowledge。

Bootle 2016和B¨unz 2018 中可实现logarithmic inner product argument的核心是利用了inner product的bilinearity。
如,假设 n = 2 n ^ n=2\hat{n} n=2n^为偶数, a ⃗ = ( a ⃗ 1 , a ⃗ 2 ) , b ⃗ = ( b ⃗ 1 , b ⃗ 2 ) ∈ Z p n ^ × Z p n ^ \vec{a}=(\vec{a}_1,\vec{a}_2),\vec{b}=(\vec{b}_1,\vec{b}_2)\in\mathbb{Z}_p^{\hat{n}}\times\mathbb{Z}_p^{\hat{n}} a =(a 1,a 2),b =(b 1,b 2)Zpn^×Zpn^,则有:
< a ⃗ , b ⃗ > = < a ⃗ 1 , b ⃗ 1 > + < a ⃗ 2 , b ⃗ 2 > <\vec{a},\vec{b}>=<\vec{a}_1,\vec{b}_1>+<\vec{a}_2,\vec{b}_2> <a ,b >=<a 1,b 1>+<a 2,b 2> …… (2)
即inner product 可表示为2个half-length inner products之和。

WIP也是a bilinear map,具有类似的属性,当 c ⃗ = ( y , y 2 , ⋯   , y n ) Z p n \vec{c}=(y,y^2,\cdots,y^n)\mathbb{Z}_p^n c =(y,y2,,yn)Zpn为Vandermonde vector时,有:
a ⃗ ⨀ ( y , ⋯   , y n ) b ⃗ = a ⃗ 1 ⨀ ( y , ⋯   , y n ^ ) b ⃗ 1 + ( y n ^ a 2 ⃗ ) ⨀ ( y , ⋯   , y n ^ ) b ⃗ 2 \vec{a}\bigodot_{(y,\cdots,y^n)}\vec{b}=\vec{a}_1\bigodot_{(y,\cdots,y^{\hat{n}})}\vec{b}_1+(y^{\hat{n}}\vec{a_2})\bigodot_{(y,\cdots,y^{\hat{n}})}\vec{b}_2 a (y,,yn)b =a 1(y,,yn^)b 1+(yn^a2 )(y,,yn^)b 2 …… (3)

引入random challenge e e e 有:
( e a ⃗ 1 + e − 1 y n ^ a 2 ⃗ ) ⨀ ( y , ⋯   , y n ^ ) ( e b ⃗ 2 + e − 1 b ⃗ 1 ) = e 2 a ⃗ 1 ⨀ ( y , ⋯   , y n ^ ) b ⃗ 2 + a ⃗ ⨀ ( y , ⋯   , y n ) b ⃗ + e − 2 ( y n ^ a 2 ⃗ ) ⨀ ( y , ⋯   , y n ^ ) b ⃗ 1 (e\vec{a}_1+e^{-1} y^{\hat{n}}\vec{a_2})\bigodot_{(y,\cdots,y^{\hat{n}})}(e\vec{b}_2+e^{-1}\vec{b}_1)=e^2\vec{a}_1\bigodot_{(y,\cdots,y^{\hat{n}})}\vec{b}_2+\vec{a}\bigodot_{(y,\cdots,y^n)}\vec{b}+e^{-2}( y^{\hat{n}}\vec{a_2})\bigodot_{(y,\cdots,y^{\hat{n}})}\vec{b}_1 (ea 1+e1yn^a2 )(y,,yn^)(eb 2+e1b 1)=e2a 1(y,,yn^)b 2+a (y,,yn)b +e2(yn^a2 )(y,,yn^)b 1 …… (4)
即:
c ′ = a ⃗ ′ ⨀ ( y , ⋯   , y n ^ ) b ⃗ ′ = e 2 c L + c + e − 2 c R c'=\vec{a}'\bigodot_{(y,\cdots,y^{\hat{n}})}\vec{b}'=e^2c_L+c+e^{-2}c_R c=a (y,,yn^)b =e2cL+c+e2cR,其中 c = a ⃗ ⨀ ( y , ⋯   , y n ) b ⃗ c=\vec{a}\bigodot_{(y,\cdots,y^n)}\vec{b} c=a (y,,yn)b c L = a ⃗ 1 ⨀ ( y , ⋯   , y n ^ ) b ⃗ 2 ∈ Z p c_L=\vec{a}_1\bigodot_{(y,\cdots,y^{\hat{n}})}\vec{b}_2\in\mathbb{Z}_p cL=a 1(y,,yn^)b 2Zp c R = ( y n ^ a 2 ⃗ ) ⨀ ( y , ⋯   , y n ^ ) b ⃗ 1 ∈ Z p c_R=( y^{\hat{n}}\vec{a_2})\bigodot_{(y,\cdots,y^{\hat{n}})}\vec{b}_1\in\mathbb{Z}_p cR=(yn^a2 )(y,,yn^)b 1Zp a ⃗ ′ = ( e a ⃗ 1 + e − 1 y n ^ a 2 ⃗ ) ∈ Z p n ^ \vec{a}'=(e\vec{a}_1+e^{-1} y^{\hat{n}}\vec{a_2})\in\mathbb{Z}_p^{\hat{n}} a =(ea 1+e1yn^a2 )Zpn^ b ⃗ ′ = ( e b ⃗ 2 + e − 1 b ⃗ 1 ) ∈ Z p n ^ \vec{b}'=(e\vec{b}_2+e^{-1}\vec{b}_1) \in\mathbb{Z}_p^{\hat{n}} b =(eb 2+e1b 1)Zpn^

使用 g ⃗ , h ⃗ ∈ G n \vec{g},\vec{h}\in\mathbb{G}^n g ,h Gn a ⃗ , b ⃗ , c = a ⃗ ⨀ ( y , ⋯   , y n ) b ⃗ \vec{a},\vec{b},c={\vec{a}\bigodot_{(y,\cdots,y^n)}\vec{b}} a ,b ,c=a (y,,yn)b 进行commit有:
P = g ⃗ a ⃗ h ⃗ b ⃗ u c P=\vec{g}^{\vec{a}}\vec{h}^{\vec{b}}u^c P=g a h b uc
使用 g ⃗ ′ , h ⃗ ′ ∈ G n ^ \vec{g}',\vec{h}'\in\mathbb{G}^{\hat{n}} g ,h Gn^ c ’ c’ c进行commit,应保持与上述类似的结构:
P ′ = g ⃗ ′ a ⃗ ′ h ⃗ ′ b ⃗ ′ u c ′ = g ⃗ ′ ( e a ⃗ 1 + e − 1 y n ^ a 2 ⃗ ) h ⃗ ′ ( e b ⃗ 2 + e − 1 b ⃗ 1 ) u e 2 c L + c + e − 2 c R P'=\vec{g}'^{\vec{a}'}\vec{h}'^{\vec{b}'}u^{c'}=\vec{g}'^{(e\vec{a}_1+e^{-1} y^{\hat{n}}\vec{a_2})}\vec{h}'^{(e\vec{b}_2+e^{-1}\vec{b}_1)}u^{e^2c_L+c+e^{-2}c_R} P=g a h b uc=g (ea 1+e1yn^a2 )h (eb 2+e1b 1)ue2cL+c+e2cR
在上述 P ’ P’ P的计算公式中,结合commitment的同态属性,可设置:
g ⃗ ′ = g ⃗ 1 e − 1 g ⃗ 2 e y − n ^ ∈ G n ^ \vec{g}'=\vec{g}_1^{e^{-1}}\vec{g}_2^{ey^{-\hat{n}}}\in\mathbb{G}^{\hat{n}} g =g 1e1g 2eyn^Gn^
h ⃗ ′ = h ⃗ 1 e h ⃗ 2 e − 1 ∈ G n ^ \vec{h}'=\vec{h}_1^e\vec{h}_2^{e^{-1}}\in\mathbb{G}^{\hat{n}} h =h 1eh 2e1Gn^
从而有:
P ′ = L e 2 P R e − 2 ∈ G P'=L^{e^2}PR^{e^{-2}}\in\mathbb{G} P=Le2PRe2G,其中 L = g ⃗ 2 − y n ^ a ⃗ 1 h ⃗ 1 b ⃗ 2 u c L ∈ G L=\vec{g}_2^{-y^{\hat{n}}\vec{a}_1}\vec{h}_1^{\vec{b}_2}u^{c_L}\in\mathbb{G} L=g 2yn^a 1h 1b 2ucLG R = g ⃗ 1 y n ^ a ⃗ 2 h ⃗ 2 b ⃗ 1 u c R ∈ G R=\vec{g}_1^{y^{\hat{n}}\vec{a}_2}\vec{h}_2^{\vec{b}_1}u^{c_R}\in\mathbb{G} R=g 1yn^a 2h 2b 1ucRG

2. 基于Bulletproofs 构建的weighted inner product argument (不具有zero-knowledge)

WIP信息可由:

  • public info: y , c ∈ Z p , A , B ∈ G , g ⃗ , h ⃗ ∈ G n y,c\in\mathbb{Z}_p, A,B\in\mathbb{G},\vec{g},\vec{h}\in\mathbb{G}^n y,cZp,A,BG,g ,h Gn
  • private info: a ⃗ , b ⃗ ∈ Z p n \vec{a},\vec{b}\in\mathbb{Z}_p^n a ,b Zpn
  • relation: A = g ⃗ a ⃗ ∧ B = h ⃗ b ⃗ ∧ a ⃗ ⨀ ( y , ⋯   , y n ) b ⃗ = c A=\vec{g}^{\vec{a}} \wedge B=\vec{h}^{\vec{b}} \wedge \vec{a}\bigodot_{(y,\cdots,y^n)}\vec{b}=c A=g a B=h b a (y,,yn)b =c

进一步等价表示为:

  • public info: y ∈ Z p , u , P ∈ G , g ⃗ , h ⃗ ∈ G n y \in\mathbb{Z}_p, u,P\in\mathbb{G},\vec{g},\vec{h}\in\mathbb{G}^n yZp,u,PG,g ,h Gn
  • private info: a ⃗ , b ⃗ ∈ Z p n \vec{a},\vec{b}\in\mathbb{Z}_p^n a ,b Zpn
  • relation: P = g ⃗ a ⃗ h ⃗ b ⃗ u a ⃗ ⨀ ( y , ⋯   , y n ) b ⃗ P=\vec{g}^{\vec{a}}\vec{h}^{\vec{b}}u^{\vec{a}\bigodot_{(y,\cdots,y^n)}\vec{b}} P=g a h b ua (y,,yn)b

与Bulletproofs中的inner product argument类似,在不考虑zero-knowledge的情况下, 构建logarithmic WIP argument w.r.t. ( y , ⋯   , y n ) ∈ Z p n (y,\cdots,y^n)\in\mathbb{Z}_p^n (y,,yn)Zpn的直观思路为:
– 1. 若 n = 1 n=1 n=1

  • Prover:将 a , b ∈ Z p a,b\in\mathbb{Z}_p a,bZp 发送给Verifier;
  • Verifier:计算 c = a ⋅ b ⋅ y c=a\cdot b\cdot y c=aby,然后验证 P = g a h b u c P=g^ah^bu^c P=gahbuc成立即可。

– 2. 若 n > 1 n>1 n>1:【主要为公式(4)服务。】

  • Prover:
    a) 计算 n ^ = n 2 \hat{n}=\frac{n}{2} n^=2n a ⃗ = ( a ⃗ 1 , a ⃗ 2 ) , b ⃗ = ( b ⃗ 1 , b ⃗ 2 ) , g ⃗ = ( g ⃗ 1 , g ⃗ 2 ) , h ⃗ = ( h ⃗ 1 , h ⃗ 2 ) ∈ Z p n ^ × Z p n ^ \vec{a}=(\vec{a}_1,\vec{a}_2),\vec{b}=(\vec{b}_1,\vec{b}_2), \vec{g}=(\vec{g}_1,\vec{g}_2),\vec{h}=(\vec{h}_1,\vec{h}_2)\in\mathbb{Z}_p^{\hat{n}}\times\mathbb{Z}_p^{\hat{n}} a =(a 1,a 2),b =(b 1,b 2),g =(g 1,g 2),h =(h 1,h 2)Zpn^×Zpn^
    b)计算 c L = a ⃗ 1 ⨀ ( y , ⋯   , y n ^ ) b ⃗ 2 ∈ Z p c_L=\vec{a}_1\bigodot_{(y,\cdots,y^{\hat{n}})}\vec{b}_2\in\mathbb{Z}_p cL=a 1(y,,yn^)b 2Zp c R = ( y n ^ a 2 ⃗ ) ⨀ ( y , ⋯   , y n ^ ) b ⃗ 1 ∈ Z p c_R=( y^{\hat{n}}\vec{a_2})\bigodot_{(y,\cdots,y^{\hat{n}})}\vec{b}_1\in\mathbb{Z}_p cR=(yn^a2 )(y,,yn^)b 1Zp
    c)计算 L = g ⃗ 2 a ⃗ 1 h ⃗ 1 b ⃗ 2 u c L ∈ G L=\vec{g}_2^{\vec{a}_1}\vec{h}_1^{\vec{b}_2}u^{c_L}\in\mathbb{G} L=g 2a 1h 1b 2ucLG R = g ⃗ 1 y n ^ a 2 ⃗ h ⃗ 2 b ⃗ 1 u c R ∈ G R=\vec{g}_1^{ y^{\hat{n}}\vec{a_2}}\vec{h}_2^{\vec{b}_1}u^{c_R}\in\mathbb{G} R=g 1yn^a2 h 2b 1ucRG
    d)Prover将 L , R ∈ G L,R\in\mathbb{G} L,RG发送给Verifier。
  • Verifier:生成随机数 e ∈ Z p ∗ e\in\mathbb{Z}_p^* eZp,将随机数 e ∈ Z p ∗ e\in\mathbb{Z}_p^* eZp发送给Prover。
  • Prover和Verifier:两者都计算:
    g ⃗ ′ = g ⃗ 1 e − 1 g ⃗ 2 e y − n ^ ∈ G n ^ \vec{g}'=\vec{g}_1^{e^{-1}}\vec{g}_2^{ey^{-\hat{n}}}\in\mathbb{G}^{\hat{n}} g =g 1e1g 2eyn^Gn^
    h ⃗ ′ = h ⃗ 1 e h ⃗ 2 e − 1 ∈ G n ^ \vec{h}'=\vec{h}_1^e\vec{h}_2^{e^{-1}}\in\mathbb{G}^{\hat{n}} h =h 1eh 2e1Gn^
    P ′ = L e 2 P R e − 2 ∈ G P'=L^{e^2}PR^{e^{-2}}\in\mathbb{G} P=Le2PRe2G
  • Prover计算:
    a ⃗ ′ = ( e a ⃗ 1 + e − 1 y n ^ a 2 ⃗ ) ∈ Z p n ^ \vec{a}'=(e\vec{a}_1+e^{-1} y^{\hat{n}}\vec{a_2})\in\mathbb{Z}_p^{\hat{n}} a =(ea 1+e1yn^a2 )Zpn^
    b ⃗ ′ = ( e b ⃗ 2 + e − 1 b ⃗ 1 ) ∈ Z p n ^ \vec{b}'=(e\vec{b}_2+e^{-1}\vec{b}_1) \in\mathbb{Z}_p^{\hat{n}} b =(eb 2+e1b 1)Zpn^

– 3. 设置 g ⃗ = g ⃗ ’ , h ⃗ = h ⃗ ’ , u = u , P = P ’ , a ⃗ = a ⃗ ’ , b ⃗ = b ⃗ ’ , n = n ^ \vec{g}=\vec{g}’,\vec{h}=\vec{h}’,u=u,P=P’,\vec{a}=\vec{a}’,\vec{b}=\vec{b}’,n=\hat{n} g =g ,h =h ,u=u,P=P,a =a ,b =b ,n=n^,然后继续调用步骤1.。

3. zero-knowledge weighted inner product argument (具有zero-knowledge)

在本博文第2节 “基于Bulletproofs 构建的weighted inner product argument (不具有zero-knowledge)” 的基础上,Prover引入了随机数 α ∈ Z p \alpha\in\mathbb{Z}_p αZp和commitment key v ∈ G v\in\mathbb{G} vG来对 P P P进行hiding。

zero-knowledge weighted inner product 基本信息为:

  • public info: y ∈ Z p , u , v , P ∈ G , g ⃗ , h ⃗ ∈ G n y \in\mathbb{Z}_p, u,v,P\in\mathbb{G},\vec{g},\vec{h}\in\mathbb{G}^n yZp,u,v,PG,g ,h Gn
  • private info: a ⃗ , b ⃗ ∈ Z p n , α ∈ Z p \vec{a},\vec{b}\in\mathbb{Z}_p^n, \alpha\in\mathbb{Z}_p a ,b Zpn,αZp
  • relation: P = g ⃗ a ⃗ h ⃗ b ⃗ u a ⃗ ⨀ ( y , ⋯   , y n ) b ⃗ v α P=\vec{g}^{\vec{a}}\vec{h}^{\vec{b}}u^{\vec{a}\bigodot_{(y,\cdots,y^n)}\vec{b}}v^{\alpha} P=g a h b ua (y,,yn)b vα

借鉴sigma protocol思想来证明:(可参见博客 基于Sigma protocol实现的零知识证明protocol集锦 2.4节“Protocol 4. Knowledge of the opening of Pedersen commitment”)
注意,巧妙之处在于仅在最后一轮( n = 1 n=1 n=1时)借鉴sigma protocol引入了 A , B ∈ G A,B\in\mathbb{G} A,BG来证明,其它阶段都是Prover自身在每轮中引入随机数 d L , d R ∈ Z p d_L,d_R\in\mathbb{Z}_p dL,dRZp来实现 L , R L,R L,R的hiding。


详细的zk-WIP argument思路为:【总的proof size为 2 log ⁡ 2 ( n ) + 5 2\log_2(n)+5 2log2(n)+5 field or group elements。】
– 1. 若 n = 1 n=1 n=1:【2个group elements和3个field elements】
此时的基本信息为:
public info: g , h , u , v , P ∈ G , P ∈ G , y ∈ Z p g,h,u,v,P\in\mathbb{G},P\in\mathbb{G},y\in\mathbb{Z}_p g,h,u,v,PG,PG,yZp
private info: a , b , α ∈ Z p a,b,\alpha\in\mathbb{Z}_p a,b,αZp
relation: P = g a h b u a ⋅ b ⋅ y v α P=g^ah^bu^{a\cdot b\cdot y}v^{\alpha} P=gahbuabyvα
* Prover:将 a , b ∈ Z p a,b\in\mathbb{Z}_p a,bZp 发送给Verifier;
* Verifier:计算 c = a ⋅ b ⋅ y c=a\cdot b\cdot y c=aby,然后验证 P = g a h b u c P=g^ah^bu^c P=gahbuc成立即可。

借鉴sigma protocol思想,实现可为:

  • Prover:引入私有随机数 r , s , δ , η ∈ Z p r,s,\delta,\eta\in\mathbb{Z}_p r,s,δ,ηZp,其中 η \eta η用于hiding r , s r,s r,s
    计算 A = g r h s u ( r b + s a ) y h δ ∈ G , B = g r s y h η ∈ G A=g^rh^su^{(rb+sa)y}h^{\delta}\in\mathbb{G}, B=g^{rsy}h^{\eta}\in\mathbb{G} A=grhsu(rb+sa)yhδG,B=grsyhηG
    A , B ∈ G A,B\in\mathbb{G} A,BG 发送给Verifier。
  • Verifier:生成随机数 e ∈ Z p ∗ e\in\mathbb{Z}_p^* eZp,将随机数 e ∈ Z p ∗ e\in\mathbb{Z}_p^* eZp发送给Prover。
  • Prover:计算
    r ′ = r + a ⋅ e ∈ Z p r'=r+a\cdot e\in\mathbb{Z}_p r=r+aeZp
    s ′ = s + b ⋅ e ∈ Z p s'=s+b\cdot e\in\mathbb{Z}_p s=s+beZp
    δ ′ = η + δ ⋅ e + α ⋅ e 2 ∈ Z p \delta'=\eta+\delta\cdot e+\alpha\cdot e^2\in\mathbb{Z}_p δ=η+δe+αe2Zp
    r ′ , s ′ , δ ′ ∈ Z p r',s',\delta' \in\mathbb{Z}_p r,s,δZp 发送给Verifier。
  • Verifier:验证 P e 2 A e B = g r ′ ⋅ e h s ′ ⋅ e u r ′ s ′ y v δ ′ P^{e^2}A^eB=g^{r'\cdot e}h^{s'\cdot e}u^{r's'y}v^{\delta'} Pe2AeB=grehseursyvδ是否成立即可。

– 2. 若 n > 1 n>1 n>1:【主要为公式(4)服务。】

  • Prover:
    a) 计算 n ^ = n 2 \hat{n}=\frac{n}{2} n^=2n a ⃗ = ( a ⃗ 1 , a ⃗ 2 ) , b ⃗ = ( b ⃗ 1 , b ⃗ 2 ) , g ⃗ = ( g ⃗ 1 , g ⃗ 2 ) , h ⃗ = ( h ⃗ 1 , h ⃗ 2 ) ∈ Z p n ^ × Z p n ^ \vec{a}=(\vec{a}_1,\vec{a}_2),\vec{b}=(\vec{b}_1,\vec{b}_2), \vec{g}=(\vec{g}_1,\vec{g}_2),\vec{h}=(\vec{h}_1,\vec{h}_2)\in\mathbb{Z}_p^{\hat{n}}\times\mathbb{Z}_p^{\hat{n}} a =(a 1,a 2),b =(b 1,b 2),g =(g 1,g 2),h =(h 1,h 2)Zpn^×Zpn^
    b)计算 c L = a ⃗ 1 ⨀ ( y , ⋯   , y n ^ ) b ⃗ 2 ∈ Z p c_L=\vec{a}_1\bigodot_{(y,\cdots,y^{\hat{n}})}\vec{b}_2\in\mathbb{Z}_p cL=a 1(y,,yn^)b 2Zp c R = ( y n ^ a 2 ⃗ ) ⨀ ( y , ⋯   , y n ^ ) b ⃗ 1 ∈ Z p c_R=(y^{\hat{n}}\vec{a_2})\bigodot_{(y,\cdots,y^{\hat{n}})}\vec{b}_1\in\mathbb{Z}_p cR=(yn^a2 )(y,,yn^)b 1Zp
    c)引入Prover私有随机数 d L , d R ∈ Z p d_L,d_R\in\mathbb{Z}_p dL,dRZp 计算 L = g ⃗ 2 a ⃗ 1 h ⃗ 1 b ⃗ 2 u c L v d L ∈ G L=\vec{g}_2^{\vec{a}_1}\vec{h}_1^{\vec{b}_2}u^{c_L}v^{d_L}\in\mathbb{G} L=g 2a 1h 1b 2ucLvdLG R = g ⃗ 1 y n ^ a 2 ⃗ h ⃗ 2 b ⃗ 1 u c R v d R ∈ G R=\vec{g}_1^{ y^{\hat{n}}\vec{a_2}}\vec{h}_2^{\vec{b}_1}u^{c_R}v^{d_R}\in\mathbb{G} R=g 1yn^a2 h 2b 1ucRvdRG
    d)Prover将 L , R ∈ G L,R\in\mathbb{G} L,RG发送给Verifier。
  • Verifier:生成随机数 e ∈ Z p ∗ e\in\mathbb{Z}_p^* eZp,将随机数 e ∈ Z p ∗ e\in\mathbb{Z}_p^* eZp发送给Prover。
  • Prover和Verifier:两者都计算:
    g ⃗ ′ = g ⃗ 1 e − 1 g ⃗ 2 e y − n ^ ∈ G n ^ \vec{g}'=\vec{g}_1^{e^{-1}}\vec{g}_2^{ey^{-\hat{n}}}\in\mathbb{G}^{\hat{n}} g =g 1e1g 2eyn^Gn^
    h ⃗ ′ = h ⃗ 1 e h ⃗ 2 e − 1 ∈ G n ^ \vec{h}'=\vec{h}_1^e\vec{h}_2^{e^{-1}}\in\mathbb{G}^{\hat{n}} h =h 1eh 2e1Gn^
    P ′ = L e 2 P R e − 2 ∈ G P'=L^{e^2}PR^{e^{-2}}\in\mathbb{G} P=Le2PRe2G
  • Prover计算:
    a ⃗ ′ = ( e a ⃗ 1 + e − 1 y n ^ a 2 ⃗ ) ∈ Z p n ^ \vec{a}'=(e\vec{a}_1+e^{-1} y^{\hat{n}}\vec{a_2})\in\mathbb{Z}_p^{\hat{n}} a =(ea 1+e1yn^a2 )Zpn^
    b ⃗ ′ = ( e b ⃗ 2 + e − 1 b ⃗ 1 ) ∈ Z p n ^ \vec{b}'=(e\vec{b}_2+e^{-1}\vec{b}_1) \in\mathbb{Z}_p^{\hat{n}} b =(eb 2+e1b 1)Zpn^
    α ′ = d L ⋅ e 2 + α + d R ⋅ e − 2 \alpha'=d_L\cdot e^2+\alpha+d_R\cdot e^{-2} α=dLe2+α+dRe2

– 3. 设置 g ⃗ = g ⃗ ′ , h ⃗ = h ⃗ ′ , u = u , P = P ′ , a ⃗ = a ⃗ ′ , b ⃗ = b ⃗ ′ , n = n ^ \vec{g}=\vec{g}',\vec{h}=\vec{h}',u=u,P=P',\vec{a}=\vec{a}',\vec{b}=\vec{b}',n=\hat{n} g =g ,h =h ,u=u,P=P,a =a ,b =b ,n=n^设置 α = α ′ \alpha=\alpha' α=α ,然后继续调用步骤1.。

4. 基于zk-WIP argument构建的range proof

参看博客 Bulletproofs: Short Proofs for Confidential Transactions and More学习笔记 第4.1节 “将range proof转换为inner product between two vectors” 内容,Bulletproofs通过在vector polynomials inner product l ⃗ ( X ) , r ⃗ ( X ) ∈ Z p n [ X ] \vec{l}(X),\vec{r}(X)\in\mathbb{Z}_p^n[X] l (X),r (X)Zpn[X] 中引入随机变量 s ⃗ L , s ⃗ R ∈ Z p n \vec{s}_L,\vec{s}_R\in\mathbb{Z}_p^n s L,s RZpn来实现hiding,从而实现zero knowledge range proof。

range proof的基本信息为:

  • public info: g , h ∈ G , V ∈ G , n g,h\in\mathbb{G},V\in\mathbb{G},n g,hG,VG,n
  • private info: v , γ ∈ Z p v,\gamma\in\mathbb{Z}_p v,γZp
  • relation: V = h γ g v ∧ v ∈ [ 0 , 2 n − 1 ] V=h^{\gamma}g^{v}\wedge v\in[0,2^n-1] V=hγgvv[0,2n1]

将数值 v v v以二进制位表示为 a ⃗ L = ( a 1 , ⋯   , a n ) ∈ { 0 , 1 } n \vec{a}_L=(a_1,\cdots,a_n)\in\{0,1\}^n a L=(a1,,an){0,1}n,则有 < a ⃗ L , 2 ⃗ n > = v <\vec{a}_L,\vec{2}^n>=v <a L,2 n>=v,其中 2 ⃗ n = ( 1 , 2 , 4 , ⋯   , 2 n − 1 ) \vec{2}^n=(1,2,4,\cdots,2^{n-1}) 2 n=(1,2,4,,2n1)。同时也得保证 a ⃗ L \vec{a}_L a L中的每个元素值均只能位0或者1,可表示为:
a ⃗ L − a ⃗ R = 1 ⃗ n ∈ Z p n ∧ a ⃗ L ∘ a ⃗ R = 0 ⃗ n ∈ Z p n ∧ < a ⃗ L , 2 ⃗ n > = v ∈ Z p \vec{a}_L-\vec{a}_R=\vec{1}^n\in\mathbb{Z}_p^n \wedge \vec{a}_L\circ\vec{a}_R=\vec{0}^n\in\mathbb{Z}_p^n \wedge <\vec{a}_L,\vec{2}^n>=v\in\mathbb{Z}_p a La R=1 nZpna La R=0 nZpn<a L,2 n>=vZp

以上对应为 2 n + 1 2n+1 2n+1个方程式,可引入random challenge y , z ∈ Z p y,z\in\mathbb{Z}_p y,zZp,将这 2 n + 1 2n+1 2n+1个方程式batch在一起形成1个weighted inner product equation:

  • Verifier 发送random challenge y ∈ Z p y\in\mathbb{Z}_p yZp y ∈ Z p ∗ y\in\mathbb{Z}_p^* yZp y ⃗ n = ( y , y 2 , ⋯   , y n ) , y ← n = ( y n , y n − 1 , ⋯   , y ) \vec{y}^n=(y,y^2,\cdots,y^n), \overleftarrow{y}^n=(y^n,y^{n-1},\cdots,y) y n=(y,y2,,yn),y n=(yn,yn1,,y),从而有 y ⃗ n ∘ y ← n = y n + 1 ⋅ 1 ⃗ n \vec{y}^n\circ \overleftarrow{y}^n=y^{n+1}\cdot \vec{1}^n y ny n=yn+11 n
    < a ⃗ , b ⃗ > y n + 1 = a ⃗ ⨀ y ⃗ n ( b ⃗ ∘ y ← n ) <\vec{a},\vec{b}>y^{n+1}=\vec{a}\bigodot_{\vec{y}^n}(\vec{b}\circ \overleftarrow{y}^n) <a ,b >yn+1=a y n(b y n)。则待证明的relation变为:
    < a ⃗ L , 2 ⃗ n > = v ⇒ a ⃗ L ⨀ y ⃗ n ( 2 ⃗ n ∘ y ← n ) = y n + 1 v <\vec{a}_L,\vec{2}^n>=v \Rightarrow \vec{a}_L\bigodot_{\vec{y}^n}(\vec{2}^n\circ\overleftarrow{y}^n)= y^{n+1}v <a L,2 n>=va Ly n(2 ny n)=yn+1v
    a ⃗ L − a ⃗ R = 1 ⃗ n ⇒ ( a ⃗ L − a ⃗ R ) ⨀ y ⃗ n 1 ⃗ n = 1 ⃗ n ⨀ y ⃗ 1 ⃗ n = < 1 ⃗ n , y ⃗ n > \vec{a}_L-\vec{a}_R=\vec{1}^n \Rightarrow (\vec{a}_L-\vec{a}_R)\bigodot_{\vec{y}^n}\vec{1}^n=\vec{1}^n\bigodot_{\vec{y}}\vec{1}^n=<\vec{1}^n,\vec{y}^n> a La R=1 n(a La R)y n1 n=1 ny 1 n=<1 n,y n>
    a ⃗ L ∘ a ⃗ R = 0 ⃗ n ⇒ a ⃗ L ⨀ y ⃗ n a ⃗ R = 0 \vec{a}_L\circ\vec{a}_R=\vec{0}^n \Rightarrow \vec{a}_L\bigodot_{\vec{y}^n}\vec{a}_R=0 a La R=0 na Ly na R=0

  • Verifier发送random challenge z ∈ Z p z\in\mathbb{Z}_p zZp,将以上三个relation组合在一起,合并为一个待证明的relation:
    注意,本博文以下内容是博主根据Bulletproofs的实现思路利用 z 2 , z , 1 z^2,z,1 z2,z,1进行linear combination,实际Bulletproofs+论文中,作者是利用 y n + 1 , z , 1 y^{n+1},z,1 yn+1,z,1进行linear combination。详情可参看:博主与论文作者的讨论
    以及 论文作者的博客解释

    z 2 ⋅ a ⃗ L ⨀ y ⃗ n ( 2 ⃗ n ∘ y ← n ) + z ⋅ ( a ⃗ L − a ⃗ R ) ⨀ y ⃗ n 1 ⃗ n + a ⃗ L ⨀ y ⃗ n a ⃗ R = z 2 y n + 1 v + z ⋅ < 1 ⃗ n , y ⃗ n > z^2\cdot\vec{a}_L\bigodot_{\vec{y}^n}(\vec{2}^n\circ\overleftarrow{y}^n) + z\cdot (\vec{a}_L-\vec{a}_R)\bigodot_{\vec{y}^n}\vec{1}^n + \vec{a}_L\bigodot_{\vec{y}^n}\vec{a}_R = z^2y^{n+1}v+ z\cdot <\vec{1}^n,\vec{y}^n> z2a Ly n(2 ny n)+z(a La R)y n1 n+a Ly na R=z2yn+1v+z<1 n,y n>
    将以上等式以weighted inner product表示有:
    ( a ⃗ L − 1 ⃗ n ⋅ z ) ⨀ y ⃗ n ( a ⃗ R + z 2 2 ⃗ n ∘ y ← n + 1 ⃗ n ⋅ z ) = z 2 y n + 1 v + ( z − z 2 ) < 1 ⃗ n , y n ⃗ > − y n + 1 z 3 < 1 ⃗ n , 2 ⃗ n > (\vec{a}_L-\vec{1}^n\cdot z)\bigodot_{\vec{y}^n}(\vec{a}_R +z^2\vec{2}^n\circ\overleftarrow{y}^n + \vec{1}^n\cdot z)=z^2y^{n+1}v+(z-z^2)<\vec{1}^n,\vec{y^n}>-y^{n+1}z^3<\vec{1}^n,\vec{2}^n> (a L1 nz)y n(a R+z22 ny n+1 nz)=z2yn+1v+(zz2)<1 n,yn >yn+1z3<1 n,2 n> …… (7)

利用commitment的同态属性,the commitments to inputs and output of WIP in Eq. (7) can be publicly calculated from public parameters and the commitment sent by the prover at the beginning of our range protocol。
Prover和Verifier都可运行相应的 z k − W I P zk-WIP zkWIP protocol。

range proof的基本信息为:

  • public info: g , h ∈ G , V ∈ G , n g,h\in\mathbb{G},V\in\mathbb{G},n g,hG,VG,n g ⃗ , h ⃗ ∈ G n \vec{g},\vec{h}\in\mathbb{G}^n g ,h Gn
  • private info: v , γ ∈ Z p v,\gamma\in\mathbb{Z}_p v,γZp
  • relation: V = h γ g v ∧ v ∈ [ 0 , 2 n − 1 ] V=h^{\gamma}g^{v}\wedge v\in[0,2^n-1] V=hγgvv[0,2n1]

详细的range proof实现为:

  • Prover:根据 v v v,计算 a ⃗ L ∈ { 0 , 1 } n \vec{a}_L\in\{0,1\}^n a L{0,1}n 使得 < a ⃗ L , 2 ⃗ n > = v <\vec{a}_L,\vec{2}^n>=v <a L,2 n>=v,计算 a ⃗ R = a ⃗ L − 1 ⃗ n ∈ Z p n \vec{a}_R=\vec{a}_L-\vec{1}^n\in\mathbb{Z}_p^n a R=a L1 nZpn 使得 a ⃗ L ∘ a ⃗ R = 0 ⃗ n \vec{a}_L\circ\vec{a}_R=\vec{0}^n a La R=0 n。引入Prover私有随机变量 α ← Z p \alpha\leftarrow\mathbb{Z}_p αZp,对 a ⃗ L \vec{a}_L a L a ⃗ R \vec{a}_R a R进行hiding commit: A = g ⃗ a ⃗ L h ⃗ a ⃗ R h α ∈ G A=\vec{g}^{\vec{a}_L}\vec{h}^{\vec{a}_R}h^{\alpha}\in\mathbb{G} A=g a Lh a RhαG
    A ∈ G A\in\mathbb{G} AG发送给Verifier。

  • Verifier:发送random challenge y , z ∈ Z p y,z\in\mathbb{Z}_p y,zZp发送给Prover。

  • Prover和Verifier:利用commitment的同态属性,都计算对 ( a ⃗ L − 1 ⃗ n ⋅ z ) ⨀ y ⃗ n ( a ⃗ R + z 2 2 ⃗ n ∘ y ← n + 1 ⃗ n ⋅ z ) = z 2 y n + 1 v + ( z − z 2 ) < 1 ⃗ n , y n ⃗ > − y n + 1 z 3 < 1 ⃗ n , 2 ⃗ n > (\vec{a}_L-\vec{1}^n\cdot z)\bigodot_{\vec{y}^n}(\vec{a}_R +z^2\vec{2}^n\circ\overleftarrow{y}^n + \vec{1}^n\cdot z)=z^2y^{n+1}v+(z-z^2)<\vec{1}^n,\vec{y^n}>-y^{n+1}z^3<\vec{1}^n,\vec{2}^n> (a L1 nz)y n(a R+z22 ny n+1 nz)=z2yn+1v+(zz2)<1 n,yn >yn+1z3<1 n,2 n> 进行形如 g ⃗ a ⃗ h ⃗ b ⃗ g a ⃗ ⨀ y ⃗ n \vec{g}^{\vec{a}}\vec{h}^{\vec{b}}g^{\vec{a}\bigodot_{\vec{y}^n}} g a h b ga y n的commitment (参见本博文第2节 “基于Bulletproofs 构建的weighted inner product argument (不具有zero-knowledge) “):
    A ^ = g ⃗ ( a ⃗ L − 1 ⃗ n ⋅ z ) h ⃗ ( a ⃗ R + z 2 2 ⃗ n ∘ y ← n + 1 ⃗ n ⋅ z ) g z 2 y n + 1 v + ( z − z 2 ) < 1 ⃗ n , y n ⃗ > − y n + 1 z 3 < 1 ⃗ n , 2 ⃗ n > \hat{A}=\vec{g}^{(\vec{a}_L-\vec{1}^n\cdot z)}\vec{h}^{(\vec{a}_R +z^2\vec{2}^n\circ\overleftarrow{y}^n + \vec{1}^n\cdot z)}g^{ z^2y^{n+1}v+(z-z^2)<\vec{1}^n,\vec{y^n}>-y^{n+1}z^3<\vec{1}^n,\vec{2}^n>} A^=g (a L1 nz)h (a R+z22 ny n+1 nz)gz2yn+1v+(zz2)<1 n,yn >yn+1z3<1 n,2 n>
    利用commitment同态属性,有:
    A ^ = A ⋅ g ⃗ − z 1 ⃗ n ⋅ h ⃗ z 1 ⃗ n + z 2 2 ⃗ n ∘ y ← n ⋅ V z 2 y n + 1 ⋅ g ( z − z 2 ) < 1 ⃗ n − y ⃗ n > − z 3 y n + 1 < 1 ⃗ n , 2 ⃗ n > \hat{A}=A\cdot\vec{g}^{-z\vec{1}^n}\cdot\vec{h}^{z\vec{1}^n+z^2\vec{2}^n\circ\overleftarrow{y}^n}\cdot V^{z^2y^{n+1}}\cdot g^{(z-z^2)<\vec{1}^n-\vec{y}^n>-z^3y^{n+1}<\vec{1}^n,\vec{2}^n>} A^=Ag z1 nh z1 n+z22 ny nVz2yn+1g(zz2)<1 ny n>z3yn+1<1 n,2 n>

  • Prover:计算:【使得满足 A ^ = g ⃗ a ⃗ L ^ h ⃗ a ⃗ R ^ g a ⃗ L ^ ⨀ y ⃗ n a ⃗ R ^ h α ^ \hat{A}=\vec{g}^{\hat{\vec{a}_L}}\vec{h}^{\hat{\vec{a}_R}}g^{\hat{\vec{a}_L}\bigodot_{\vec{y}^n}\hat{\vec{a}_R}}h^{\hat{\alpha}} A^=g a L^h a R^ga L^y na R^hα^
    a ⃗ L ^ = a ⃗ L − 1 ⃗ n ⋅ z \hat{\vec{a}_L}=\vec{a}_L-\vec{1}^n\cdot z a L^=a L1 nz
    a ⃗ R ^ = a ⃗ R + z 2 2 ⃗ n ∘ y ← n + 1 ⃗ n ⋅ z \hat{\vec{a}_R}=\vec{a}_R +z^2\vec{2}^n\circ\overleftarrow{y}^n + \vec{1}^n\cdot z a R^=a R+z22 ny n+1 nz
    α ^ = α + z 2 y n + 1 γ \hat{\alpha}=\alpha+z^2y^{n+1}\gamma α^=α+z2yn+1γ

  • Prover和Verifier:调用 z k − W I P y ⃗ n ( g ⃗ , h ⃗ , g , h , A ^ ; a ⃗ L ^ , a ⃗ R ^ , α ^ ) zk-WIP_{\vec{y}^n}(\vec{g},\vec{h},g,h,\hat{A};\hat{\vec{a}_L}, \hat{\vec{a}_R}, \hat{\alpha}) zkWIPy n(g ,h ,g,h,A^;a L^,a R^,α^)。【调用本博文第3节 “zero-knowledge weighted inner product argument (具有zero-knowledge) “】

Bulletproofs+ 构建的range proof size为 2 log ⁡ 2 n + 3 2\log_2n+3 2log2n+3个elements in G \mathbb{G} G 3 3 3个elements in Z p \mathbb{Z}_p Zp。而Bulletproofs中的range proof size为 2 log ⁡ 2 n + 4 2\log_2n+4 2log2n+4个elements in G \mathbb{G} G 5 5 5个elements in Z p \mathbb{Z}_p Zp。Bulletproofs+比Bulletproofs算法的communication cost节约 1 1 1 G \mathbb{G} G 2 2 2 Z p \mathbb{Z}_p Zp

5. aggregated range proof

Monero is one of the well-known privacy-enhanced blockchain projects which employ confidential transactions in the UTXO model。其每个UTXO交易平均有2.5个outputs,为每个output配置range proof。Bulletproofs中的aggregate range proof将具有2个output交易的size由13kB降为了2.5kB,而Bulletproofs+的aggregate range proof将比Bulletproof 小96bytes。

基本实现思路与Bulletproofs的类似:
在这里插入图片描述

Bulletproofs+ 构建的aggregate range proof size为 2 ⌈ log ⁡ 2 ( n ⋅ m ) ⌉ + 3 2 \left \lceil\log_2(n\cdot m) \right \rceil+3 2log2(nm)+3个elements in G \mathbb{G} G 3 3 3个elements in Z p \mathbb{Z}_p Zp。而Bulletproofs中的range proof size为 2 ⌈ log ⁡ 2 ( n ⋅ m ) ⌉ + 4 2 \left \lceil\log_2(n\cdot m) \right \rceil +4 2log2(nm)+4个elements in G \mathbb{G} G 5 5 5个elements in Z p \mathbb{Z}_p Zp。Bulletproofs+比Bulletproofs算法的communication cost节约 1 1 1 G \mathbb{G} G 2 2 2 Z p \mathbb{Z}_p Zp

6. verifiable shuffle

可利用Bulletproofs来实现 Bayer和Groth 2012年论文《Efficient zero-knowledge argument for correctness of a shuffle》中的permutation argument and the multi-exponentiation argument,从而实现logarithmic proof size of verifiable shuffle。
(参见博客 Efficient Zero-Knowledge Argument for Correctness of a Shuffle学习笔记(1)

7. 改进Bulletproofs的相关研究成果

与本文同期,针对Bulletproofs改进的相关研究成果有:

  • Boneh等人论文《https://hackmd.io/@dabo/B1U4kx8XI》中提出了基于hiding polynomial commitment scheme构建的简单range proof。为了证明 0 ≤ v < 2 n 0\leq v<2^n 0v<2n with zero-knowledge property,需要2个degree为 n + 1 n+1 n+1的plynomial,然后执行3个polynomial evaluation protocol,Prover需要传输 2 ⋅ ⌈ log ⁡ 2 ( n + 2 ) ⌉ + 2 2\cdot \left \lceil \log_2{(n+2)} \right \rceil+2 2log2(n+2)+2个elements in G \mathbb{G} G和5个elements in Z p \mathbb{Z}_p Zp。 尽管其communication cost要低于Bulletproofs,但是仍然比本文的range proof多一个 element。而且,由于其使用的polynomial commitment scheme,需要选择a prime p p p larger than n n n,a prover can only claim the same interval once a polynomial commitment scheme is determined,否则a prover should renew the polynomial commitment scheme if the prover wants a new range。相反地,本文的range proof scheme支持任意的 n n n值,所以there is no restriction for a prover。

  • Attema和Cramer论文《 Compressed σ-protocol theory and practical application to plug & play secure algorithmics》则注重将Bulletproofs与 ∑ \sum -protocol结合:A prover needs to prove quadratic equations for a range proof, however, ∑ \sum -protocol可用于证明任意的linear relations,需要将Bulletproofs改造为quadratic constraint,改造过程中可能存在技术难度,为了解决该问题,其使用了arithmetic secret sharing技术来linearize all non-linear statements,从而保证the same communication reduction。其构建的range proof,proof size为 2 ⋅ ⌈ log ⁡ 2 ( 2 n + 3 ) ⌉ 2\cdot \left \lceil \log_2{(2n+3)} \right \rceil 2log2(2n+3)个elements in G \mathbb{G} G和5个elements in Z p \mathbb{Z}_p Zp。由此可知,Bulletproofs+仍然是具有smallest proof size的transparent range proof。

8. Bulletproofs+性能优化

基本优化思路与Bulletproofs中类似,可参见博客 Bulletproofs: Short Proofs for Confidential Transactions and More学习笔记 第6节内容“对range proof的性能优化”。

  • 对Verifier,delay all the exponentiations到最后一步;
  • 复用一些Scalars计算;
  • 实现batch verification。

参考资料:

[1] 博客 Comparing Bulletproofs+ and Bulletproofs - Part I
[2] 博客 Comparing Bulletproofs+ and Bulletproofs - Part II

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值