Filecoin技术文档学习6-zk-SNARKs系列知识5 匹诺曹协议

多项式验证:

在讲解新内容之前,首先我们看一下如何利用上一节将的内容,做一次技术验证:

Filecoin技术文档学习6-zk-SNARKs系列知识5 匹诺曹协议_第1张图片

公式1是我们上一节,将Alice需要证明的问题转换为一个需要证明的多项式P(x)的验证问题,其中公式2中S是表示问题转换过程中涉及的变量,公式3中A(x)是通过拉格朗日差值算法推理出来的,关于系数S的多项式函数。公式4中Bob可以通过随机抽样一个属于域Fp的变量来检查该公式的有效性,进而确认Alice的相关信息,这个过程在前面的多项式盲证中解释过。

需要注意的是,如果A(x),B(x)是d阶多项式,那么P(x)是2d阶多项式。如果Alice没有按照公式来生成多项式,而是通过随便选择一个与P(x)不等价的多项式P(x)',那么P(x)与P(x)'最多有2d个交点【1】,也就是说,Bob在域Fp的取值范围是0~p的话,那么Alice选择一个错误的多项式P(x)'而不是P(x),并且Bob又能验证通过公式4的概率是2d/p,其中d指的是多项式的阶,而P是取值范围,因此当P取值范围很大的时候,Alice在撒谎的情况下不被发现的概率就很低了。

表达式6是一个验证P(x)的过程。此验证过程仅能保证Alice选择的多项式与真正要验证的表达式P(x)是等价的。并不能保证P(x)=S.A(x)*S.B(x)-S.C(x)这个表达式中Alice不能找出x=1,2,3时P(x)=0的S的其它值。为了防止这个问题,我们需要用到多项式盲证的可验证性协议,这个在前面的章节中已经讲过。

多项式盲证的可验证性。

Filecoin技术文档学习6-zk-SNARKs系列知识5 匹诺曹协议_第2张图片

公式1,2,3,4我们在前面的章节已经讲过,这里不再赘述,公式5我们是把这个S.A(x)的点积运算展开,用另一种更准确的方式表达,我们定义了新的公式6和公式7,其中公式6的意思是使得L,R,O作为x的系数更精确,因为P(x)的运算决定了,在运算过程中会合并同类项,那么L,R,O与S之间的线性关系就会丢失。同时定义了公式7,此公式用来提供给Bob做同态隐藏的运算逻辑公式。

我们通过公式10的证明,F是函数qi的线性组合,其中i属于[1,m];

因此通过前面一节的多项式盲证的可验证性协议。

Bob发送给Alice数据是,首先随机选择a属于Fp,

b属于Fp*。然后发送E(b*q1(a)), E(b*q2(a)),……

E(b*qm(a)),然后从Alice那里获得E(b*F(a))并检查其有效性,就可以验证Alice采用的s内容可以满足P(x)的同阶问题和L,R,O采用错误系数s'的问题。

零知识逻辑,赋值隐藏

在Alice与Bob交互的过程中,存在一种可能就是Bob可以通过对E(L(s)), E(R(s)),E(O(s))的结果来反向穷举Alice提供的s的值.为了避免对于简单运算存在的暴力破解的可能,Alice在计算完L,R,O之后进行再次隐藏:

Filecoin技术文档学习6-zk-SNARKs系列知识5 匹诺曹协议_第3张图片

通过引入非零随机数的机制,在不改变线性关系和隐藏特性的前提一下,做到了Alice参数的隐藏的特性。

【1】: https://en.wikipedia.org/wiki/Schwartz%E2%80%93Zippel_lemma

你可能感兴趣的:(Filecoin技术文档学习6-zk-SNARKs系列知识5 匹诺曹协议)