什么是零知识证明?

新手Apr 23, 2024
本文提供了零知识证明(ZKP)的详细证明。
什么是零知识证明?

零知识证明是一种在不透露陈述本身的情况下证明陈述有效性的方法。 “证明者”是试图证明某个主张的一方,而“验证者”则负责验证该主张。

零知识证明首次出现于 1985 年的一篇论文“交互式证明系统的知识复杂性

(在新选项卡中打开)

”它提供了当今广泛使用的零知识证明的定义:

零知识协议是一种方法,通过该方法,一方(证明者)可以向另一方(验证者)证明某件事是真实的,除了该特定陈述是真实的事实之外,无需透露任何信息。

多年来,零知识证明已经得到改进,现在已用于多个现实世界的应用程序中。

为什么我们需要零知识证明?

零知识证明代表了应用密码学的突破,因为它们承诺提高个人信息的安全性。考虑如何向另一方(例如服务提供商)证明某项主张(例如“我是 X 国家的公民”)。您需要提供“证据”来支持您的主张,例如国民护照或驾驶执照。

但这种方法也存在问题,主要是缺乏隐私。与第三方服务共享的个人身份信息 (PII) 存储在中央数据库中,很容易受到黑客攻击。随着身份盗窃成为一个关键问题,人们呼吁采用更多保护隐私的方式来共享敏感信息。

零知识证明通过消除揭示信息来证明主张有效性的需要来解决这个问题。零知识协议使用语句(称为“见证人”)作为输入来生成其有效性的简洁证明。该证明为陈述的真实性提供了强有力的保证,而无需暴露创建陈述时使用的信息。

回到我们之前的例子,证明您的公民身份所需的唯一证据是零知识证明。验证者只需检查证明的某些属性是否成立,即可确信底层陈述也成立。

零知识证明如何发挥作用?

零知识证明允许您证明陈述的真实性,而无需共享陈述的内容或透露您如何发现真相。为了实现这一点,零知识协议依赖于将一些数据作为输入并返回“真”或“假”作为输出的算法。

零知识协议必须满足以下标准:

  1. 完整性:如果输入有效,零知识协议始终返回“true”。因此,如果底层陈述是真实的,并且证明者和验证者诚实行事,则证明可以被接受。
  2. 健全性:如果输入无效,理论上不可能欺骗零知识协议返回“true”。因此,说谎的证明者不能欺骗诚实的验证者相信无效的陈述是有效的(除非概率很小)。
  3. 零知识:除了声明的有效性或虚假性之外,验证者对声明一无所知(他们对该声明“零知识”)。此要求还阻止验证者从证明中得出原始输入(语句的内容)。

在基本形式中,零知识证明由三个要素组成:见证人、挑战,以及响应。

  • 见证人:通过零知识证明,证明者想要证明某些隐藏信息的知识。秘密信息是证明的“证人”,证明者对证人的假设知识建立了一系列问题,这些问题只能由了解该信息的一方来回答。因此,证明者通过随机选择一个问题、计算答案并将其发送给验证者来开始证明过程。
  • 挑战:验证者从集合中随机选择另一个问题并要求证明者回答。
  • 响应:证明者接受问题,计算答案,并将其返回给验证者。证明者的响应允许验证者检查前者是否真的可以接触到证人。为了确保证明者不会盲目猜测并偶然获得正确答案,验证者会选择更多问题来提出。通过多次重复这种交互,证明者伪造证人知识的可能性显着下降,直到验证者满意为止。

上面描述了“交互式零知识证明”的结构。早期的零知识协议使用交互式证明,验证声明的有效性需要证明者和验证者之间的来回通信。

Jean-Jacques Quisquater 著名的阿里巴巴洞穴故事是说明交互式证明工作原理的一个很好的例子阿里巴巴洞穴故事

(在新选项卡中打开)

。在故事中,佩吉(证明者)想要向维克多(验证者)证明她知道打开魔法门的秘密短语,但又不透露该短语。

非交互式零知识证明

虽然具有革命性,但交互式证明的用处有限,因为它需要两方随时待命并反复互动。即使验证者确信证明者的诚实性,该证明也无法用于独立验证(计算新证明需要证明者和验证者之间的一组新消息)。

为了解决这个问题,Manuel Blum、Paul Feldman 和 Silvio Micali 提出了第一个非交互式零知识证明

(在新选项卡中打开)

其中证明者和验证者有一个共享密钥。这允许证明者证明他们对某些信息(即证人)的了解,而无需提供信息本身。

与交互式证明不同,非交互式证明只需要参与者(证明者和验证者)之间进行一轮通信。证明者将秘密信息传递给特殊算法来计算零知识证明。该证明被发送给验证者,验证者使用另一种算法检查证明者是否知道秘密信息。

非交互式证明减少了证明者和验证者之间的通信,使 ZK 证明更加高效。此外,一旦生成证明,其他任何人(有权访问共享密钥和验证算法)都可以对其进行验证。

非交互式证明代表了零知识技术的突破,并促进了当今使用的证明系统的发展。我们在下面讨论这些证明类型:

零知识证明的类型

ZK-SNARK

ZK-SNARK 是 Zero-Knowledge Succinct Non-Interactive Argument of Knowledge 的缩写。 ZK-SNARK协议具有以下特点:

  • 零知识:验证者可以在不了解该语句的任何其他信息的情况下验证该语句的完整性。验证者对该陈述唯一的了解是它是真是假。
  • 简洁:零知识证明比见证人小,可以快速验证。
  • 非交互式:证明是“非交互式”的,因为证明者和验证者仅交互一次,这与需要多轮通信的交互式证明不同。
  • 论据:证明满足“健全性”要求,因此作弊的可能性极低。
  • (Of) Knowledge:如果不访问秘密信息(见证人),则无法构建零知识证明。对于没有见证人的证明者来说,计算有效的零知识证明即使不是不可能,也是很困难的。

前面提到的“共享密钥”是指证明者和验证者同意在生成和验证证明时使用的公共参数。生成公共参数(统称为公共引用字符串 (CRS))是一项敏感操作,因为它对于协议的安全性非常重要。如果用于生成 CRS 的熵(随机性)落入不诚实的证明者手中,他们就可以计算出错误的证明。

多方计算(MPC)

(在新选项卡中打开)

是一种降低生成公共参数风险的方法。多方参与可信设置仪式

(在新选项卡中打开)

,其中每个人贡献一些随机值来生成 CRS。只要诚实的一方销毁了他们的那部分熵,ZK-SNARK 协议就可以保持计算的健全性。

可信设置要求用户信任参数生成的参与者。然而,ZK-STARK 的开发使得证明协议能够在不可信的设置下工作。

ZK-STARK

ZK-STARK 是零知识可扩展透明知识论证的缩写。 ZK-STARK 与 ZK-SNARK 类似,不同之处在于:

  • 可扩展:当见证人规模较大时,ZK-STARK 在生成和验证证明方面比 ZK-SNARK 更快。使用 STARK 证明,证明者和验证者时间仅随着见证者的增长而略有增加(SNARK 证明者和验证者时间随见证者规模线性增加)。
  • 透明:ZK-STARK 依靠可公开验证的随机性来生成用于证明和验证的公共参数,而不是可信设置。因此,与 ZK-SNARK 相比,它们更加透明。

ZK-STARK 产生的证明比 ZK-SNARK 更大,这意味着它们通常具有更高的验证开销。然而,在某些情况下(例如证明大型数据集),ZK-STARK 可能比 ZK-SNARK 更具成本效益。

零知识证明的用例

匿名付款

信用卡支付通常对多方可见,包括支付提供商、银行和其他相关方(例如政府当局)。虽然金融监控有利于识别非法活动,但它也损害了普通公民的隐私。

加密货币旨在为用户提供一种进行私人点对点交易的方式。但大多数加密货币交易在公共区块链上公开可见。用户身份通常是假名的,并且要么故意与现实世界的身份相关联(例如,通过在 Twitter 或 GitHub 个人资料上包含 ETH 地址),要么可以使用基本的链上和链下数据分析与现实世界的身份相关联。

有专门为完全匿名交易而设计的“隐私币”。以隐私为中心的区块链,例如 Zcash 和 Monero,屏蔽交易详细信息,包括发送者/接收者地址、资产类型、数量和交易时间表。

通过将零知识技术融入协议中,注重隐私的区块链网络允许节点无需访问交易数据即可验证交易。

零知识证明也被应用于公共区块链上的匿名交易。一个例子是 Tornado Cash,这是一种去中心化的非托管服务,允许用户在以太坊上进行私人交易。 Tornado Cash 使用零知识证明来混淆交易细节并保证财务隐私。不幸的是,因为这些都是“选择加入”的。它们与非法活动相关的隐私工具。为了克服这个问题,隐私最终必须成为公共区块链的默认设置。

身份保护

当前的身份管理系统使个人信息面临风险。零知识证明可以帮助个人验证身份,同时保护敏感细节。

零知识证明在去中心化身份的背景下特别有用。去中心化身份(也称为“自我主权身份”)使个人能够控制对个人标识符的访问。在不透露税号或护照详细信息的情况下证明您的公民身份是零知识技术如何实现去中心化身份的一个很好的例子。

验证

使用在线服务需要证明您的身份和访问这些平台的权利。这通常需要提供个人信息,例如姓名、电子邮件地址、出生日期等。您可能还需要记住长密码,否则可能会失去访问权限。

然而,零知识证明可以简化平台和用户的身份验证。一旦使用公共输入(例如,证明用户平台成员身份的数据)和私有输入(例如,用户的详细信息)生成了 ZK 证明,用户就可以简单地将其呈现给当他们需要访问服务时验证他们的身份。这改善了用户体验,并使组织无需存储大量用户信息。

可验证的计算

可验证计算是零知识技术用于改进区块链设计的另一个应用。可验证计算允许我们将计算外包给另一个实体,同时保持可验证的结果。该实体提交结果以及验证程序是否正确执行的证据。

可验证的计算对于提高区块链的处理速度而不降低安全性至关重要。理解这一点需要了解扩展以太坊所提出的解决方案的差异。

链上扩容解决方案,例如分片,需要对区块链基础层进行大量修改。然而,这种方法非常复杂,实施中的错误可能会破坏以太坊的安全模型。

链下扩容解决方案不需要重新设计核心以太坊协议。相反,他们依靠外包计算模型来提高以太坊基础层的吞吐量。

下面是它在实践中的运作方式:

  • 以太坊不是处理每笔交易,而是将执行任务转移到单独的链上。
  • 处理交易后,另一条链返回结果以应用于以太坊的状态。

这样做的好处是,以太坊不需要执行任何执行,只需将外包计算的结果应用到其状态即可。这减少了网络拥塞,并提高了交易速度(链下协议优化以加快执行速度)。

链需要一种方法来验证链下交易而不重新执行它们,否则链下执行的价值就会丢失。

这就是可验证计算发挥作用的地方。当节点在以太坊之外执行交易时,它会提交零知识证明来证明链下执行的正确性。这个证明(称为

有效性证明)保证交易有效,允许以太坊将结果应用到其状态,而无需等待任何人对其提出异议。

零知识汇总validiums 是两种链外扩容解决方案,它们使用有效性证明来提供安全的可扩展性。这些协议在链下执行数千笔交易,并提交证据以在以太坊上进行验证。一旦证明得到验证,这些结果就可以立即应用,从而使以太坊能够在不增加基础层计算的情况下处理更多交易。

减少链上投票中的贿赂和串通行为

区块链投票方案具有许多有利的特征:它们完全可审计、不受攻击、不受审查、不受地域限制。但即使是链上投票方案也无法避免串通问题。

共谋被定义为“通过欺骗、欺骗和误导他人来协调限制公开竞争”,其形式可能是恶意行为者通过行贿影响投票。例如,Alice 可能会收到 Bob 的贿赂,以便在选票上投票给 option B,即使她更喜欢 option A。

贿赂和共谋限制了任何使用投票作为信号机制的流程的有效性(特别是在用户可以证明他们如何投票的情况下)。这可能会产生重大后果,特别是在投票负责分配稀缺资源的情况下。

例如,二次融资机制

(在新选项卡中打开)

依靠捐赠来衡量对不同公益项目中某些选项的偏好。每次捐款都算作一次“投票”。对于特定项目,获得更多选票的项目可以从匹配池中获得更多资金。

使用链上投票使得二次融资容易受到串通:区块链交易是公开的,因此行贿者可以检查受贿者的链上活动以了解他们如何“投票”。这样,二次方融资就不再是根据社区总体偏好分配资金的有效手段。

幸运的是,诸如 MACI(最低反共谋基础设施)之类的新解决方案正在使用零知识证明来使链上投票(例如二次融资机制)能够抵御贿赂和共谋。 MACI 是一组智能合约和脚本,允许中央管理员(称为“协调员”)汇总投票和统计结果而无需透露的具体细节每个人如何投票。即便如此,仍然可以验证计票是否正确,或者确认特定个人参与了投票轮。

MACI 如何使用零知识证明?

首先,协调员在以太坊上部署 MACI 合约,之后用户可以注册投票(通过在智能合约中注册他们的公钥)。用户通过将使用其公钥加密的消息发送到智能合约来进行投票(有效的投票必须使用与用户身份相关的最新公钥以及其他标准进行签名)。之后,协调员在投票期结束后处理所有消息,统计选票,并在链上验证结果。

在MACI中,零知识证明用于确保计算的正确性,使协调者不可能错误地处理投票和统计结果。这是通过要求协调者生成 ZK-SNARK 证明来实现的,验证 a) 所有消息均已正确处理 b) 最终结果对应于所有有效消息的总和有效 投票。

因此,即使不共享每个用户的投票细目(通常是这种情况),MACI 也能保证统计过程中计算结果的完整性。此功能对于降低基本共谋方案的有效性非常有用。我们可以通过使用之前 Bob 贿赂 Alice 来投票给某个选项的示例来探索这种可能性:

  • 爱丽丝通过将公钥发送到智能合约来注册投票。
  • Alice 同意投票option B,以换取 Bob 的贿赂。
  • Alice 投票给option B。
  • Alice 秘密发送加密交易来更改与她的身份相关的公钥。
  • Alice 使用新的公钥向智能合约发送另一条(加密的)消息来投票option A。
  • Alice 向 Bob 展示了一笔交易,显示她投票给了option B(该交易无效,因为公钥不再与系统中 Alice 的身份相关联)
  • 在处理消息时,协调器会跳过 Alice 对 option B 的投票,只计算对 option A 的投票。因此,鲍勃与爱丽丝勾结并操纵链上投票的尝试失败了。

使用 MACI 确实需要相信协调员不会与贿赂者勾结或试图贿赂选民本身。协调员可以解密用户消息(创建证明所必需的),以便他们可以准确验证每个人的投票方式。

但在协调员保持诚实的情况下,MACI 是保证链上投票神圣性的强大工具。这解释了它在二次融资应用程序中的受欢迎程度(例如,clr.fund

(在新选项卡中打开)

)这在很大程度上依赖于每个人投票选择的完整性。

了解有关 MACI 的更多信息

(在新选项卡中打开)

使用零知识证明的缺点

硬件成本

生成零知识证明涉及非常复杂的计算,最好在专用机器上执行。由于这些机器价格昂贵,通常超出了普通人的能力范围。此外,想要使用零知识技术的应用程序必须考虑硬件成本,这可能会增加最终用户的成本。

证明验证费用

验证证明还需要复杂的计算,并增加了在应用程序中实施零知识技术的成本。这种成本在证明计算的背景下尤其重要。例如,ZK-rollups 需要支付约 500,000 Gas 来验证以太坊上的单个 ZK-SNARK 证明,而 ZK-STARK 则需要更高的费用。

信任假设

在 ZK-SNARK 中,公共参考字符串(公共参数)生成一次,可供希望参与零知识协议的各方重复使用。公共参数是通过可信设置仪式创建的,其中参与者被认为是诚实的。

但用户实际上没有办法评估参与者的诚实度,用户必须相信开发者的话。 ZK-STARK 不受信任假设的影响,因为生成字符串时使用的随机性是可公开验证的。与此同时,研究人员正在研究 ZK-SNARK 的非可信设置,以提高证明机制的安全性。

量子计算威胁

ZK-SNARK 使用椭圆曲线密码学

电子CDSA) 用于加密。虽然 ECDSA 算法目前是安全的,但量子计算机的发展将来可能会打破其安全模型。

ZK-STARK 被认为不受量子计算的威胁,因为它使用抗碰撞哈希进行加密。与椭圆曲线加密中使用的公私密钥对不同,抗碰撞散列对于量子计算算法来说更难破解。

声明:

  1. 本文转载自[Ethereum],著作权归属原作者[Ethereum],如对转载有异议,请联系Gate Learn团队,团队会根据相关流程尽速处理。
  2. 免责声明:本文所表达的观点和意见仅代表作者个人观点,不构成任何投资建议。
  3. 文章其他语言版本由Gate Learn团队翻译, 在未提及Gate.io的情况下不得复制、传播或抄袭经翻译文章。
即刻开始交易
注册并交易即可获得
$100
和价值
$5500
理财体验金奖励!
立即注册