「精选」一文看懂Pinocchio协议

Pinocchio协议大致可以分为五个步骤。前三步是Trusted-Setup过程。第四步是生成证明,第五步是验证证明。

第一步:首先你要把需要进行证明的计算过程产生相应的算术电路。所谓的算术电路是指一种计算模型,简单的说它就是把要证明的数学公式转换成统一格式的算式,有很多的乘法和加法组成,这就构成了所谓的乘法门和加法门,然后这些门之间可以再用线连接在一起,用户就可以把数值输入到电路的输入线上,然后经过门的计算,我们会在电路的输出线上得到经过计算的数值。电路的编写目前来说还是比较难掌握,需要开发者有不少的经验。

第二步:把算术电路转换成一种叫做 R1CS 的约束系统。R1CS 是指rank-1 constraint system,也就是一阶约束系统。这里其实就做了两件事,第一件事是把所有的加法和常数乘法折叠在一起,最后只剩下所有乘法门。第二步,把所有乘法运算的两个输入和输出的约束关系合并成了三个巨大的矩阵A,B与C,这三个矩阵可以相乘的,A * B = C。

第三步:根据三个矩阵产生QAP,这一步比较绕,理解起来也比较难。简单的说就算把所有的取值和约束条件整合起来到一个多项式关系中,再利用多项式的性质,选取一个点去校验就能证明数据的正确性了,并且这个点是放到了椭圆曲线上进行同态地校验的,并不会暴露出去。这一步完成后会生成一堆的参数,我们可以称它为「证明密钥」和「验证密钥」用来完成后面的证明过程。

第四步:证明者生成证明。证明者拿到(证明密钥),然后把它与证明者要证明的秘密数据结合起来,拼回多项式在这个挑战点上的取值。证明者将算出来的值发送给验证者,发送的内容也就是几个值而已,所以证明其实很小很小。

第五步:验证者验证证明。验证者拿到「验证密钥」和证明者算出来的值,利用椭圆曲线配对操作来验证证明者的计算是否正确。Pinocchio 协议的过程其实特别绕,细节也很多,上面只是讲了一个大致的框架,感兴趣的小伙伴推荐大家多去看一看专门的文章。

Leave a Reply

Your email address will not be published.