尝试先用基本的多项式来科普零知识证明的基本思路:
多项式存在以下的特性,如果多项式f(x)=0存在x=a1和x=a2两个解,那么一定有f(x)=(x-a1)*(x-a2)*h(x),其中h(x)是另一个多项式
现在假设有一个声明者,称他知道多项式p(x)存在两个解 x=1和x=2,但是不愿意透露这个p(x)具体是什么
那么我们怎么验证呢?
以上声明其实等价于:存在一个t(x)=(x-1)*(x-2),使p(x)=t(x)*h(x),验证者知道t(x),但不知道p(x)和h(x)
那么验证者要做的是,随机取一个r,计算t(r),然后要求声明者根据自己的r计算出p(r)和h(r)发过来
如果p(r)除以h(r)等于t(r),那么可以说明这个未知的多项式p(x)确实存在x=1和x=2两个解。
但是注意这个思路有个重要漏洞,声明者是可以算出t(r),然后随便报两个数p(r)和h(r),满足p(r)/h(r)=t(r)
所以进一步的,为了实现零知识证明,我们需要模计算和同态加密来隐藏t(r)。