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

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

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

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

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

零知识证明公司RISC Zero与L2协议Layer N联合推出零知识欺诈证明系统:5月24日消息,零知识证明初创公司RISC Zero宣布与模块化L2协议Layer N联合推出零知识欺诈证明系统。该系统通过将Layer N的执行环境移植到RISC Zero的zk虚拟机上,以实现提升区块链性能的同时,保证区块链的可靠性和安全性。未来,zkVM还将实现与其他执行层的兼容,如EVM、SVM和WASM等。

此前报道,去年8月,零知识证明初创公司RISC Zero宣布完成1200万美元种子轮融资,Bain Capital Crypto领投。[2023/5/24 22:15:02]

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

零知识证明初创公司RISC Zero完成1200万美元种子轮融资:8月9日消息,零知识证明初创公司 RISC Zero 宣布完成 1200 万美元种子轮融资,Bain Capital Crypto 领投,Geometry 、D1 Ventures 和 Cota Capital 等参投。本轮所融资金将用于构建对开发人员友好的可扩展区块链。今年 3 月,RISC Zero 推出了零知识证明虚拟机,该虚拟机使开发人员能够构建零知识证明,并使用各种编程语言在任何计算机上执行。(The Block)[2022/8/9 12:13:26]

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

Aleo与Forte达成合作,以将零知识证明解决方案带入链游:3月8日消息,零知识隐私应用平台Aleo与区块链游戏平台Forte达成合作,旨在为链游带来零知识证明解决方案,希望以此推动低成本交易。

Forte将使用Aleo的可扩展架构来解锁新的游戏玩法深度,并构建更具包容性和沉浸式的游戏生态系统。Forte已经在使用Aleo的技术在多个游戏经济中铸造、转移和交易NFT,以服务于现有的真实世界用例。

今年2月初,加密初创公司Aleo Systems Inc(简称Aleo)宣布完成2亿美元B轮融资,SoftBank和Kora Management领投,Andreessen Horowitz(a16z)、Tiger Global、Samsung Ventures等参投。

去年5月,Forte获得1.85亿美元A轮融资,估值10亿美元。此轮融资由风险投资基金Griffin Gaming Partners领投,Union Grove Venture Partners、Andreessen Horowitz(a16z)、Battery Ventures、早期风险投资公司Canaan等参投。(VentureBeat)[2022/3/9 13:45:18]

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

Polygon联合创始人:承诺为零知识技术投资10亿美元:12月25日消息,Polygon联合创始人Sandeep Nailwal在接受采访时表示,根据PolygonScan浏览器,Polygon平均出块时间约为2.3秒,以太坊平均出块时间则是15秒。然后Gas费大概是0.001 MATIC。

关于投资零知识技术的目标,Nailwal回答称,“我们承诺为零知识技术投资10亿美元,我们认为这是区块链扩展的圣杯。隐私是第二个因素——这是每个人都会感到困惑的一个因素。因此,您可以使用ZK在以太坊上验证计算,而无需发回全部数据。相反,您只需证明在第二层上所有计算都是正确的,并将一个简洁的证明放回到以太坊。”

Nailwal还表示,“即使ETH 2.0升级已经实现,也不会提供足够的可扩展性。明年,PoS升级将保持一切不变;就像以太坊现在每秒有13笔交易(TPS),在PoS之后也许会达到20 TPS,但不会超过这个数字。所以这不会增加任何可扩展性。假设在三到五年内,即使实现分片,我们预测会有64个分片,每个分片每秒处理20笔交易,但总的来说还是每秒1280笔交易,对吗?这对整个世界来说还是不够的。”(Cointelegraph)[2021/12/25 8:03:07]

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

Findora将基于腾讯云提供零知识分类帐产品“zkLDB”:7月2日消息,去中心化金融公链项目Findora宣布与腾讯云建立合作关系,Findora将很快基于腾讯云提供零知识分类帐产品“zkLDB”。该产品将支持加密交易(encryptedtransaction)和资产发行、处理、验证和存储。Findora的zkLDB还包含一套完整的合规隐私保护审核工具。另外,腾讯和Findora将合作提供多种API和SDK,以满足银行、投资管理和游戏等行业的需求。

注:Findora是一个基于密码学的金融公链,由计算机密码学专家和美国斯坦福大学校产基金首席执行官组建,旨在支持众多应用,包括开放式银行、资产证券化、交易和点对点贷款。不仅为企业提供数据隐私服务,同时允许审计以符合财务规则。(MarketWatch)[2020/7/2]

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

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

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

地球链

狗狗币DAO:一文了解DAO的艺术领域应用实践

我一直认为,艺术是 DAO 在非技术领域的最佳试验场,而美术作品无疑是艺术领域最为合适的试验先锋,事实也是如此,基于 NFT 的艺术作品交易市场在全球范围内已经形成一股新浪潮.

[0:0ms0-1:616ms