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 2⌈log2(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 2⌈log2(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 2⌈log2(n⋅m)⌉+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 2⌈log2(n⋅m)⌉+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。
相关研究成果:
2009年Groth论文《Linear Algebra with Sub-linear Zero-Knowledge Arguments》为第一个sublinear zero-knowledge argument for linear algebra。(参见博客 Linear Algebra with Sub-linear Zero-Knowledge Arguments学习笔记)2016年Bootle等人《Efficient Zero-Knowledge Arguments for Arithmetic Circuits in the Discrete Log Setting》是第一个实现了logarithmic communication complexity的( O ( 4 log N + 7 ) + O ( 2 log N + 6 ) O(4\log N+7)+O(2\log N+6) O(4logN+7)+O(2logN+6))。(参见博客 Efficient Zero-Knowledge Arguments for Arithmetic Circuits in the Discrete Log Setting 学习笔记)B¨unz等人2018年论文《Bulletproofs: Short Proofs for Confidential Transactions and More》在Bootle 2016基础上进行了改进,proof size缩短了3倍( O ( 2 log N + 9 ) O(2\log N+9) O(2logN+9))。(参见博客 Bulletproofs: Short Proofs for Confidential Transactions and More 学习笔记)Hoffmann 等人 2019年论文 qesa《Efficient zero-knowledge arguments in the discrete log setting》 在Bulletproofs的基础上进行了改进,将inner product 理解为 vector-vector multiplication,从而扩展至了matrix-vector multiplication argument,使得R1CS表示可转换为quadratic equation,进而可借助inner product argument来实现R1CS证明。尽管Hoffmann在该论文中improves Bulletproofs to efficiently cover more expressive relations than R1CS,但是并没有降低range proof的proof size。【看Hoffmann论文中Table 3的话,aggregate range proof的prove time和verify time有所提升。】(参见博客 qesa Efficient zero-knowledge arguments in the discrete log setting 学习笔记)Bu¨nz等人2020年论文 Supersonic《Transparent SNARKs from DARK Compilers》 中基于unknown order group构建了一种无需trusted setup的polynomial commitment——DARK,核心思想是将 f ( X ) f(X) f(X)表示为 f ( X ) = f L ( X ) + X d ’ + 1 f R ( X ) f(X)=f_L(X)+X^{d’+1}f_R(X) f(X)=fL(X)+Xd’+1fR(X),其中 d ’ = ⌊ d 2 ⌋ d’=\left \lfloor \frac{d}{2} \right \rfloor d’=⌊2d⌋, d d d为 f ( X ) f(X) f(X)多项式的degree。并基于DARK提出了首个succinct NIZK without trusted setup——Supersonic。 尽管Supersonic具有low verification cost和short proof size的优势,但是它需要的proof size至少为Bulletproofs的6倍(128-bit security level下),且随着security level的提升,proof size差距会更大。。 (参见博客 Supersonic Transparent SNARKs from DARK Compilers学习笔记)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.8∼0.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》中提出了efficient reductions from the advanced arguments to the inner product argument。2016年Bootle等人《Efficient Zero-Knowledge Arguments for Arithmetic Circuits in the Discrete Log Setting》 和 B¨unz等人2018年论文《Bulletproofs: Short Proofs for Confidential Transactions and More》 在Groth 2009论文的基础上,以增加prover和verifier之间的交互次数为代价,降低了proof size。由于可基于Fiat-Shamir heuristic in the random oracle model实现non-interactive argument,所以交互次数的增加并不会称为负担。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×Zpn→Zp ( 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算法。
2009年Groth论文《Linear Algebra with Sub-linear Zero-Knowledge Arguments》中,其zero-knowledge argument for weighted inner product (zk-WIP)的communication cost为 O ( 2 n ) O(2n) O(2n),即具有linear communication overhead,该zk-WIP是其它linear algebra equations的advanced arguments的ingredient protocol。(参见博客 Linear Algebra with Sub-linear Zero-Knowledge Arguments学习笔记 第4.1节内容)
2016年Bootle等人《Efficient Zero-Knowledge Arguments for Arithmetic Circuits in the Discrete Log Setting》 和 B¨unz等人2018年论文《Bulletproofs: Short Proofs for Confidential Transactions and More》种,将inner product argument without zero-knowledge 作为ingredient protocol,通过将circuit satisfiability等advanced relation reduce为inner product argument,也可实现zero-knowledgeness。(尽管其inner product argument不具有zero-knowledge,但是可以在reduce之前添加hiding变量,实现总体argument的zero-knowledge。)
2018年Wahby等人论文《Doubly-efficient zkSNARKs without trusted setup》中,为inner product between a hidden vector and a public vector 实现了logarithmetic zero-knowledge argument。不同于2009年Groth论文《Linear Algebra with Sub-linear Zero-Knowledge Arguments》中的(weighted) inner product between two hidden vectors。(参见博客 Hyrax: Doubly-efficient zkSNARKs without trusted setup学习笔记 第4节“Dot-prodcut proof protocol” 内容。)
Hoffmann 等人 2019年论文 qesa《Efficient zero-knowledge arguments in the discrete log setting》中,借助kernel guideline来引入特定的随机变量 r ⃗ ’ , r ⃗ ’ ’ \vec{r}’,\vec{r}’’ r ’,r ’’来实现hiding,从而实现(almost) zero-knowledge inner product argument —— I P A a l m Z K IPA_{almZK} IPAalmZK协议。qesa中为了blind witness vectors,其所使用的random vectors需依赖于witness,从而bring some constraint for the witness。(参见博客 qesa Efficient zero-knowledge arguments in the discrete log setting 学习笔记 第5.4节内容“zero-knowledge inner product 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+e−1yn^a2 )⨀(y,⋯,yn^)(eb 2+e−1b 1)=e2a 1⨀(y,⋯,yn^)b 2+a ⨀(y,⋯,yn)b +e−2(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+e−2cR,其中 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 2∈Zp, 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 1∈Zp, 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+e−1yn^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+e−1b 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+e−1yn^a2 )h ′(eb 2+e−1b 1)ue2cL+c+e−2cR 在上述 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 1e−1g 2ey−n^∈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 2e−1∈Gn^ 从而有: P ′ = L e 2 P R e − 2 ∈ G P'=L^{e^2}PR^{e^{-2}}\in\mathbb{G} P′=Le2PRe−2∈G,其中 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 2−yn^a 1h 1b 2ucL∈G, 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 1ucR∈G。
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,c∈Zp,A,B∈G,g ,h ∈Gnprivate info: a ⃗ , b ⃗ ∈ Z p n \vec{a},\vec{b}\in\mathbb{Z}_p^n a ,b ∈Zpnrelation: 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 y∈Zp,u,P∈G,g ,h ∈Gnprivate info: a ⃗ , b ⃗ ∈ Z p n \vec{a},\vec{b}\in\mathbb{Z}_p^n a ,b ∈Zpnrelation: 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,b∈Zp 发送给Verifier;Verifier:计算 c = a ⋅ b ⋅ y c=a\cdot b\cdot y c=a⋅b⋅y,然后验证 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 2∈Zp, 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 1∈Zp。 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 2ucL∈G, 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 1ucR∈G。 d)Prover将 L , R ∈ G L,R\in\mathbb{G} L,R∈G发送给Verifier。Verifier:生成随机数 e ∈ Z p ∗ e\in\mathbb{Z}_p^* e∈Zp∗,将随机数 e ∈ Z p ∗ e\in\mathbb{Z}_p^* e∈Zp∗发送给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 1e−1g 2ey−n^∈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 2e−1∈Gn^ P ′ = L e 2 P R e − 2 ∈ G P'=L^{e^2}PR^{e^{-2}}\in\mathbb{G} P′=Le2PRe−2∈GProver计算: 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+e−1yn^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+e−1b 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.。
在本博文第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} v∈G来对 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 y∈Zp,u,v,P∈G,g ,h ∈Gnprivate 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,α∈Zprelation: 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,B∈G来证明,其它阶段都是Prover自身在每轮中引入随机数 d L , d R ∈ Z p d_L,d_R\in\mathbb{Z}_p dL,dR∈Zp来实现 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,P∈G,P∈G,y∈Zp 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=gahbua⋅b⋅yvα * Prover:将 a , b ∈ Z p a,b\in\mathbb{Z}_p a,b∈Zp 发送给Verifier; * Verifier:计算 c = a ⋅ b ⋅ y c=a\cdot b\cdot y c=a⋅b⋅y,然后验证 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,B∈G 发送给Verifier。Verifier:生成随机数 e ∈ Z p ∗ e\in\mathbb{Z}_p^* e∈Zp∗,将随机数 e ∈ Z p ∗ e\in\mathbb{Z}_p^* e∈Zp∗发送给Prover。Prover:计算 r ′ = r + a ⋅ e ∈ Z p r'=r+a\cdot e\in\mathbb{Z}_p r′=r+a⋅e∈Zp s ′ = s + b ⋅ e ∈ Z p s'=s+b\cdot e\in\mathbb{Z}_p s′=s+b⋅e∈Zp δ ′ = η + δ ⋅ e + α ⋅ e 2 ∈ Z p \delta'=\eta+\delta\cdot e+\alpha\cdot e^2\in\mathbb{Z}_p δ′=η+δ⋅e+α⋅e2∈Zp 将 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=gr′⋅ehs′⋅eur′s′yvδ′是否成立即可。– 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 2∈Zp, 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 1∈Zp。 c)引入Prover私有随机数 d L , d R ∈ Z p d_L,d_R\in\mathbb{Z}_p dL,dR∈Zp, 计算 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 2ucLvdL∈G, 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 1ucRvdR∈G。 d)Prover将 L , R ∈ G L,R\in\mathbb{G} L,R∈G发送给Verifier。Verifier:生成随机数 e ∈ Z p ∗ e\in\mathbb{Z}_p^* e∈Zp∗,将随机数 e ∈ Z p ∗ e\in\mathbb{Z}_p^* e∈Zp∗发送给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 1e−1g 2ey−n^∈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 2e−1∈Gn^ P ′ = L e 2 P R e − 2 ∈ G P'=L^{e^2}PR^{e^{-2}}\in\mathbb{G} P′=Le2PRe−2∈GProver计算: 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+e−1yn^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+e−1b 1)∈Zpn^ α ′ = d L ⋅ e 2 + α + d R ⋅ e − 2 \alpha'=d_L\cdot e^2+\alpha+d_R\cdot e^{-2} α′=dL⋅e2+α+dR⋅e−2– 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.。
参看博客 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 R∈Zpn来实现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,h∈G,V∈G,nprivate info: v , γ ∈ Z p v,\gamma\in\mathbb{Z}_p v,γ∈Zprelation: V = h γ g v ∧ v ∈ [ 0 , 2 n − 1 ] V=h^{\gamma}g^{v}\wedge v\in[0,2^n-1] V=hγgv∧v∈[0,2n−1]将数值 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,⋯,2n−1)。同时也得保证 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 L−a R=1 n∈Zpn∧a L∘a R=0 n∈Zpn∧<a L,2 n>=v∈Zp
以上对应为 2 n + 1 2n+1 2n+1个方程式,可引入random challenge y , z ∈ Z p y,z\in\mathbb{Z}_p y,z∈Zp,将这 2 n + 1 2n+1 2n+1个方程式batch在一起形成1个weighted inner product equation:
Verifier 发送random challenge y ∈ Z p y\in\mathbb{Z}_p y∈Zp, y ∈ Z p ∗ y\in\mathbb{Z}_p^* y∈Zp∗, 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,yn−1,⋯,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 n∘y n=yn+1⋅1 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>=v⇒a L⨀y n(2 n∘y 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 L−a R=1 n⇒(a L−a R)⨀y n1 n=1 n⨀y 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 L∘a R=0 n⇒a L⨀y na R=0
Verifier发送random challenge z ∈ Z p z\in\mathbb{Z}_p z∈Zp,将以上三个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> z2⋅a L⨀y n(2 n∘y n)+z⋅(a L−a R)⨀y n1 n+a L⨀y 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 L−1 n⋅z)⨀y n(a R+z22 n∘y n+1 n⋅z)=z2yn+1v+(z−z2)<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 zk−WIP protocol。
range proof的基本信息为:
public info: g , h ∈ G , V ∈ G , n g,h\in\mathbb{G},V\in\mathbb{G},n g,h∈G,V∈G,n, g ⃗ , h ⃗ ∈ G n \vec{g},\vec{h}\in\mathbb{G}^n g ,h ∈Gnprivate info: v , γ ∈ Z p v,\gamma\in\mathbb{Z}_p v,γ∈Zprelation: V = h γ g v ∧ v ∈ [ 0 , 2 n − 1 ] V=h^{\gamma}g^{v}\wedge v\in[0,2^n-1] V=hγgv∧v∈[0,2n−1]详细的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 L−1 n∈Zpn 使得 a ⃗ L ∘ a ⃗ R = 0 ⃗ n \vec{a}_L\circ\vec{a}_R=\vec{0}^n a L∘a 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} A∈G发送给Verifier。
Verifier:发送random challenge y , z ∈ Z p y,z\in\mathbb{Z}_p y,z∈Zp发送给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 L−1 n⋅z)⨀y n(a R+z22 n∘y n+1 n⋅z)=z2yn+1v+(z−z2)<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 L−1 n⋅z)h (a R+z22 n∘y n+1 n⋅z)gz2yn+1v+(z−z2)<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^=A⋅g −z1 n⋅h z1 n+z22 n∘y n⋅Vz2yn+1⋅g(z−z2)<1 n−y 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 L−1 n⋅z 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 n∘y n+1 n⋅z α ^ = α + 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}) zk−WIPy 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。
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 2⌈log2(n⋅m)⌉+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 2⌈log2(n⋅m)⌉+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。
可利用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))
与本文同期,针对Bulletproofs改进的相关研究成果有:
Boneh等人论文《https://hackmd.io/@dabo/B1U4kx8XI》中提出了基于hiding polynomial commitment scheme构建的简单range proof。为了证明 0 ≤ v < 2 n 0\leq v<2^n 0≤v<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 2⋅⌈log2(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 2⋅⌈log2(2n+3)⌉个elements in G \mathbb{G} G和5个elements in Z p \mathbb{Z}_p Zp。由此可知,Bulletproofs+仍然是具有smallest proof size的transparent range proof。
基本优化思路与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