证明多项式的知识
我们的讨论从证明多项式的知识开始,再将证明协议逐步转换成一种通用的方法,在这个过程中我们也将发现多项式的很多其他性质。
但是到目前为止,我们的协议还只是一个很弱的证明,因为协议中并没有采取任何措施去保证参与方必须按照协议的规则生成证明,所以参与方只能互相信任。例如,证明者并不需要知道多项式,也可能通过其他方式得到正确的答案。而且,如果验证者要验证的多项式的解的取值范围不够大,比如我们前文说的 10,那么就可以去猜一个数字,猜对答案的概率并不是可以忽略不计的。因而我们必须要解决协议中的这个缺陷,但在解决问题之前首先要思考一下,知道多项式意味着什么呢?一个多项式可以用下面的形式来表示(其中 \(n\) 指的是多项式的阶):
$$c_n x^n + ... + c_1 x^1 + c_0 x^0$$
如果一个人说他或她知道一个一阶多项式(即:\(c_1 x^1 + c_0\)),那么这就意味着他或她一定知道系数 \(c_0, c_1\) 的值。这个系数可以是包括 \(0\) 在内的任意值。
假设证明者声称他知道一个包含 \(x = 1\) 和 \(x = 2\) 两个解的三阶多项式。满足此条件的一个有效的多项式就是 \(x^3 - 3x^2 + 2x = 0\)。因为对于 \(x = 1\):\(1 - 3 + 2 = 0\),对于 \(x = 2\):\(8 - 12 + 4 = 0\)。
让我们先来仔细研究一下这个解的结构。
译者注:这一节告诉了我们多项式的一个本质——多项式的「知识」就是多项式的系数。所谓「知道」多项式就是指「知道」多项式的系数。