ZoKrates+Remix在线实现zkSNARK零知识证明

这篇具有很好参考价值的文章主要介绍了ZoKrates+Remix在线实现zkSNARK零知识证明。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

引言:在之前的文章里,我介绍了利用circom和snarkjs实现zkSNARK零知识证明,包含了snarkjs的使用步骤,并且我的毕业论文也全部采用snarkjs实现zkSNARK算法。

不过snarkjs里的signal信号的概念和高级语言变量之间的差别有点大,很多运算操作都不能直接进行,而且在执行circom库里的SHA256哈希算法时需要调整powersOfTau可信设置(snarkjs ptn bn128 10 powersOfTau10_0000.ptau,修改10为更大值),只能采用snark友好的MiMC哈希算法。于是我开始探索其他zkSNARK工具。

有些报告指出,snarkjs、libsnark和ZoKrates号称三大最常用的zkSNARKs零知识开发库。经过测试发现ZoKrates在编写代码的过程中更接近高级语言,算术电路的输入输出都是以变量的形式,天然支持comparator数值比较,更易实现零知识范围证明(Zero-Knowledge Range Proof,ZKRP),而且ZoKrates支持log输出利于debug。此外,ZoKrates实现了Remix插件,也就可以在线运行zkSNARK算术电路,特此记录下ZoKrates+Remix在线实现zkSNARK零知识证明的步骤。

ZoKrates是以太坊上zkSNARKs的工具箱。它可以帮助您在DApp中使用可验证的计算,从高级语言的程序规范到生成计算证明,再到在Solidity中验证这些证明。(ZoKrates官网介绍)

Remix官网:https://remix.ethereum.org/

1.安装插件

点击左下角的插件按钮,找到ZOKRATES插件,点击Activate激活插件:

ZoKrates+Remix在线实现zkSNARK零知识证明

2.编写zkSNARK算术电路

新建文件命名为main.zok,输入如下代码:

def main(private u8 p, private u8 q, u8 n) -> bool {
    return p * q == n;
}

2.1代码解释

两个隐私输入p和q、一个公开输入n,u8代表8位无符号整型,返回bool类型。

根据“大整数质因子分解”是NP困难问题(Nondeterministic polynomial-time,非确定性多项式时间),给定两个素数p和q,他们的乘积是n,但是如果只提供这个数字n,找出n的两个素因子是困难的。

根据这个难题,利用zkSNARK向外界证明自己“知道n的两个素因子”,但是不向外界泄露p和q的真实值。因此,zkSNARK的隐私输入是p和q、公开输入是n、算术电路是p*q==n。

2.2在线测试

 ZoKrates提供了在线编译算术电路的测试环境,进入官网https://play.zokrat.es:

ZoKrates+Remix在线实现zkSNARK零知识证明

3.编译与测试

进入ZOKRATES插件,点击compile编译:

ZoKrates+Remix在线实现zkSNARK零知识证明

输入错误样例进行测试,p=3、q=7、n=22,输出是false:

ZoKrates+Remix在线实现zkSNARK零知识证明

输入正确样例进行测试,p=3、q=7、n=21,输出是true:

ZoKrates+Remix在线实现zkSNARK零知识证明

4.初始化密钥verification_key.json

点击Run Setup进行初始化,得到verification_key.json作为验证密钥:

ZoKrates+Remix在线实现zkSNARK零知识证明

5.生成证明proof.json

点击Generate,生成proof.json:

ZoKrates+Remix在线实现zkSNARK零知识证明

复制Verifier inputs备用:

[["0x1dc9038012cef119c740a52bffc3280d6ed125bbd9bfc474bcca78dd982a901d","0x0fa4945211306b5d0a50bbc80e5def88fe1224b927fcace75d725384d31755f9"],[["0x15ae9c563fcfcb4cdf74780bbefd44bd54e6be9222170bd907bd962f0928c103","0x27ad25d6aa4089fd27622e8f17524b3bb05ffa67d2c099a1f880d69357a0b168"],["0x297ea2971f2296ba60e9e4fe3b9535455e9130e14a0c973f584deec0437448d2","0x05484d4637c39f5b7eadf920686d3290f4f5dfeae3ae7d486a9f753521cc12c5"]],["0x0760832bd07407205278074a131c8e67de0e90f8e45f6ac43c083ffa44873b34","0x014b52710266031a08b23d556f0ca1c64b4b579db8f6e0c4720ffe649bbd3bf9"]],["0x0000000000000000000000000000000000000000000000000000000000000015","0x0000000000000000000000000000000000000000000000000000000000000001"]

0x0000000000000000000000000000000000000000000000000000000000000015对应十进制的21,就是zkSNARK的公开输入n。

6.导出验证合约verifier.sol

点击Export,生成verifier.sol智能合约: 

ZoKrates+Remix在线实现zkSNARK零知识证明

7.编译并部署验证合约verifier.sol

点击Compile verifier.sol编译:

ZoKrates+Remix在线实现zkSNARK零知识证明

选择verifier.sol,点击Deploy部署:

ZoKrates+Remix在线实现zkSNARK零知识证明

8.运行验证合约

在Deployed Contracts里选择VERIFIER,在verifyTX函数的输入框里填写刚才复制备用的Verifier inputs,点击verifyTX。

右下角log出现了函数执行结果,input是21,输出true:

ZoKrates+Remix在线实现zkSNARK零知识证明

将verifyTX的input里的21改成22,即十六进制0x0000000000000000000000000000000000000000000000000000000000000016,再测试一下,输出false:

ZoKrates+Remix在线实现zkSNARK零知识证明

9.结语

至此便实现了大整数质因子分解的零知识证明,p和q是隐私输入,仅在生成证明的过程由证明者知道,n是公开输入,可以输入到公开的智能合约,智能合约自动验证零知识证明的有效性,并且修改n之后能检测出零知识证明已失效。

ZoKrates也有离线的命令行版本,结合Remix在线自动部署与运行较为方便,适合部署前测试。文章来源地址https://www.toymoban.com/news/detail-458873.html

到了这里,关于ZoKrates+Remix在线实现zkSNARK零知识证明的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【零知识证明】数独解的例子解释零知识证明

    2022年11月14日 in 中国科学院大学 如何证明数独有解?不能直接给出解(数据保护问题:数独题目存在价值)。 一、零知识证明方法: 承诺 将谜底卡片扣在桌子上,谜面卡片放在桌子上。(Alice不能查看) 随机挑战 链下互动:Bob让Alice用任意一种(行、列、宫格)方法检查,

    2024年02月02日
    浏览(37)
  • 零知识密钥声明证明

    nChain 白皮书 #0488 题为“零知识密钥声明证明”,介绍了一种零知识证明 (ZKP),可证明与给定公钥对应的私钥满足特定要求,同时保持私钥机密。我们已经实现了它,并将其应用于无需信任地购买比特币荣耀地址。它可以推广到广泛的应用程序,其中可以在相互不信任的各方

    2024年01月22日
    浏览(36)
  • 零知识证明详解

    我们在提到区块链的隐私计算和数据加密交互时,总会提到零知识证明,那么,这个究竟是什么呢? 从“零知识”一词中,我们便可以看出,它对于信息的需求度是“零”,即证明方可以不用透露任何具体的信息便可以向验证方证明加密转态下的数据是真实可信的。 传统互

    2023年04月16日
    浏览(27)
  • 【 BlockChain 】零知识证明

    一、零知识证明起源 “零知识”的概念最早在80年代由麻省理工学院的研究人员 Shafi Goldwasser,Silvio Micali 和 Charles Rackoff 所提出。当时这些人正在研究与交互证明系统相关的问题——即一种理论系统,使得甲方(证明者)可以和乙方(验证者)交换信息,并借此说服乙方接受

    2024年02月02日
    浏览(39)
  • 区块链|零知识证明

    零知识证明 就是指如何在不暴露关键信息的前提下,向别人证明你掌握的关键信息大概率是正确的。 分为 交互式 和 非交互式 两种。 交互式 :如通过证明方和验证方双方进行一系列问答来验证,缺点是双方可能提前串通好。 非交互式 :证明方和验证方双方不直接接触,但

    2024年02月03日
    浏览(31)
  • 技术分析|零知识证明研究综述

    声明:本文仅分享个人见解,不构成投资建议。 本文转载自公众号【GenesiSee】,原文发布时间:2023年01月18日 原文链接:ZK|零知识证明研究综述 近10年来,区块链技术快速发展,隐私和扩容成为了区块链领域极其受关注的两个方向。零知识证明技术因其在区块链领域的隐私

    2024年02月06日
    浏览(34)
  • 不讨论颜色的前提下,如何证明自己不是色盲?神奇的零知识证明

    《阿里巴巴与四十大盗》中有这样一段小故事: 阿里巴巴会芝麻开门的咒语,强盗向他拷问打开山洞石门的咒语,他不想让人听到咒语,又要向强盗证明他知道这个咒语。 那应该怎么办呢? 便对强盗说:「你们离我一箭之地,用弓箭指着我,你们举起右手,我念咒语打开石

    2024年02月02日
    浏览(27)
  • 【非交互式零知识证明】(下)

    继续上一节的内容,我们首先再回顾一下经典交互式零知识证明。 交互式零知识证明的一般模型如下: (1)证明者和验证者共享一个公共输入,证明者可能拥有某个秘密输入; (2)如果验证者认可证明者的响应,则输出Accept,否则输出Reject。 经典交互式零知识证明除了应

    2024年02月04日
    浏览(34)
  • 零知识证明的最新发展和应用

    PrimiHub一款由密码学专家团队打造的开源隐私计算平台,专注于分享数据安全、密码学、联邦学习、同态加密等隐私计算领域的技术和内容。 当企业收集大量客户数据去审查、改进产品和服务以及将数据资产货币化时,他们容易受到网络攻击威胁,造成数据泄露。数据泄露的

    2024年02月03日
    浏览(27)
  • 零知识证明:应用和具体用例

    零知识证明(Zero-Knowledge Proofs,ZKPs)是应用密码学中令人兴奋的突破,将在各个行业中解锁新的用例,从 Web3 到供应链再到物联网。通过在不揭示信息的情况下验证其真实性,ZKPs 可以增强数字系统的隐私、安全性和效率。本文将探讨 ZKPs 的基础知识和正在出现的潜在用例。

    2024年02月07日
    浏览(27)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包