本文介绍了Noir语言,它是一个面向特定领域的开源语言,旨在简化零知识证明的开发。文章深入探讨了零知识证明的复杂性及Noir如何通过高层抽象和中间表示(ACIR)来解决这些挑战,降低开发者的学习曲线。文章还比较了Noir与其他零知识语言的不同之处,并分析了其背后的架构与优化机制,展示了Noir在隐私保护和安全性方面的应用潜力。
在Three Sigma,我们认识到Web3领域中的复杂机遇。我们团队位于里斯本,提供开发、安全和经济建模的顶级服务,推动你项目的成功。无论你需要精确的代码审计、高级经济建模还是全面的区块链工程,Three Sigma都是你值得信赖的合作伙伴。
访问我们的网站 website 了解更多信息。
我们不仅是代码、经济审计和区块链工程的专家——我们还热衷于拆解Web3概念,以推动行业的清晰度和采用。
Noir是一个开源的领域特定语言,旨在构建保护隐私的零知识(ZK)程序。它抽象了复杂的密码学概念,使即使没有深入数学知识的人也能轻松使用。Noir编译为一种称为ACIR的中间语言,然后可以进一步处理以适应不同的证明后端。这种灵活性使Noir适用于各种应用,从安全的链上验证到基于云的私有系统。它因其后端无关性及与Aztec等工具的集成而特别出名,以支持私有合约。
由于复杂的密码学特性,零知识证明的实现传统上一直比较困难。开发者常常面临陡峭的学习曲线,包括理解复杂的数学原理和处理底层密码学库。尽管ZK证明在增强去中心化应用的隐私和安全性方面显示出巨大的潜力,这种复杂性限制了它们的采用。
Noir通过抽象复杂性来简化这些挑战,使ZK开发变得更加可访问。它允许开发者以高层次、直观的方式编写ZK程序,关注应用逻辑而不是密码学细节。通过将代码编译成ACIR(抽象电路中间表示),Noir弥合了高层次开发与高效密码学证明生成之间的差距。在第4节(Noir的内部运作)中,我们将解释是如何实现的。
本节提供三种突出零知识(ZK)编程语言的技术比较:Noir、Circom和ZoKrates。这些语言用于开发ZK电路和应用,各有其独特的方法和特点。
将Noir与Circom和ZoKrates进行比较,有助于突出它们在设计哲学、能力、可扩展性解决方案、证明机制和性能优化方面的差异。这一比较旨在为开发者提供技术洞见,以选择适合自己特定用例的零知识证明开发语言。
若要了解更多关于Noir、Circom和ZoKrates的信息,请查阅他们的文档:Noir、Circom、Zokrates
如果你已经熟悉零知识证明和zk-SNARKs,可以跳过本节。
零知识证明(ZKPs)是一种密码学方法,用于证明对一条数据的知识,而不暴露该数据本身。这一技术是现代密码学的基础,使证明者能够在不透露任何关于基础信息的细节的情况下说服验证者某一陈述的有效性。ZKP建立在三个核心原则之上:
虽然ZKP可以是交互式或非交互式的,但关键的区别通常在于对验证者诚实性的假设。交互式证明通常依赖于诚实验证者,以保持零知识属性,这意味着验证者必须正确遵循协议。非交互式证明,如zk-SNARKs和zk-STARKs,在保证零知识性时消除了这种假设,即使针对恶意验证者。
阿里巴巴洞穴的例子是用于概念化ZKP原则的经典插图。想象一个圆形的洞穴,只有一个入口,分为两条路径A和B,这两条路径在一个锁住的门口交汇。证明者Alice知道解锁这个门的秘密词,她想要说服验证者Bob,她知道这个词,但不透露它。
这个过程可以描述如下:
零知识简洁非交互密钥的证明是ZKP的一种特殊类型,证明者向验证者发送一条消息,证明对一个秘密的知识而无需交互。zkSNARKs提供了关键优势,包括简洁性(短证明)、非交互性和高效的验证。
zkSNARKs允许证明者在不透露秘密(w
)的情况下,证明对该秘密的知识,遵循以下三步:
w
)的人才能满足它们。π
),使用秘密和公共输入。这个证明是通过密码学技术生成的,可能需要值得信赖的设置以确保安全性。如果你想了解更多关于zkSNARKs的信息,可以查看这些文章:ENS、Cryptologie、Vitalik
抽象电路中间表示(ACIR)作为高层次语言(如Noir)与证明系统(如Aztec的Barretenberg)所需的底层算术表示之间的桥梁。它将Noir中描述的计算抽象为零知识证明系统可以解释的格式,使得生成密码学证明不依赖于特定的证明架构。ACIR提供了一个通用层,使得不同的前端和后端能够无缝交互。
ACIR采用有向无环图(DAG)模型,其中门表示基本操作(例如,加法、乘法),通过指导数据流的线缆连接。该模型虽然受到硬件电路的启发,但专注于以零知识证明(ZKP)优化的方式捕获计算。ACIR使用约束来表达数据元素之间的关系,这些数据元素被称为见证,创造出灵活的数学基础方法。
当编译时,Noir程序转换为ACIR字节码,这是表示逻辑和算术操作的操作码序列。每个操作码生成必须在零知识证明中满足的约束。相比于用线路连接,这些约束表达关系,例如:
变为约束:
这些约束替代了直接的布线,确保在执行过程中输入和输出之间的关系严格被执行,这是生成有效ZK证明的关键。
在ZK证明中,执行ACIR程序的过程被称为求解,目标是确定满足程序约束的见证值——输入和中间值。输入见证可以由用户提供,也可以在求解过程中派生。求解开始时为输入见证分配值,然后按顺序逐个求解每个操作码以计算其余的见证值。
ACIR确保见证值保持一致,证明生成的性能在很大程度上依赖于操作码的高效排序。一旦所有约束得到满足,则程序被认为已完全求解,随后后端证明系统(如Barretenberg)使用见证值和约束生成最终的密码学证明。ACIR的抽象使其字节码能够在不同的证明系统中运作,确保证明生成的灵活性和兼容性。
如需进一步阅读,请参考这份文档。
Noir中的抽象电路虚拟机(ACVM)解释ACIR字节码,求解见证值,并与后端证明系统交互。它确保ACIR中的所有约束都得到满足,从而促进零知识电路的执行。以下是其核心功能的详细介绍:
抽象电路虚拟机(ACVM)在Noir中的核心职责是转换和优化ACIR电路以用于证明生成。这个过程发生在多个层次上:
效率在ZK系统中至关重要,ACVM具有多种优化机制:
ACVM中的证明见证生成器(PWG)在生成证明见证方面发挥着关键作用:
ACVM通过中间变量管理复杂表达式:
ACVM还支持递归优化过程:
有关更多详细信息,请查看官方GitHub仓库。
PLONKish算术化,源自UltraPLONK,是Noir ZK电路设计的基础,提供了通过先进门构造和查找论证的灵活性。它利用域论性质、多项式承诺和电路抽象构建安全、高效的系统。
在PLONKish算术化中,电路被建模为有限域FFF上的二维矩阵。矩阵中的每一行表示计算过程中的一步,而列则分类为不同的数据类型:
有限域FFF在所有操作中施加了模运算。通常,行的数量nnn是2的幂,这促进了高效的快速傅里叶变换(FFT)技术以执行多项式评估。
PLONKish算术化的核心在于使用多元多项式约束。矩阵的每一行必须满足一组多项式方程,确保电路所编码的操作对于给定的见证输入是有效的。
查找论证使得电路能够有效处理非线性操作或预定义值集合,而无需高阶多项式约束:
相等约束是PLONKish算术化内另一个强大的工具。它们强制执行两个特定单元(跨不同的行或列)必须包含相同的值。这些约束对于确保电路内的一致性至关重要,特别是在处理不同操作之间的共享状态时。
在Noir中,相等约束允许在矩阵内进行全局引用。这在处理需要在多步计算(行)之间保持一致的证明时尤为重要。例如,确保一个步骤的输出(行)成为另一个步骤的输入,可以通过将相应单元通过相等约束连接在一起实现。
从电路配置生成两个关键密钥:证明密钥和验证密钥。这些密钥编码电路的结构和约束,对于证明生成和验证至关重要。
扩展PLONKish算术化的证明后端集成到Noir中,增强了可扩展性、效率和证明生成。Plonky2、UltraHonk和Halo2各自优化了证明构建和验证的特定方面,使Noir能够针对广泛的ZKP应用。
这些系统在不同ZKP应用中增加了专业能力,基于PLONKish算术化进行构建:
Plonky2在递归证明组合方面表现出色,使其理想适用于高吞吐量系统,例如zk-rollup,在这些系统中,多个证明被压缩为单个递归证明,从而大幅减少验证时间。
关键增强:
递归证明组合:在Plonky2中,每个证明可以验证另一个,从而降低整体验证成本。这是通过递归多项式承诺实现的,其中证明Pi+1P i+1Pi+1验证PiP iPi,允许证明层级和压缩:
快速多项式算术:Plonky2旨在在如2642^{64}264这样的大片场上工作,采用快速傅里叶变换(FFT)进行快速多项式乘法和评估。FFT降低大约束集的处理复杂性,使Plonky2在需要大字段算术的电路中高效。
在Noir中,当编译到Plonky2时,递归证明生成对于大型分层计算变得高效,使状态转换或多步骤加密协议的批处理成为可能。
Halo2消除对可信设置的需求,并利用多项式IOPs进行递归证明,使其非常适合需要最小化信任假设的去中心化应用程序。
关键增强:
递归证明:Halo2支持如Plonky2的递归证明,但无需可信设置。这使得多阶段计算能够聚合为单一证明,无额外开销。
在Noir中,Halo2的无信任递归使其成为需要去中心化、可验证证明的应用程序的理想选择。当Noir为Halo2编译ACIR电路时,可以在没有任何依赖于可信设置的情况下生成递归证明,确保高安全性和可扩展性。
有关此ZK证明系统的进一步阅读,请参见Plonky2深入分析、TurboPLONK和Halo2书。
Noir中的递归证明允许构建高级的零知识(ZK)电路,在单个证明内高效验证多个相互依赖的计算层。这一技巧对于需要验证一系列相互关联的计算的场景至关重要,例如分层审计或多阶段过程,其中每个证明基于前一个证明。递归证明使开发者能够逐步聚合证明,确保每个计算步骤在各个阶段符合预期规则。
递归证明的一个显著优势是它们能够并行化证明生成过程,将多个证明压缩为单个证明以优化验证,并支持像基于回合的游戏等点对点应用程序,其中参与者递归验证彼此的移动。通过将复杂计算拆分为独立的子任务,递归证明允许这些任务在多个较小的计算机上并发执行。这不仅减少了整体证明生成时间,还优化了计算资源,使其更具成本效益。能够通过并行处理处理复杂的多步骤计算是一个强大的特性。
想象一个去中心化的金融系统,需要一个多步骤的审计过程,以确保不同账户间诸多交易的正确性。每个账户维护着交易的分类账,而审计人员需要验证的不仅是单个账户余额的正确性,还有父账户与其各自子账户之间的关系。递归证明使审计人员能够高效地通过多个层次验证整个结构,只需一个单一的证明。
递归过程遵循以下步骤:
1 全局证明
2 _____________
3 | |
4 分支 1 分支 2
5 ______|______ _____|_____
6 | | | |
7 账户 A1 账户 A2 账户 B1
8
总之,Noir为零知识证明开发提供了一种简化且易于访问的方法,使开发人员可以在没有深入密码学知识的情况下构建保护隐私的应用程序。
这结束了《Noir语言深入研究》的第一部分!
在下一章中,我们将通过构建一个去中心化的投票系统来应用这些概念。这个现实世界的例子将展示Noir的特性如何用来确保去中心化应用程序的隐私、安全性和完整性。
请联系Three Sigma,让我们经验丰富的专业团队自信地引导你穿越Web3领域。凭借我们在智能合约安全、经济建模和区块链工程方面的专业知识,我们将帮助你确保项目的未来。
今天就 联系我们,让你的Web3愿景成为现实!
- 原文链接: threesigma.xyz/blog/noir...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!