零知识证明介绍指南:发展过程、应用场景和基本原理分析

三、ZK SNARK 实现的基本原理零知识证明入门指南:发展历程、应用场景和基础原理解析

目前区块链行业零知识证明项目(ZKP)特别是,惊人的增长率 ZKP 随着扩容和隐私保护应用的兴起,我们接触到了各种零知识证明项目。由于 ZKP 对于加密爱好者来说,极具数学性的特点需要深入的了解 ZK 大大提高了难度。因此,我们也希望从头梳理 ZKP 与读者一起探索理论和应用水平的一些变化 crypto 以几份报告的形式共同学习行业的影响和价值,也被用作 HashKey Capital 研究小组的思考总结。本文是本系列的第一篇文章,主要介绍 ZKP 发展历史、应用和一些基本原则。

一、零知识证明的历史

最早的现代零知识证明系统来源于现代零知识证明系统 Goldwasser、Micali 和 Rackoff 合作发表的论文:The Knowledge Complexity of Interactive Proof Systems(即 GMR85) 1985 年,发表于 1989 年。本文主要解释了在交互系统中通过的过程 K 交换轮交互需要多少知识来证明证言(statement)是正确的。若能使交换的知识为零,则称为零知识证明。会假设证人在里面(prover)验证者拥有无限的资源(verifer)只有有限的资源。交互式系统的问题是证明它不完全是数学可证的,而是概率意义上的正确性,尽管概率很小 (1/2^n)。

因此,交互式系统并不完美,只有近似完整性,基于此诞生的非交互式系统(NP)系统是完整的,成为零知识证明系统的完美选择。

在早期,零知识证明系统缺乏效率和可用性,因此它一直停留在理论层面,直到最近 10 随着密码学的蓬勃发展,年才开始蓬勃发展 crypto 成为一个显著的学习,零知识证明已经成为一个至关重要的方向。特别是,开发一个通用的、非互动的、有限大小的零知识证明协议是最关键的探索方向之一。

基本上,零知识证明是在证明速度、验证速度和证明体积之间做出选择。理想的协议是证明快、验证快、体积小。

零知识证明最重要的突破是 Groth 在 2010 年的论文 Short Pairing-based Non-interactive Zero-Knowledge Arguments,也是 ZKP 里面最重要的一组 zk-SNARK 理论先驱。

零知识证明在应用中最重要的进展是 2015 年 Z-cash 使用的零知识证明系统,实现了对交易和金额隐私的保护,后来发展到 zk-SNARK 结合智能合约,zk-SNARK 进入更广泛的应用场景。

在此期间,一些重要的学术成果包括:

2013 年的 Pinocchio (PGHR13):Pinocchio: Nearly Practical Verifiable Computation,将证书和验证时间压缩到适用范围也是如此 Zcash 使用的基本协议。2016 年 的 Groth16:On the Size of Pairing-based Non-interactive Arguments,简化了证明的大小,提高了验证效率,是目前应用最广泛的 ZK 基础算法。2017 年的 Bulletproofs (BBBPWM17) Bulletproofs: Short Proofs for Confidential Transactions and More,提出了 Bulletproof 算法,非常短的非互动零知识证明,不需要可靠的设置,6 应用于几个月后 Monero,理论与应用的结合非常快。2018 年 的 zk-STARKs (BBHR18) Scalable, transparent, and post-quantum secure computational integrity,提出了不需要可信设置的建议 ZK-STARK 算法协议也是目前的 ZK 另一个引人注目的发展方向,在此基础上诞生了 StarkWare 最重量级的 ZK 项目。

其它发展包括 PLONK、Halo2 这也是一个非常重要的进展,也是如此 zk-SNARK 在某些层面上做出了改进。

二、零知识证明的应用简介

零知识证明最广泛的两种应用是隐私保护和扩容。早期,随着隐私交易和几个著名的项目 Zcash 和 Monero 隐私交易一度成为一个非常重要的类别,但由于隐私交易的必要性没有业界想象的那么突出,这类代表性项目开始慢慢进入二三线阵营(而不是退出历史舞台)。随着以太坊的应用,扩容的必要性增加到不可复加。 2.0(已更名 consensus layer)在 2020 年转变为以 rollup 中心路线,ZK 该系列正式回归行业视线,成为焦点。

隐私交易:隐私交易已经实现了许多项目,包括使用 SNARK 的 Zcash,Tornado,使用 bulletproof 的 Monero, 以及 Dash。Dash 严格意义上不使用 ZKP,但是一个简单粗暴的混币系统,只能隐藏地址而不能隐藏金额,在这里省略。

Zcash 应用的 zk-SNARKs 交易步骤如下:

Source: Demystifying the Role of zk-SNARKs in Zcash

System setup 在证明钥匙(加密证明多项式)和验证钥匙的帮助下,阶段生成 KeyGen functionCPA 阶段 ECIES 加密方法(Elliptic Curve Integrated Encryption Scheme)用于生成公钥和私钥Minting Coins 在这个阶段,新币的数量。公共地址和货币 commitmentPouring 阶段,生成 zk-SNARK 证明,证明被添加 pour Verification在交易账簿中 阶段,验证者验证 Mint 和 Pour Receiving是否正确 阶段,receiver 接收币。如果您想使用收到的货币,请继续调用 Pouring,形成 zk-SNARK 验证,重复上述内容 4-6 完成交易的步骤。

Zcash 基于零知识的使用仍然有局限性 UTXO, 因此,一些交易信息只是 shield 而不是真正的掩盖。由于其基于比特币设计的单独网络,很难扩展(与其他应用程序相结合)。真正使用 shielding(即隐私交易)利用率不足 10%表明隐私交易没有成功扩展。(from 2202)

Tornado 基于以太坊,使用的单一大型混币池更为通用「久经考验」的网络。Torndao 本质上是一种用途 zk-SNARK 基于可信设置的混币池混币池 Groth 16 的论文。Tornado Cash 可提供的特征包括:

只有储存的 coin 没有货币可以提取两次证明过程和货币废除通知(Nullifier)是绑定的,证明相同但不同 Nullifier 哈希不允许提币安全 126-bit 不会因为安全 composition 而降级

Vitalik 如果有些扩容,隐私相对容易实现,而不是扩容。 protocol 如果可以建立,隐私基本上不会成为问题。

扩容:ZK 一层网络可以做扩容,比如 Mina,也可以在二层网络上做,也就是说 zk-roll up. ZK roll up 最早的想法可能来自 Vitalik 于 2018 的 post,On-chain scaling to potentially ~500 tx/sec through mass tx validation。

ZK-rollup 有两种角色,一种是 Sequencer, 还有一个是 Aggregator。Sequencer 负责包装交易,Aggregator 负责合并大量交易,创造一个 rollup, 并形成一个 SNARK 证明(也可以是基于其他算法的零知识证明) Layer1 比较以前的状态,然后更新以太坊 Merkle 树,计算新的状态树。

Source: Polygon

ZK rollup 的优缺点:

优点:成本低,不像 OP 它将受到经济的攻击,不需要延迟交易,可以保护隐私,快速实现最终缺点:形成 ZK 证明需要大量的计算和安全问题(SNARK 需要可信的设置),不抗量子攻击(SNARK, STARK 可以),交易顺序可能会改变

Source: 以太坊 research

根据数据的可用性和证明方法,Starkware 对 L2 有一张经典的分类图(Volition 可在链上和链下选择数据可用层):

Source: Starkware

目前市场上最具竞争力的 ZK rollup 项目有:Starkware 的 StarkNet,Matterlabs 的 zkSync 和 Aztec 的 Aztec connect,Polygon 的 Hermez 和 Miden,Loopring,Scroll 等。

基本上,技术路线在于 SNARK( 及其改进版本 ) 和 STARK 以及正确的选择 EVM 支持(包括兼容或等同)。

Aztec 开发了通用化 SNARK 协议 -Plonk 协议,运行中的协议 Aztec3 可能会支持 EVM,但隐私优先 EVM 与Starnet兼容 用的是 zk-STARK,一种不需要可信设置的设置 zkp,但目前不支持 EVM,有自己的编译器和开发语言zksync 也是用的 plonk,支持 EVM。zkSync 2.0 是 EVM 兼容,有自己的 zkEVMScroll, 一种 EVM 兼容的 ZK rollup, 团队也是以太坊基金会 zkEVM 项目的重要贡献者

简要讨论下 EVM 兼容性:兼容性:

ZK 系统和 EVM 兼容性一直令人头痛,一般的项目会在两者之间做出选择。强调 ZK 它可以在自己的系统中制造虚拟机,并拥有自己的虚拟机 ZK 语言和编译器,但会增加开发者的学习难度,而且因为基本上不开源,会变成黑盒子。目前一般行业有两种选择,一种是和谐 Solidity 操作代码完全兼容,另一种是设计新的虚拟机 ZK 友好并兼容 Solidity。一开始,业界并没有想到这么快的融合,但近一两年技术的快速迭代,让 EVM 将兼容性提升到一个新的高度,开发者可以在一定程度上实现无缝迁移(即以太坊主链到 ZK rollup),这是一个令人兴奋的进步,这将影响 ZK 发展生态和竞争格局。我们将在以后的报告中仔细讨论这个问题。

三、ZK SNARK 实现的基本原理

Goldwasser、Micali 和 Rackoff 提出零知识证明有三个性质:

完整性(Completeness):每一份有合理见证的声明(statement),所有可靠性都可以被验证者验证(Soundness):每一个只有不合理见证的声明都不应该被验证者验证零知识(Zero-knowledgeness):验证过程为零知识

所以为了理解 ZKP, 我们从 zk-SNARK 从现在开始,许多区块链应用程序都是从 SNARK 首先,让我们先了解一下 zk-SNARK。

zk-SNARK 意思是:零知识证明(zh-SNARK)是 zero-knowledge Succint Non-interactive ARguments of Knowledge。

Zero Knowledge:Succinct证明了过程中的零知识,不会暴露多余信息:小Non验证体积-interactive:ARgumentss非交互过程:计算具有可靠性,即计算能力有限的证明者不能伪造证明,无限计算能力的证明者可以伪造证明of Knowledge:对于证明人来说,在不知道证据的情况下,证明人无法构建参数和证明(W

itness,比如一个哈希函数的输入或者一个确定 Merkle-tree 节点的路径)的情况下,构造出一组参数和证明是不可能的。

Groth16 的 zk-SNARK 的证明原理和如下:

Source: https://learnblockchain.cn/article/3220

步骤是:

将问题转换为电路将电路拍平成 R1CS 的形式.R1CS 转换成 QAP(Quadratic Arithmetic Programs)形式创建 trusted setup, 生成随机参数,包括 PK (proving key),VK(verifying key)zk-SNARK 的证明生成和验证

到此这篇关于零知识证明入门指南:发展历程、应用场景和基础原理解析的文章就介绍到这了,更多相关零知识证明入门指南内容请搜索脚本之家以前的文章或继续浏览下面的相关文章,希望大家以后多多支持脚本之家! 免责声明:本文只为提供市场讯息,所有内容及观点仅供参考,不构成投资建议,不代表本站观点和立场。投资者应自行决策与交易,对投资者交易形成的直接或间接损失,作者及本站将不承担任何责任。!