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

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

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

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

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

Mina开发团队O(1)Labs拟将零知识证明技术应用于OP Stack欺诈证明:6月29日消息,轻量级区块链协议Mina开发团队O(1)Labs已向Optimism提交提案,建议将旗下基于MIP SzkVM构建的零知识证明技术应用于OP Stack欺诈证明,其中MIPS功能除了除了本地高性能的snarky JS外,还允许使用通用语言编写应用程序。[2023/6/29 22:07:25]

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

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

ZeroSync和Blockstream合作将从卫星广播比特币零知识证明:金色财经报道,瑞士非营利组织ZeroSync协会和比特币基础设施公司Blockstream表示,他们计划从Blockstream的卫星广播比特币零知识证明 (zk-proofs) 。使用zk-proofs来验证比特币区块链意味着节点不必下载比特币链的当前500GB数据,因此可以在几分之一秒而不是几小时或几天内同步。Blockstream的卫星网络通过将区块链广播到整个地球,包括互联网覆盖不可靠的地区,提供对比特币的免费全球访问。ZeroSync预计第一次实验广播将在今年年底进行。

新成立的ZeroSync协会于周二成立,计划通过使用零知识证明 (zk-proofs) 来帮助扩展比特币,零知识证明是一种密码技术,可以在不泄露信息本身的情况下证明信息的有效性。[2023/4/1 13:39:02]

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

零知识硬件初创公司Cysic完成600万美元种子轮融资:金色财经报道,零知识 (ZK) 硬件初创公司 Cysic 完成了 600 万美元的种子轮融资。该轮融资由 Polychain Capital 领投,其他投资者包括 Hashkey、SNZ Holding、ABCDE 和 Web3.com 基金会。[2023/2/17 12:13:48]

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

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

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

研究机构Geometry将正式启动并支持采用零知识系统和应用数学的Web3项目:6月28日消息,专注于零知识隐私技术的研究和投资公司Geometry已运营几个月时间,负责人为Aztec Network前首席执行官Tom Walton-Pocock,团队成员还包括Celo密码学负责人Kobi Gurkan和Oiler Network前增长主管Gregoire Le Jeune。Geometry表示,其还获得了由对冲基金经理Alan Howard支持的孵化器WebN Group的孵化。

Geometry已领投以色列零知识半导体公司Ingonyama的400万美元种子轮融资,并领投了对NFT市场流动性项目Soap Labs的200万美元种子轮融资,以及参投了跨链基础设施Socket的种子轮融资。[2022/6/28 1:36:24]

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

零知识证明研发机构StarkWare将在几周内开源ethSTARK:零知识证明研发机构 StarkWare 称,2018年我们获得以太坊基金会的资助去探索对 STARK 友好的哈希函数以及开源 ZKP 代码。我们将在几周内提前完成我们的工作。ethSTARK代码的运行速度将比现有的任何 ZKP 代码快20倍。注,2018年7月份,StarkWare称获得了以太坊基金会的资助(现金+代币),将研发对STARK 友好的哈希函数和技术,并为生态系统提供开源代码。STARK将允许区块链在兼备隐私和后量子安全的情况下进行大规模扩展(例如分片)。[2020/5/26]

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的散列函数。

郑重声明: 本文版权归原作者所有, 转载文章仅为传播更多信息之目的, 如作者信息标记有误, 请第一时间联系我们修改或删除, 多谢。

银河链

BTCDeFi 的创新应用加密闪贷怎么操作?

(紫丁香花丛,梵高) 前言:在过去的几天bZx事件在加密圈引起广泛关注。黑客之所以能“攻击”成功,除了操纵价格之外,其中利用最充分就是闪贷。那么,什么是闪贷?为什么一个交易十几秒就可以获利36万美元,且仅仅花费不到9美元的交易费用.

[0:0ms0-1:808ms