snarkjs+circom实战零知识证明【渔船监管】

简介:

零知识证明可以在不泄露具体信息的情况下向其他人证明自己掌握该信息,这听起来非常适合去中心化应用。在这个教程中,我们将利用zksnark来实现一个具体的NodeJS零知识证明应用:渔船无需透露自己的具体位置,就可以向监管机构证明自己处于划定的合法捕捞区内 —— 我们的主要武器是snarkjs和circom。

在这里插入图片描述

用自己熟悉的语言学习以太坊DApp开发:Java | Php | Python | .Net / C# | Golang | Node.JS | Flutter / Dart

1、需求分析

设计零知识证明应用方案的第一步是要将具体的问题转换为一个电路。我们要证明渔船处于合法捕捞区内,这个问题中存在以下变量:

  • 合法捕捞区的范围,可以用该区域的经度/维度的最大值和最小值来表示渔船的位置,用渔船的经度和维度来表示

容易得到如下的输入输出映射:

                        +--------------+ 
        渔船经度/维度 ->|              |
                        |              |
捕捞区经度最大/最小值 ->|    电路      |-> 在/不在合法捕捞区
                        |              | 
捕捞区纬度最大/最小值 ->|              |
                        +--------------+                                            

2、circom电路实现

据此,我们可以得到如下的circom电路定义:

在这里插入图片描述
其中:

  • latitudeRange:电路输入,表示合法捕捞区域的纬度的最小值和最大值,数组
  • longitudeRange:电路输入,表示合法捕捞区域的经度的最小值和最大值,数组
  • fishingLocation:电路输入,表示渔船的经度和维度,数组
  • out:电路输出,1表示渔船在合法捕捞区,0表示渔船不在合法捕捞区

由于我们要隐藏渔船的具体位置,因此在上面的circom电路中,你可以看到fishingLocation被定义为private。

3、circom电路编译

如果还没有安装circom的话,使用如下命令全局安装circom:

npm install -g circom

注意:推荐使用node 12,因为内置了原生的大数计算,效率提升10倍!

使用如下命令编译电路文件InRange.circom,输出结果命名为InRange.json:

circom InRange.circom -o InRange.json

4、zksnark的可信设置

在使用zksnark之前,需要一个可信设置,而且该可信设置依赖于具体的电路,例如我们编译得到的InRange.json。

使用snarkjs来创建这个可信设置,同样,如果需要安装的话,使用如下命令:

npm install -g snarkjs

现在我们利用渔业监控电路进行可信设置:

snarkjs setup -c InRange.json

上面的命令将会在当前目录创建两个文件:proving_key.json和verification_key.json。其中proving_key.json用于证明你的输入是有效的(满足电路约束),而verification_key.json用来验证别人提供的证据。

5、计算ziksarnk电路信号的见证(witness)

在我们创建提供给其他人的证据之前,需要先计算出电路中所有信号(包括输入信号和中间信号)
的见证。为此我们需要创建一个输入文件input.json,其中包含所有输入(公开输入和私有输入)的值,然后利用这个输入文件计算得到见证文件witness.json,这两个文件都不会公开。

下面是我们的渔业监控电路的输入文件示例:

{
    "latitudeRange": [ 20, 21],
    "longitudeRange": [ 176, 190],
    "fishingLocation": [ 20, 180]
}

使用sparkjs来计算得出见证文件witness.json:

snarkjs calculatewitness -c InRange.json

6、创建zksnark证据

有了witness.json,我们就可以创建提供给其他人的证据了:

snarkjs proof

上面的命令将在当前目录生成proof.json和公开文件public.json,publc.json实际上就是witness.json文件内容的一个子集,其中仅包含电路中可公开信号的值。

现在目录里的文件如下图所示:

在这里插入图片描述

7、校验zksnark证据

现在你(渔船船长)可以把verification_key.json、proof.json和public.json提供给监管机构了,监管方使用如下命令即可验证你的船的确在合法捕捞区内,但却不知道你的具体位置:

snarkjs verify

GOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOD!


原文链接:零知识证明实战渔业监 — 汇智网

目录
相关文章
|
1天前
|
安全 网络协议 网络安全
保障数字世界的安全壁垒:网络安全与信息安全探究
在数字化浪潮的推动下,网络安全和信息安全日益成为社会发展的重要议题。本文将从网络安全漏洞、加密技术和安全意识等方面展开探讨,以期为读者呈现一幅数字世界安全的全景图,并提供一些应对措施与建议。
8 1
|
2月前
|
机器学习/深度学习 安全 测试技术
什么是零知识证明?
什么是零知识证明?
|
3月前
|
存储 安全 算法
保护数据隐私的安全加密算法:技术守护个人信息安全的利器
在数字化时代,个人信息安全日益受到威胁。本文将深入探讨安全加密算法的重要性,以及如何利用先进的技术保护个人数据的隐私。从对称加密到非对称加密,再到现代密码学的发展,我们将一一解析这些技术的原理和应用。通过了解安全加密算法,我们可以更好地保护个人数据隐私,确保信息的安全传输和存储。
53 3
|
9月前
|
存储 安全 前端开发
知识产权/版权保护区块链系统开发搭建技术方案
知识产权/版权保护区块链系统开发搭建技术方案
|
数据采集 存储 分布式计算
破解企业数据治理困境的六句箴言
数据治理就是以服务组织战略目标为基本原则,通过组织成员的协同努力,流程制度的制定,以及数据资产的梳理、采集、清洗、结构化存储、可视化管理和多维度分析,实现数据资产价值获取、业务模式创新和经营风险控制的过程。
破解企业数据治理困境的六句箴言
|
存储 安全 算法
密码学技术在网络信息安全中的应用与发展探析
伴随我国网络技术的大众化和社会化普及,计算机中的网络安全已经成为了能够影响网络效能的重点性问题,并且这代表在一定程度上为计算机网络的安全问题提出了更深层次的要求。网络中的安全信息系统应当充分保证在网络中传输的实际信息完整性与保密性,并且当前我国的信息发展过程中能够保证通信与网络安全的相关技术有很多种类型,其中对网络信息数据的加密技术就是能够保证网络信息安全的最核心技术措施,并且对网络信息的加密操作同时也是现代密码学的重要组成部分。在当前数据加密技术的发展过程中,存在两种加密体制,分别是传统密钥加密体制和公开密钥加密体制,其中后者对数据加密与数据签名两个发展方面应用广泛。
|
区块链 存储 数据安全/隐私保护
带你读《区块链工程实践 行业解决方案与关键技术》之一:基于区块链的可信电子证照
本书是一部能全方位指导区块链项目落地的实操性著作。作者是远光软件的区块链首席科学家,而本书是作者5年来在区块链领域的实践总结。通过5个经典的行业案例,从总体设计、业务设计、功能接口设计、架构设计这4个维度详细讲解了如何构建一个完整的区块链行业解决方案,同时讲解了实现每个解决方案需要的关键技术和方法。
|
区块链
基于区块链的防伪溯源技术落地
立足于解决当前市场上基于区块链技术的防伪溯源系统的痛点,专注于研究票证物模式的防伪溯源体系,即以区块链技术来实现数据的不可更改性,而以“物品指纹”实现链上数据和链下实物的不可伪造的唯一对应,以简单的二维码标签连接区块链数据,从而确保从产地到中间各个地方流转最后到用户手上就是这件独一无二的物品。
|
人工智能 大数据 区块链
李礼辉谈区块链:技术标准、隐患、监管和前景问题都讲清楚了
如何理解区块链?它带来怎样的机遇和挑战?
1141 0