Neo SPCC发布用于创建和验证零知识证明的开发指南

Neo SPCC分享了一份Neo区块链零知识证明开发指南。自从升级到Neo v3.6和NeoGo v0.102.0以来,该平台现在支持BLS12-381椭圆曲线点的算术运算,这是实现零知识证明系统的必要工具。

零知识证明是一种在不揭示陈述本身的情况下证明陈述是真的方法。在新工具的演练中,Neo SPCC使用了一个简单的三次方程的例子:y=x^3+x+5。证明者将为该值提供一个秘密输入
x
,将用于计算公共价值
y

电路设计

为了为给定的计算创建零知识证明,计算必须表示为一组称为电路的代数约束。这篇文章演示了
多节
,Consenssys的开源ZK-SNARK Go库,从高级Go代码构建和编译这些电路。

定义了三次方程的电路,然后将其编译为Neo N3支持的BLS21-381椭圆曲线标量场上的秩-1约束系统(R1CS)。由此产生的约束系统可用于创建建立和验证原始方程的证明所需的证明/验证密钥。提供了在进一步进行之前如何测试电路的示例。

验证人合同

下一步是生成电路的证明和验证密钥。验证密钥用于生成可以执行电路特定证明的智能合约。证明密钥用于生成具有给定输入的证明。

在开发和测试过程中,用户通常会在本地生成自己的密钥。然而,生产级应用程序应该使用可信的仪式来生成密钥,以避免随机性被泄露。如果用于生成这些密钥的随机性被破坏,攻击者可以通过生成虚假证明来破坏系统。

尽管开发人员可以选择编写自己的合同来实现验证,但NeoGo提供了一个新的
zkpbinding
可以让事情变得更容易的包装。提供了一个片段,展示了如何使用约束系统和验证密钥生成验证器合同以及编译和部署所需的文件。

生成和验证证明

NeoGo生成的验证器合同有一个单一的VerifyProof方法,该方法接受知识证明(以三个BLS12-381 EC点的形式)加上任何公共输入数据。合同实现Groth16验证算法,以检查证明对所提供的公共输入是否有效。

用于生成验证器合同的约束系统也可以用于使用
多节
图书馆继续三次方程的例子,证明人想证明他们知道方程y=x^3+x+5的解,其中公共输入是
y
,在这种情况下是35,但没有透露
x

证明者通过使用他们的私人输入生成证明
x
=3和公众
y
=35。在将证明与NeoVM一起使用之前,它需要一些格式化
zkpbinding
包裹现在可以使用相应的验证合同对证据进行验证。证明者表明他们知道一个对y=35有效的私有输入,但他们的实际输入隐藏在证明的三个椭圆曲线点内。

生产应用程序

虽然很简单,但三次方程的例子提供了一个很好的例子,说明如何在应用程序中使信息私有。零知识证明可以作为新用例和协议增强的构建块,包括可扩展性改进(例如汇总)。

在为开发更复杂、更实用的电路提供与其他资源的链接的同时,Neo SPCC强调了举办安全可信的安装仪式的重要性。此过程可确保密钥生成所使用的随机性不受影响。

可信仪式通常涉及多方计算,分为两个阶段。阶段1,即“Tau的幂”,是通用的,这意味着生成的参数可以用于使用相同椭圆曲线的任何ZK-SNARK。

新开发者选择不举办自己的第一阶段仪式,而是建议采用具有可信证明的现有来源,如Filecoin或ZCash。

第2阶段是电路特定程序;团队将需要寻找合适的MPC实现来满足他们的需求。从阶段2步骤获得的参数可以用于生成安全的证明和验证密钥。提供了示例和文档。

可以通过以下链接阅读原文:

https://neospcc.medium.com/falling-down-the-zk-cave-with-neogo-797d54e66597

来源:cryptonews

联系邮箱:idea2003@foxmail.com

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注