前言

这是探索 zk-SNARK 的系列文章的第四部分,zk-SNARK 是一种无需泄露秘密信息即可证明知识正确性的技术。在前面的部分中,我们学习了一些复杂的概念,例如二次算术程序和椭圆曲线配对(复制粗体文本中的第 3 部分链接)。

二次算术程序允许使用多项式表示计算问题,而椭圆曲线配对提供了一种有用的编码工具来检查数据的正确性。通过将它们与其他算法相结合,我们可以让证明者证明他们知道特定 QAP 的解决方案,而无需透露任何其他内容。这可以在不泄露敏感数据的情况下提供信任。

本文将重点介绍 QAP 的皮诺曹协议,该协议允许证明变量满足某些条件,而无需透露有关变量值的详细信息。

这种证明很容易创建,并且可以在不检查每个计算步骤的情况下进行身份验证,从而确保区块链应用程序和其他需要安全身份验证和高性能的领域的数据隐私和安全,而不会泄露私人信息。

非零知识 Pinocchio 协议构建

我们首先说明匹诺曹协议的工作原理,如下所示:

令 G 为具有素数阶 p 的群。 设 E : Fp → G 为同态编码。 如下:

对于发电机 g

上面的表达式是椭圆曲线的“双线性映射”。假设证明者 P 认识一个证人,如下所示

为原始运算电路。通过简化,她将知道一些多项式,例如

说到这里,我们还是会觉得有点迷惑吧!别担心,仔细阅读每一行并研究公式,我将在下面解释这个协议的主要思想!

V(验证者)想要在随机点(随机点)z ∈ Fp 上对照上述多项式的值来测试 P(证明者)。 查询 P 的值

且 h(z) 在某个随机 z ∈ Fp 处。 P 将同态编码)这些值并将它们发送给 V。由于同态和双线性映射属性,V 可以验证同态编码值是否满足上面相同的方程(20)。

如果这样做,验证者可以确信证明者实际上认识证人,而无需了解该证人。以下是有关刚刚描述的主要思想的更多详细信息。

该协议的第一步是创建一个通用引用字符串 (CRS),其中包含 z 倍数的同态编码。

CRS 有两个目的:

首先,证明者可以使用 CRS 的组元素的线性组合(线性组合)为其证明生成同态编码,而无需知道 z。

其次,设置 CRS 消除了 V 手动生成 z 并将加密消息从 z 发送到 P 的需要。这使得该证明完全是非交互式的,因为一旦创建了 CRS,P 就可以生成令人信服的证据。

我们可以将 CRS 视为两组公共组元素:

评估密钥,其中包含构建证明所需的组元素,以及验证密钥,其中包含验证所需的元素。

通用参考字符串:

随机选择 α, βu, βv, βw, γ, z ∈ F ∗ p。

实施下面的 CRS,然后删除其创建过程中使用的所有组元素(有毒废物)。

证明者的消息:

假设 Prover 有以下多项式:

首先,证明者计算 h(x)。那么,证明人的证据包括以下内容:

确认:

收到证明者的证明后,验证者首先检查项 u(z)、v(z)、w(z)、h(z) 是否被构造为 CRS 中项的线性组合计算,执行以下 4 个检查:

接下来,检查每项 u(z)、v(z)、w(z) 是否是使用相同的线性系数生成的:

这可以通过验证以下等式来检查:

最后,我们检查表征多项式整除性准则的关键条件:

当且仅当从 (21) 到 (26) 的所有检查都成立时,我们才成功构建了非零知识匹诺曹协议。

接下来我们就进入分析非零知识匹诺曹协议的步骤!

非零知识 Pinocchio 协议分析

首先,我们需要学习指数假设的知识

假设给 Alice 一对群元素 (x, αx)

我们称这样的一对为α−分离的。那么,对于 Alice 来说,生成另一个 α−分离对 (y, αy) 是不可行的,除非通过以下方式生成:

给定 n 个 α− 分离对,如果 Alice 返回另一个 α− 分离对,它一定是原始 α− 分离对的高概率线性组合。

回到我们的协议,V 需要检查的主要条件是多项式整除条件:

然而,除了这个方程之外,验证者还必须检查其他方程。

这是因为证明者有可能生成满足该等式的值,但不是从算术电路的实际见证人生成的。为了确保这一点,验证者需要一种方法来检查证明者使用的多项式实际上是 CRS 中基础多项式的线性组合。

“指数知识”假设很有用,因为如果证明者发送的一对群元素和给定的一对都是 α− 分离的,那么证明者对必须生成为给定的分离的 α− 对的线性组合。

因此,验证者可以使用串联函数来有效地测试这两对都是α−分离的,以确保使用算术电路的真正令人满意的表示生成的证明者。更具体地说,对于两对 (x, αx),(y, αy),以下情况成立:

验证者可以使用它来执行以下检查:

使用这个想法,验证者需要验证三件事:

由此,我们可以证明Pinocchio协议满足两个属性:完整性和健全性(这个证明相当复杂,你可以阅读我下面放的源文档来更好地理解!)

零知识 Pinocchio 协议修改

本质上,如果验证者 V 生成自己的证明 s' = (s'₁, s'2, …, s'ₙ),他们就可以计算 E(u'(z)), E (v'(z)), E (w'(z)), E(h'(​​z)) 根据证明者的协议。

如果这些值与证明者在 s 中计算的 E(u(z))、E(v(z))、E(w(z))、E(h(z)) 不同,则验证者得出结论证明者的证明不是 s'(解释 SNARKs 第六部分:匹诺曹协议)

为了消除这种“零知识”违规,证明者 P 向多项式 u、v 和 w 添加随机平移(皮诺奇:近乎实用的可验证计算)

随机移位将是 t(x) 的倍数,因此一切都保持相同的 mod t(x)。对于属于 Fp 的随机 δ₁、δ2、δ₃,随机选择:

然后,P 将使用 CRS 在 z 处评估它们,并在其证明中提交移位项(移位项)来代替相应的未移位项。

这样,零知识匹诺曹协议修改的步骤就完成了,到这里,大家都感到一头雾水=)))))。

但仅此而已,再次感谢您阅读本文。如果您喜欢这篇文章,别忘了关注并留下掌声。

我的关于“发现 zk-SNARK”的系列文章到此结束,我希望您留下您的贡献,以便我能够改进并有动力撰写下一篇文章!

文章来源:团队技术/研究 AlphaTrue

参考来源:

  1. Chen, T., Lu, H., Kunpittaya, T., 和 Luo, A. (2022)。zk-snarks 综述。arXiv 预印本 arXiv:2202.06877。https://arxiv.org/pdf/2202.06877.pdf