可信任参与方设置
有了密码学配对,我们现在就准备去设置安全公开且可复用的参数了。假定我们让一个诚实的参与方来生成秘密值 \(s\) 和 \(\alpha\)。当 \(\alpha\) 和所有必要的 \(s\) 的幂及其对应的 \(\alpha\)-移位 \(g^\alpha, g^{s^i}, g^{\alpha s^i}\)(\(i\) 为 \(0, 1, \ldots, d\))被加密完成后,原始数据就必须要被删除。
这些参数通常被称为公共参考字符串(Common Reference String,CRS)。CRS 被生成后,任何证明者和任何验证者都可以使用它来构造非交互式的零知识证明协议。虽然不重要,但 CRS 的优化版本将包含目标多项式的加密值 \(g^{t(s)}\)。
接着,把 CRS 分成两组(\(i\) 为 \(0, 1, \ldots, d\)):
- 证明密钥(Proving Key,也被称为求值密钥 Evaluation Key):\((g^{s^i}, g^{\alpha s^i})\)
- 验证密钥(Verification Key):\((g^{t(s)}, g^{\alpha})\)
只要能将加密值相乘,验证者就可以在协议的最后一步检查多项式了:
- 有了验证密钥,验证者就可以处理从证明者那里得到的加密多项式 \(g^p, g^h, g^{p'}\) 的值:
-
在加密空间中检查 \(p = t \cdot h\):
$$e\left(g^p, g^1\right) = e\left(g^t, g^h\right) \quad\text{等效于}\quad e\left(g, g\right)^{p} = e\left(g, g\right)^{t \cdot h}$$
-
检查多项式限制:
$$e\left(g^p, g^\alpha\right) = e\left(g^{p'}, g\right)$$
-