介绍完了理论,这一部分从具体的协议出发,介绍一下具体的一些ZKP的协议及其构建方式,同时分析他们的效率和安全性
对于协议的安全性和效率分析,主要考虑下面这些内容
效率层面主要考察证明复杂度、验证复杂度,是否需要公钥密码操作,此外所有的复杂度均与安全参数$\lambda$呈多项式关系(即便是通信复杂度为常数个群元素的协议,实际通信量也会随着安全参数增大而增加)
- Prover Complexity:几乎所有的简洁NIZK都具有线性或亚线性的Prover复杂度,各个协议的此项标准差异不大
- Verifier Complexity:Verifier至少需要读取整个statement,因此复杂度至少为statement的线性阶
对于后续的计算开销,可以通过预处理和CRS减少
- Communication Complexity:特别地,基于DEIP的ZKP只有在电路深度和电路规模呈对数关系时才具有对数级别的通信复杂度
- Public Key Operation:公钥密码操作指的是群幂或曲线上的计算等,对称密码操作通常为移位、异或、域上多项式计算等
公钥密码操作实际开销较大,过多的公钥操作可能会称为系统效率的瓶颈
在安全性层面,主要考察基于的困难假设、系统参数生成方式和是否满足抗量子性
- Assumption:分为标准假设和非标准假设,非标准假设可能会影响ZKP系统的落地
- Param. Gen.:基于CRS的方案的系统参数需要由可信第三方生成,可能会影响其在去中心化环境中的应用(比如各种基于区块链的场景)
基于ROM的方案可利用Hash函数由Prover生成随机数,某种程度具备更高的安全性(安全性是否会依赖于Hash函数?)
- Anti-Quantum:MPC-in-the-head的ZKP和部分基于IOP的方案只需要假设单向函数存在,且仅有对称密码操作,被认为是抗量子的
STARK也满足抗量子性
6 基于PCP,LPCP,IPCP和IOP的ZKP
在前面的博客中简要介绍了PCP,LPCP,IPCP和IOP的基本概念,本节从具体的协议出发,简单介绍基于这些信息论证明系统来构建ZKP的方式
6.1 基于PCP的ZKP
Kilian92/Micali94是一种基于PCP的协议,利用Merkle Tree和CRHF构造的简洁交互式论证,大致流程如下
- P和V需要先约定使用的CRHF,记为$H$
- P生成PCP证明$\pi$,利用Merkle Tree对$\pi$承诺(用$H$进行Hash),将树根发送给V
- V生成$r(n)$个随机数并发送给P
- P和V根据随机数,公共输入和树根,共同确定$\pi$的查询位置
- P揭示对应的查询位置的值,并将对应节点路径的Hash值发送给V
- V根据验证路径进行计算,并于最初的树根比较,判断是否接受
Kilian92方案的优点在于利用了Merkle Tree的结构,使得通信复杂度可达到对数级别,此外协议的可靠性来自于$H$的抗碰撞性
但是问题在于这个协议不满足零知识性,仅仅是一个PCP协议,其零知识性需要通过Notarized Envelopes实现(一种在不揭示承诺值的同时证明承诺值具备某种性质的方式)
Micali94利用ROM下的FS变换将上述方案修改为非交互式,Valiant$[Val08]$进一步指出Micali的方案为知识论证
后续工作中通过引入PIR将Kilian92中的四轮修改为两轮,并利用可抽取的CRHF(Extractable CRHF)替代了Micali94中的ROM,$[CY21]$改进了Micali94的通信复杂度,并作出了更详细的探讨,不过这些改进后的论证实际性能较差,难以落地
除了Kilian92等协议外,ZKBoo/ZKB++/KKW18也是基于PCP构造的ZKP方案,这些方案的主要思路都是利用MPC-in-the-head来构造基于PCP的高效ZKP,随后再转化为NIZKAoK
6.2 基于LPCP的ZKP
$[BCIPO13]$指出,zk-SNARK均为基于LPCP实现,首先需要将LPCP转化为LIP,再将LIP转为SNARK,最后转为zk-SNARK
利用特殊的编码方法(可基于KEA实现),可将LIP转化为指定Verifier的SNARK,具有低度Verifier的LIP可转化为公开可验证的SNARK,然后通过随机化处理,SNARK可转化为zk-SNARK
此外Bitansky等人给出了将若干具体PCP转化为LPCP的方法,基于上述构造zk-SNARK的思路,Ben-Sasson等人和Groth分别构造了高效的LPCP和LIP来优化了zk-SNARK的理论和实际性能
6.3 基于IPCP的ZKP
Ligero均为基于IPCP的ZKP,其利用了MPC-in-the-head的思想构造基于IPCP的ZKP
与基于PCP不同,基于IPCP的ZKP允许Prover生成证明后,根据Verifier的随机挑战构造新的证明并完成证明
以Ligero为例,P首先利用RS码将witness编码为一个$m\times n$的矩阵,然后根据V的随机挑战向量$r$(长度为$m$),计算矩阵与该向量的乘积并返回给V,V通过结果判断是否接受P,Ligero协议的可靠性由RS码保障,ZK性则由RS码和随机隐藏多项式保障
6.4 基于IOP的ZKP
Ben-Sasson、Chiesa和Spooner$[BCS16]$指出,ROM下的IOP可被转换为非交互式论证,且可用已有的零知识编译方法,构造一个透明且简洁的NIZKAoK
与基于PCP的ZKP类似,基于IOP的ZKP也具有仅需对称密码、抗量子的特性,但是基于IOP的ZKP的性能更好
基于不同的底层IOP技术,可构造出不同的简洁NIZKAoK,比如利用和校验协议的基于DEIP的ZKP,利用和校验和RS码的Aurora,利用MPC-in-the-head的Limbo等等
7 基于QAP的ZKP
基于QAP的ZKP又被称为zk-SNARK,均基于CRS模型实现
从信息论安全证明角度考虑,zk-SNARK是基于LPCP和LIP实现的,大多数方案军利用QAP将C-SAT归约为一组多项式约束,并利用双线性配对验证上述约束的正确性,从而完成验证过程
Bitansky等人$[BCCT12]$指出,利用可抽取知识假设足以构造zk-SNARK,但是实际上大部分zk-SNARK的实现均基于QAP及其变种
zk-SNARK协议很多,Nitulescu$[Nit20]$对zk-SNARK有较详细的介绍
7.1 基于QAP构造zk-SNARK的主要思路
基于QAP的方案中,主要是利用statement和witness构造三个多项式$p,h,t$,通过判断是否有$p=h\cdot t$成立来完成验证(也即多项式$p$可被多项式$h$或$t$整除)
由于直接证明多项式$p$可被$t$整除比较困难,因此问题转化为Prover知道多项式$p,h$,满足$p=h\cdot t$
在QAP中,电路对P和V均是公开,QAP中的多项式$u,w,y,t$均可由Verifier自行计算,因此Prover可以发送$(c_{N+1},...,c_m),h$给Verifier,考虑到$h$的度为$d$,直接发送$h$需要$O(C_M|)$的通信复杂度
可以利用SZ引理,将直接发送多项式转化为计算该多项式在某个点的的值来降低通信开销,此时由Verifier发起一个随机挑战,选择域上一个随机点$s$发送给Prover,随后Prover返回$p(s),h(s)$,由Verifier验证是否有等式$p(s)=h(s)\cdot t(s)$成立
上述过程既需要交互,有需要确保恶意的Prover在知道$s$后无法伪造$p(s),h(s)$,交互可以通过将$s$提前存入CRS来消除
对于后者,需要某种方式隐藏$s$,记隐藏方法为$E$,且该方法需要具备下列四个特点
- 具有一定的单向性,已知$E$和$E(s)$,难以反向计算$s$
- CRS中需要保存$E(1),E(s),...,E(s^{d-1})$,不能太大
- 满足加法同态,可以利用$E(1),E(s),...,E(s^{d-1})$来计算关于$s$的多项式(也即$E$支持线性运算)
- $E$需要支持二次等式验证,因为需要计算$E(p-h\cdot t)=E(0)$来验证是否有$p=h\cdot t$成立
利用素数阶循环群和双线性映射可以满足上述四个要求,对于双线性映射$e:\mathbb G\times \mathbb G\rarr \mathbb G_T$,任意的$a,b\in \Z_p$,均有$e(g^a,g^b)=e(g,g)^{ab}$,此时令$E(a)=g^a$即可
但是还有两个问题没解决
- 无法保障知识可靠性,也即无法确保Prover确实是利用$(c_{N+1},...,c_m)$构造的$E(p)$
- 无法保障零知识性
第一个问题可用q-PKE假设实现,第二个则是通过在多项式$p$中加入盲因子,可以做到统计零知识性,基于上述思路可以构建通信开销仅为常数个群元素的ZKP方案
7.2 典型协议分析
Pinocchio
秘密挑战通过在CRS中保存$\Big\{ g^{s^i} \Big\}$实现,其中$i\in \{0,...,d-2\}$(多项式$h$的度为$d-2$),为了确保Prover构造了正确的$p$,需要在CRS中保存$\{g_u^{u_k(s)}\},\{g_w^{w_k(s)}\},\{g_y^{y_k(s)}\}$
Verifier需要通过公共输入构造完整$p,h$(协议的可靠性)
Groth16
限定敌手只能进行线性核放射运算的条件下,Groth16基于QAP构造了通信量仅为三个元素的LIP,并基于ee该LIP构造了通信量仅为三个元素,Verifier开销为4次配对运算的zk-SNARK
Groth16的证明首先需要生成一个证明矩阵$\Pi$,然后根据CRS串$\sigma$生成证明$\pi\larr \Pi\cdot \sigma$,验证过程中先生成一个验证函数$t$,之后Verifier检查$t(\sigma,\pi)=0$是否成立,当且仅当等式成立时接收Prover
在此基础上,若LIP具有完美零知识性,,则可利用其构造zk-SNARK
GKMMM18
考虑一个仅包含单项式$g^x$的CRS,参与方$P_1$希望更新时只需随机选择$x_1$,将CRS更新为$g^{x\cdot x_1}$,同时给出$x_1$的知识证明$(g^{x_1},g^{\alpha \cdot x_1})$(利用基于p-PKE的配对完成验证)
GKMMM18的全局CRS的形式为$\{g^{s^i\cdot r^j\cdot q^k}\}$,其中$i,k$均与QAP的度呈线性关系,$j$为某一常数,得到的全局CRS大小为$O(|C_M|^2)$,更新该CRS只需要随机选择$\alpha,\beta,\gamma$,然后将CRS更新为$\{g^{s^{\alpha i}\cdot r^{\beta j}\cdot q^{\gamma k}}\}$即可
该篇论文还给出了一个结论:包含多项式的CRS难以实现可更新性,考虑对$g^{f(s)}$的更新,若选取$\delta$并将旧的CRS更新为$g^{\delta \cdot f(s)}$,此时可证明任意完成上述更新的敌手可以抽取出单项式$(g,g^{s\delta},...,g^{s^n\delta})$,从而攻破方案的知识可靠性
GKMMM18为了避免上述问题,采用了和BCCGP16和Buletproof等基于IPA的ZKP防范,通过为QAP中等式的每一项分别乘一个变量$n$的不同构次幂,来将QAP可满足问题转化为另一多项式是否可满足问题,具体可以看GKMMM18那篇博客
GKMMM18的安全性基于q-MK和q-MC假设,若Verifier所验证的第二个等式成立,则可以得出证明者拥有正确的$f(s,r,q)$,且其拥有QAP的解,由于$\delta$是随机选择的,因此GKMMM18具有完美零知识性
协议的复杂度如前所述,具体关系的CRS规模为$O(|C|)$个群元素,通信复杂度为3个群元素,证明复杂度为$O(|C|)$次群幂,验证复杂度比Groth16多一次配对
7.3 一些重要结论
- Groth16给出了基于通用非对称双线性群模型的通信量下界为2个群元素(每个源群至少一个)
- GKMMM18指出CRS中仅含单项式可以实现可更新,若含有非单项式则难以实现
7.4 效率对比
- GGM:Generic Group Model
- LO:假设敌手只能利用Verifier的消息进行线性或仿射运算
- q-MK:q-Monomial Knowledge Assumption,一个对q-PKE假设的扩展
- q-MC:q-Monomial Computational Assumption
- q-PKE:q-Power Knowledge of Exponent Assumption,属于不可证伪假设
- q-PDH:q-Power of Diffie-Hellman Assumption
- q-SDH:q-Strong Diffie-Hellman Assumption
基于QAP的zk-SNARK可将Verifier的群幂运算步骤移至与处理中,此时Verifier只需要在验证过程中完成常数次配对即可
$O(|io|)E$为Verifier的理论最低,因为Verifier至少需要读取公共输入输出,因此Verifier的复杂度至少为公共输入输出的线性阶
8 DEIP-ZKP
此类协议旨在设计双向高效的ZKP系统,核心思想是利用同台承诺、多项式(向量)承诺、随机隐藏多项式等技术,将现有的针对电路求职问题的DEIP转换为简洁NIZKAoK
8.1 主要思路
DEIP$[XZZPS19]$利用sum-check协议,将电路自顶(从输出层)向下(至输入层)递归证明,基于$[XZZPS19,CMT12,GKR15,Tha13,WJBSTWW17]$的工作,针对分层算术电路的DEIP可靠性误差在$O(d\log g/|\mathbb F|)\sim O(d\log |C|/|\mathbb F|)$之间(取决于具体协议)
- 基于Pedersen承诺的zk-sum-check协议:原始sum-check协议中Verifier会获得多项式$g_i(X_i)$,当$g$是秘密时,此类方式会向Verifier泄露多项式的秘密,因此不满足ZK,但是可以用Pedersen承诺实现zk-sum-check
zk-sum-check利用了Pedersen承诺的两个特殊的性质:(1)可以证明承诺值$c_1,c_2$是采用不同的随机性$r_1\neq r_2$对相同值$x$承诺,(2)可以证明承诺值$c_1,c_2,c_3$承诺的消息$x_1,x_2,x_3$,满足$x_3=x_1x_2$
8.2 效率分析
9 基于内积论证的ZKP
先介绍几个记法
- $\boldsymbol g,\boldsymbol h$:表示生成元向量$\boldsymbol g=(g_1,...,g_n),\boldsymbol h=(h_1,...,h_n)$
- $\boldsymbol r,\boldsymbol s$:表示随机数向量$\boldsymbol r=(r_1,...,r_n)$
- $\boldsymbol a,\boldsymbol b$:表示witness向量$\boldsymbol a=(a_1,...,a_n)$
- $[\boldsymbol a\cdot \boldsymbol r]=\prod _ig^{a_i\cdot r_i}$
- $\boldsymbol g^{\boldsymbol r}=\prod_i g_i^{r_i}$
- $\boldsymbol r_{[:\frac{n}{2}]}=(r_1,...,r_{\frac{n}{2}})$
- $\boldsymbol r_{[\frac{n}{2}:]}=(r_{\frac{n}{2}+1},...,r_n)$
9.1 内积论证
内积论证一般是证明Prover拥有的两个向量$\boldsymbol a,\boldsymbol b$,其内积等于某个值$z$,也即$\boldsymbol a\cdot \boldsymbol b=z$,一般陈述形式如下
$$ \Big\{ (\boldsymbol g,\boldsymbol h,A,B,z;\boldsymbol a,\boldsymbol b) :A=\boldsymbol g^{\boldsymbol a} \wedge B=\boldsymbol h^{\boldsymbol b} \wedge \boldsymbol a\cdot \boldsymbol b=z \Big\} $$
若生成元向量$\boldsymbol g,\boldsymbol h$的生成方式为$\boldsymbol g=[\boldsymbol r],\boldsymbol h=[\boldsymbol s]$,则上述Statement也可携程下列形式
$$ \Big\{ ([\boldsymbol r],[\boldsymbol s],A,B,z;\boldsymbol a,\boldsymbol b) :A=[\boldsymbol a \cdot\boldsymbol r] \wedge B=[\boldsymbol b \cdot\boldsymbol s] \wedge \boldsymbol a\cdot \boldsymbol b=z \Big\} $$
内积论证的核心思想为将长度为$n$的向量根据Verifier的随机挑战归约为长度为$n/2$的向量的Statement,在重复至多$\log n$次后,原Statement中的向量会缩减至标量,此时Prover只需要向Verifier发送对应的标量即可
具体而言,以BCCGP16为例,记IPA在第$i$轮中Verifier的随机挑战为$c$,为了防止Prover作弊,Prover需要在Verifier发送挑战之前向Verifier发送两个承诺值
$$ A_{-1}=[\boldsymbol a_{[:\frac{n}{2}]}\cdot \boldsymbol r_{[\frac{n}{2}:]}]\\A_{1}=[\boldsymbol a_{[\frac{n}{2}:]}\cdot \boldsymbol r_{[:\frac{n}{2}]}] $$
之后Verifier向Prover发送挑战$c$,Prover基于$c$构造一个承诺值
$$ [\boldsymbol r']=[c^{-1}\cdot \boldsymbol r_{[:\frac{n}{2}]}+c^{-2}\cdot \boldsymbol r_{[\frac{n}{2}:]}] $$
此时新的Witness为
$$ \boldsymbol a'=c\cdot \boldsymbol a_{[:\frac{n}{2}]}+c^2\cdot \boldsymbol a_{[\frac{n}{2}:]} $$
然后Prover和Verifier分别各自计算新的承诺
$$ A'=[\boldsymbol a'\cdot \boldsymbol r']=[(c\cdot \boldsymbol a_{[:\frac{n}{2}]}+c^2\cdot \boldsymbol a_{[\frac{n}{2}:]})\cdot (c^{-1}\cdot \boldsymbol r_{[:\frac{n}{2}]}+c^{-2}\cdot \boldsymbol r_{[\frac{n}{2}:]})] =A\cdot A^{c^{-1}}_{-1}\cdot A^c_1 $$
对于向量$\boldsymbol b,\boldsymbol s,\boldsymbol h$,同理可以得到
$$ [\boldsymbol s']=[c\cdot \boldsymbol s_{[\frac{n}{2}:]}+c^2\cdot \boldsymbol s_{[\frac{n}{2}:]}]\\ \boldsymbol b'=c^{-1}\cdot \boldsymbol b_{[\frac{n}{2}:]}+c^{-2}\cdot \boldsymbol b_{[\frac{n}{2}:]}\\B'=[\boldsymbol b' \cdot \boldsymbol s']=B^c_{-1}\cdot B\cdot B^{c^{-1}}_1 $$
注意到witness已经由原来的$\boldsymbol a,\boldsymbol b$变成了新的$\boldsymbol a',\boldsymbol b'$,因此Prover在Verifier发送挑战$c$之前,还需要构造新的$z'$如下
$$ z_{-1}=\boldsymbol a_{[\frac{n}{2}:]}\cdot \boldsymbol b_{[:\frac{n}{2}]}\\z_1=\boldsymbol a_{[:\frac{n}{2}]}\cdot \boldsymbol b_{[\frac{n}{2}:]}\\z'=\boldsymbol a'\cdot \boldsymbol b'=c\cdot z_{-1}+z+c^{-1}\cdot z_1 $$
此时原来的Statement变成了下面这个新的Statement
$$ \Big\{ ([\boldsymbol r'],[\boldsymbol s'],A',B',z';\boldsymbol a',\boldsymbol b') :A'=[\boldsymbol a' \cdot\boldsymbol r'] \wedge B'=[\boldsymbol b' \cdot\boldsymbol s'] \wedge \boldsymbol a'\cdot \boldsymbol b'=z' \Big\} $$
9.2 基于IPA的ZKP构造方式
不同协议的构造方式不相同,但是总体思路大致可以分为下列几个步骤
- 将每个乘法门的约束和乘法门之间的约束转化为一个多项式$p$,此时电路可满足问题归约为该多项式是否为零多项式问题
若$p$为零多项式,则对于Verifier的任意随机挑战$y$,均有$p(y)=0$
- Prover构造一个多项式$t$,使得$t$的常数项为$p$,且$t$为两个多项式的内积形式,同时构造一个不包含常数项$p$的多项式$t'$,并对$t'$进行多项式承诺
- 利用内积论证验证是否有$t'-t=0$,若等式成立,则根据SZ定理,$t$中的常数项$p$以极高概率为零
9.3 优化思路
- BCCGP16:将C-SAT问题归约为判定多项式是否为零多项式问题,并利用内积论证实现对数阶通信开销
- Bulletproof:修改内积论证中Statement的表述形式,降低BCCGP16中约2/3的通信开销
- HKR19:利用二次等式集合论证,简化归约过程中变量和约束的数目,从而降低实际证明开销
- DRZ20:引入结构化承诺密钥,设计对数级别验证复杂度的内积论证来实现实现可更新的承诺,从而实现协议的可更新性
9.4 效率
- $n$:Statement长度
- DRZ20中初始化阶段的可信设置用于确保承诺密钥结构化的正确性
- 可靠性误差$\Theta(\epsilon_{PR}+\epsilon_{IPA})$:其中$\epsilon_{PR}$取决于SZ引理,$\epsilon_{IPA}$取决于内积论证的可靠性误差
- $u_{|C|}-Find-Rep$假设与DLOG假设等价
基于IPA的ZKP有两个主要的优点
- 基于标准困难性假设(DLOG)及其变体
- 应用场景多元:除了实现对C-SAT问题证明外,还可以构造低通信开销的范围证明(Range Proof)、随机洗牌证明(Proof of a Shuffle)、向量置换证明(Vector Permutation Proof),此外还适用于各类区块链场景
但是缺点也比较明显:验证过程需要大量的群幂运算,会导致实际的开销较大
10 基于MPC-in-the-head的ZKP
安全安全多方计算(Secure Multi-Party Computation)协议$[Lin20]$允许$n$个参与方计算一个给定的函数,该函数将$n$个本地输入映射至$n$个输出,且确保输入的隐藏性
MPC in the head范式在$[IKOS09]$提出,可以将简单的(满足完美正确性)MPC协议编译为zk-PCP
10.1 构造思路
以$[IKOS07]$为例,这里简单描述一下MPC-in-the-head构造ZKP的主要思路
- 公共输入:$x,\Pi_f,R,L(R),f$
- Prover输入:$w,s.t. R(x,w)=1$
其中$\Pi_f$满足完美正确性和2-Privacy,且对于任意$x,w=w_1\oplus...\oplus w_n,\boldsymbol r=(r_1,...,r_n),f(x,w,\boldsymbol r)=R(x,w_1\oplus...\oplus w_n)$
接下来执行下面四个步骤
- P将$w$拆分成$n$份$\boldsymbol w=(w_1,...,w_n)$,然后在脑中模拟一个以$x$为公共输入,$w_1,...,w_n$为各个参与方私密输入,$r_1,...,r_n$为参与方对应的随机性的MPC协议$\Pi_f$
协议执行完毕后,$P$获得这$n$个参与方的视角$V_1,....,V_n$,然后P生成$n$个随机数$s_1,...,s_n$并利用承诺方案对这$n$个视角进行承诺,得到$Com(V_1,s_1),...,Com(V_n,s_n)$并发送给V
- V选择两个随机数$i,j\larr [n]$作为随机挑战发送给$P$
- P将$V_i,V_j,s_i,s_j$发送给V(揭示$Com(V_i,s_i),Com(V_j,s_j)$)
V验证:
- 步骤3中收到的消息与步骤1一致
- $P_i,P_j$的本地输出均为1,也即$f_i(x,V_i)=f_j(x,V_j)=1$
- $(V_i,V_j)$一致
当且仅当三个验证均通过时V输出接受,否则拒绝
10.2 效率
- $n$:参与方数量
- $m$:KKW协议中预处理阶段的份数
- $t$:Ligero协议中揭示的视角数量
- $k$:编码多项式的度
- $l$:原码的消息长度
- $d$:码距
- $e$:满足$e<\frac{d}{4}$
- $\lambda_s$:伪随机生成器的种子长度
- $\lambda_t$:比特约束检查协议的重复次数
- $\epsilon_r$:MPC协议的鲁棒性误差
- $\epsilon _i$:内积论证的可靠性误差
从表格里可以看出,基于MPC-in-the-head的ZKP的证明复杂度基本上在线性阶或准线性阶,因为Prover只需要在脑海中模拟MPC协议而无需实际运行,从而省去了大部分的通信和计算开销,因此实际运行的开销通常也不大
方案实现非交互的方式均可通过ROM下的FS变换来实现,此外,方案基于PCP、IPCP、IOP构造,调用合适的MPC协议即可实现只依赖对称密码操作的ZKP,从而实现方案的抗量子性,且无需公钥密码操作
对于此类ZKP协议的优化主要集中在降低通信开销
基于MPC-in-the-head的ZKP有下列优点
- 采用通用的困难性假设,仅需假设CRHF存在
- 仅需要对称密码操作,满足抗量子性,同时可以用于构造高效的抗量子签名(比如Picnic)
- 灵活性强,可通过调整参数控制Prover的计算开销和通信量
- 可堆叠(Stackable):Goel等人指出了Ligero和KKW18具有可堆叠性
此类ZKP的通信开销已优化至对数阶,但是实际开销仍然较大,因此后续的优化方向主要集中在降低实际通信开销中,目前仍未找到在理论和实际层面性能均适用于ZKP的MPc协议,因此也是未来的一个研究方向
References
$[1]$ ZKProof Community Reference
$[2]$ GitHub Repo
$[3]$ 李威翰,张宗洋,周子博,邓燚.简洁非交互零知识证明综述$[J]$.密码学报,2022,9(03):379-447.DOI:10.13868/j.cnki.jcr.000525.
作者,基于QAP的zksnark中的statement具体是指电路的公共输入是嘛,witness就是私密输入加上中间的过程变量?
一般statement指的是待证明的陈述(有的资料没有具体说的话也代指公共输入),witness是P的私有输入,公共输入有的资料也写为instance