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

本文主要是介绍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。

相关研究成果:

  • 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.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》中提出了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×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算法。

  • 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+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

这篇关于Bulletproofs+: Shorter Proofs for Privacy-Enhanced Distributed Ledger学习笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/389119

相关文章

51单片机学习记录———定时器

文章目录 前言一、定时器介绍二、STC89C52定时器资源三、定时器框图四、定时器模式五、定时器相关寄存器六、定时器练习 前言 一个学习嵌入式的小白~ 有问题评论区或私信指出~ 提示:以下是本篇文章正文内容,下面案例可供参考 一、定时器介绍 定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。 定时器作用: 1.用于计数系统,可

问题:第一次世界大战的起止时间是 #其他#学习方法#微信

问题:第一次世界大战的起止时间是 A.1913 ~1918 年 B.1913 ~1918 年 C.1914 ~1918 年 D.1914 ~1919 年 参考答案如图所示

[word] word设置上标快捷键 #学习方法#其他#媒体

word设置上标快捷键 办公中,少不了使用word,这个是大家必备的软件,今天给大家分享word设置上标快捷键,希望在办公中能帮到您! 1、添加上标 在录入一些公式,或者是化学产品时,需要添加上标内容,按下快捷键Ctrl+shift++就能将需要的内容设置为上标符号。 word设置上标快捷键的方法就是以上内容了,需要的小伙伴都可以试一试呢!

Tolua使用笔记(上)

目录   1.准备工作 2.运行例子 01.HelloWorld:在C#中,创建和销毁Lua虚拟机 和 简单调用。 02.ScriptsFromFile:在C#中,对一个lua文件的执行调用 03.CallLuaFunction:在C#中,对lua函数的操作 04.AccessingLuaVariables:在C#中,对lua变量的操作 05.LuaCoroutine:在Lua中,

AssetBundle学习笔记

AssetBundle是unity自定义的资源格式,通过调用引擎的资源打包接口对资源进行打包成.assetbundle格式的资源包。本文介绍了AssetBundle的生成,使用,加载,卸载以及Unity资源更新的一个基本步骤。 目录 1.定义: 2.AssetBundle的生成: 1)设置AssetBundle包的属性——通过编辑器界面 补充:分组策略 2)调用引擎接口API

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

《offer来了》第二章学习笔记

1.集合 Java四种集合:List、Queue、Set和Map 1.1.List:可重复 有序的Collection ArrayList: 基于数组实现,增删慢,查询快,线程不安全 Vector: 基于数组实现,增删慢,查询快,线程安全 LinkedList: 基于双向链实现,增删快,查询慢,线程不安全 1.2.Queue:队列 ArrayBlockingQueue:

硬件基础知识——自学习梳理

计算机存储分为闪存和永久性存储。 硬盘(永久存储)主要分为机械磁盘和固态硬盘。 机械磁盘主要靠磁颗粒的正负极方向来存储0或1,且机械磁盘没有使用寿命。 固态硬盘就有使用寿命了,大概支持30w次的读写操作。 闪存使用的是电容进行存储,断电数据就没了。 器件之间传输bit数据在总线上是一个一个传输的,因为通过电压传输(电流不稳定),但是电压属于电势能,所以可以叠加互相干扰,这也就是硬盘,U盘

人工智能机器学习算法总结神经网络算法(前向及反向传播)

1.定义,意义和优缺点 定义: 神经网络算法是一种模仿人类大脑神经元之间连接方式的机器学习算法。通过多层神经元的组合和激活函数的非线性转换,神经网络能够学习数据的特征和模式,实现对复杂数据的建模和预测。(我们可以借助人类的神经元模型来更好的帮助我们理解该算法的本质,不过这里需要说明的是,虽然名字是神经网络,并且结构等等也是借鉴了神经网络,但其原型以及算法本质上还和生物层面的神经网络运行原理存在