区块链百科

零知识证明(ZKP)全景解析:从理论起源到核心机制与应用落地

零知识证明入门指南:发展历程、应用场景和基础原理解析

当前,区块链生态中的零知识证明(ZKP)项目正呈现爆发式增长态势。特别是在网络扩容与数据隐私保护两大关键领域,ZKP技术的崛起催生了众多创新应用。然而,由于ZKP具有极高的数学复杂性,对于大多数加密爱好者而言,深入掌握其核心逻辑颇具挑战。为此,我们致力于从头梳理ZKP在理论与应用层面的演进脉络,并与读者共同探讨其对加密货币行业的深远影响与价值——这将以系列报告的形式呈现,同时也是HashKey Capital研究团队的一份思考总结。本篇作为该系列的开篇之作,将重点回顾ZKP的发展历史、主要应用场景及其底层基本原理。

一、零知识证明的历史演变

现代零知识证明体系的雏形可追溯至Goldwasser、Micali和Rackoff合作撰写的经典论文《The Knowledge Complexity of Interactive Proof Systems》(简称GMR85)。该论文于1985年提出,并于1989年正式发表。文章主要探讨在一个交互系统中,经过K轮交互后,双方交换了多少信息才能证明某个陈述(statement)的真实性。如果这一过程中交换的知识量为零,即被称为“零知识证明”。在此模型中,假设证明者(Prover)拥有无限算力,而验证者(Verifier)仅具备有限资源。然而,交互式系统存在一个缺陷:其正确性基于概率而非绝对数学证明,尽管错误概率极低(为1/2^n)。

鉴于交互式系统在完备性上仅为近似值,并不完美,由此衍生出的非交互式系统(Non-interactive Proofs, NP)则具备完备性,成为零知识证明系统的理想选择。

早期的零知识证明系统在效率和实用性方面存在明显不足,长期局限于理论阶段。直到近十年来,随着密码学在加密领域 becoming a prominent discipline,零知识证明才真正走向舞台中央,成为至关重要的研究方向。其中,开发出一种通用的、非交互的且证明规模有限的零知识证明协议,是这一时期最关键的探索目标之一。

总体而言,零知识证明的核心在于平衡证明生成速度、验证速度以及证明体积大小这三个维度。理想的协议应当兼具快速证明、快速验证和小体积证明的特点。

ZKP发展史上的一个重要里程碑是Groth于2010年发表的论文《Short Pairing-based Non-interactive Zero-Knowledge Arguments》。该论文奠定了zk-SNARK的理论基础,是该领域最重要的先驱成果之一。

在应用层面,2015年Zcash采用的零知识证明系统实现了交易金额及细节的隐私保护,标志着重大进展。随后,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》提出了无需可信设置的短非交互式零知识证明算法。半年后该技术应用于Monero,实现了从理论到应用的快速转化。
  • 2018年的zk-STARKs (BBHR18):论文《Scalable, transparent, and post-quantum secure computational integrity》提出了无需可信设置的ZK-STARK协议。这是目前备受瞩目的另一发展方向,并孕育了StarkWare这一重量级ZK项目。

此外,PLONK、Halo2等技术也是极为重要的进展,它们在特定层面上对zk-SNARK进行了优化和改进。

二、零知识证明的应用场景简述

零知识证明最主要的应用集中在隐私保护和网络扩容两个方面。早期,随着隐私交易需求兴起以及Zcash、Monero等知名项目的推出,隐私交易一度成为热门赛道。但由于市场对隐私交易的刚性需求并未如业界预期般强烈,部分代表性项目逐渐退居二线(并非完全退出历史舞台)。相比之下,扩容的需求日益迫切。随着以太坊2.0(现称共识层)在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函数生成证明密钥(加密证明多项式)和验证密钥。
  • CPA阶段:利用ECIES(椭圆曲线集成加密方案)方法生成公钥和私钥。
  • Minting Coins阶段:确定新币数量,并生成公共地址和货币的承诺(commitment)。
  • Pouring阶段:生成zk-SNARK证明,并将该证明添加到pour交易账本中。
  • Verification阶段:验证者核实Mint和Pour的交易量是否正确。
  • Receiving阶段:接收方收取代币。若欲使用已收代币,需继续调用Pouring步骤,形成新的zk-SNARK验证,重复上述第4至6步以完成交易。

然而,Zcash在使用零知识证明时存在局限性。由于其基于UTXO模型,部分交易信息仅被“屏蔽”(shielded)而非彻底掩盖。鉴于其独立于比特币架构的网络设计,扩展性受限(难以与其他应用结合)。数据显示,真正使用shielding功能的用户比例不足10%,这表明隐私交易在大规模普及方面仍面临挑战。(来源:2202)

Tornado Cash采用单一大混币池模式,通用性更强,且部署在以太坊这一成熟网络上。本质上,它是一个基于Groth16论文进行可信设置的zk-SNARK混币池。Tornado Cash提供的核心特性包括:

  • 仅允许提取存入的代币。
  • 防止同一笔代币被重复提取。
  • 证明过程与Nullifier(废止通知)绑定,哈希相同的证明但不同的Nullifier不允许提币。
  • 具备126-bit的安全强度,不会因组合使用而降级安全性。

Vitalik曾指出,相较于扩容,隐私保护在技术上相对容易实现。如果某些扩容协议能够成功落地,隐私问题通常不成瓶颈。

网络扩容领域

ZK扩容可在Layer 1实施(如Mina),也可在Layer 2实施,即zk-rollup。ZK-rollup的概念最早源于Vitalik在2018年发布的博文《On-chain scaling to potentially ~500 tx/sec through mass tx validation》。

ZK-rollup涉及两类核心角色:Sequencer(排序器)和Aggregator(聚合器)。Sequencer负责打包交易,Aggregator则将大量交易合并生成一个rollup块,并创建一个SNARK证明(或其他算法的零知识证明)。该证明将与Layer 1之前的状态进行比较,进而更新以太坊的Merkle树并计算新的状态树。

Source: Polygon

ZK Rollup 的优缺点分析

  • 优点:交易费用低廉;不像OP Rollup那样易受经济攻击;无需等待交易延迟期;支持隐私保护;能迅速达成最终性。
  • 缺点:生成ZK证明需要巨大的计算量;存在安全问题(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兼容性。
  • Starknet:采用无需可信设置的zk-STARK技术,目前尚不支持EVM,拥有独立的编译器和开发语言。
  • zkSync:同样使用Plonk协议,支持EVM。zkSync 2.0兼容EVM,并推出了自己的zkEVM。
  • Scroll:一种EVM兼容的ZK Rollup,其团队也是以太坊基金会zkEVM项目的重要贡献者。

关于EVM兼容性的简要讨论:

ZK系统与EVM的兼容性一直是行业痛点,多数项目需在两者间做出取舍。强调ZK性能的项目往往会在自有系统中构建虚拟机,并配套专用的ZK语言和编译器,但这会增加开发者学习成本,且因代码通常不开源,形成“黑箱”。目前业界主要有两种路径:一是完全兼容Solidity的操作码;二是设计一种既ZK友好又兼容Solidity的新型虚拟机。起初业界并未预料到融合速度如此迅猛,但近两年的技术迭代使EVM兼容提升至新高度,开发者已能在一定程度上实现无缝迁移(从以太坊主链至ZK Rollup)。这一进展令人振奋,将深刻影响ZK开发生态及竞争格局。我们将在后续报告中对此进行深入探讨。

三、ZK SNARK 实现的基本原理

Goldwasser、Micali和Rackoff定义了零知识证明必须满足的三个基本性质:

  • 完整性(Completeness):任何拥有有效见证(witness)的声明,都能被验证者验证通过。
  • 可靠性(Soundness):任何缺乏有效见证的虚假声明,都无法被验证者接受。
  • 零知识(Zero-knowledgeness):整个验证过程不泄露除声明真伪之外的任何额外信息。

为了理解ZKP,我们从zk-SNARK入手,因为当前多数区块链应用均基于此技术。首先,我们来解析zk-SNARK的含义:zero-knowledge Succinct Non-interactive ARguments of Knowledge

  • Zero Knowledge(零知识):证明过程不暴露多余信息。
  • Succinct(简洁性):证明体积小,易于验证。
  • Non-interactive(非交互):无需多轮交互即可完成证明。
  • ARguments(论证):计算具备可靠性,即有限算力的证明者无法伪造证明,而无限算力的证明者理论上可以伪造(但在实际约束下不可行)。
  • of Knowledge(知识性):证明者只有在知晓有效参数的前提下才能构建出证明。

换言之,对于证明者而言,在不知晓证据(Witness,例如哈希函数的输入或确定的Merkle-tree节点路径)的情况下,构造出一组有效的参数和证明是不可能的。

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

Source: 

  1. 将计算问题转换为电路形式。
  2. 将电路拍平为R1CS(Rank-1 Constraint System)格式。
  3. 将R1CS转换为QAP(Quadratic Arithmetic Programs,二次算术程序)格式。
  4. 创建可信设置(Trusted Setup),生成随机参数,包括证明密钥(PK)和验证密钥(VK)。
  5. 执行zk-SNARK的证明生成与验证过程。

至此,这篇关于零知识证明入门指南:发展历程、应用场景和基础原理解析的文章就介绍到这了,更多相关零知识证明入门指南内容请搜索以前的文章或继续浏览下面的相关文章,希望大家以后多多支持!