,新2代理网址(www.hg8080.vip)实时更新发布最新最快最有效的新2网址和新2最新网址,包括新2手机网址,新2备用网址,皇冠最新网址,新2足球网址,新2网址大全。
概述
在研究区块链系统的事情原理时,我们需要领会林林总总密码学知识,好比 secp256k1,它是一种曲线和非对称署名算法,在比特币和以太坊系统中用于署名和验证账号。好比 sha256,它是一种哈希算法,用于把变长信息压缩成定长编码。好比 base58,它可以把信息编码转换成可打印字符示意的字符串。好比 ECDH,它是一种 Diffie - Hellman 密钥交流算法,用于在 P2P 节点间平安交流通讯密钥。
零知识证实(Zero-knowledge Proof)也是一种密码学算法,简称为 ZKP 或者 ZK,它的特点是可以在不泄露任何其他信息的条件下证实一个命题的准确性(不少人对零知识证实这个名称提出异议,以为“零泄露证实”更能代表它的本质能力)。
ZKP 最早在 1985 年就已经被提出,然而耐久以来一直没有找到大规模应用的场景,以是手艺的生长也十分缓慢。一直到 2009 年比特币降生后,人们发现它异常适适用于解决区块链中的隐私和扩展性问题,至此大量的资源和人才投入到了这项手艺的开发和工程应用中。ZKP 有许多实现,例如:Groth16、PlonK、STARK 等,至今还没泛起真正的行业尺度,本文将为人人清点种种 ZKP 实现的手艺特点,希望能给人人的学习研究和工程开发带来辅助。
ZKP 应用领域
1. 隐私证实
Zcash 可能是 ZKP 的第一个被普遍使用的应用,它在比特币源代码的基础上,将 ZKP 应用于代币的转移,使得生意的信息完全保密,但同时能被区块链上的节点验证。
Tornado Cash 是在以太坊运行的混币器,它使用 ZKP 证实 Merkle-Tree 上的节点,用户可以将牢固金额的代币存入资金池,然后使用 ZKP 天生的 Proof 证实自己曾经存入过资金,但不需要露出自己存入时的生意信息。
2. 盘算外包
在区块链中,每个节点的盘算能力有限,但借助 ZKP 手艺,节点可以将大量的盘算外包给链下节点,这时只需要验证外包提交的盘算效果和盘算证实就可以知道盘算是否准确。
zksync1.0 就是一个很好的例子,它在链下举行以太坊代币转账和生意,然后将效果提交给节点,节点通过验证 ZKP 证实就可以知道它是否根据它声明的方式举行盘算。
3. 数据压缩
Filecoin 运用 ZKP 组织了时空证实系统,能证实用户在内陆存储了特定文件,现在已经证实存储的文件已经到达 18 EiB。
Mina 是另一个例子,在许多高速区块链系统中,生意的数据十分重大,系统需要保留所有的区块以备共识协议的验证,以是系统对硬件的要求极高,永远保留意味着区块链节点将需要不停增大磁盘空间和数据索引能力。这时刻可以借助 ZKP,将验证数据压缩,Mina 通过递归零知识证实,将账本压缩到 11 KB,但依旧可以验证区块的准确性。
ZKP 证实系统
证实系统是 ZKP 的底层算法实现,可分为交互式和非交互式两种:
1. 交互式证实系统
交互证实系统由两方介入,划分称为证实者(Prover,简记为 P)和验证者(Verifier,简记为 V),其中 P 知道某一隐秘(如公钥密码体制的隐秘钥或一个二次剩余 x 的平方根),P 希望使 V 信托自己简直掌握这一隐秘。交互证实由若干轮组成,在每一轮,P 和 V 可能需凭证从对方收到的新闻和自己盘算的某个效果向对方发送新闻。对照典型的方式是在每轮 V 都向 P 发出一个询问,P 向 V 做出一个应答。所有轮执行完后, V 凭证 P 是否在每一轮对自己发出的询问都能准确应答,决议是否接受 P 的证实。
2. 非交互式证实系统
在上述交互式证实系统中,P 和 V 不举行交互,证实由 P 发生后直接给 V,V 对质明直接举行验证,这种证实系统称为非交互式证实系统(NIZK)。
我们在区块链中使用的证实系统一样平常都是 NIZK,区块链中的节点就是验证者 V ,终端用户或者二层网络(Layer2)就是证实者 P。
文末参考链接 [1] 形貌了近十年来果然揭晓的 NIZK 方案及特点。
在现实工程应用中我们主要关注的是性能和通用性,因此我们对一些常见证实系统举行更仔细的分类对比,见文末参考链接 [2]:
以上分类也不是绝对的,好比 Halo/Halo2 项目,它们在设计时也借鉴了许多 Plonk 的思绪,另外,SNORKs 通常会被归入到 SNARKs,由于它们都需要可信设置。
3. 性能对比
(见文末参考链接 [3])
电路编程
电路是 ZKP 系统的营业逻辑实现,开发 ZKP 应用需要举行电路编程,为什么 ZKP 逻辑代码被称为“电路”?主要有以下几个缘故原由:
与硬件电路类似,所有分支的代码将被一起执行。
与硬件电路类似,ZKP 证实电路中没有递归和庞大的循环,循环的数目只能是恒定的。
我们不需要重新去用密码学实现 ZKP 应用,有许多开发库已经实现了这些底层证实系统,我们只需要关注营业逻辑的实现。固然每一种库都有差其余抽象水平,有的需要去学习形貌电路的表达式,有的只需要按流程界说好代码就可以轻松实现。
1. 常用开发库
libsnark
用 C++ 语言实现了通用证实系统、基础电路库和应用示例。
证实系统: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 实现的证实系统,它提供电路接口、 基础结构以及一些基本电路实现,例如布尔和数值抽象。
证实系统:Groth16。
链接:https://github.com/zkcrypto/bellman。
snarkjs
Javascript 和 WASM 实现的证实系统,可用于可信设置、天生证实并验证证实。snarkjs 使用 iden3 自己的 circom 编译器对 DSL 界说的电路举行编译。
证实系统:Groth16 、PlonK。
链接:https://github.com/iden3/snarkjs。
ethsnarks
使用 Python 实现,可以在用户浏览器天生证实,使用以太坊智能合约做为验证者。现在项目开发不活跃,相同的场景下使用 Circom 可能是更好的选择。
证实系统:Groth16。
链接: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。
2. 开发流程
以 gnark 为例,一个典型的事情流程如下图:
1)用代码形貌需要解决的问题。
2)编译成 R1CS 约束系统。
3)对 R1CS 举行可信设置,获得 Proving key 和 Verify key。
4)证实者使用 R1CS 和 Proving key 盘算私密数据,天生证实 Proof。
5)验证者使用 Verify key 验证 Proof。
电路编程专用语言
1. 基于以太坊平台
Cairo
,
,www.326681.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。
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 在用户浏览器天生证实,使用以太坊智能合约做为验证者。
证实系统:Groth16 、PlonK。
链接: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 的实现,已取得重大希望。
2. 基于公链平台
zkApp (Mina)
zkApps 是 Mina Protocol 的智能合约,由零知识证实提供支持。zkApps 可以在链下执行随便庞大的盘算,同时只收取牢固用度以将天生的零知识证实发送到链以验证此盘算,这与其他在链上运行盘算并使用基于可变 gas 用度的区块链相反模子。zkApps 使用 Typescript 编写。
证实系统:PlonK。
链接:https://docs.minaprotocol.com/zkapps。
LEO (Aleo)
Leo 是一种函数式静态类型编程语言,专为编写私有应用程序而构建。它专为开发职员设计,可以直观地在 Aleo 区块链上构建,为私有的、去中央化的生态系统提供基础。
证实系统:Marlin。
链接:https://leo-lang.org/。
ZKP 常见平安问题
在已往几年,慢雾平安团队已为多个着名 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 提供的专业手艺建议。
参考链接:
[1]. https://en.wikipedia.org/wiki/Zero-knowledge_proof
[2]. https://github.com/matter-labs/awesome-zero-knowledge-proofs
[3]. https://docs.google.com/presentation/d/1gfB6WZMvM9mmDKofFibIgsyYShdf0RV_Y8TLz3k1Ls0/edit
查看更多
网友评论
最新评论