零知识证明学习(二)—— 零知识证明多项式问题

初始零知识证明

零知识证明(Zero-Knowledge Proofs,ZKP)背景知识,为什么引入多项式(Polynomial)?

简单的证明

这里我们介绍一种简单的证明,先不考虑零知识,交互性等等。

假设Alice有个长度为10的bit数组,Alice需要向Bob证明这个数组的所有bit都为1,实际Alice是知道每一个bit都为1的。这时Bob想要检查这个数组bit是否全为1,他以任意的顺序的抽取其中一个元素,如果这个元素等于1,因此检查正确的概率只有 1 10 \frac{1}{10} 101的概率(这概率有点小啊),如果验证某一个bit为0,则Alice是错误的。

这里我们我们需要考虑一个问题,如何提高Bob检查正确的概率,在某些情况下,当验证者的正确概率达到 50 % 50\% 50%时候才能相信证明者说的是正确的,这也意味着Bob需要至少检查5个bit数组才能满足概率。如果想要正确概率达到 95 % 95\% 95%时,Bob几乎需要检查全部bit是否正确。这时我们可以很大的缺陷,只有检查一定数量的数组才能满足要求,当遇到上万级别的数组,如果还需要使用这种方法,这显然是不切实际的。
在这里插入图片描述

多项式

假设一个多项式为: f ( x ) = x 3 − 6 x 2 + 11 x − 6 f(x)=x^3-6x^2+11x-6 f(x)=x36x2+11x6,其中一个多项式的次数由 x x x最大指数决定,该多项式次数为3。多项式有一个非常好的性质,如果有两个不同的多项式,且最高幂次为 d d d,则该多项式的交点不超过 d d d。例如,我们将上面多项式修改一下为: f ( x ) = x 3 − 6 x 2 + 10 x − 5 f(x)=x^3-6x^2+10x-5 f(x)=x36x2+10x5,如下图绿线所示,我们可以看到经过修改,两个多项式曲线相交于一点。事实上,两个不相等的多项式是不可能共用一条曲线,简单的说就是,两个不同的曲线只会存在相交的点。

在这里插入图片描述

这个属性是从寻找相交点产生的。如果我们想要找两个多项式的交点,需要将两式相等求解,例如我们找多项式 f ( x ) = x 3 − 6 x 2 + 11 x − 6 f(x)=x^3-6x^2+11x-6 f(x)=x36x2+11x6 x x x的解,将多项式等于 0 0 0,求解得到 x = 1 , x = 2 , x = 3 x=1,x=2,x=3 x=1,x=2,x=3。相似的我们求解多项式 f ( x ) = x 3 − 6 x 2 + 11 x − 6 f(x)=x^3-6x^2+11x-6 f(x)=x36x2+11x6 f ( x ) = x 3 − 6 x 2 + 10 x − 5 f(x)=x^3-6x^2+10x-5 f(x)=x36x2+10x5,找到一个交汇点 x = 1 x=1 x=1,如下图所示

在这里插入图片描述

对于任意幂次为 d d d多项式,任何这样的方程的结果总是另一个幂次为 d d d多项式的结果,因为这些多项式没有产生更高的幂次。例如 5 x 3 + 7 x 2 − x + 2 = 3 x 3 − x 2 + 2 x − 5 5x^3+7x^2-x+2=3x^3-x^2+2x-5 5x3+7x2x+2=3x3x2+2x5,简化为 2 x 3 + 8 x 2 − 3 x + 7 = 0 2x^3+8x^2-3x+7=0 2x3+8x23x+7=0。代数基本定理告诉我们这个幂次为 d d d的多项式最多有 d d d个解,因此有 d d d个共同点。

因此,我们可以得出结论,任何多项式在任意点的求值,类似于其唯一恒等式的表示。事实上,对于所有 x x x的选择,在上面这些多项式中,只有最多3个选项的值相等,并且与其他选项的值都不同。

结论

如果一个证明者声称知道某个多项式(但不知道它的幂次数有多大,验证者也知道,他们可以遵循一个简单的协议来验证这个声明:

  • 验证者随机选择一个 x x x,并计算本地多项式
  • 验证者把 x x x给证明者,并询问计算多项式计算结果
  • 证明者收到 x x x后进行计算,并将结果给验证者
  • 证明者收到结果与本地多项式计算结果进行对比。

假设我们考虑 x x x的取值范围为 1 − 1 0 77 1-10^{77} 11077,因此对于多项式不同点的数量至少为 1 0 77 − d 10^{77}-d 1077d。因此,验证者选择 x x x选择共享点的概率为 d 1 0 77 \frac{d}{10^{77}} 1077d,这基本上是可以忽略的。

注意:与低效的比特检查协议相比,新协议只需要一次,并给出了正确的结论。

这就是 z k − S N A R K zk-SNARK zkSNARK的核心是构造多项式!

猜你喜欢

转载自blog.csdn.net/YM_1111/article/details/124928481
今日推荐