接下来我们需要考虑如何采用计算机来存储和验证。我们引入QAP的概念,并且我们可以P(x)转换为QAP问题。QAP(Quadratic Arithmetic Programs)翻译是二次算术程序。
QAP是一种非常适合于计算机进行表达和运算的形式。一个QAP问题包含一系列的算数表达式,这些算数表达式都是具有最多两个输入和一个输出的形式。例如
扁平化展开
以为例,求的解。我们将P(x)按照QAP展开,得到:
这样我们就把一个多项式问题拍扁成了4个算数表达式,并且引入了一些中间变量。上面这4个表达式,我们称为4个约束条件。我们需要留意的是,这四个约束条件,也可以被理解为4个门电路。
R1CS转换
我们可以建立4组向量来表达上面的4个约束。是满足的解。考虑到上述的4个表达式包含的参数信息,我们令
第一个约束(第一个门电路)
根据第一个约束我们建立第一组向量,转换为。那么这第一组向量,如何能够满足呢?这里大部分文章都没有讲清楚。我们在这里细讲一下。
由于s向量是已知的,我们列出以下表格。
* | - | = | 0 | ||||||
---|---|---|---|---|---|---|---|---|---|
1 | ? | 1 | ? | 1 | ? | ||||
x | ? | x | ? | x | ? | ||||
out | ? | out | ? | out | ? | ||||
sym1 | ? | sym1 | ? | sym1 | ? | ||||
sym2 | ? | sym2 | ? | sym2 | ? | ||||
sym3 | ? | sym3 | ? | sym3 | ? |
那我们直接:
令的第2个分量为1,其他分量为0;
令的第2个分量为1,其他分量为0;
令的第4个分量为1,其他分量为0;
也就是:
* | - | = | 0 | ||||||
---|---|---|---|---|---|---|---|---|---|
1 | 0 | 1 | 0 | 1 | 0 | ||||
x | 1 | x | 1 | x | 0 | ||||
out | 0 | out | 0 | out | 0 | ||||
sym1 | 0 | sym1 | 0 | sym1 | 1 | ||||
sym2 | 0 | sym2 | 0 | sym2 | 0 | ||||
sym3 | 0 | sym3 | 0 | sym3 | 0 |
那么这个方程的计算结果刚好就是,也就意味着这样的和解向量是满足第一个约束(门电路)。其中:
= [0, 1, 0, 0, 0, 0]
= [0, 1, 0, 0, 0, 0]
= [0, 0, 0, 1, 0, 0]
第二个约束(第二个门电路)
= [0, 0, 0, 1, 0, 0]
= [0, 1, 0, 0, 0, 0]
= [0, 0, 0, 0, 1, 0]
第三个约束(第三个门电路)
= [0, 1, 0, 0, 1, 0]
= [1, 0, 0, 0, 0, 0]
= [0, 0, 0, 0, 0, 1]
第四个约束(第四个门电路)
= [5, 0, 0, 0, 0, 1]
= [1, 0, 0, 0, 0, 0]
= [0, 0, 1, 0, 0, 0]
汇总
令,则当时,都满足
也就是说这个函数必然通过点,我们不妨设,那么必然能够多项式整除,设商为,那么也就是
到此为止,只需要Bob向Alice提供证据证明存在整除即可。在这里我们进行了换元操作,把替换成了,我们确保的形式不变,那么就需要把向量组进行适当形式的变化。