
降息与大炮齐飞 市场共跌
来源:登链社区
为工作程序员提供的 ZKP 教程介绍。
你知道为什么斑马有条纹吗?一种理论是这是一种伪装。当斑马聚集在一起时,这使得狮子更难以区分它们的猎物。狮子必须将猎物从群体中隔离出来才能追捕它[^1]。
人类也喜欢在人群中隐藏。一个具体的例子是,当多个人在一个集体名称下作为一个整体行动时。《联邦党人文集》就是这样创作的[^2]。 另一个例子是 Bourbaki,这是 1930 年代一群法国数学家的集体笔名。这导致了现代数学大部分内容的彻底重写,重点在于严谨性和公理化方法[^3]。
在数字时代,假设你在一个群聊中,想要发送一条有争议的信息。你想证明你是其中的一员,而不透露是哪一位。我们如何在数字领域使用密码学来做到这一点?我们可以使用一种叫做 群签名 的东西。
从传统上讲,群签名在数学上相当复杂且难以实现。然而,使用零知识证明(ZKP),这个数学问题变成了一个简单的编程任务。在本文结束时,你将能够自己编写群签名。
这篇文章将向你展示如何从零开始编写基本的零知识证明(ZKP)。
在学习新的技术栈时,我们希望尽快掌握编辑-构建-运行的循环。只有这样,我们才能开始从自己的经验中学习。
我们将首先让你设置环境,编写一个简单的程序,执行所谓的可信设置,然后尽快生成和验证证明。之后,我们将识别一些改进我们程序的方法,实施这些改进并进行测试。在此过程中,我们将建立一个更好的心理模型,以便在实践中编程 ZKP。最后,你将熟悉(某种方式)从零开始编写 ZKP。
我们将逐步构建一个简单的签名方案,你可以证明你发送了特定的消息。你将能够理解这段代码的作用及其原因:
#克隆仓库并运行准备脚本
[email protected]:oskarth/zkintro-tutorial.git
cdzkintro-tutorial
#在执行之前浏览此文件的内容
less./scripts/prepare.sh
./scripts/prepare.sh
我们建议你浏览 ./scripts/prepare.sh
的内容,以查看这将安装什么,或者如果你更喜欢手动安装。执行后,你应该看到 Installation complete
并且没有错误。
如果你遇到问题,请查看最新的官方文档 这里[7]。完成后,你应该安装以下版本(或更高版本):
pragmacircom2.0.0;
templateMultiplier2(){
signalinputa;
signalinputb;
signaloutputc;
c<==a*b;
}
componentmain=Multiplier2();
这就是我们的特殊程序或 _电路_。 [^6] 按行分析:
pragma circom 2.0.0;
- 定义所使用的 Circom 版本
template Multiplier()
- 模板是大多数编程语言中对象的等价物,是一种常见的抽象形式
signal input a;
- 我们的第一个输入,a
;输入默认是私有的
signal input b;
- 我们的第二个输入,b
;同样默认是私有的
signal output b;
- 我们的输出,c
;输出始终是公共的
c <== a * b;
- 这做了两件事:将信号 c
赋值 并 约束 c
等于 a
和 b
的乘积
component main = Multiplier2()
- 实例化我们的主组件
最重要的行是 c <== a * b;
。这是我们实际声明约束的地方。这个表达式实际上是两个的组合:<--
(赋值)和 ===
(等式约束)。 [^7] Circom 中的约束只能使用涉及常量、加法或乘法的操作。它强制要求方程的两边必须相等。 [^8]
约束是如何工作的?在类似数独的上下文中,我们可能会说一个约束是“一个介于 1 和 9 之间的数字”。然而,在 Circom 的上下文中,这不是一个单一的约束,而是我们必须使用一组更简单的等式约束(===
)来表达的东西。 [^9]
为什么会这样?这与底层的数学原理有关。从根本上讲,大多数 ZKP 使用 _算术电路_,它表示对 多项式 的计算。在处理多项式时,你可以轻松引入常量,将它们相加、相乘并检查它们是否相等。 [^10] 其他操作必须用这些基本操作来表达。你不必详细了解这一点才能编写 ZKP,但了解底层发生的事情可能会很有用。 [^11]
我们可以将电路可视化如下:
供你参考,最终文件可以在 example1-solution.circom
中找到。有关语法的更多详细信息,请参见 官方文档[9]。
我们可以通过运行以下命令来编译我们的电路:
免责声明:数字资产交易涉及重大风险,本资料不应作为投资决策依据,亦不应被解释为从事投资交易的建议。请确保充分了解所涉及的风险并谨慎投资。OKEx学院仅提供信息参考,不构成任何投资建议,用户一切投资行为与本站无关。
和全球数字资产投资者交流讨论
扫码加入OKEx社群
industry-frontier