KCA验证The Knowledge of Coefficient Test and Assumption
2019.12.06 胡振远
在多项式盲证中,Alice在未知的情况下,通过计算
,确实能够验证Bob拥有
,是
的解。因此Alice可以向外界宣告,Bob是对的。但是如果Alice不诚实,不计算
就直接向外宣告Bob是对的,或者宣告Bob是错的。那么Alice这种行为如何保证呢。我们需要用到KCA做检验。
KCA检验原理
我们可以这么理解KCA检验的原理,假设Bob秘密的持有一个数据,现在Alice除了需要公布
,还需要公布
。那么Bob就能根据
和
计算这两者的相关性。
由于Alice不知道,如果Alice没有诚实地计算
和
,就无法伪造一份
。
那么Bob如何把秘密地传输给Alice,而且Alice还可以在不知道
的情况下,计算出
和
呢。
对
我们定义是群
的生成元,
表示
个
相加。如果
,
都是
中的元素,且
,我们称
是一个
对。
按一下流程
- Bob首先在某个
中选择一个
,从
中选择
,然后计算
- Bob发送这个
给Alice
- Alice在
中选择一个
,计算
- 由于
,因此
也是一个
对。
使用
对进行KCA检验
在Bob向Alice公布的同时,我们现在要求Bob同时Alice公布
,我们当然希望Bob公布的分别都是一个个的
对。
... | ... |
那怎么验证他们确实都是对呢。
配对函数
配对函数是满足如下定义的函数:
如果要验证对,我们就可以判断如下等式是否成立:
设,
因此是一个
对,这样也就验证了Bob公布的两组数据。
KCA检验
回到多项式盲证,为了检验Alice正确的计算了,现在需要Alice再计算一组
。由于
=
现在Alice不光要公布的计算结果,同时还需要公布
这样Alice由于不知道,如果不经过诚实地计算,就几乎不可能向Bob公布出来这两组数据,而且这两组数据具有
对的关系。
偏移
更进一步,我们也不希望公布,为此Bob可以挑选
偏移
设,
这样由Bob公布的数据将更加进一步得到隐藏,本文在此不再详述。