透明度和隐私性是任何区块链都应具备的两个品质。然而,并非所有区块链都具备公开追踪交易同时保密个人信息的能力。要在公共系统上保密详细信息,您需要实施证明系统。
证明系统使用加密证明来证明交互确实发生并且其输出正确。最流行的证明系统之一是零知识证明。这些证明验证链上交互而不泄露任何相关信息。
如今,有一系列区块链系统实现了零知识证明,并且本身也存在一系列不同的零知识证明。迄今为止最重要的零知识证明系统之一就是 ZK-SNARK。
但是 ZK-SNARK 到底是什么?
什么是 zk-SNARK?
ZK-SNARK 是一种零知识证明,它是一种加密证明,允许一方证明其知道某条信息而不向他人透露。具体来说,ZK-SNARK 代表“零知识简洁非交互式知识论证”。
但让我们深入探讨一下这意味着什么:
ZK-SNARKs 的历史
最早提及 ZX-SNARKs 的相关内容可以追溯到加州大学伯克利分校教授Alessandro Chiesa共同撰写的一篇研究论文。Chiesa 还是ZCash的联合创始人,ZCash 是一种以隐私为中心的加密货币,是 zk-SNARKs 作为提供屏蔽加密交易的证明系统的第一个实际实现。
zk-SNARKs 有什么作用?
因此,您已经知道,零知识证明都旨在创建一种方式,让您可以共享敏感信息的有效性,而无需泄露信息本身。但让我们看看 ZK-SNARKs 用来实现这一目标的关键特性:
ZK-SNARK 是非交互式的
非交互式证明意味着证明者可以将证明发送给验证者,而无需进一步通信或交换信息。这使得证明系统更加高效和实用。此属性是通过称为 fiat-Shamir 启发式的过程实现的
ZK-SNARKs 不泄露敏感信息
作为零知识证明,ZK SNARK 确保除了声明的有效性之外不会泄露任何其他信息。验证者可以确认声明的真实性,但不会获得有关声明具体细节的额外知识。
ZK-SNARKs 提供简洁的论据
简洁性是指 zk-SNARKs 证明的紧凑性及其验证速度。这些零知识证明被设计为小尺寸,并且需要最少的计算能力来验证。“知识论证 ”是一种加密断言,即证明者拥有特定信息或解决方案。它比知识证明更有力。
现在我们对 zk-SNARK 有了高层概述,让我们首先深入了解一些应用程序及其用途。
zk-SNARK 有什么用?
zk-SNARKs 目前主要用于 3 个主要应用:可扩展性解决方案、私人交易和身份保护。
可扩展性解决方案
zk-rollups是第 2 层扩展解决方案,采用零知识证明 (ZKP) 来提高区块链的敏捷性和效率。与传统证明系统不同,zk-SNARK 充当证明聚合器。这意味着 ZK-SNARK 可以为批量交易编译单个加密证明。
这使得 zk-SNARK 证明系统能够快速验证所有交易的正确性。单一证明概念还有助于减少区块链上的存储和计算负担,提高吞吐量并降低交易费用。
Polygon Hermez和zkSync是两个使用 zkSNARKs 解决以太坊可扩展性问题的著名项目。
私人交易
zk-SNARK 通过隐藏个人详细信息(例如发送者和接收者的地址,甚至交易金额)来促进区块链上的私人交易。尽管交易细节被隐藏,但网络验证者仍然可以验证交易。
机构可以使用 zk-SNARK 来确保业务数据的安全性和私密性。从安全角度来看,隐私交易还可以阻止区块链抢先交易。
Z-Cash和Tornado Cash是支持私人交易的项目。
身份保护
每天,人们都需要提供身份信息才能获得服务(银行服务)、旅行(签证),甚至进入酒吧(年龄限制)。这些互动很少能保证数据保护和隐私。
借助 zk-SNARK,用户可以证明其身份或凭证的真实性,而无需透露个人信息。这增强了个人数据的隐私性和安全性,同时降低了身份盗窃风险。
这样,无需信任的身份验证也成为可能。这样就无需服务提供商或中介机构存储用户的凭证。
Zk-creds是一种概念协议,旨在使用 zk-SNARKs 提供灵活的匿名凭证。
zk-SNARKs 如何工作?
zk-SNARKs 由三个主要的加密功能组成:密钥生成、证明生成和验证。
zk-SNARK 加密函数和算法
密钥生成(设置)功能:
首先,ZK-SNARK 依赖于密钥生成函数作为初始设置阶段的一部分。该函数生成 ZK-SNARK 证明系统运行所需的加密密钥。具体来说,它生成一个证明密钥(用于创建证明)和一个验证密钥(用于验证证明)。
例如,C(x, w)是我们需要验证但不透露细节的逻辑语句。其中,“x”是公开输入,“w”是私人输入(见证)。setup 函数作为此语句的数学表示,以安全参数“λ”作为输入。这用于生成证明密钥“pk”和验证密钥“vk”。
设置(C,λ)→(pk,vk)
证明生成(证明)函数
下一个重要功能:ZK-SNARK 允许证明者创建加密证明 — 证明者可以发送给验证者的简洁的零知识证明。证明者采用私人输入“w”(或见证)、公钥“x”和证明密钥pk来生成证明“prf” ,证明他们知道此信息但不泄露。
证明(w,x,pk)→prf
验证(verify)功能
zk-SNARKs 中的验证函数由验证者用来检查证明者提供的加密证明的有效性。验证者使用证明'prf'、验证密钥'vk'和公共输入'x'来确定证明是否有效。Verify (vk,prf,x) → True(如果有效)或False(如果无效)。
zk-SNARK 证明的三个函数的表示。
这满足了零知识证明的所有三个基本属性:
完整性:如果初始语句 C(x, w) 正确,则始终会生成有效证明“prf”并被验证者接受。
健全性:如果初始语句 C(x, w) 不正确,则证明者生成的任何证明“prf”都将被验证者视为无效。
零知识:验证者在无需了解任何有关私人输入(见证)“w”的信息的情况下验证证明“prf”。
注意: “证明者”和“验证者”都是算法。
ZK-SNARKS 背后的技术
有三个重要概念为 zk-SNARKs 提供支持。它们是:椭圆曲线密码学 (ECC)、可信设置和 Fiat-Shamir 启发式算法
椭圆曲线加密 (ECC)
从根本上讲,zk-SNARKs 的安全性依赖于椭圆曲线密码学。ECC 是一种利用双密钥结构(公钥和私钥)对数据进行加密和解密的加密方法。
ECC 通过使用有限域上的椭圆曲线的代数结构,比其他加密方法更具优势。
椭圆曲线密码术在数字签名和加密中的表示。
值得信赖的设置
“可信设置仪式是一次性完成的过程,用于生成一段数据,每次运行某些加密协议时都必须使用这些数据,” —— Vitalik Buterin
本质上,要构建 zk-SNARK 协议及其公共参数,需要一个秘密作为所有参与者之间信任的基础。这个秘密通常被称为“有毒废物”,在初始信任建立后应妥善丢弃。否则,非法参与者可能会利用它来创建欺诈性证明。
可信设置仪式本质上是一种中心化行为。创始开发人员或贡献者值得信赖,不会破坏和玩弄协议。作为一种威慑,协议现在通过采用多方计算等技术让更多参与者参与到此设置中。这确保除非所有参与者串通,否则设置将保持安全。可信设置是一次性要求,对于 zk-SNARKs 的安全性和零知识属性至关重要。
菲亚特-沙米尔启发法
Fiat-Shamir 启发式方法通过模拟验证者的角色将交互式证明系统转换为非交互式证明系统。通常在交互式证明中,验证者会向证明者发送随机挑战。
在 Fiat-Shamir 启发式方法中,证明者不是接收来自验证者的随机挑战,而是使用加密哈希函数自己生成挑战。
为了形成这一点,我们需要两个关键要素——一个功能承诺方案和一个多项式交互式预言机。
如何开始使用 zk-SNARK
您可以通过多种方式开始使用 zk-SNARK。开发人员可以使用 zk-SNARK 为其 dapp 增加隐私性,为用户提供更安全的地方。此外,他们还可以选择以太坊、ZCash 和 Celo 等原生支持零知识证明系统的区块链。
或者,开发人员也可以部署内置 zk-SNARK 的智能合约来执行链上操作,而无需像 Tornado 混合器那样泄露数据。
zk-SNARKs:区块链隐私和扩展之路
如今,zk-SNARKs 为扩展区块链网络和构建以隐私为中心的 web3 提供了令人兴奋的进步。人们付出了很多努力来使 zk-SNARKs 易于使用和实施,同时构建了一个零知识工具和资源生态系统。
常见问题解答
ZK SNARKs 与 STARKs:有什么区别?
ZK-SNARK(简洁的非交互式知识论证)需要可信设置,并依赖于特定的加密假设,例如椭圆曲线配对。另一方面,ZK-STARK(简洁的透明知识论证)不需要可信设置,并且基于哈希函数,因此更加透明。ZK-STARK 也比 ZK-SNARK 更现代、更高效。ZK-SNARK 证明紧凑,因此在验证时间和计算负担方面非常高效。它们更快的验证时间对性能敏感的应用程序大有裨益。
zk-SNARKs 在零知识汇总中扮演什么角色?
像 Polygon Hermes 这样的 zk-Rollups 使用 zk-SNARKs 作为证明系统。ZK-SNARKs 将多个交易捆绑成一个证明,并提交给父区块链,在本例中即以太坊。此证明证明了批量交易的有效性,而区块链无需单独处理每笔交易。这显著提高了吞吐量,降低了费用,并保持了区块链网络的完整性。
什么是零知识币(zk-coins)?
使用零知识证明作为证明系统的加密货币称为 zk 币。它们本质上以隐私为中心,通常使用 zk-SNARK 为交易提供受保护、无审查的环境。Monero、Tornado Cash 和 ZCash 就是 zk 币的例子。