零知识证明|4.如何验证多项式盲计算的值?
Posted TurkeyCock
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了零知识证明|4.如何验证多项式盲计算的值?相关的知识,希望对你有一定的参考价值。
这篇文章正式介绍一下Bob如何验证Alice发过来的 E ( P ( s ) ) E(P(s)) E(P(s))的值是否正确。实际上,我们想要实现2个目的:
- 双盲:Alice不知道s,Bob也不知道P(X)
- 可验证:Alice只有发送正确的 E ( P ( s ) ) E(P(s)) E(P(s))的值,才会被Bob接受
要实现第2个目标,需要用到上一篇文章里介绍的α对和KCA的概念。
上一篇文章里的KCA只用到了一个α对,我们可以扩展一下,让Bob给Alice发送多个α对(使用同一个α):
( a 1 , b 1 ) , ( a 2 , b 2 ) , … , ( a d , b d ) (a_1,b_1),(a_2,b_2),…,(a_d,b_d) (a1,b1),(a2,b2),…,(ad,bd)
Alice需要回复一个α对,根据之前介绍的方法,她可以从上面的α对中随机挑选一个 ( a i , b i ) (a_i,b_i) (ai,bi),然后各自乘以一个系数: ( a ′ , b ′ ) = ( c ⋅ a i , c ⋅ b i ) (a',b') = (c \\cdot a_i, c \\cdot b_i) (a′,b′)=(c⋅ai,c⋅bi)。那么,除此之外,还有没有其他方法生成新的α对呢?答案是肯定的,我们可以通过"线性组合"来生成。
举个例子,随机选2个系数 c 1 , c 2 c_1,c_2 c1,c2,生成新的α对: ( a ′ , b ′ ) = ( c 1 ⋅ a 1 + c 2 ⋅ a 2 , c 1 ⋅ b 1 + c 2 ⋅ b 2 ) (a',b') = (c_1 \\cdot a_1 + c_2 \\cdot a_2, c_1 \\cdot b_1 + c_2 \\cdot b_2) (a′,b′)=(c1⋅a1+c2⋅a2,c1⋅b1+c2⋅b2)。
我们来证明一下:
b ′ = c 1 ⋅ b 1 + c 2 ⋅ b 2 = c 1 ⋅ α ⋅ a 1 + c 2 ⋅ α ⋅ a 2 = α ⋅ ( c 1 ⋅ a 1 + c 2 ⋅ a 2 ) = α ⋅ a ′ b' = c_1 \\cdot b_1 + c_2 \\cdot b_2 = c_1 \\cdot \\alpha \\cdot a_1 + c_2 \\cdot \\alpha \\cdot a_2 = \\alpha \\cdot (c_1 \\cdot a_1 + c_2 \\cdot a_2) = \\alpha \\cdot a' b′=c1⋅b1+c2⋅b2=c1⋅α⋅a1+c2⋅α⋅a2=α⋅(c1⋅a1+c2⋅a2)=α⋅a′
可以发现,确实是一个α对。我们可以通过求和符号写出新α对的一般形式:
( a ′ , b ′ ) = ( Σ i = 1 d c i a i , Σ i = 1 d c i b i ) (a',b') = (\\Sigma^d_i=1c_ia_i, \\Sigma^d_i=1c_ib_i) (a′,b′)=(Σi=1dciai,Σi=1dcibi)
根据上面的分析,可以引出一个"d阶系数知识假设",简称d-KCA:
假设G是一个有限循环群,g是它的一个生成元。Bob选取一个α和一个s,然后把下面这些α对发送给Alice:
( g , α ⋅ g ) , ( s ⋅ g , α s ⋅ g ) , … , ( s d ⋅ g , α s d ⋅ g ) (g,\\alpha \\cdot g), (s \\cdot g, \\alpha s \\cdot g), …, (s^d \\cdot g, \\alpha s^d \\cdot g) (g,α⋅g),(s⋅g,αs⋅g),…,(sd⋅g,αsd⋅g)
如果Alice成功回复了一个新的α对,那么Alice一定持有一组系数 c 0 , c 1 , … , c d c_0,c_1,…,c_d c0,c1,…,cd,使得 a ′ = Σ i = 1 d c i s i a'=\\Sigma^d_i=1c_is^i a′=Σi=1dcisi。
可以发现,Bob发的这组α对不是随便给出来的,对应d次多项式的每一项。
有了d-KCA的保证,我们就可以来验证Alice给出的盲计算结果了:
-
假设G是一个有限循环群,g是它的一个生成元
-
选取同态隐藏函数 E ( x ) = x ⋅ g E(x) = x \\cdot g E(x)=x⋅g
-
Bob随机选择一个α和一个s,把生成的α对发送给Allice:
( a 0 , b 0 ) = ( E ( 1 ) , α ⋅ E ( 1 ) ) (a_0,b_0) = (E(1),\\alpha \\cdot E(1)) (a0,b0)=(E(1),α⋅E(1))
( a 1 , b 1 ) = ( E ( s ) , α ⋅ E ( s ) ) (a_1,b_1) = (E(s), \\alpha \\cdot E(s)) (a1,b1)=(E(s以上是关于零知识证明|4.如何验证多项式盲计算的值?的主要内容,如果未能解决你的问题,请参考以下文章