木星链 木星链
Ctrl+D收藏木星链
首页 > 酷币 > 正文

ZKP:盘点 ZKP 主流实现方案技术特点

作者:

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

在研究区块链系统的工作原理时,我们需要了解各种各样密码学知识,比如 secp256k1,它是一种曲线和非对称签名算法,在比特币和以太坊系统中用于签名和验证账号。比如 sha256,它是一种哈希算法,用于把变长信息压缩成定长编码。比如 base58,它可以把信息编码转换成可打印字符表示的字符串。比如 ECDH,它是一种 Diffie - Hellman 密钥交换算法,用于在 P2P 节点间安全交换通讯密钥。

零知识证明(Zero-knowledge Proof)也是一种密码学算法,简称为 ZKP 或者 ZK,它的特点是可以在不泄露任何其他信息的前提下证明一个命题的正确性(不少人对零知识证明这个名称提出异议,认为“零泄露证明”更能代表它的本质能力)。

ZKP 最早在 1985 年就已经被提出,然而长期以来一直没有找到大规模应用的场景,所以技术的发展也十分缓慢。一直到 2009 年比特币诞生后,人们发现它非常适合用于解决区块链中的隐私和扩展性问题,至此大量的资本和人才投入到了这项技术的开发和工程应用中。ZKP 有很多实现,例如:Groth16、PlonK、STARK 等,至今还没出现真正的行业标准,本文将为大家盘点各种 ZKP 实现的技术特点,希望能给大家的学习研究和工程开发带来帮助。

Zcash 可能是 ZKP 的第一个被广泛使用的应用,它在比特币源代码的基础上,将 ZKP 应用于代币的转移,使得交易的信息完全保密,但同时能被区块链上的节点验证。

Tornado Cash 是在以太坊运行的混币器,它使用 ZKP 证明 Merkle-Tree 上的节点,用户可以将固定金额的代币存入资金池,然后使用 ZKP 生成的 Proof 证明自己曾经存入过资金,但不需要暴露自己存入时的交易信息。

在区块链中,每个节点的计算能力有限,但借助 ZKP 技术,节点可以将大量的计算外包给链下节点,这时只需要验证外包提交的计算结果和计算证明就可以知道计算是否正确。

zksync1.0 就是一个很好的例子,它在链下进行以太坊代币转账和交易,然后将结果提交给节点,节点通过验证 ZKP 证明就可以知道它是否按照它声明的方法进行计算。

Filecoin 运用 ZKP 构造了时空证明系统,能证明用户在本地存储了特定文件,目前已经证明存储的文件已经达到 18 EiB。

“汉语盘点2021”活动正式启动:虚拟货币、元宇宙入围年度推荐字词:金色财经报道,11月19日,由国家语言资源监测与研究中心、商务印书馆等联合主办的“汉语盘点2021”启动仪式在商务印书馆举行。启动仪式上,主办方推出“专家版本”和“大数据版本”的年度推荐字词,其中国家语言资源监测与研究中心通过监测语料库推荐的国际词有气候峰会、东京奥运会、塔利班、德尔塔、虚拟货币,清华大学教授沈阳作为“汉语盘点”活动的评议专家,推荐了“治、离、元宇宙、碳中和”等年度字词。12月20日,“汉语盘点2021”揭晓仪式将揭开年度字词的面纱。[2021/11/20 7:00:36]

Mina 是另一个例子,在很多高速区块链系统中,交易的数据十分庞大,系统需要保留所有的区块以备共识协议的验证,所以系统对硬件的要求极高,永久保存意味着区块链节点将需要不断增大磁盘空间和数据索引能力。这时候可以借助 ZKP,将验证数据压缩,Mina 通过递归零知识证明,将账本压缩到 11 KB,但依旧可以验证区块的正确性。

证明系统是 ZKP 的底层算法实现,可分为交互式和非交互式两种:

交互证明系统由两方参与,分别称为证明者(Prover,简记为 P)和验证者(Verifier,简记为 V),其中 P 知道某一秘密(如公钥密码体制的秘密钥或一个二次剩余 x 的平方根),P 希望使 V 相信自己的确掌握这一秘密。交互证明由若干轮组成,在每一轮,P 和 V 可能需根据从对方收到的消息和自己计算的某个结果向对方发送消息。比较典型的方式是在每轮 V 都向 P 发出一个询问,P 向 V 做出一个应答。所有轮执行完后, V 根据 P 是否在每一轮对自己发出的询问都能正确应答,决定是否接受 P 的证明。

在上述交互式证明系统中,P 和 V 不进行交互,证明由 P 产生后直接给 V,V 对证明直接进行验证,这种证明系统称为非交互式证明系统(NIZK)。

我们在区块链中使用的证明系统一般都是 NIZK,区块链中的节点就是验证者 V ,终端用户或者二层网络(Layer2)就是证明者 P。

文末参考链接  描述了近十年来公开发表的 NIZK 方案及特点。

在实际工程应用中我们主要关注的是性能和通用性,因此我们对一些常见证明系统进行更细致的分类对比,见文末参考链接 :

动态 | 2019年区块链十大事件盘点:1:中国拥抱区块链

2019年10月24日,中央局第十八次集体学习时强调,区块链技术的集成应用在新的技术革新和产业变革中起着重要作用。

2:央行数字货币试点

2014年中国央行开始研究法定数字货币(DCEP)。DCEP的完整字面意思就是数字货币电子支付。

3:Facebook发布Libra计划

2019年6月,Facebook发布Libra白皮书,Libra的使命是建立一套简单的、无国界的货币和为数十亿人服务的金融基础设施。

4:去中心化金融DeFi

去中心化金融(DeFi),解决传统金融行业中的痛点,被称作DeFi 是加密史上第二个突破。

5:IEO开始流行

IEO是ICO之后,币圈诞生的一种新筹集资金方式,项目方依托交易所进行资金筹集。

6:Bakkt 推出比特币期货

2019年9月23日, 号称币圈牛市的发动机的Bakkt上线。

7:嘉楠科技上市

美国东部时间11月21日嘉楠科技正式上市纳斯达克,IPO发行价最终锁定在每股9美元,总计募资9000万美元。

8:模式币走红币圈

模式币,使用类似模式的币种,通过拉人头、分红、合伙人等等推广营销模式,配合资金控盘,来吸引散户进场接盘。

9:以太坊伊斯坦布尔升级

以太坊网络在2019年12月8日, 9,069,000区块高度完成升级,代号:伊斯坦布尔(Istanbul)。

10:吴忌寒詹克团之争

吴忌寒夺权:10月29日全球最大的矿机生产商之一的比特大陆创始人吴忌寒以比特大陆集团董事会主席、北京比特大陆科技有限公司法定代表人、执行董事的身份,向全体员工发送邮件,宣布解除詹克团在比特大陆的一切职务,即刻生效。[2019/12/23]

Bulletproofs特点:简洁证明大小,无需可信设置,但证明生成和验证耗时相比较长。代表项目:Bulletproofs, Halo, Halo2。

SNARKs (Succinct Non-interactive ARguments of Knowledge)特点:简洁证明大小,证明验证耗时相比较短,但需要对每一个电路进行可信设置。代表项目:Groth16。

SNORKs (Succinct Non-interactive Oecumenical (Universal) aRguments of Knowledge)特点:简洁证明大小,只需要进行一次可信设置即可用于所有电路。代表项目:Sonic, PlonK, Marlin, Plonky2。

动态 | 区块链未能上榜汉语盘点2019年度国际词:汉语盘点2019年度候选字词中,巴黎圣母院、区块链、贸易摩擦、黑洞照片、脱欧上榜国际词。12月20日,国家语言资源监测与研究中心、商务印书馆、央视新闻等单位联合举办的“汉语盘点2018”揭晓仪式在北京举行。最终,“奋”“改革开放四十年”“退”“贸易摩擦”分别当选年度国内字、国内词、国际字、国际词。(央视新闻)[2019/12/21]

STARKs (Succinct (Scalable) Transparent ARguments of Knowledge)特点:证明十分庞大,不需要进行可信设置,具有良好的可扩展性。代表项目:STARK。

以上分类也不是绝对的,比如 Halo/Halo2 项目,它们在设计时也借鉴了很多 Plonk 的思路,另外,SNORKs 通常会被归入到 SNARKs,因为它们都需要可信设置。

(见文末参考链接 )

电路是 ZKP 系统的业务逻辑实现,开发 ZKP 应用需要进行电路编程,为什么 ZKP 逻辑代码被称为“电路”?主要有以下几个原因:

ZKP 证明的代码会被转换成一系列简单约束条件的表达式 R1CS,然后使用拉格朗日插值法,转换为一个巨大的多项式 QAP,最终以门电路的形式被约束。

与硬件电路类似,所有分支的代码将被一起执行。

与硬件电路类似,ZKP 证明电路中没有递归和复杂的循环,循环的数量只能是恒定的。

我们不需要从头去用密码学实现 ZKP 应用,有很多开发库已经实现了这些底层证明系统,我们只需要关注业务逻辑的实现。当然每一种库都有不同的抽象程度,有的需要去学习描述电路的表达式,有的只需要按流程定义好代码就可以轻松实现。

libsnark

用 C++ 语言实现了通用证明系统、基础电路库和应用示例。

动态 | 澳媒盘点12国加密货币税制 日本税率最高:7月23日,澳大利亚加密货币媒体Mickey发文盘点各国加密货币税制,并指出日本加密货币税率非常高。根据2017年4月实行的资金结算法修订版,加密货币交易所产生的利益所得划分为杂项收入,所得税最高可达45%,作为伴随着损失的交易市场税率来说非常高。此外,该媒体列举了以下几个国家的加密货币税制:1、德国:加密货币交易免除附加税,持续保有加密货币一年以上可免除转让所得税。全部欧洲市民向德国转移资产时可免除转移税。2、新加坡:长期投资加密货币的企业和个人免除转让所得税。3、葡萄牙:不像加密货币征收附加税和所得税,但企业通过加密货币交易所得的收益需要课税。4、马耳他:加密货币的日交易作为法人税征收税金,但个人投资者购买和拥有加密货币不用缴纳税金。5、马来西亚:不需要缴纳转让所得税。6、白俄罗斯:对加密货币挖矿和对加密货币的投资不征收税金。7、瑞士:对专业投资者的加密货币交易征收法人税,挖矿被视为个人营业收入,但个人投资者的投资及交易不需缴纳转让所得税。8、加密货币被认为是资产,纳税方式和股票一样;如果购买加密货币并保留一年以上,根据收入水平征收0%至20%的税金。9、澳大利亚:当所有交易均被视为转让收入,并且兑换为澳元时要求保留所有准确的交易记录;如果进行加密货币投资获得的利润,就要交纳与个人所得税相同速率的税金。但如果持有1年以上的加密货币,将减免50%的税金。10、以色列和瑞典:如果纳税人不能证明他们购买的加密货币的购买额,将会征收百分之百的税金。[2019/7/23]

证明系统:BBFR15、BCCT12、BCCT13、BCGTV13、BCIOP13、BCTV14a、BCTV14b、CTV15、DFGK14、Groth16、GM17、GGPR13、PGHR13。

链接:https://github.com/scipr-lab/libsnark。

gnark

用 Go 语言实现的证明系统,提供高级 API 来设计电路。

证明系统:Groth16 、PlonK。

链接:https://github.com/consensys/gnark。

bellman

Rust 实现的证明系统,它提供电路接口、 基础结构以及一些基本电路实现,例如布尔和数值抽象。

午间大盘点:数字货币普涨 :比特币(BTC)最新成交价格为124392.34元,最高价格为126651.25元,最低价格为11955.86元,24小时涨幅为0.23%,成交量达4.06万个BTC;

以太坊(ETH)最新成交价格为5376.49元,最高价格为5416.12元,最低价格为4630.90元,24小时涨幅为11.79%,成交量达44.44万个ETH;

以太经典(ETC)最新成交价格为261.83元,最高价格为277.40元,最低价格为216.07元,24小时涨幅4.92%,成交量达224.56万个ETC;

量子链(QTUM)最新成交价格为429.11元,最高价格为475.50元,最低价格为186.82元,24小时涨幅40.32%,成交量达102.26万个QTUM;

莱特币(LTC)最新成交价格为2410.11元,最高价格为2449.01元,最低价格为2010.44元,24小时涨幅15.29%,成交量达62.98万个LTC;

瑞波币(XRP)最新成交价格为5.40元,最高价格为5.53元,最低价格为4.51元,24小时涨幅14.14%,成交量达16663.58万个XRP;

达世币(DASH)最新成交价格为7912.81元,最高价格为8013.21元,最低价格为6816.38元,24小时涨幅11.96%,成交量达3.01万个DASH;

EOS最新成交价格为67.01元,最高价格为71.00元,最低价格为51.81元,24小时涨幅24.64%,成交量达1456.01万个EOS;

ZEC最新成交价格为3764.07元,最高价格为3896.96元,最低价格为2972.32元,24小时涨幅7.52%,成交量达8.78万个ZEC;

OMG最新成交价格为136.05元,最高价格为136.05元,最低价格为102.38元,24小时涨幅21.88%,成交量达319.63万个OMG。[2017/12/19]

证明系统:Groth16。

链接:https://github.com/zkcrypto/bellman。

snarkjs

Javascript 和 WASM 实现的证明系统,可用于可信设置、生成证明并验证证明。snarkjs 使用 iden3 自己的 circom 编译器对 DSL 定义的电路进行编译。

链接:https://github.com/iden3/snarkjs。

ethsnarks

使用 Python 实现,可以在用户浏览器生成证明,使用以太坊智能合约做为验证者。目前项目开发不活跃,相同的场景下使用 Circom 可能是更好的选择。

链接:https://github.com/HarryR/ethsnarks。

bulletproofs

使用 Rust 实现的证明系统,具有单一和聚合范围证明、强类型多方计算,正在开发中用于证明任意语句的可编程约束系统 API。

证明系统:bulletproofs。

链接:https://github.com/dalek-cryptography/bulletproofs。

halo2

一个基于 Rust 的实现的证明系统,由 ZCash 团队维护。Halo2 特定于 PLONKish,可以非常直接地控制电路在算术运算中的表示方式,非常适合编写高度优化的电路。

证明系统:Halo2。

链接:https://github.com/zcash/halo2。

以 gnark 为例,一个典型的工作流程如下图:

1)用代码描述需要解决的问题。

2)编译成 R1CS 约束系统。

3)对 R1CS 进行可信设置,得到 Proving key 和 Verify key。

4)证明者使用 R1CS 和 Proving key 计算私密数据,生成证明 Proof。

5)验证者使用 Verify key 验证 Proof。

Cairo

Cairo 是一种用于编写可证明程序的编程语言,其中一方可以向另一方证明某个计算已正确执行。Cairo 和类似的证明系统可用于为区块链提供可扩展性。StarkNet 将 Cairo 编程语言用于其基础设施和编写 StarkNet 合约。

证明系统:STARK。

链接:https://www.cairo-lang.org/docs/。

Zokrates

ZoKrates 采用 DSL 描述电路,提供了一些常用的电路库,它可以帮助你在 DApp 中使用可验证的计算,从用高级语言规范您的程序到生成计算证明,再到在 Solidity 中验证这些证明。

证明系统:GM17、Groth16、Marlin。

链接:https://zokrates.github.io/。

Circom

Circom 语言采用 DSL 描述电路,可以配合 snarkjs 在用户浏览器生成证明,使用以太坊智能合约做为验证者。

链接:https://iden3.io/circom。

Noir

Aztec 基于 Rust 的隐私编程语言,采用 DSL 描述电路,允许安全、无缝地构建隐私保护零知识电路。

证明系统:PlonK。

链接:https://noir-lang.org/index.html。

zkEVM

与 EVM 一样,zkEVM 是一个虚拟机,它作为程序操作的结果在状态之间转换,但是 zkEVM 通过生成证明来证明计算的每个部分的正确性。本质上,zkEVM 使用一种机制来证明执行步骤遵循规则。

目前有 zkSync、Polygon、Scroll、Starkware 等团队正致力于 zkEVM 的实现,已取得重大进展。

zkApp (Mina)

zkApps 是 Mina Protocol 的智能合约,由零知识证明提供支持。zkApps 可以在链下执行任意复杂的计算,同时只收取固定费用以将生成的零知识证明发送到链以验证此计算,这与其他在链上运行计算并使用基于可变 gas 费用的区块链相反模型。zkApps 使用 Typescript 编写。

链接:https://docs.minaprotocol.com/zkapps。

LEO (Aleo)

Leo 是一种函数式静态类型编程语言,专为编写私有应用程序而构建。它专为开发人员设计,可以直观地在 Aleo 区块链上构建,为私有的、去中心化的生态系统提供基础。

证明系统:Marlin。

链接:https://leo-lang.org/。

在过去几年,慢雾安全团队已为多个知名 ZKP 产品进行了电路及应用安全审计,包括 ZKSwap、Zkdex、Zksafe 等,发现了多个中高危漏洞,对基于 Circom、libsnark 等流行框架开发的应用有较为深入的理解。慢雾安全团队在 ZKP 应用审计中发现常见的安全问题有:

信任参数风险

为了使用 zk-SNARKs,需要一组公共参数,称为公共参考字符串(CRS)。但是这些参数的创建也会产生一些私有参数,如果某一方获得这些私有参数,他们就可以伪造证明。另外,生成 CRS 的流程需要经过审计,确保不会有随机数后门,或者私有参数不会被蓄意保留。使用 zk-SNORKs 时也需要确保结构化参考字符串(SRS)是可信的。

可信配置阶段的安全隐患问题可以使用安全多方计算(MPC)来解决,MPC 的特点是只要任何一个参与者能诚实参与,那么通过这套多方计算系统最终得到的计算结果就是可信的。

静态代码安全

这部分主要是由于编码不规范造成的安全问题,例如:参数未校验、返回值未处理、数值溢出、边界未检查等,如果编写电路的语言是 C/C++,那么还会存在内存溢出风险。

供应链攻击风险

供应链的风险主要来自使用了存在漏洞的代码库,例如:旧版本的仓库。通常 ZKP 应用还需要配合客户端或者 Web 前端使用,而这部分也很容易遭受多种方式黑客攻击。

逻辑错误

逻辑错误是电路实现中最容易出现的错误,需要结合需求文档检查电路的设计是否符合需求。

双花攻击

错误的设计可能导致双花攻击,例如:某些 ZKP 库存在延展性风险,攻击者可利用已知的 Proof 生成不同 Proof,如果设计不当会导致双花攻击。

证明伪造

有效的证明是 ZKP 首要解决的问题,确保满足完备性和可靠性,即“假的真不了,真的假不了”,所以如果一个电路可以创建假证明,通常是由于底层库出现漏洞,通常我们会建议项目方使用公开的经过审计的 ZKP 库,并使用稳定的发行版。

侧信道攻击

如果电路设计不当,不同的隐私信息可能存在不同的计算特征,攻击者可能通过公开的输入或者证明猜解出私有输入数据。

电路约束失效

不恰当的电路表达式可能导致变量未被约束。

特殊值攻击

一些特殊的输入值可能绕过系统的验证逻辑,例如:0、null 等。

隐私输入猜解

对于 Tornado Cash 等应用,如果输入的信息可以被猜解,那么会导致严重的隐私泄露问题,这时需要对输入数据进行严格审计,确保不能被猜解。

RugPull 风险

一些项目可能存在特殊的管理员权限,一旦权限被非法使用会导致项目资金和用户资产被窃取。

智能合约风险

一些 ZKP 证明使用智能合约进行验证,例如:Circom、ZoKrates 等。智能合约可能出现重入、重放、逻辑错误等风险,详情可查看慢雾安全团队的智能合约安全审计服务。

针对上面列举的 ZKP 安全问题,慢雾安全团队在攻防实战中总结出了一套安全解决方案,结合黑盒/灰盒/白盒多种测试手段,推出了面向区块链行业的 ZKP 电路审计服务。

零知识证明是解决区块链隐私性、计算扩展和数据压缩问题的有效方法,目前有很多的实现方案,这些实现方案具有不同的性能参数指标和安全基准。开发者在开发零知识证明电路时需要注意根据需求选择合适的框架,并确保在项目上线前对应用的安全性进行过全面安全审计。

最后,感谢领先的一站式数字资产自托管服务商 Safeheron 提供的专业技术建议。

参考链接:

. https://en.wikipedia.org/wiki/Zero-knowledge_proof

. https://github.com/matter-labs/awesome-zero-knowledge-proofs

. https://docs.google.com/presentation/d/1gfB6WZMvM9mmDKofFibIgsyYShdf0RV_Y8TLz3k1Ls0/edit

慢雾科技

个人专栏

阅读更多

金色早8点

金色财经

Odaily星球日报

欧科云链

澎湃新闻

Arcane Labs

深潮TechFlow

MarsBit

BTCStudy

链得得

标签:ZKPARK加密货币PROZKPEPEMARKO加密货币是什么意思APPLE PROTOCOL TOKEN

酷币热门资讯
NFT:你能接受个人NFT流入证券市场吗?专业律师按下暂停键有话要讲

关于Dapper Labs的NBA Top Shots NFT地位的持续争议引发了律师和观察人士的评论.

1900/1/1 0:00:00
SEA:Blur的鲶鱼效应 Opensea的渡劫风波

但见一三尺小儿,红口白牙,脚踩风火轮,手持红缨,刷刷刷舞一套法,竟自朝向人高马大的Opensea心口窝刺来。这小儿,便是Blur的创始人,匿名而神秘的Pacman(吃豆人).

1900/1/1 0:00:00
比特币:7天涨幅80% AI概念代币热度暴涨

来源:Coindesk编译:比推BitpushNews Mary Liu众所周知,加密市场是由叙事推动的,人工智能 (AI) 是目前最火爆的话题.

1900/1/1 0:00:00
元宇宙:进击的元宇宙:2022火热 2023冷静

作者:沈浪元宇宙这把火,从2022继续烧到了2023。目前来看,资本市场对扎克伯格的元宇宙故事依旧抱以希望.

1900/1/1 0:00:00
FLO:对话 Suji:Web3 用一个词来概括就是革命

有没有什么东西可以横亘周期,跨越牛熊,成为一个项目、一个人身上独特的印记?对于很多人来说,可能不是物理意义上的货币或者保值的产品,更是精神世界的价值冲击.

1900/1/1 0:00:00
SEC:又重拳加密巨头 细数美国 SEC 与加密的恩怨纠葛

在 Binance 与 Paxos 合作发行的稳定币 BUSD 遭到美国监管大力打击的一周之后,CEO 赵长鹏(CZ)昨天宣布将放弃 BUSD 作为主要稳定币.

1900/1/1 0:00:00