Filecoin技术文档学习5-zk-SNARKs系列知识4|Filecoin技术文档学习5-zk-SNARKs系列知识4 QAP

本节重点要讲解的是如何将一个计算问题的证明转换为一个多项式的验证。先来看一下我们要解决的问题案例:Alice想要向Bob证明他知道c1,c2,c3属于Fp,且(c1*c2)*(c1+c3)
= 7。为了达到这个目的,我们首先把这个表达式拆分成一级约束系统,具体操作如下:
一级约束系统
Filecoin技术文档学习5-zk-SNARKs系列知识4|Filecoin技术文档学习5-zk-SNARKs系列知识4 QAP
文章图片
第一步:把这个表达式分解成三种简单的通用的表达方式1,2,3;其中我们增加了变量c4,c5,c6。如果表达式1,2,3同时成立,那么论点也成立。
第二步:引入向量S=
c1, c2, c3, c4, c5, c6>并根据表达式1,2,3,定义一个通用的表达式4:S.a*S.b-S.c = 0;
其中"."符号表示向量的点积运算。把公式6的向量a1,b1,c1的值代入表达式4之后,表达式4就退化为表达式1。根据相同的方式,可以计算出(a2,b2,c2)和(a3,b3,c3).
第三步:我们将a1,a2,a3组成矩阵,则横向是向量a1,a2,a3,我们为纵向数据定义一个函数A(x),第一列定义为A1(x),如图所示,其它列同理。那么x可以算作关于行号的变量。则对于第一列,A1(1)=
0, A1(2)= 1,A1(3)= 0。通过拉格朗日差值算法【1】,我们可以求得一个具体的A1(x)的多项式,此处忽略相关计算。
以此类推,通过矩阵a我们可以求得一个A(x)的表达式9。当x=1时,A(1)就是表达式6中的a1.同理可以得出B(x)和C(x)的具体表达式。
多项式转换:
根据表达式4的特点,我们定义表达式13。当x=1时,表达式13就可以退化为表达式4.
Filecoin技术文档学习5-zk-SNARKs系列知识4|Filecoin技术文档学习5-zk-SNARKs系列知识4 QAP
文章图片
我们定义了表达式11和12,将根据P(x)在x=1,2,3时为0的特性,根据多项式除法【2】,我们可以判定多项式P(x)可以整除多项式T(x)。因此Alice只要证明公式11成立,即可证明其论点的正确性,这个推到过程已经附在上图,不再赘述。
[1]:https://en.wikipedia.org/wiki/Lagrange_polynomial
【Filecoin技术文档学习5-zk-SNARKs系列知识4|Filecoin技术文档学习5-zk-SNARKs系列知识4 QAP】[2]: https://en.wikipedia.org/wiki/Polynomial_long_division

    推荐阅读