Hoffmann等人 2019年论文 《Efficient zero-knowledge arguments in the discrete log setting 》。
相应的代码实现可参见:
本文主要关注zero-knowledge proofs in the discrete logarithm setting:
第一个实用的succinct non-interactive arguments of knowledge (SNARK) 为:
Gennaro等人2013年论文《Quadratic Span Programs and Succinct NIZKs without PCPs》。
之后关于ZKAoK(zero-knowledge arguments of knowledge)的研究成果有:[2, 8, 13, 17, 21, 24, 25, 26, 46]
本文,主要关注在groups of prime order setting下的研究成果:[13, 16, 28]
以上[13, 16, 28]论文中实现的ILC-argument,仅natively 支持 R1CS language,本文在不依赖于R1CS情况下实现了对 systems of quadratic equations的处理。
同时,如果借助Groth等人在2019年Security Track Proceeding中发布的《ZKProof Community Reference》技术文档,本文的工作成果可归结为ideal linear commitments (ILC)。
本文的Verifier允许 do “matrix-vector queries” on a committed value w ⃗ \vec{w} w,如 request an opening for a matrix-vector product Γ w ⃗ \mathbf{\Gamma}\vec{w} Γw。由此可知,具有比只支持point queries或inner-product queries的PCP或IOP更强的功能。
除此之后,本文还提供了对prove knowledge of preimage of group homomorphisms。如证明 knowledge of the decryption of an EIGamal ciphertext。这种不属于ILC范畴。
根据Groth等人在2019年Security Track Proceeding中发布的《ZKProof Community Reference》技术文档中的相关内容进行梳理:
基于dlog setting和ILC构建的zk proof有:
– Bootle和Groth 2018年论文《Efficient Batch Zero-Knowledge Arguments for Low Degree Polynomials》
– Bootle等人2016年论文《Efficient Zero-Knowledge Arguments for Arithmetic Circuits in the Discrete Log Setting》
– Bünz 等人2018年论文《Bulletproofs: Short Proofs for Confidential Transactions and More》
– Groth 2009年论文《Linear Algebra with Sub-linear Zero-Knowledge Arguments》
很多zk proofs in the group setting都是 Cramer等人1998年论文《Zero-Knowledge Proofs for Finite Field Arithmetic; or: Can Zero-Knowledge Be for Free?》和Maurer 2015年论文《Zero-knowledge proofs of knowledge for group homomorphisms》 的实例化。
Bootle等人2017年论文《Linear-Time Zero-Knowledge Proofs for Arithmetic Circuit Satisfiability》中提到的ideal linear commitment model (ILC) ,可以 apply linear transformations to a committed witness。本文的 Q E S A Z K QESA_{ZK} QESAZK就属于ILC。
基于knowledge of exponent assumption (KEA)构建的NIZK proof有:(对于arithmetic circuit,这些都有constant size proof和sublinear verification cost。但是也都需要trusted setup。)
– Britansky等人2017年论文《The Hunting of the SNARK》
– Danezis等人2014年论文《Square Span Programs with Applications to Succinct NIZK Arguments》
– Gennaro等人2013年论文《Quadratic Span Programs and Succinct NIZKs without PCPs》
– Groth 2016年论文《On the Size of Pairing-Based Non-interactive Arguments》
– Groth 2010年论文《Short Non-interactive Zero-Knowledge Proofs》
– Lipmaa 2013年论文《Succinct Non-Interactive Zero Knowledge Arguments from Span Programs and Linear Error-Correcting Codes》
PCPs, IOPs, MPC-in-the-head:采用类似 probabilistically checkable proofs (PCP)、MPC-in-the-head(源自Ishai等人2007年论文《Zero-knowledge from secure multiparty computation》)、interactive oracle proofs (IOP) 等技术,可在不依赖public key primitives的情况下构建高效的zk proofs。需要从实用的角度来提升性能表现和抗量子攻击。相关的研究成果有:(目前存在的主要问题是具有relatively large proof size或者unacceptable constants。)
– Scott Ames等人2017年论文《Ligero: Lightweight Sublinear Arguments Without a Trusted Setup》
– Ben-Sasson等人2018年论文《Aurora: Transparent Succinct Arguments for R1CS》
– Chase等人2017年论文《Post-Quantum Zero-Knowledge and Signatures from Symmetric-Key Primitives》
– Gennaro等人2018年论文《Lattice-Based zk-SNARKs from Square Span Programs》
– Wahby等人2018年论文《Doubly-Efficient zkSNARKs Without Trusted Setup》
目前存在的主要问题是具有relatively large proof size或者unacceptable constants。
Ben-Sasson等人2018年论文《Aurora: Transparent Succinct Arguments for R1CS》中提供了具有logarithmic communication IOP for R1CS算法,对于R1CS statements of size N = 1 0 6 N=10^6 N=106的proof size大约为130kb,而若采用Bulletproofs对应的proof size将低于2kb。
Agrawal等人2018年论文《Non-Interactive Zero-Knowledge Proofs for Composite Statements》中,将proofs in the “symmetric key” setting和efficient proofs for “public key” algebraic statements结合起来了。
本文可以直接将algebraic statements over the same group G \mathbb{G} G 进行组合。
基本信息为:
直接借助 ∑ \sum ∑-protocol 进行证明的思路如下:
注意借助 r ⃗ \vec{r} r,由于 x 2 ≠ 0 x_2\neq 0 x2=0,witness w ⃗ \vec{w} w completely masked in z ⃗ = x 1 w ⃗ + x 2 r ⃗ \vec{z}=x_1\vec{w}+x_2\vec{r} z=x1w+x2r,而根据 [ a ] [\mathbf{a}] [a]求 r ⃗ \vec{r} r 为hard的,从而实现zero-knowledge。
以上协议具有可extractable特性,当针对相同的 r ⃗ \vec{r} r,Verifier给两组不同的challenges x ⃗ 1 , x ⃗ 2 \vec{x}_1,\vec{x}_2 x1,x2,Prover返回两组不同的response z ⃗ 1 , z ⃗ 2 \vec{z}_1,\vec{z}_2 z1,z2,从而可extract提取出witness w ⃗ \vec{w} w 和 randomness r ⃗ \vec{r} r。
注意,以上 ∑ \sum ∑-protocol构建的证明其communication效率较低,需要有 n n n 个field elements和 m m m 个group elements。
而若借助probabilistic verification,可对其communication cost进行改进。
efficient arguments of knowledge (without zero-knowledge) 的基础是:probabilistic verification of the claim。
如上,与直接verify [ A ] w ⃗ = [ t ] [\mathbf{A}]\vec{w}=[\mathbf{t}] [A]w=[t]不同:
probabilistic verification of the claim后,基本信息转为:
probabilistic verification of the claim后,借助 ∑ \sum ∑-protocol 进行证明的思路类似:、
此时,communication cost变为:有 n n n 个field elements和 仅有 1 1 1 个group elements。(与 m m m无关)
以上协议具有可extractable特性,当针对相同的 r ⃗ \vec{r} r,Verifier给两组不同的challenges x ⃗ 1 , x ⃗ 2 \vec{x}_1,\vec{x}_2 x1,x2,Prover返回两组不同的response z ⃗ 1 , z ⃗ 2 \vec{z}_1,\vec{z}_2 z1,z2,从而可extract提取出witness w ⃗ \vec{w} w 和 randomness r ⃗ \vec{r} r。
同理,这种类型的linear combination也可用于恢复batch proofs(参见Peng等人2007年论文《Batch zero-knowledge proof and verification and its applications》),non-randomised linear combinations也适合(参见Bünz 等人2018年论文《Bulletproofs: Short Proofs for Confidential Transactions and More》)。
是指Prover反馈的response只有两种可能:
对Prover response的这个要求,有利于构建trivial simulator——反向运行transcript:从最终的消息开始,依次反推至最初的消息。这样simulator就可以自己选择uniformly distributed messages,然后计算出uniquely determined ones。
可参看博客 Ker(A)——矩阵kernel。
很多有趣的statement都是非线性的。
以 Bootle和Groth 2018年论文《Efficient Batch Zero-Knowledge Arguments for Low Degree Polynomials》中的polynomial commitment为例,a polynomial f ∈ F p [ X ] f\in\mathbb{F}_p[X] f∈Fp[X], f ( X ) = a 0 + a 1 X + ⋯ + a n − 1 X n − 1 f(X)=a_0+a_1X+\cdots+a_{n-1}X^{n-1} f(X)=a0+a1X+⋯+an−1Xn−1,对于任意的 x ∈ F p x\in\mathbb{F}_p x∈Fp,需证明 f ( x ) = t f(x)=t f(x)=t。
最直观的方法是:直接对 f ( X ) f(X) f(X)中所有的系数 a 0 , ⋯ , a n − 1 a_0,\cdots,a_{n-1} a0,⋯,an−1进行commit,然后借助linear combination protocol就可证明 f ( x ) = t f(x)=t f(x)=t成立。
但是,如果想实现random linear combination,可在不影响soundness的情况下增加redundancy,通过巧妙地对 ”evaluate at x x x”-map 创建 a non-trivial kenerl,具体实现方式为:将 f ( X ) f(X) f(X)表示为 f ( X ) = ∑ i ( α i + β i ) X i f(X)=\sum_{i}(\alpha_i+\beta_i)X^i f(X)=∑i(αi+βi)Xi,然后对所有的 α i \alpha_i αi和 β i \beta_i βi进行commit。同理,若想表示 f ( x ) = 0 f(x)=0 f(x)=0,可直接取 α i ← F p , β i = − α i \alpha_i\leftarrow\mathbb{F}_p,\beta_i=-\alpha_i αi←Fp,βi=−αi。
从而在response中插入了randomness,总之可通过增加redundancy的方式来实现uniformly random responses。
以inner product argument I P A a l m Z K IPA_{almZK} IPAalmZK为例,需证明:
∃ x ⃗ , y ⃗ : < x ⃗ , y ⃗ > = t \exists \vec{x},\vec{y}:<\vec{x},\vec{y}>=t ∃x,y:<x,y>=t
引入随机数,转为证明:(仅需要logarithmically many (specially chosen) random components in r ⃗ , s ⃗ \vec{r},\vec{s} r,s。)
< x ⃗ + r ⃗ , y ⃗ + s ⃗ > = t <\vec{x}+\vec{r},\vec{y}+\vec{s}>=t <x+r,y+s>=t,其中 < r ⃗ , y ⃗ > = < r ⃗ , s ⃗ > = < x ⃗ , s ⃗ > = 0 <\vec{r},\vec{y}>=<\vec{r},\vec{s}>=<\vec{x},\vec{s}>=0 <r,y>=<r,s>=<x,s>=0
这就是“redundancy/kernel”技术的一种应用。而“uniform-or-unique”指南可保证每次response都是随机的。从而在 r ⃗ , s ⃗ \vec{r},\vec{s} r,s中仅需要a logarithmic number of (well-chosen) random components 就足够了。
分两步来实现对 ∃ w ⃗ : [ A ] w ⃗ = [ t ⃗ ] \exists\vec{w}:[\mathbf{A}]\vec{w}=[\vec{t}] ∃w:[A]w=[t](其中 [ A ] ∈ G m × n [\mathbf{A}]\in\mathbb{G}^{m\times n} [A]∈Gm×n) 的证明,具有的communication complexity为 O ( log ( n ) ) O(\log(n)) O(log(n)):(参见1.2.1节内容。)
在Bootle等人2016年论文《Efficient Zero-Knowledge Arguments for Arithmetic Circuits in the Discrete Log Setting》和Bünz 等人2018年论文《Bulletproofs: Short Proofs for Confidential Transactions and More》的基础上,本文实现了一个 (almost) zero-knowledge inner product argument I P A a l m Z K IPA_{almZK} IPAalmZK协议,代价是增加了constant communication overhead和logarithmic computational overhead。
I P A a l m Z K IPA_{almZK} IPAalmZK协议用于证明的内容为 ∃ w ⃗ : ∀ i : < w ⃗ , Γ i w ⃗ > = 0 \exists\vec{w}:\forall i :<\vec{w},\mathbf{\Gamma_i}\vec{w}>=0 ∃w:∀i:<w,Γiw>=0,其中 Γ i ∈ F p n × n \mathbf{\Gamma_i}\in\mathbb{F}_p^{n\times n} Γi∈Fpn×n, w ⃗ \vec{w} w为committed to。
为提升效率,采用batch proof方式,改为证明 < w ⃗ , Γ w ⃗ > <\vec{w},\mathbf{\Gamma}\vec{w}> <w,Γw>,其中 Γ = ∑ i r i Γ i \mathbf{\Gamma}=\sum_{i}r_i\Gamma_i Γ=∑iriΓi for random r i ∈ F p r_i\in\mathbb{F}_p ri∈Fp。
最终生成的argument可称为 Q E S A Z K QESA_{ZK} QESAZK,具有”adaptive commit-and-prove”特性,即the statement Γ i \mathbf{\Gamma_i} Γi may be chosen after the commitment to w ⃗ \vec{w} w。
commit-and-prove system Q E S A Z K QESA_{ZK} QESAZK 理论简单且可与其它arguments高效结合使用。
不借助R1CS,证明任意的quadratic equations如 ( ∑ a i x i ) ( ∑ b i x i ) + ∑ c i x i = 0 (\sum a_ix_i)(\sum b_ix_i)+\sum c_ix_i=0 (∑aixi)(∑bixi)+∑cixi=0。
可将quadratic equation表示为 < x ⃗ , x ⃗ > = ∑ x i 2 = t <\vec{x},\vec{x}>=\sum x_i^2=t <x,x>=∑xi2=t,而若采用R1CS来表示,则需要 n n n个方程式: y i = x i 2 ( i = 1 , ⋯ , n − 1 ) y_i=x_i^2(i=1,\cdots,n-1) yi=xi2(i=1,⋯,n−1) and x n 2 = t − ∑ i y i x_n^2=t-\sum_{i}y_i xn2=t−∑iyi,其中 y i y_i yi为额外引入的变量。
Q E S A Z K QESA_{ZK} QESAZK 仅需要一个(quadratic)equation来表示 < x ⃗ , x ⃗ > = t <\vec{x},\vec{x}>=t <x,x>=t。
借助这种表示,可对任意degree为 d 2 − 1 d^2-1 d2−1 的(univariate)多项式 f ( X ) = ∑ i = 1 d 2 − 1 a i X i f(X)=\sum_{i=1}^{d^2-1}a_iX^i f(X)=∑i=1d2−1aiXi 以 2 d 2d 2d 个equations和intermediate variables来表示:
y i = x i = y i − 1 x y_i=x^i=y_{i-1}x yi=xi=yi−1x 其中 i = 1 , ⋯ , d , y 0 = 1 i=1,\cdots,d,y_0=1 i=1,⋯,d,y0=1
z i = x d i = z 1 z i − 1 z_i=x^{di}=z_1z_{i-1} zi=xdi=z1zi−1 其中 i = 2 , ⋯ , d − 1 , z 1 = y d − 1 x , z 0 = 1 i=2,\cdots,d-1,z_1=y_{d-1}x,z_0=1 i=2,⋯,d−1,z1=yd−1x,z0=1
最终 f ( x ) = ∑ i , j = 0 d , d − 1 a i + j d y i z j f(x)=\sum_{i,j=0}^{d,d-1}a_{i+jd}y_iz_j f(x)=∑i,j=0d,d−1ai+jdyizj。
对于S(N)ARK-friendly cryptography (Kosba等人2015年论文《“C∅C∅: A Framework for Building Composable Zero-Knowledge Proof》),支持quadratic equations 将非常有用。Matrix-vector multiplications将可快速计算,即使matrix和vector 二者都是secret的。采用类似 Jubjub 的embedding elliptic curve,其效率要优于R1CS。对于general point addition in a (twisted) Edwards curve,不再需要8个,仅需要5个constraints per bit就足够了。
采用本文的 L M P A Z K LMPA_{ZK} LMPAZK和 Q E S A Z K QESA_{ZK} QESAZK协议可实现 Stephanie Bayer和Jens Groth 2012年论文《Efficient Zero-Knowledge Argument for Correctness of a Shuffle》中的shuffle证明算法。
(参见博客 Efficient Zero-Knowledge Argument for Correctness of a Shuffle学习笔记(1))
本文构建的shuffle证明算法 Π s h u f f l e \Pi_{shuffle} Πshuffle 可证明 correctness of a shuffle (of EIGamal ciphertexts),具有的proof size为 O ( log ( N ) ) O(\log(N)) O(log(N)),而Stephanie Bayer和Jens Groth 2012年论文的proof size为 O ( N ) O(\sqrt{N}) O(N)。
Instead of discrete logarithm assumptions, Morillo等人2016年论文《The Kernel Matrix Diffie-Hellman Assumption》中提及的the generalization of hard (matrix) kernel assumptions, but for right-kernels, better suits our needs。
c k = [ g ⃗ ] = [ g 0 , g ˉ ⃗ ] ← G 1 + 1 × n ck=[\vec{g}]=[g_0,\vec{\bar{g}}]\leftarrow \mathbb{G}^{1+1\times n} ck=[g]=[g0,gˉ]←G1+1×n 为Pedersen commitment key。其中 g 0 ∈ G , [ g ˉ ⃗ ] ∈ G n g_0\in\mathbb{G},[\vec{\bar{g}}]\in\mathbb{G}^n g0∈G,[gˉ]∈Gn。
定义 C o m g ( w ⃗ ; r ) = [ g 0 ] r + [ g ˉ ⃗ ] w ⃗ Com_{g}(\vec{w};r)=[g_0]r+[\vec{\bar{g}}]\vec{w} Comg(w;r)=[g0]r+[gˉ]w for r ∈ F p , w ⃗ ∈ F p n r\in\mathbb{F}_p,\vec{w}\in\mathbb{F}_p^n r∈Fp,w∈Fpn
矩阵 [ A ] ∈ G m × n [\mathbf{A}]\in\mathbb{G}^{m\times n} [A]∈Gm×n
向量 w ⃗ ∈ F p n , [ t ⃗ ] ∈ G m \vec{w}\in\mathbb{F}_p^n, [\vec{t}]\in\mathbb{G}^m w∈Fpn,[t]∈Gm
为了证明 ∃ w ⃗ : [ A ] w ⃗ = [ t ⃗ ] \exists\vec{w}:[\mathbf{A}]\vec{w}=[\vec{t}] ∃w:[A]w=[t],本文主要遵循2个原则:
基本信息为:
Matrix-vector multiplication argument具有可组合性:
若采用 Cramer等人1998年论文《Zero-Knowledge Proofs for Finite Field Arithmetic; or: Can Zero-Knowledge Be for Free?》和Maurer 2015年论文《Zero-knowledge proofs of knowledge for group homomorphisms》 中标准的 ∑ \sum ∑-protocol 来证明Matrix-vector multiplication argument,详细的实现思路为:( ∑ s t d \sum_{std} ∑std协议)
以上基于标准 ∑ \sum ∑-protocol的整个实现communication cost为 O ( m + n ) O(m+n) O(m+n)。需要从以下两方面进行改进:
需要shrink 3.1节中的 [ a ⃗ ] ∈ G m [\vec{a}]\in\mathbb{G}^m [a]∈Gm,方法是将 m m m 个linear equations batch into a single linear equation。
详细的实现思路如下:( L M P A b a t c h LMPA_{batch} LMPAbatch协议)
整个 L M P A b a t c h LMPA_{batch} LMPAbatch协议为 5 5 5-move HVZK-AoK。
借助 Bootle等人2016年论文《Efficient Zero-Knowledge Arguments for Arithmetic Circuits in the Discrete Log Setting》和 Bünz 等人2018年论文《Bulletproofs: Short Proofs for Confidential Transactions and More》 中的递归方法,使得communication cost 为 O ( log ( n ) ) O(\log(n)) O(log(n))。(此处 n n n 为witness size。)
首先构建相应的argument,然后再添加zero-knowledge。
在3.2节的基础上,可压缩为 m = 1 m=1 m=1。
k ∈ N , k ∣ n k\in\mathbb{N},k|n k∈N,k∣n,即 n / k ∈ N n/k\in\mathbb{N} n/k∈N。
将 [ A ] w ⃗ = [ t ⃗ ] [\mathbf{A}]\vec{w}=[\vec{t}] [A]w=[t] reduce为 [ A ^ ] w ⃗ ^ = [ t ⃗ ^ ] [\hat{\mathbf{A}}]\hat{\vec{w}}=[\hat{\vec{t}}] [A^]w^=[t^],其中 [ A ^ ] ∈ G m × n / k , w ⃗ ^ ∈ F p n / k , [ t ⃗ ^ ] ∈ G m [\hat{\mathbf{A}}]\in\mathbb{G}^{m\times n/k}, \hat{\vec{w}}\in\mathbb{F}_p^{n/k},[\hat{\vec{t}}]\in\mathbb{G}^m [A^]∈Gm×n/k,w^∈Fpn/k,[t^]∈Gm。
将 [ A ] [\mathbf{A}] [A]和 w ⃗ \vec{w} w 切分为 k k k个equal blocks,有:
[ A ] = [ A 1 ∣ ⋯ ∣ A k ] ∈ ( G m × n / k ) 1 × k [\mathbf{A}]=[\mathbf{A}_1|\cdots|\mathbf{A}_k]\in(\mathbb{G}^{m\times n/k})^{1\times k} [A]=[A1∣⋯∣Ak]∈(Gm×n/k)1×k,其中 [ A i ] ∈ G m × n / k [\mathbf{A}_i]\in\mathbb{G}^{m\times n/k} [Ai]∈Gm×n/k,同理 w ⃗ = ( w 1 ⋯ w k ) ∈ ( G n / k ) k \vec{w}=\begin{pmatrix} w_1\\ \cdots \\ w_k \end{pmatrix}\in(\mathbb{G}^{n/k})^k w=⎝⎛w1⋯wk⎠⎞∈(Gn/k)k。
转换为需证明:
∑ i = 1 k [ A i ] w ⃗ i = [ t ⃗ ] \sum_{i=1}^{k}[\mathbf{A}_i]\vec{w}_i=[\vec{t}] ∑i=1k[Ai]wi=[t]
采用Bootle等人2016年论文《Efficient Zero-Knowledge Arguments for Arithmetic Circuits in the Discrete Log Setting》中的思路,直接将其展开为: