多项式知识的简洁非交互式论证
我们现在可以整合这个逐步演化出来的多项式知识的简洁非交互式论证(Succinct Non-Interactive Argument of Knowledge of Polynomial,zk-SNARKOP)协议了。为简洁起见,我们将使用大括号来表示由旁边的下标填充的一组元素,例如 \(\left\{ s^i \right\}_{i \in [d]}\) 表示集合 \(s^1, s^2, \ldots, s^d\)。
我们已经明确了目标多项式 \(t(x)\) 和证明者的多项式阶数 \(d\):
- 设置
- 选择随机值 \(s, \alpha\)
- 计算加密值 \(g^\alpha\) 和 \(\left\lbrace g^{s^i} \right\rbrace_{i \in [d]}, \left\lbrace g^{\alpha s^i} \right\rbrace_{i \in \{0, \ldots, d\}}\)
- 生成证明密钥:\(\left( \left\lbrace g^{s^i} \right\rbrace_{i \in [d]}, \left\lbrace g^{\alpha s^i} \right\rbrace_{i \in \{0, \ldots, d\}} \right)\)
- 生成验证密钥:\(\left( g^\alpha, g^{t(s)} \right)\)
- 证明
- 赋值系数 \(\left\{ c_i \right\}_{i \in \{0,\ldots, d\}}\)(即知识)得 \(p(x) = c_d x^d + \cdots + c_1 x^1 + c_0 x^0\)
- 求多项式 \(h(x) = \frac{p(x)}{t(x)}\)
- 代入 \(\left\lbrace g^{s^i} \right\rbrace_{i \in [d]}\) 计算多项式 \(g^{ p(s)}\) 和 \(g^{ h(s)}\) 的值
- 代入 \(\left\lbrace g^{\alpha s^i} \right\rbrace_{i \in \{0, \ldots, d\}}\) 计算移位多项式 \(g^{ \alpha p(s)}\) 的值
- 选择随机值 \(\delta\)
- 构造随机化的证明 \(\pi = \left(g^{\delta p(s)}, g^{\delta h(s)}, g^{\delta \alpha p(s)} \right)\)
- 验证
- 映射证明 \(\pi\) 为 \(\left(g^{p}, g^{h}, g^{p'} \right)\)
- 检查多项式限制:\(e\left(g^{p'}, g\right) = e\left(g^{p}, g^\alpha\right)\)
- 检查多项式系数:\(e\left(g^p, g\right) = e\left(g^{t(s)}, g^h\right)\)
备注 3.3 如果可以将配对结果重用于另一个乘法,那么这样的协议将是完全不安全的,因为这样的话证明者就可以构造 \(g^{p'} = e\left(g^{p}, g^\alpha\right)\),这样也可以通过「多项式限制」的检查:
$$e\left(e\left(g^{p}, g^\alpha\right), g\right) = e\left(g^{p}, g^\alpha\right)$$