这篇文章正式介绍一下Bob如何验证Alice发过来的的值是否正确。实际上,我们想要实现2个目的:
- 双盲:Alice不知道s,Bob也不知道P(X)
- 可验证:Alice只有发送正确的
的值,才会被Bob接受
要实现第2个目标,需要用到上一篇文章里介绍的α对和KCA的概念。
上一篇文章里的KCA只用到了一个α对,我们可以扩展一下,让Bob给Alice发送多个α对(使用同一个α):
Alice需要回复一个α对,根据之前介绍的方法,她可以从上面的α对中随机挑选一个,然后各自乘以一个系数:
。那么,除此之外,还有没有其他方法生成新的α对呢?答案是肯定的,我们可以通过"线性组合"来生成。
举个例子,随机选2个系数,生成新的α对:
。
我们来证明一下:
可以发现,确实是一个α对。我们可以通过求和符号写出新α对的一般形式:
根据上面的分析,可以引出一个"d阶系数知识假设",简称d-KCA:
假设G是一个有限循环群,g是它的一个生成元。Bob选取一个α和一个s,然后把下面这些α对发送给Alice:
如果Alice成功回复了一个新的α对,那么Alice一定持有一组系数,使得
。
可以发现,Bob发的这组α对不是随便给出来的,对应d次多项式的每一项。
有了d-KCA的保证,我们就可以来验证Alice给出的盲计算结果了:
-
假设G是一个有限循环群,g是它的一个生成元
-
选取同态隐藏函数
-
Bob随机选择一个α和一个s,把生成的α对发送给Allice:
… …
-
Alice需要保守的秘密是
的系数:
-
Alice计算新的α对:
然后把
发送给Bob
-
Bob验证
是否是α对,如果是的话就接受该回复
经过这一过程,Bob就可以确认Alice确实知道这组系数了(根据d-KCA)。因此,我们把上一篇文章中的图改一下,让Alice知道的2个秘密合二为一,就可以得到下面这张图了:
最终的效果是:在Bob不知道P(X)中的系数,Alice也不知道α跟s的情况下,确认了Alice的确知道这组多项式系数。
还是举个简单的实例结束本篇文章,假设:
Bob随机选择一组系数,然后把3个α对发送给Alice:
假设Alice持有的多项式为,在收到Bob的α对之后,计算新的α对:
然后把发送给Bob。
Bob接收到Alice的回复之后,验证其是否为α对:
验证成功!至此,Bob确信Alice确实知道P(X)的这组系数。