声明:本文仅分享个人见解,不构成投资建议。
本文转载自公众号【GenesiSee】,原文发布时间:2023年01月18日
原文链接:ZK|零知识证明研究综述
近10年来,区块链技术快速发展,隐私和扩容成为了区块链领域极其受关注的两个方向。零知识证明技术因其在区块链领域的隐私保护和扩展能力上的优势逐渐进入大众视野。零知识技术可以让开发者既能利用以太坊等底层区块链的安全性,又能提高dApp的交易吞吐量和速度,同时保护用户隐私。本文将从基本概念、理论发展、主流算法、开源库、典型应用等方面展开,对零知识证明技术进行相关梳理。
01|基本概念
零知识证明(Zero-Knowledge Proof)实质上是一种涉及两方或更多方的协议,即两方或更多方完成一项任务所需采取的一系列步骤。零知识证明允许一方(证明者)向另一方(验证者)证明一个陈述是真实的,而不透露任何超出陈述本身有效性的信息。例如,给定一个随机数的哈希值,证明者可以说服验证者确实存在具有该哈希值的数字,而无需透露它是什么。
02|理论发展
现代零知识证明体系最早来源于 Goldwasser、Micali 和 Rackoff 于1985年合作提出并发表的论文《The Knowledge Complexity of Interactive Proof Systems》(即 GMR85),这篇论文阐释了在一个交互系统中,经过 K 轮交互,需要多少知识被交换,从而证明一个证言是正确的,如果需要交换的知识为零,则称之为零知识证明。
但是早年的零知识证明系统在效率以及可用性方面都有所欠缺,所以一直都停留在理论层面,直到最近 10 年才开始快速发展。一个重要突破是 Groth 在 2010 年的论文 《Short Pairing-based Non-interactive Zero-Knowledge Arguments》中提出了目前零知识证明的关键性理论,实现了基于 ECC 算法的 O(1) 常数级的ZK,也是zk-SNARK 的理论先驱。
零知识证明在应用上的重要进展是 2015 年 Zcash 使用的零知识证明系统,实现了对交易及金额隐私的保护,后来发展到 zk-SNARKs 和智能合约相结合,ZK技术进入了更为广泛的应用场景。
期间还出现了一些重要的研究成果,包括:
-
2013年,Pinocchio协议《Pinocchio: Nearly Practical Verifiable Computation》实现了分钟级别证明,毫秒级别验证,证明大小不到300字节,将零知识证明从理论带到了应用,Zcash使用的SNARKs正是基于Pinocchio的改进版;
-
2016年,《Groth16:On the Size of Pairing-based Non-interactive Arguments》算法对证明的大小进行了精简,是目前主流的 ZK 算法中的基础性算法之一;
-
2017年, 《 Bulletproofs: Short Proofs for Confidential Transactions and More》 算法被提出,设计出了一种非常短的非交互式的零知识证明,无需可信设置,让证明提供者和验证者不必在同时在线,6个月后被应用到区块链项目 Monero;
-
2018年,论文《 zk-STARKs (BBHR18) Scalable, transparent, and post-quantum secure computational integrity》提出了一种无需可信设置的算法,这让 zk-STARK 的发展有了一个新的突破口,后来运用在重量级 L2 项目 Starkware 项目中;
此外,Sonic、Halo、Marlin、Plonk等算法的提出对 zk-SNARK 做出了某些层面上的改进:
-
2019,Sonic,一种早期的通用 zk-SNARK 协议,支持通用、可升级的参考字符串,Sonic 的证明大小固定,但是验证成本高,理论上可以将多个证明分批验证以获得更好的性能;
-
2019,Fractal,一种允许递归的 zk-SNARK,通过对电路的预处理实现了透明设置。证明最大 250KB,这比其他构建生成的证明都要大的多;
-
2019,Halo ,支持递归证据组织,无需可信设置,与其他新的 zk-SNARK 构建不同,Halo 的验证时间是线性的;
-
2019,SuperSonic,Sonic 的改进版,是第一个在验证时间和证明数据量方面实用化的透明 zk-SNARK;
-
2019,Marlin,Sonic 的改进版,证明时间缩短 10 倍,验证时间缩短 4 倍;
-
2019,Plonk,Sonic 的改进版,证明时间缩短 5 倍;
03|技术概述
3.1 零知识证明算法
目前零知识证明最主流的算法是zk-SNARKS、zk-STARKS以及Bulletproofs。下文将对三种算法进行简单介绍。
zk-SNARKs
zk-SNARK(Zero-Knowledge Succinct Non-Interactive Argument of Knowledge),代表零知识简洁非交互式知识论证,由加州大学伯克利分校教授 Alessandro Chiesa 等人于2012年在论文《From extractable collision resistance to succinct non-interactive arguments of knowledge, and back again》中提出,是最早和最受欢迎的零知识证明实现之一。非交互零知识证明(Non-interactive proof)即证明者只需要给出证明信息,验证者进行验证即可,在此过程验证者和证明者之间不需要进行交互。
zk-SNARK使用椭圆曲线密码学 ( ECDSA ) 进行加密,虽然 ECDSA 算法目前是安全的,但未来量子计算机的发展可能会打破其安全模型。除此之外,zk-SNARKs的启动需要可信设置,可信设置是指在受信任的设置中,多方各自生成一个部分密钥来启动网络,然后销毁该密钥。如果用于创建信任设置的密钥的保密信息没有被销毁,那么这些保密信息可能会被利用通过虚假验证来伪造交易。
zk-SNARKs作为区块链中应用最广泛的一种零知识证明,已经发展出了诸多各具特点的协议算法,在研究路线上分为两个方向,一类是以Gro