PLONK中,上图电路的描述由两部分组成:门约束与线约束(copy constraints)。门约束固定电路中每个门的动作。此外,在电路中我们规定相连线的值应保持一致(例如a1=b1),对此线约束规定这些线的关系。接下来我们分别讨论两类约束的多项式表示。
门约束
在PLONK中,对于第i个门,可被描述为如下形式:
(QLi)ai+(QRi)bi+(QOi)ci+(QMi)aibi+Qci=0
其中Q均为常数,a, b, c则是信号的下标。具体地,在PLONK中门约束可以被分为三类:算术约束(加法门和乘法门)、布尔约束、公共输入约束。
【算术约束】最为常见,用于表示电路中的所有加法门和乘法门,此时a,b,c分别表示门的左右输入和输出信号下标,Q_C一般为0。根据门的类型剩余的符号有不同的取值:
加法门:QLi=1,QRi=1,QOi=-1,QMi=0
ai+bi-ci=0
乘法门:QLi=0,QRi=0,QOi=-1,QMi=1
-ci+ aibi=0
【布尔约束】顾名思义,用于约束布尔类型的信号,其值只能取0或1。例如现在需要约束下标为j的信号∈{0, 1},那么门约束式子中各变量的取值为:
ai=bi=j,QLi=-1,QMi=1,QOi=QRi=Qci=0
-j+j*j=0
另外,针对问题中出现的证明方和验证方都知道取值的输入(公共输入),需要在约束系统中有所体现。例如要求约束下标j的信号取值为v,对应的取值为:
ai=j,QLi=1,QMi=QOi=QOi=0,Qci=-v
j-v=0
利用该式,我们可以很容易地表示上图中的所有门约束:
与Groth16类似,可以将所有的多项式组整合在一个多项式中:
线约束
线约束可以分为两种情况:
同一多项式内部,例如:a1=a3
不同多项式之间,例如:a1=b1
当只需要考虑情况1时,可以通过构造p(x)=P(x)来实现约束:
X(X)=X
p(X+1)=p(X)*(β*X(X))+Y(X)+γ)
P(X+1)=P(X)*(β*X(σ(X))+Y(X)+γ)
p(0)=P(0)=1
其中β,γ为随机数,X->Y表示了待约束的多项式(例如: x-> a(x) ),P(x)使用了x的置换σ(x)。对于下面例子:
X(1) → Y(1)
X →Y:X(2) → Y(2) and,Y(1)=Y(3)
X(3) → Y(3)
σ(1)=3
σ(X):σ(2)=2
σ(3)=1
当且仅当Y(1)=Y(3)成立时,p(x)=P(x)。
现在,让我们增加问题的复杂度:需要约束的多项式个数为k时(仍然只考虑情况1)。自然地,设门的总数为n,我们可以对第j个多项式构造对应的p_j(x)=P_j(x),即
进一步地,情况2的出现要求对以下情况中的x作区分:
pj(x) and pi(x) (i不等于j,i,j∈[ n ])
那么可以增加对x的映射,对于第j个多项式:
X(X)=(j-1)*n+X
p(X+1)=p(X)*(β*X(X))+Y(X)+γ)
P(X+1)=P(X)*(β*X(σ(X))+Y(X)+γ)
p(0)=P(0)=1
以上就是线约束的全部内容,其实质是为了保证电路中同一条或相连线上的值相等。
与Groth16类似,将上述的约束联立将得到一个完整的PLONK约束系统。通过将抽象的代码和电路转化为约束系统R1CS,我们可以将一个零知识证明问题固定下来。让我们带着问题进入下篇:PLONK中如何将R1CS转为多项式描述?它与Groth16做法区别在何处?敬请期待!
[2] Sean Bowe and Ariel Gabizon and Ian Miers. (2017). Scalable Multi-party Computation for zk-SNARK Parameters in the Random Beacon Model.
[3] https://vitalik.ca/general/2019/09/22/plonk.html
本文来源:趣链科技桔子
原文标题:【密码专栏】超强进阶:PLONK VS Groth16(上)
声明:本文为入驻“火星号”作者作品,不代表火星财经官方立场。
转载请联系网页底部:内容合作栏目,邮件进行授权。授权后转载时请注明出处、作者和本文链接。 未经许可擅自转载本站文章,将追究相关法律责任,侵权必究。
提示:投资有风险,入市须谨慎,本资讯不作为投资理财建议。
免责声明:作为区块链信息平台,本站所提供的资讯信息不代表任何投资暗示,本站所发布文章仅代表个人观点,与火星财经官方立场无关。虚拟货币不具有法定货币等同的法律地位,参与虚拟货币投资交易存在法律风险。火星财经反对各类代币炒作,请投资者理性看待市场风险。
语音技术由科大讯飞提供
关键字:算法以太坊安全性零知识证明ZK-SNARK