密码学基础:零知识证明(第三部分)

本文介绍了如何使用zkSNARK(如Plonk)构建算术电路来进行零知识证明,特别是范围证明和集合成员证明。通过具体的例子,展示了如何将数学表达式转化为电路,并讨论了其中的技术和挑战。

这是关于加密技术的一系列更大文章的一部分。如果这是你第一次接触这篇文章,我强烈建议你从系列的开始开始。

在理论解释之后,是时候进入更实用的内容了!

在今天的文章中,我想专注于一些简单的例子,说明我们如何使用 zkSNARK,例如 Plonk,来证明一些声明。因此,我们基本上是在 构建一些算术电路

我认为没有比重新审视 区间证明 更好的开始了!让我们直接进入主题。

重新审视区间证明( Range Proofs)

在我们不算简短地看过 Bulletproofs 之后,我们看到从零开始构建一个区间证明是多么困难。但现在,我们手头有了一些新玩意儿。正如我们所承诺的,我们将看一下如何构建一个算术电路以表示这个声明:

存在一个有效的 N 位表示形式来表示一个数 v

构建这样一个电路可以让我们使用 Plonk 证明所述数字 v 的知识!那么让我们再次试着把这放入方程中。

事实上,这就是我们之前描述的同一个系统 我们之前说过。因此,接下来的描述将有些简化——我建议参考之前的解释以获得更多细节!

如果我们的数字 v 可以用 N 位表示,这意味着它有一些有效的二进制表示:

反过来,这些数字应该满足这个方程:

我们还知道我们的所有输入都将在一个大小为 q有限域 中:

无论是 v 还是 bᵢ 都将是我们电路的输入——因此,我们需要某种方式来证明 bᵢ 值是 比特(要么 0 要么 1)。我们可以通过以下检查来做到这一点:

对于每一个 N 位。

减法

太好了!我们有了系统……但我们如何将其转化为算术电路?特别是,我们需要能够表示 减法,但我们只能使用 加法乘法 门。该怎么办呢?

嗯……

好吧,在处理 有限域 时,有一个 加法逆元 的概念!想象一下 减去 1,相当于 加上 -1。但是,当然, -1 不是我们域中的元素:

那么这如何帮助我们呢?你看,就像我们说当结果大于 q - 1 时,加法会 循环到 集的 开头,同样,当结果小于 0 时,减法也会 循环到 集的 末尾

实际上,发生的事情是,我们可以通过使用 取模操作-1 映射到该集合中:

你可能会看到这被表示为 -1 ≡ q - 1 (mod q)。这称为同余关系,它表示“-1 在模 q 的情况下与 q - 1 相等”。

关于 同余关系 还有很多要说的,它们还定义了同余类——但我们今天将避免讨论这些主题。如果你感兴趣,可以在 这里 阅读。

总而言之,加上 q - 1 的效果与 减去 1 完全相同!

这对于加法 而言也是有效的。

把它放在一起

现在我们知道如何进行减法,我们可以构建我们电路!

首先,我们必须检查 bᵢ 是一个比特。这可以通过以下方式完成:

这表示 bᵢ(bᵢ — 1)。如果 bᵢ 是一个比特(要么 0 或者 1),输出应该为 0。

当然,如果我们将所有这些检查的输出相加,结果值也应该为 0。

然后,我们需要表示每个比特乘以...

剩余50%的内容订阅专栏后可查看

点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Frank Mangone
Frank Mangone
Software developer based in Uruguay. Math and Cryptography enthusiast.