本文介绍了 Circom 编程语言,它用于创建 Rank 1 Constraint Systems (R1CS) 并填充 R1CS 的 witness 向量,主要是为了简化约束系统的设计和自动化 witness 的生成。文章还解释了 Circom 存在的意义,以及它如何帮助开发者更轻松地进行零知识证明相关的开发,最后说明了学习 Circom 的理由,并概述了资源结构,包括语法和约束设计。
本文介绍了Circom代码与其编译成的Rank 1 Constraint System (R1CS)之间的关系,并通过几个例子详细解释了如何在Circom中编写约束,以及如何使用Circom命令行工具编译电路、生成witness,并验证电路的正确性。文章还介绍了zkRepl在线IDE的使用,以及Circom中有限域的概念,以及如何将snarkjs导出的R1CS约束转换为Circom中的原始约束。
本文介绍了Circom中定义Rank 1约束系统(R1CS)的基本语法,包括模板参数的使用、循环和变量的声明与应用、以及如何在满足特定条件时生成约束。此外,还强调了在Circom中约束必须是静态的,不能依赖于信号动态改变,但变量可以作为常量参与R1CS运算,并解释了if语句在Circom中的使用限制,着重介绍了 variables 的使用方法,以及 signals 的使用限制。
if
本文介绍了Circom中Rank 1约束系统的规则,即每个约束最多只能有一个信号间的乘法,超过则会报错。文章通过正反例解释了这一规则,并说明了常量乘法、加法、减法是被允许的。此外,还解释了Circom如何处理除法,以及为何数组索引、模运算、左移等操作不被允许。最后总结了约束系统的限制,并提及了绕过这些限制的设计模式。
文章详细介绍了Schwartz-Zippel Lemma在零知识证明(ZK-Proof)中的应用,通过多项式例子和Python代码展示了如何利用该引理进行多项式相等性测试和向量相等性测试。
本文通过多个例子详细解释了同态映射的概念,并探讨了其在加密技术和零知识证明中的应用。文章结构清晰,分为简单和复杂例子两部分,并附有详细的数学公式和Python代码示例。
本文详细介绍了代数群的基本概念,通过多个例子帮助读者建立对群的直觉,包括群的定义、阿贝尔群、有限群、循环群等,并探讨了这些群在零知识证明中的应用。
文章详细介绍了如何通过将Rank 1 Constraint System (R1CS)中的见证向量转换为有限域椭圆曲线点,并使用双线性配对来实现零知识证明。文中还讨论了验证步骤的实现细节,并指出了该算法在实际应用中的低效性。
介绍了拉格朗日插值法,通过一组点计算一个经过这些点的多项式,并提供了Python代码示例。
文章介绍了ZK-SNARKs中使用的可信设置机制,详细解释了如何在保密值上计算多项式,并提供了Python代码示例。