零知识证实 | 3.什么是KCA系数知识假设?

上一篇介绍了盲计算,所谓盲计算,就是Alice在不知道s的状况下完成多项式计算。测试

那么,Bob如何肯定Alice的计算结果是正确的呢?要实现这一目标,须要先介绍一个概念:α对.net

在有限循环群G中,若是\alpha, \beta \neq 0 且 b = \alpha \cdot a,那么就称(a,b)为一个α对。cdn

也就是说,b是a的α倍(模p)。有了这个概念,就能够进行一项"系数知识测试":blog

  • Bob秘密选一个随机的α值,生成一个α对:(a,b) = (a,\alpha \cdot a)ci

  • Bob把这个α对(a,b)发送给Aliceit

  • Alice须要回复一个不一样的α对:(a', b')io

  • Bob验证(a',b')是否是一个α对,若是是则接受该回复class

乍一看有点迷糊,既然b=\alpha \cdot a,那Alice不就是能够反推出α等于多少了吗?请注意:这里的乘法是模p乘法。举个例子就清楚了:bfc

假设Bob选定a=2, \alpha=4,那么b=\alpha \cdot a=4 \cdot 2|_{mod7}=1,因此最终生成的α对是(2,1),Alice无法反推出α的值是多少(在p很是大的状况下,这是一个离散对数难题)。循环

既然Alice不知道α,那么她就只有一种方法能够生成新的α对:给a和b各乘上同一个系数\gamma

举个例子,假设Alice秘密选定\gamma = 5,那么新生成的α对:

(a',b')=(\gamma \cdot a, \gamma \cdot b)=(5 \cdot 2|_{mod7}, 5 \cdot 1|_{mod7}) = (3, 5)

Bob收到这个新的α对(a',b')以后,验证\alpha \cdot a' = 4 \cdot 3|_{mod7} = 12|_{mod7} = 5 = b',接受该回复。

也就是说,Alice秘密持有\gammaBob秘密持有\alpha。跟上一篇文章中的图拼到一块儿:

这就是所谓的"系数知识假设",英文是"Knowledge of Coefficient Assumption",简称KCA。一句话归纳:所谓KCA,指的是若是Alice成功回复了一个α对,那么她必定持有某个\gamma使得a'=\gamma \cdot a

相关文章
相关标签/搜索