可信设置

文章介绍了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$,并且以任何方式都不记得它。

Python 示例

from py_ecc.bn128 import G1, multiply, add
from functools import reduce

def inner_product(points, coeffs):
    return reduce(add, map(multiply, points, coeffs))

### Trusted Setup
tau = 88
degree = 3

## tau^3, tau^2, tau, 1
srs = [multiply(G1, tau**i) for i in range(degree, -1, -1)]

### Evaluate
## p(x) = 4x^2 + 7x + 8
coeffs = [0, 4, 7, 8]

poly_at_tau = inner_product(srs, coeffs)

验证 Trusted Setup 是否正确生成

给定一个结构参考字符串,我们如何知道它们是否遵循结构 $[x^d, x^{d-1}, \dots, x, 1]$,而不是随机选择的?

如果进行 trusted setup 的人也提供 $\Theta=\tau G_2$,我们可以验证结构参考字符串确实是 $\tau$ 的连续幂。

$$ e(\Theta, \Omega_i)\stackrel{?}=e(G2,\Omega{i+1}) $$

这里 $e$ 是一个 双线性配对。直观上,左侧计算的是 $\tau\cdot\tau^i$,右侧计算的是 $1\cdot\tau^{i+1}$。

要验证 $\Theta$ 和 $\Omega_1$ 是否具有相同的离散对数($\Omega_1$ 应该是 $\tau G_1$),我们可以检查:

$$ e(\Theta, G_1)\stackrel{?}=e(G_2, \Omega_1) $$

作为多方计算的一部分生成结构参考字符串

假设生成结构参考字符串的人实际上删除了 $\tau$ 并不是一个良好的信任假设。

我们现在描述多方协作创建结构参考字符串的算法,只要其中一个人是诚实的(即删除了 $\tau$),那么结构参考字符串的离散对数将是不为人知的。

Alice 生成结构参考字符串 $([\Omega_n,…,\Omega_2,\Omega_1, G_1],\Theta)$ 并将其传递给 Bob。

Bob 使用前面的检查来验证 SRS 是否“正确”。然后,Bob 选择自己的秘密参数 $\gamma$ 并计算:

$$ ([\gamma^n\Omega_n,…,\gamma^2\Omega_2,\gamma\Omega_1,G_1],\gamma\Theta) $$

请注意,现在 srs 的离散对数为:

$$ ([(\tau\gamma)^n,…,(\tau\gamma)^2,(\tau\gamma),1],\tau\gamma) $$

如果 Alice 或 Bob 删除他们的 $\tau$ 或 $\gamma$,那么最终 srs 的离散对数将无法恢复。

当然,我们并不需要将参与者限制为两个人,可以有任意数量的参与者。

这个多方计算通常被非正式称为 powers of tau ceremony

在 ZK-SNARKs 中使用 trusted setup

在结构参考字符串上评估多项式不会向验证者泄露有关多项式的信息,而且证明者也不知道他们在评估哪一点。我们稍后将看到,这个方案有助于防止证明者作弊,并有助于保持他们的见证为零知识。

  • 原文链接: rareskills.io/post/trust...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
RareSkills
RareSkills
https://www.rareskills.io/