初始零知识证明
零知识证明(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)=x3−6x2+11x−6,其中一个多项式的次数由 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