zk-snark是什么

[002]是zk-snarks的第一个常用示例,它是零知识密码学的一种新形式。[Zcash]的强大隐私保证证明,[Zcash]中阻塞的交易在区块链上是完全加密的,但使用zk-snark在网络协议规则下是有效的。 使用首字母的zk-snark意味着“零知识简洁非交互式知识实证”,它指的是一种证据构成,可以表明人们拥有私钥等信息,不会泄露信息,没有交互。证明者和验证者 “零知识”证明允许一方(证明者)向另一方(验证者)证明真实而不泄露任何超出陈述有效性的信息。例如,如果给出了随机数的散列,则证明者可使验证者理解存在具有该散列值的数字,而不明确它是什么。 在零知识的“知识证明”中,证明者不仅让验证者相信该数字是存在的,实际上他们知道这样的数字。“证明”和“论证”的区别是非常有技术性的,我们不在这里讨论 “简洁”的零知识证明可以在几毫秒内验证,证据长度只有几百字节。对于非常大的过程描述也是如此。在第一个零知识协议中,证明者和验证者必须往返于多个回合,而在“非交互式”配置中,证明包含从证明者发送给验证者的单个消息。目前,生成足够短以非交互式方式发布到块链的零知识证明的最有效的已知方法是具有生成在证明者和验证者之间共享的公共参考列的初始设置阶段。此公共引用字符串称为系统的公共参数。 如果有人有权访问用于生成这些参数的秘密随机性,他们将能够为验证者创建有效的假证明。Zcash表示恶意一方可能在制造假币。为了防止这种情况发生,Zcash通过精心设计的多党仪式生成了共同参数。 如何在[Zcash]中构建zk-snark 为了使[Zcash]具有零知识隐私,根据网络的合意规则确定交易有效性的功能必须返回对交易是否有效的答案,而不公开执行计算的任何信息。这是通过将网络共识规则编码为zk-snark来进行的在高维上,zk-snarks首先将你想证明的内容转化为关于知道一些代数方程解的等价形式。下一节将简要介绍如何将事务规则转换为方程,这些规则被认为是有效的。然后,可以在解决方案的候选上进行评价,而不会向验证方程式的当事人泄漏敏感信息。 计算-运算电路-R1CS-QAP-zk-snark 将事务处理有效性函数转换为数学表达式的第一步是将逻辑步骤分解为最小行为以创建“算术电路”。与[布尔电路]类似,程序被编译为离散的单步(如“与”、“或”和“否”),当程序转换为运算电路时,程序被分解为包含加法、减法的基本算术运算、乘法和除法的单步(在我们的特定情况下,避免使用除法) 以下是计算公式(a+b)*(b*c)的运算电路的例子。 看一下这样的电路,可以认为输入值a、b、c从导线向输出线向左“向右”。我们的下一步是构建Rank1约束系统和R1CS,以检查值是否“正确进行”。在本例中,[R1CS]确认例如从b和c进入的乘法门出的值为b*c。 在该表达式R1CS中,验证器必须检查许多约束,几乎所有约束电路。(由于技术原因,事实证明我们只是对来自乘法门的电线有一个约束。)在一篇关于这个主题的2012年论文中,Gennaro、Gentry、Parno和Raykova提出了一个很棒的方法:“把所有这些约束捆绑在一起。”。该方法使用称为二次运算程序(QAP)的电路表示。现在应该检查的单一限制不是在数之间而是在多项式之间,多项式可能非常大,但这是正常的,因为多项式之间不存在同一性的情况下不能保持在大多数点上只需检查两个多项式在随机选择的点上是否匹配,以便以高概率正确验证证据。 如果验证者事先知道要检查哪个点,也许可以创建无效的多项式,但这一点的身份会得到满足。使用zk-snarks使用复杂的数学技术“盲目”评估多项式,如复准同型密码和椭圆曲线对。上面的通用参数用于确定检查哪一点,但它是加密的,以便证明者和验证者都不知道它是什么。 在之前的描述中,我们主要解决了如何在“SNARKs”中获取S和N—如何获取简单、非交互式的单个消息证明—但没有解决允许“zk”(零知识)部分证明他们的保密性的保密性。在这一阶段,“zk”部分被证明是很容易添加的,因为它允许证明者使用原始多项式的“随机移位”,它仍然满足所需的身份。 使用bellman。zk-snark的Rust语言库。升级Sapling之前,在Zcash中使用了C++库分支libsnark。要了解更多关于zk-snark的协议,请参阅Pinocchio协议文章。该协议在Sapling更新之前使用,Jens Groth现在使用zk-snark。 如何应用zk-snark来创建被阻止的事务 比特币将发送者地址和接收者地址、公共块链上的输入输出值链接起来验证交易。[Zcash]zk-snark用于证明有效的事务处理条件已满足,而不会泄漏有关该地址或价值的重要信息。阻止事务的发送者创建证据: 输入值与各屏蔽传输的输出值相加。 发件人将证明其具有输入票据的私人支出密钥,并授予其消费权限。 输入注释的私费密钥加密地链接到整个交易记录的签名,以防止不知道私钥的当事人修改交易。 此外,为了阻断交易,必须满足以下所述的其他条件。 比特币跟踪未使用的交易输出(UTXO),以确定费用高昂的交易。在[Zcash]中,截断等值物的UTXO称为“约定”,费用约定涉及披露“无效”。节点保留所有已创建的承诺和所有显示的无效标识符的列表。承诺和无效标识符存储为哈希值,以避免披露与承诺相关的任何信息,或避免无效标识符与任何承诺相关。 块支付创建的每个新注释都将提交一个包含以下散列的约定:发送注释的地址、发送的金额、该注释特有的“rho”数字(后来用于导出无效符号)、随机随机随机随机随机数。 约定=HASH(收件人、金额、rho、r) 当阻止事务的费用增加时,发送者使用消费密钥发出无效符号,该无效符号是来自尚未花费的现有约定的秘密唯一号(“rho”)的散列,并提供允许消费的零知识证明。此散列必须从跟踪的块链中的每个节点保留的已使用事务的空集中排除。 Nullifier=HASH(消费密钥,rho) 除了上述条件之外,下面的主张也类似于隔离事务的零知识证明验证。 对于输入的每个注释,显示承诺都存在。 禁用器和注释承诺将正确计算。 输出音符的无效符不能与其他音符的无效符冲突。 除了用于控制地址的消费密钥之外,还使用一组证明和验证密钥来创建和验证证书。这些密钥在上述公共参数表达式中生成,并在“Zcash”网络中的所有参与者之间共享。对于每个被阻止的事务,发件人使用其证明密钥生成输入有效的证明。通过使用验证器密钥检查验证器计算,次要检查被阻止的交易是否遵循一致的规则。“Zcash”的证明生成方法的设计要求证明者提前完成更多的工作,但简化了验证。因此,主要计算工作将卸载给事务的创建者。 Zcash掩码事务的隐私依赖于标准的、反复验证的密码技术(散列函数和流密码),添加zk-SNARK,应用于提交系统和无效系统允许发送者和接收方进行掩码事务以证明加密事务是有效的。虽然为密码货币提供隐私的其他方法依赖于模糊交易之间的联系,但是交易可以存储在完全加密的块链中的事实为密码货币应用开辟了新的可能性。加密交易使各方在保护隐私的同时享受公共区块链的好处。计划今后的升级将允许用户自己有选择地披露有关屏蔽交易的信息。关于Zcash的未来计划,请参照Zcash最近的未来博客报道。 有关如何在“Zcash”中构建块事务的详细信息,请参阅关于块地址之间的事务如何工作的博客文章。关于当前的Zcash合同的详细情况,请参照本公司的合同规格。 zk-SnarKs的未来应用 在Zcash中创建掩码事务只是zk-SNARK的许多可能应用的一个示例。理论上,您可以使用zk-SnarK验证关系,而不需要输入或泄漏信息。生成复杂函数的证明对许多应用程序来说仍然是计算负荷较高的,Zcash团队正在推动优化zk-SNARK的极限,通过更高效的实现开辟了新的领域。 目前,Zcash的zk-SNARK实现被认为可以作为企业用例的知识零安全层添加到现有的分布式帐簿解决方案中。Zcash团队科学家是世界上zk-SNARKs知识最深的研究者之一,他们不断提出新的应用,致力于知识零协商的效率化。有了您的业务需求,您可以从零知识证书或具有强大隐私blockchain应用程序的解决方案中获益,并联系到我们的业务开发团队。 郑重声明:本论文版权归原作者所有,转载的文章只是为了传播更多信息。如果作者的信息标记错误,请在第一时间联系修改或删除。非常感谢。

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享