抽样带来的抽样点泄露问题
验证者可以将抽样点t直接发送给证明者吗,这样会足够安全吗?
- 实际上,证明者知道抽样点t也是不够安全的,因为证明者可以不随机选取多项式D(X),而是能够刻意的构造出一个两个多项式D1(t)和H1(t),使得D1(t)=H1(t)*Z1(t)。
为了解决以上问题,我们提出了同态隐藏策略
同态隐藏
- 如果E(x)=m,那么,很难根据E函数和m值来推测x,这也是哈希函数的重要特性。不能逆推。
- 如果x1!=x2,那么E(x1)=E(x2)的概率非常的小
- 如果已知E(x1)和E(x2),则可以推出E(x1+x2),这就是加法同态。从而也可以推出E(a* x1 + b* x2) = a* E(x1) + b* E(x2)。
满足以上三个条件,我们称之为加法同态。 (此概念的具体理解可以查看RSA加密算法理论)
加入同态隐藏的改进
接下来我们运用加法同态对零知识证明过程进行改进,具体过程如下:
-
首先,验证者不再给证明者发送抽样点t,而是给证明者发送一系列指数(1,t^2...t^2d)的映射值,即E(1),E(t)..E(t^2d)----相当于RSA算法中的加密值
-
此时证明者不知道抽样点t值,由于同态特性,就可以根据收到的映射值E(t)计算出E[P(t)], E[H(t)],然后将计算出的E[P(t)], E[H(t)]发送给验证者
-
验证者通过检查E[P(t)] ?= E[H(t) * Z(t)],便能了解证明者知道解向量s,而通过这种方法,证明者也无法构造D1(t)和H1(t)来作出假证明
但是P(t)在计算过程中存在乘法,如果只引入加法同态,那么整个式子是不能被完全计算的,此时就需要在引入乘法同态,零知识证明--ZK-SNARKS(六)中,我们将对乘法同态进行介绍。