月亮链 月亮链
Ctrl+D收藏月亮链
首页 > 币安币 > 正文

ERK:零知识证明——基于libsnark的电路构造及证明示例_NBS

作者:

时间:1900/1/1 0:00:00

libsnark库代码层次非常清晰。libsnark也给出了SNARK相关算法的全貌,各种Relation,Language,Proof System。为了更好的生成R1CS电路,libsnark抽象出protoboard和gadget,方便开发者快速搭建电路。在阅读该示例代码前,请仔细阅读libsnark的源代码分析:零知识证明 - libsnark源代码分析

唯一有点遗憾的,libsnark没有给个完整的电路构造实例,入门者想搭建自己的电路,刚开始有点摸不着头脑。

为了方便入门者编写自己的电路,同事写了个基于libsnark构造电路,并生成并验证电路的实例:

https://github.com/StarLI-Trapdoor/libsnark_sample

a16z crypto引入Lasso和Jolt工具来增强零知识证明:金色财经报道,风险投资公司 Andreessen Horowitz 的加密货币部门 a16z crypto 推出了 Lasso 和 Jolt,这是一对基于简洁非交互式知识论证(SNARK)的新工具。SNARK 是一种零知识证明,有可能促进第 2 层空间中的可扩展 ZK Rollup,这通常被视为计算密集型。Lasso 是 a16z 两篇研究论文的主要创新,它采用了“查找参数”机制,有利于更快的零知识证明。它将特定的输入与相应的输出相匹配,而不泄露额外的信息。该团队指出,Lasso 引入了一种简化的方法来验证 SNARK,通过对大量结构化表执行查找来避免繁琐的手动优化电路。[2023/8/11 16:18:58]

入门者,可以基于这个示例开发自己的电路。选择默克尔树作为电路的示例,因为在零知识证明的应用中,大量的使用默克尔树数据结构。

SKALE即将发布去中心化零知识证明解决方案Levitation Protocol:6月2日消息,以太坊侧链 SKALE 开发人员宣布了一项 SKALE 改进提案,即,去中心化零知识证明解决方案 Levitation Protocol,旨在通过使全套 ZK 解决方案无缝连接到 SKALE 架构,并将 Rollup 连接到以太坊主网。该提案包括进一步的生态系统升级,增加了一个新的「Layer 1 Megachain」,称为 SKALE G(G 代表木卫三,太阳系中最大的卫星)。

SKALE 开发人员计划在未来几个月内开始发布 Levitation Protocol 源代码,之后将启动公共测试网。Levitation Protocol 主网计划于 2023 年第四季度推出。[2023/6/2 11:53:31]

该示例构造了一条merkle路径的验证电路,生成并验证证明。merkle树的深度为3,并且merkle树的计算采用sha256散列函数。代码结构比较清晰,merkle目录中的main.cpp是主函数。circuit目录下的merklecircuit.h是电路的实现。整个项目用cmake进行编译。

Filecoin:Filecoin网络已成为最大的零知识证明网络:Filecoin发表博客称,目前Filecoin已成为最大的零知识证明(zk-SNARK)网络。据官方数据显示,目前Filecoin网络每日会运行6至7百万次零知识证明,每一个零知识证明中包含了超过1亿个约束电路证明。目前Filecoin网络的可信配置已支持最高128M大小的电路证明,单个证明最大已超过100M,而Zcash最高仅支持2M。此外,目前Filecoin实现了通过SnarkPack将10个零知识证明捆绑至单次证明中,并正在研究零知识证明聚合以实现将数千个零知识证明聚合至单次证明中。硬件支持方面,Filecoin将零知识证明中高度可并行化的部分交由GPU完成,将CPU和内存释放出来进行较为复杂的计算,进一步提高了零知识证明的效率。[2021/7/14 0:51:01]

电路名为MerkleCircuit,主要依赖两个gadget:merkle_authentication_path_variable和merkle_tree_check_read_gadget。merkle_authentication_path_variable提供了merkle树的一条路径。merkle_tree_check_read_gadget检查给定一个叶子节点,是否能计算出正确的root。

Trail of Bits计划利用零知识证明重塑漏洞披露流程:安全研究机构Trail of Bits宣布,正在与约翰霍普金斯大学的Matthew Green合作,使用零知识证明(zero-knowledge proofs)技术为科技公司和安全漏洞研究人员建立一种可信的基础设施,在新的合作方式之下,双方在针对漏洞披露(Vulnerability Disclosure)的流程中可进行合理的沟通,而不必担心受到破坏或歧视。

在接下来的四年里,Trail of Bits 将会进一步推进零知识证明的理论极限,并为安全漏洞研究人员提供相应的软件,用以产生漏洞可利用性的零知识证明。[2020/5/22]

实现一个电路,主要实现两个接口函数:

generate_r1cs_constraints - 生成R1CS,该电路比较简单,只要让依赖的两个gadget,生成R1CS即可。

声音 | ALabs负责人王增新:改进后的零知识证明是解决数据可用性问题的可行方案:今日,在日本东京举办的SmartBlock2018国际学术会议上,区块链研究院ALabs负责人王增新做了关于区块链安全隐私及扩展性的学术分享,他认为数据可用性问题是区块链广泛应用的瓶颈,改进后的零知识证明是解决数据可用性问题的可行方案,即将共识的复杂程度降低到对数级别,提高数据的交换与验证效率。ALabs将围绕这个方向进行探索,推动区块链行业应用发展。 SmartBlock2018国际学术峰会由Springer、早稻田大学、哥伦比亚大学、北京理工大学、伯明翰城市大学等顶尖学术院校联合主办,会议围绕前沿科技趋势进行探讨,包括人工智能、大数据、区块链等前沿技术,数百名学术大拿及企业高管出席活动。[2018/12/11]

generate_r1cs_witness - 给所有的变量进行赋值。该电路,需要赋值的变量有root,leaf(叶子节点),和叶子节点配套的默克尔路径,以及默克尔路径对应的地址信息(也就是每一层的节点的位置,左边还是右边)。

整个电路最复杂的就是电路的构造函数,申请变量,创建gadget。其中重点讲一讲,set_input_sizes函数。libsnark的框架中,使用简单的区分public和private变量的模型。通过set_input_sizes函数,设置前几个变量为public变量。

pb.set_input_sizes(root_digest->digest_size);也就是说,该电路的公开变量为root的bit个数。

确定了电路的实现,看看main函数,如何生成和验证证明。

在main函数中定义了merkle树计算需要的一些类型:

FieldT默认是bn256椭圆曲线的的Fr,默克尔树计算采用是sha256算法。

3.1 setup

实现了generate_read_keypair函数,生成pk/vk。仔细看一下generate_read_keypair函数,逻辑简单清晰:构造MerkleCircuit,在生成R1CS后,调用r1cs_gg_ppzksnark_generator生成pk/vk。

pk存放在merkle_pk.raw文件中,vk存放在merkle_vk.raw中。

3.2 prove

prove逻辑,首先从输入参数构造一个完整的merkle树,并根据输入选定了默克尔路径。通过generate_read_proof函数生成证明。该函数逻辑也比较清晰:

构造MerkleCircuit,在生成R1CS后,设置各个变量的值。接着通过r1cs_gg_ppzksnark_prover生成证明。

3.3 verify

在获知vk,证明以及公开信息(root)的基础上,调用r1cs_gg_ppzksnark_verifier_strong_IC的接口完成验证。这也就是verify_read_proof函数的逻辑。

在编译之前,同步该项目依赖的libsnark库:

git submodule update --init --recursive4.1 编译

mkdir build; cd build; cmake ..编译完成,merkle目录下会生成merkle的可执行文件。

4.2 可信设置(trusted setup)

./merkle setup4.3 生成证明

./merkle prove [data1] [data2] [data3] [data4] [data5] [data6] [data7] [data8] [index]prove命令,需要提供原始的3层merkle树的8个叶子节点,并指定需要证明的第几个叶子节点对应的路径(index指明)。

4.4 验证

./merkle verify [root]其中,root信息是在prove中生成过程中打印出来的root信息(也是公开信息)。如果验证通过,就说明存在一条能生成root的merkle路径,虽然没有公开路径的具体信息。

总结:

libsnark库代码层次非常清晰,并抽象出protoboard和gadget,方便开发者快速搭建电路。本文给出了一个基于libsnark库开发的完整电路示例。示例实现了3层默克尔树的一条默克尔路径的验证。其中默克尔树采用sha256的散列函数。

标签:ERKMERBSPNBSPowerKeeNumeraireBSPNetworknbs币官网

币安币热门资讯
区块链:区块链时代需要流量思维吗?_比特币

对项目来说,使用活跃度决定了它存活与否。这句话放在区块链上同样适用——如果没有用户的持续使用、没有流量注入,忽视流量思维在区块链时代中的应用,那么区块链项目如何捕捉红利,如何生存呢? 昨天在公司.

1900/1/1 0:00:00
比特币:比特币挖矿的意义:分发初始比特币_区块链

在币圈的人们无时无刻不是在挖矿,最原先的挖矿是指比特币,比特币随着价格的暴涨,挖矿也由原来用电脑可以挖,到后来要用专业的挖矿机,挖矿成本也水涨船高.

1900/1/1 0:00:00
MASK:金色观察 | MetaMask扩展端突破一百万 DeFi爆发的希望更大了?_ETA

2020年1月6日星期一以太坊轻钱包 MetaMask发布推特表示,谷歌应用商店已重新允许其安卓版 App 上架。此消息一出,对于整个区块链行业的开发者来说,都是极其兴奋的.

1900/1/1 0:00:00
区块链:建行首次入围福布斯全球区块链50强 已运营9个区块链项目_HedgeTrade

近日,福布斯官网公布全球区块链50强榜单,涉及中国企业有5家。具体来看,中国互联网科技巨头蚂蚁金服、百度、腾讯、富士康以及中国建设银行等均榜上有名,“金融 1号院”注意到,除蚂蚁金服及富士康非首.

1900/1/1 0:00:00
LAO:看商业化DAO如何引领VC新浪潮_DAO

根据我得到的可靠消息,包括 The LAO 在内的几个营利性 DAO 项目均将于本月底前正式推出,这是自2月14号 Moloch V2 智能合约部署完成之后,第一批实例化的项目落地.

1900/1/1 0:00:00
LIT:云巨头微软Azure拥抱商业区块链_ZURR

Lition,是一个商业区块链项目,微软在2月18日宣布,其已经正式将Lition区块链解决方案引入其Azure云市场.

1900/1/1 0:00:00