一文详解零知识证明(ZKP)

中级Apr 23, 2024
零知识证明(ZKP)是一种加密方法,它使得一方(称为证明者)能够向另一方(称为验证者)证明某个陈述是正确的,而无需提供任何其他的信息。目前流行的ZKP解决方案有zk-SNARKS、zk-STARKS、PLONK以及Bulletproofs。本文将介绍四种ZKP解决方案,并分析其优势与劣势。
一文详解零知识证明(ZKP)

背景知识

零知识证明(Zero-Knowledge Proof,ZKP)是一种密码学技术,最早由由S.Goldwasser、S.Micali及C.Rackoff在20世纪80年代初的一篇名为《The Knowledge Complexity Of Interactive Proof Systems》的论文中提出的。在该文中,它是作为一个理论模型被构想出来,解决的是在不透露证据的情况下如何验证数学陈述的问题。这一概念在学术界引起了广泛关注,因为它挑战了传统加密技术的界限,并为处理敏感信息提供了全新的方法。

随着时间的推移,ZKP从一个抽象的理论构想逐步演变成具体的协议,它们能够被集成进各种应用中。在21世纪初,随着互联网和数字通信的爆炸性增长,ZKP的潜力开始得到现实世界中的探索。特别是在区块链和加密货币的兴起中,ZKP展示了其在提供增强隐私和安全性的同时,还能保持交易和数据处理的高效性。

现在,ZKP已经不仅仅是密码学研究的热点话题,它已经被集成到多个区块链平台和应用中,如zk-SNARKs在以太坊Layer2上的应用,提供了无需透露交易细节的匿名交易。这种从理论到实际应用的转变,不仅证明了ZKP的实用价值,也推动了对更高效、更安全数字互动方式的探索。随着技术的不断进步,ZKP在保护个人隐私、确保数据安全性以及建立信任的数字系统中扮演着越来越关键的角色

ZKP的定义与原理

零知识证明(ZKP)是一种加密方法,它使得一方(称为证明者)能够向另一方(称为验证者)证明某个陈述是正确的,而无需提供任何其他的信息,即不泄露证明陈述正确性所依据的任何知识。这个过程不仅保护了证明者的隐私,而且还确保了验证者不能复制证明过程或者利用它来得到任何额外的信息。

零知识证明概念演示图(来源:ChainLink

ZKP的核心原理可以通过以下三个特性来定义:

  • 完备性(Completeness,也译作完整性) - 如果陈述是真实的,诚实的证明者总能够通过验证者的检验。
  • 健壮性(Soundness,也译作合理性) - 如果陈述是假的,任何欺诈的证明者都将只有微小的概率能够误导验证者相信该陈述是真的。
  • 零知识性(Zero-knowledge) - 如果陈述是真实的,验证者将无法学习任何其他的信息,除了该陈述是正确的。换句话说,验证过程不会泄露任何能够用于构造证明的信息。

ZKP的原理通常通过简单的例子来理解:如果我需要向A证明我拥有B的电话号码,我不需要直接把B的电话号码告诉B,而是可以直接通过拨打B的电话,在打通后即可证明我确实拥有B的电话号码,这个过程并不会泄露B的号码信息。

在现实应用中,ZKP通常需要复杂的数学构造,如多项式方程、椭圆曲线或其他数学难题,这些构造的安全性基于问题的计算难度,如因数分解或离散对数问题。随着密码学的发展,出现了多种ZKP的实现,如zk-SNARKs和zk-STARKs,这些实现能够在不同的上下文中提供有效的隐私保护,尤其是在区块链和加密货币领域中。

零知识证明的基本形式由三个要素组成:证人、挑战和回复。

  • 证人(Witness):通过零知识证明,证明者想要证明对一些隐藏信息的了解。 这些秘密信息就是证明的“证人”,证明者基于对证人的了解设立了一组问题,这些问题只有了解信息的一方才能回答出来。 因此,证明者随机选择一个问题来发起证明,计算问题答案,然后发送给验证者。
  • 挑战(Challenge):验证者从问题集里随机挑选另外一个问题,然后让证明者来回答。
  • 回复(Response):证明者接收问题,计算答案,然后把答案发送给验证者。 证明者的回复让验证者可以检验证明者是否真的可以接触到证人。 为了确保证明者并不是偶然盲目猜对答案的,验证者会再选择一个问题来提问。 通过多次重复这个过程,证明者造假的可能性会极大的降低,直到最终验证者满意。

在上文打电话的例子中,“我”是不希望透露信息的证人,而A是验证者,提出的挑战是“证明‘我’拥有B的号码”。回复过程是指“我”打通B的号码证明我确实掌握了B的电话号码。

为什么需要ZKP?

在前文中,我们已经探讨了零知识证明(ZKP)在隐私保护领域的固有优势。在当前这个信息爆炸的时代,个人数据往往存储于第三方平台,这不仅增加了数据泄露的风险,而且由于技术门槛和法律制裁的滞后性,信息安全大多依靠道德约束,使得用户难以真正掌控自己的隐私信息。零知识证明技术的出现,为用户提供了一个既保护隐私又提升验证效率和安全性的解决方案。相比于其他加密技术,ZKP拥有多种优势:

  • 隐私保护:ZKP允许个人和机构证明某些信息的真实性,而无需透露实际的信息内容。例如,它可以用来证明一个人满足年龄要求,而不需要透露实际年龄或出生日期。
  • 安全性增强:因为ZKP不需要公开敏感信息,所以它降低了数据泄露的风险。即使在证明过程中发生拦截,也没有实质性的数据被泄露。
  • 减少欺诈:在金融交易中,ZKP可以被用来验证交易的合法性,而不暴露交易的具体细节,从而减少欺诈的机会。
  • 效率:某些类型的ZKP,如zk-SNARKs,创建和验证的速度非常快,这对于需要处理大量交易或验证操作的系统来说非常有用。
  • 互操作性:ZKP可以在不同的系统和领域之间提供一个共同的验证框架,使得不同系统之间的信息可以安全地验证和共享。
  • 扩展性:随着计算技术的发展,ZKP的实现正在变得更加高效和可扩展,这意味着它们可以在更大规模的系统中部署。
  • 合规性:在法规要求保护消费者隐私的今天,ZKP可以帮助公司在不违反隐私法规的情况下验证和处理数据。
  • 用户控制:ZKP增强了用户对自己数据的控制能力,因为它们可以选择透露的信息量。
  • 去中心化:在区块链和分布式技术中,ZKP为去中心化提供了强大的隐私工具,用户可以在不依赖于中央权威的情况下进行交易和互动。

无论是传统的Web2.0还是新兴的Web3.0领域,ZKP的应用前景都是广阔的。

ZKP的种类

零知识证明目前有多种实现方式,如zk-SNARKS、zk-STARKS、PLONK以及Bulletproofs等。每种方式在证明大小、证明者时间以及验证时间上都有自己的优缺点,本文着重介绍应用场景较多的四种实现方式。

zk-SNARKs

zk-SNARKs,全称为“Zero-Knowledge Succinct Non-Interactive Argument of Knowledge”,直译为“零知识简洁非交互式知识论证”,是一种用于在不泄露任何信息的前提下证明某个人知道某个信息的密码学工具。

在zk-SNARKs中,”零知识”意味着证明者能够证明某个陈述是真的,而无需提供除正确性以外的任何信息。”简洁”指的是证明的大小很小,验证过程很快。”非交互式”意味着一旦证明生成后,它可以被任何人验证,无需证明者和验证者进行进一步的互动。

zk-SNARKs的核心组件包括:

  • 可信设置:在系统初始化阶段,需要生成一对公共/私钥(参数)。这个过程必须由可信任的一方执行,因为如果私钥泄露,系统的安全性就会被破坏。
  • 证明生成:证明者知道某个秘密信息,但不想将其透露给验证者。他们使用这个秘密信息和公共参数来构造一个证明,这个证明足以表明他们知道这个秘密,但不透露任何关于它的细节。
  • 验证过程:验证者接收到证明后,他们可以使用公共参数来验证证明的正确性。如果证明者构造了一个正确的证明,验证过程将输出“是”,否则输出“否”。

zk-SNARKs可以用于各种需要隐私保护的场景,如匿名交易的加密货币、安全投票系统、隐私保护的身份验证和数据共享,以及区块链扩容技术。

zk-STARKs

zk-STARKs,即“Zero-Knowledge Scalable Transparent Arguments of Knowledge”,中文可译为“零知识可扩展透明参数化知识的参数化证明”,也是一种零知识证明机制,它允许一方(证明者)向另一方(验证者)证明他们知道某个信息而无需透露该信息本身。

与zk-SNARKs相比,zk-STARKs的关键特点在于它们不需要一个可信的设置过程。这意味着它们不依赖于对某些私密信息的保密性;这在很多情况下被认为是一个重要的安全特性,因为可信设置过程可能是一个系统弱点。

zk-STARKs的工作原理基于几个数学领域的概念,包括哈希函数、多项式计算、以及误差校正理论。它们使用了一种称作“零知识可扩展透明参数化”的构造,从而无需可信设置即可生成证明。

zk-STARKs的潜在应用与zk-SNARKs类似,但由于其可扩展性和透明性,它们尤其适合大规模的应用场景,包括加密货币的隐私保护、区块链扩容技术、云计算中的安全验证等。

PLONK

PLONK 不是一个缩写,而是代指该方案的创建者们的姓氏首字母。PLONK 是为了提供一种通用且高效的ZKP方案,特别是在区块链应用,如智能合约和隐私保护交易中。

PLONK 的核心是使用一种“同态隐藏”的技术,它使得在不泄露原始数据的情况下对数据进行算术运算成为可能。它使用一种特殊的算法——多项式提交方案——来创建证明,这允许证明者有效地证明他们对一组数据拥有正确的计算结果。

PLONK 的关键特点之一是它的通用性。一旦为特定的计算任务设置了参数(通过一次可信设置),就可以多次重用这些参数来创建新的证明,无需每次都进行新的设置。这使得PLONK在创建和验证证明方面非常高效。

PLONK 常被设计来支持区块链和其他分布式系统中的各种计算任务

Bulletproofs

Bulletproofs 是一种新推出的ZKP解决方案,它不需要可信的设置,并专为构建范围证明和某些特定类型的算术证明而设计。Bulletproofs 是由Benedikt Bunz, Jonathan Bootle, Dan Boneh等人在2017年提出的。

Bulletproofs 的工作原理基于复杂的数学构造,如同态加密和椭圆曲线密码学。它们利用了一系列的数学技巧来允许证明者创建一个关于数字的有效范围证明,而不会泄露该数字的确切值。特别是在加密货币领域,这可以用来证明交易值在某个合法的范围内,而不暴露实际的交易金额。

由于其范围证明的特性,Bulletproofs 被广泛用于加密货币和区块链领域,特别是在隐私币中,如Monero,以隐藏交易金额的同时验证交易的有效性。此外,它们也可用于其它需要保证数字隐私的应用场景。

案例理解

让我们用一个藏宝图的例子来理解这四种不同的ZKP技术:zk-SNARKs、zk-STARKs、PLONK和Bulletproofs。

假设你有一张藏宝图,它能指引你到一个埋藏宝藏的确切位置。你想证明给某人看你知道宝藏的位置,但你不想揭露宝藏图的内容或宝藏的实际位置。

zk-SNARKs:

你制作了一份藏宝图的复杂拼图。你选择了一小块关键拼图(一个证明),并展示给对方看,足以让他们确信你知道完整的拼图如何组合,即宝藏的位置,而无需看到整个拼图。但是,为了做到这一点,你需要从一个可信的印刷厂获取一些特殊的标记,这些标记用来证明你的拼图片段是真实的。

zk-STARKs:

你给对方看了藏宝图的一部分,并告诉他们可以使用一种特殊的放大镜(验证算法),随机检查图中的细节,验证它确实指向宝藏,而不需要知道宝藏的确切位置。这个放大镜是如此强大,以至于即使未来的技术(量子计算机)也无法破解你藏宝图的秘密。

PLONK:

这次,你创造了一套解谜游戏,每个谜题的答案都指向宝藏的位置。你向对方展示了一个通用的谜题解决方案的验证方法(通用设置),这个方法足以让对方确信你知道所有谜题的答案,而无需逐一解开每个谜题。

Bulletproofs:

你决定用一种方法证明你知道宝藏的大致范围,而不透露确切位置。你提供了一系列的数学题解答,这些解答证明了宝藏位置的范围,而且你所用的方法不需要任何特殊的标记或印刷工艺,这意味着没有初始信任的要求。

在这个例子中:

  • zk-SNARKs 要求信任你获取的拼图片段的来源(可信设置),但它提供了一个非常小的和快速验证的证明。
  • zk-STARKs 不需要信任任何来源,证明更加健壮,适合长期安全保持和适应未来的威胁。
  • PLONK 则提供了一种一次设置,多次使用的高效验证方式,这意味着你只需一次努力,就可以多次证明你知道宝藏的位置。
  • Bulletproofs 允许你在没有任何初始信任要求的情况下证明关于宝藏位置的范围信息,尽管生成和验证证明的效率可能不如前两者。

每种方法在实际应用中都有其权衡,选择哪种取决于具体的应用场景和安全需求。

不同ZKP方案之间的简单对比

在进行比较前,我们需要先理解评价ZKP的标准都有哪些:

  • 证明大小:证明的数据量大小,影响存储和传输的成本。
  • 验证时间:验证证明所需的时间。
  • 证明时间:生成证明所需的时间。
  • 内存使用:生成和验证证明过程中所需的内存量。
  • 通用性:证明系统是否适用于多种不同类型的计算。
  • 可信设置:是否需要一个初始的可信设置阶段。
  • 后量子安全性:是否抵抗未来量子计算机的攻击。

现在,让我们根据这些指标对zk-SNARKs、zk-STARKs、PLONK和Bulletproofs进行比较,并分别讨论他们的优缺点。

zk-SNARKs

优点:

  • 证明大小:非常小,使得它们适合于带宽受限的环境。
  • 验证时间:快速验证,适合于需要快速响应的场景。
  • 通用性:适用于多种复杂计算。

缺点:

  • 证明时间和内存使用:证明生成过程可能既耗时又占用大量内存。
  • 可信设置:需要一个初始的可信设置阶段,如果设置被破坏,系统的安全性就会受到威胁。
  • 后量子安全性:大多数构建不是后量子安全的。

zk-STARKs

优点:

  • 无需可信设置:消除了可信设置的需求,提高了系统的安全性。
  • 后量子安全性:抵抗量子计算机的攻击。
  • 证明大小:虽大于zk-SNARKs,但在一定条件下仍然可管理。

缺点:

  • 证明大小:比zk-SNARKs大,可能会导致存储和传输效率降低。
  • 证明时间:可能会比zk-SNARKs慢,尤其是在复杂的计算中。

PLONK

优点:

  • 通用性:一套参数适用于多个不同的证明,降低了重复工作。
  • 证明大小:相对较小,尽管大于zk-SNARKs。
  • 更新性:易于更新和维护。

缺点:

  • 可信设置:虽然比zk-SNARKs的可信设置要求更宽松,但仍需要设置。
  • 后量子安全性:同样大多数构建不是后量子安全的。

Bulletproofs

优点:

  • 无需可信设置:不需要可信设置,减少了安全风险。
  • 证明大小:证明大小随着语句复杂性的增加而缓慢增长。
  • 验证时间:对于范围证明,验证时间较快。

缺点:

  • 证明时间:生成证明可能需要较长时间。
  • 证明大小:虽然较小,但在比较大的证明时仍然大于zk-SNARKs。
  • 后量子安全性:不是特别为后量子环境设计的。

Web3中对ZKP的应用案例

Web3中有很多ZKP的应用案例,我们选取了两个典型案例进行研究。

【1】区块链扩容 - 以以太坊Layer2为例

zk-Rollups是一种Layer 2解决方案,它将成百上千的交易打包在链下,并生成zk-SNARK的证明。这个证明连同交易数据一起被提交到以太坊主链上。这允许验证交易的有效性,而无需主链处理每一笔交易,从而降低了费用并提高了吞吐量。

Layer2中对zk-SNARK的应用演示(来源:Simon Brown

目前zk-Sync Era、Starknet都采用了zk-roolup技术,Polygon在最近也推出了使用zk-rollup的Polygon zk-EVM。

【2】数据隐私 - 以交易所储备金证明为例

交易所储备金证明指对加密货币交易所或任何其他金融机构持有的余额进行审查,核实公司记录在案的资产量与实际资产持有量是否相当的证明。在最初,交易所通过默克尔树和第三方审计公司进行证明,但这个过程需要依赖第三方主体,也会泄露用户的账户余额等隐私数据。以Gate.io为代表的交易所们在利用zk-SNARKs技术进行储备金证明,将用户数据经过加密后,通过zk-SNARK电路得到用户资产数,从而出具完整的储备金证明报告。

结语

零知识证明技术的多样化方案彰显了其在Web3中的强大潜力,从数据隐私保护到区块链扩容,ZKP正成为构建安全、高效Web3基础设施的关键。各种方案虽有不同的优势和局限,但共同指向一个更加可信和隐私保护的数字未来。随着技术进步,ZKP在优化性能和安全性方面的挑战也将逐步克服,预示着其在数字世界中的作用将日益增强。

Tác giả: Wayne
Thông dịch viên: Piper
(Những) người đánh giá: Piccolo、Edward、Elisa、Ashley He、Joyce
* Đầu tư có rủi ro, phải thận trọng khi tham gia thị trường. Thông tin không nhằm mục đích và không cấu thành lời khuyên tài chính hay bất kỳ đề xuất nào khác thuộc bất kỳ hình thức nào được cung cấp hoặc xác nhận bởi Gate.io.
* Không được phép sao chép, truyền tải hoặc đạo nhái bài viết này mà không có sự cho phép của Gate.io. Vi phạm là hành vi vi phạm Luật Bản quyền và có thể phải chịu sự xử lý theo pháp luật.
Bắt đầu giao dịch
Đăng ký và giao dịch để nhận phần thưởng USDTEST trị giá
$100
$5500
Tạo tài khoản