文章介绍了ZK-SNARKs中使用的可信设置机制,详细解释了如何在保密值上计算多项式,并提供了Python代码示例。
A trusted setup 是 ZK-SNARKs 用于在一个秘密值上评估多项式的机制。
观察到多项式 $f(x)$ 可以通过计算系数与 $x$ 的连续幂的内积来评估:
例如,如果 $f(x)=3x^3+2x^2+5x+10$,则系数为 $[3,2,5,10]$,我们可以按如下方式计算多项式:
$$ f(x)=\langle[3,2,5,10],[x^3,x^2,x, 1]\rangle $$
换句话说,我们通常认为评估上述多项式的 $f(2)$ 为:
$$ f(2)=3(2)^3+2(2)^2+5(2)+10 $$
但我们也可以将其评估为:
$$ f(2)=\langle[3,2,5,10],[8,4,2,1]\rangle = 3\cdot8+2\cdot4+5\cdot2+10\cdot1 $$
现在假设某人选择了一个秘密标量 $\tau$ 并计算:
$$ [\tau^3,\tau^2,\tau,1] $$
然后将这些点与一个加密椭圆曲线群的生成点相乘。结果如下:
$$ [\Omega_3, \Omega_2, \Omega_1, G_1]=[\tau^3G_1,\tau^2G_1,\tau G_1,G_1] $$
现在任何人都可以使用 结构参考字符串 (SRS) $[\Omega_3, \Omega_2, \Omega_1, G_1]$ 在 $\tau$ 上评估一个三次(或更低)多项式。
例如,如果我们有一个二次多项式 $g(x)=4x^2+7x+8$,我们可以通过将结构参考字符串与多项式的内积来评估 $g(\tau)$:
$$ \langle[0,4,7,8],[\Omega_3, \Omega_2, \Omega_1, G_1]\rangle = 4\Omega_2 + 7\Omega_1 + 8G_1 $$
我们现在已经计算了 $g(\tau)$ 而不需要知道 $\tau$ 是什么!
这也被称为 trusted setup ,因为虽然 我们 不知道 $g(\tau)$ 的离散对数是什么,但创建结构参考字符串的人知道。这可能会导致信息泄露,因此我们 相信 创建 trusted setup 的实体删除了 $\tau$,并且以任何方式都不记得它。
from py_ecc.bn128 im...
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!