上一篇介绍了什么是同态隐藏。假设取,则
能够经过
和
计算出来:.net
实际上,不单单支持加法,支持全部"线性组合"的同态隐藏,好比:3d
须要注意的是,上面的加法和乘法运算都是模p运算。cdn
假设如今有一个d次多项式,其中的系数
是Alice须要保护的秘密。根据上面的特性,咱们能够计算出
:blog
如今Bob想来验证Alice是否是真的知道这些秘密,因而他决定随机指定一个数,要求Alice计算
等于多少。可是,Bob不想直接把
的值告诉Alice,也就是说,这个
是Bob的秘密。显然,这又须要一次同态隐藏,也就是说,Bob把下面这些值提供给Alice:ip
而后Alice就能够根据上面的公式计算的值:it
最终的效果是:在Bob不知道P(X)中的系数是多少,而Alice也不知道s等于多少的状况下,完成多项式的验证。这就是所谓的"多项式盲计算"。io
下面举个例子来加深理解,假设:class
Bob想验证这一点上的
的值,那么他须要提供这2个值:
基础
而后Alice根据这3个值计算的值而后返回给Bob:bfc
最后,咱们来看一下是否是真的等于5:
实际上,这背后依赖的理论基础是Schwartz-Zippel引理:在一个很大的集合中随机选择一组数,知足某个多项式取值的几率几乎为0。所以,随机选一个点,而后在Alice不知道该点的值的状况下,提供多项式的值以供Bob验证。
那么问题来了:Bob怎么验证Alice提供的的值对不对呢?且听下回分解。