作者:@Jesse_meta,新跃社科大学普惠金融节点 SUSS NiFT 研究员;@EatonAshton2,Beosin 研究员;@kaplannie,Least Authority 安全研究员
本文以非技术人员的角度,介绍零知识证明的应用场景、工作原理、发展现状和未来趋势,以期让无技术背景的读者了解零知识证明即将带来的重大变革。
注:本文为 SUSS NiFT 区块链安全联盟研报
不管信息是存储在互联网上还是线下档案室,无论是出于主观故意还是客观意外,信息泄露事件在今天已经屡见不鲜,无需多言。只要信息是中心化存储,就会有受到单点攻击的危险。只要验证过程需要可信赖的第三方,就会存在道德风险且效率低下。信息安全的解决至关重要,迫在眉睫。而零知识证明技术让用户在保护自身隐私的前提下,更高效、更安全地完成验证。
如果说比特币是区块链带给现实世界的第一大发明,提供价值存储的新方式,以太坊的智能合约是第二大里程碑事件,解锁创新的潜力,那么零知识证明的应用是区块链发展史上第三大第三大技术革新,带来隐私和可扩展。这既是 Web3 生态的重要一环,也是有潜力推动社会变革的重要基础技术。
这篇文章以非技术人员的角度,介绍零知识证明的应用场景、工作原理、发展现状和未来趋势,以期让无技术背景的读者了解零知识证明即将带来的重大变革。
1.什么是零知识证明
零知识证明(ZKP)是在 1985 年由 Shafi Goldwasser、Silvio Micali、Chales Rackoff 合著的论文《The knowledge complexity of interactive proof systems》首次提出的数学协议,除了某一要证明的事实之外,不会透露任何其他信息。验证者无法获得生成证明的秘密信息。举一个例子帮助大家理解:我要证明我知道某个人的电话号码,我只需要能够在众人面前拨通那人的电话就可以证明这一事实,不需要透露那人的真实号码。零知识证明提供了一种有效的近乎无风险的数据分享方式。利用零知识证明,我们可以保留对数据的所有权,极大地提高隐私保护,有望使数据泄露事件成为过去式。
零知识证明具有三个特性:
完整性
如果一个声明是真实的,诚实的验证者会被诚实的证明者说服。即对的错不了。
合理性
如果一个声明是错误的,在绝大多数情况下,欺骗的证明者不能让诚实的验证者相信虚假的声明。即错的对不了。
零知识
如果一个声明是真实的,验证者除了能得知这声明是真实的,之外不能获得任何多余的信息。
零知识证明存在极小的概率产生合理性误差,即一个作弊的证明者可能使验证者相信一个错误的声明。零知识证明是概率性的证明,而不是确定性的证明,但我们可以通过一些技术将合理性误差降低到可以忽略不计。
2.零知识证明的应用
零知识证明最重要的两个应用场景是隐私和可拓展。
2.1 隐私
零知识证明允许用户在没有透露个人详细信息的情况下,安全地分享必要的信息来获得商品和服务,免受黑客攻击和个人身份信息的泄露。随着数字和物理领域的逐渐融合,零知识证明的隐私保护功能对于 Web3 乃至 Web3 以外的信息安全变得至关重要。如果没有零知识证明,用户信息就会存在受信任的第三方数据库,有受到黑客攻击的潜在危险。零知识证明在区块链中的第一应用案例是隐私币 Zcash,用来隐藏交易细节。
2.1.1 身份信息保护和验证
在网上活动中,我们经常需要提供诸如姓名、出生日期、电子邮件、复杂的密码来证明我们是有合法使用权限的用户。因此,我们也常在网上留下了不愿透露的敏感信息。如今接到直呼我们姓名的诈骗电话已经屡见不鲜,可见个人信息泄露的情况十分严重。
我们可以利用区块链技术,赋予每个人一个包含个人数据的特殊加密数字标识符。这个数字标识符可以构建去中心化身份,且不可能在其所有者不知情的情况下被伪造或改变。去中心化身份可以由用户来控制对个人身份的访问权限,在不透露护照细节的情况下证明公民身份,简化了认证过程,还减少了用户由于遗忘密码而失去访问权限的事件发生。零知识证明由能证明用户身份的公开数据和带有用户信息的隐私数据生成,可用于用户访问服务时的身份验证。这既减少了繁琐的验证流程,提升了用户体验,又避免用户信息的中心化存储。
此外,零知识证明还可以在构建私人信誉系统,允许服务机构在用户不暴露身份的情况下验证其是否符合某些信誉标准。用户可以从 Facebook、Twitter 和 Github 等平台在掩盖具体来源账号的前提下,匿名输出声誉。
2.1.2 匿名支付
使用银行卡支付的交易细节通常对多方可见,包括支付提供商、银行和政府等相关方,这在一定程度上暴露了普通公民的隐私,用户需要信任相关方不作恶。
加密货币可以使支付摆脱第三方,直接进行点对点交易。但目前主流公链上的交易公开可见,虽然用户地址匿名,依然存在通过链上的关联地址和链下如交易所 kyc、Twitter 信息等数据分析来找到现实世界身份。如果知道一个人的钱包地址,相当于可以随时查看个人的银行账户余额,甚至可能对用户身份、财产造成威胁。
而零知识证明可以从隐私币、隐私应用和隐私公链三个层次来提供匿名支付。隐私币 Zcash,隐藏了包括发送方、接收方地址、资产类型、数量和时间等交易细节。Tornado Cash 是以太坊上的去中心化应用,使用零知识证明混淆交易细节来提供隐私转账(但也多被用于黑客洗钱)。Aleo 是旨在从协议层面为应用程序提供隐私功能的 L1 区块链。
2.1.3 诚实行为
零知识证明可以在保留隐私的前提下促进诚实行为。协议可以要求用户提交零知识证明来证明其诚实行为。由于零知识证明的合理性 ( 错的对不了 ),用户必须根据协议要求做出诚实的行为才可以提交有效的证明。
MACI(Minimal Anti-Collusion Infrastructure,最小反串谋基础设施)就是一个促进诚实的应用场景,防止在链上投票或其他形式的决策过程中发生串谋。该系统利用密钥对和零知识证明技术来实现这一目标。在 MACI 中,用户将他们的公钥注册到一个智能合约中,并通过加密的消息将他们的投票发送到合约中。MACI 的防串谋特性允许投票者改变他们的公钥,以防止其他人了解他们的投票选择。协调者在投票期结束时用零知识证明来证明他们已经正确处理了所有消息,且最终的投票结果是所有有效票数的总和。这保证了投票的完整性和公正性。
2.1.4 个人信息核查
当我们想要获取贷款时,可以从公司拿一个数字收入证明来申请贷款。这个证明的合法性容易在密码学上得到检查。银行可以用零知识证明来验证我们的收入是否达到了规定的最低限度,但得不到敏感的具体信息。
2.1.5 结合机器学习挖掘私有数据潜能
在训练机器学习模型时,通常需要大量的数据。通过使用零知识证明,数据拥有者可以证明他们的数据满足模型训练的要求,而无需实际公开这些数据。这有利于让私有数据发挥作用,并且实现货币化。
此外,零知识证明可以允许模型创建者证明他们的模型满足某些性能指标,但无需公开模型的细节,以防止他人复制或篡改他们的模型。
2.2 可扩展
随着区块链用户的增多,区块链上需要进行大量的计算,造成了交易拥堵。有些区块链会走分片的扩展路线,但这需要对区块链的基础层进行大量的复杂的修改,可能会威胁到区块链的安全性。另外一个较为可行的方案是走 ZK-Rollup 路线,利用可验证计算,将计算外包给另外一条链上的实体来执行,然后将零知识证明和可验证结果一起提交到主链上以供验证真实性。零知识证明保证交易的真实性,主链只需将结果更新到状态,不需要存储细节或重放计算, 也不需要等待其他人来讨论交易的真实与否,极大地提高效率和扩展能力。开发者可借助零知识证明,设计可以运行在如手机这样的普通硬件上的轻节点 dapps,更有利于 Web3 走向大众。
零知识证明的扩展既可运用在在一层网络上,如 Mina Protocol,也可以运用二层网络 ZK - rollups。
3.零知识证明如何工作
Dmitry Laverenov (2019)把零知识证明结构分为交互式和非交互式。
3.1 交互式零知识证明
交互式零知识证明的基本形式由三个步骤构成:证据、挑战者和回应
证据:隐藏的秘密信息就是证明者的证据。这些证据建立一系列只能由知道这些信息的人正确回答的问题。证明者开始随机抽取问题,把计算答案发给验证者来进行证明。
挑战:验证者从集合中随机挑选另一个问题,要求证明者回答。
回应:证明者接受问题,计算答案后将结果返还给验证者。证明者的回应能够使验证者检查证明者是否知道这些证据。
这个过程可以重复多次,直到证明者在不知道秘密信息却猜出正确答案的概率变得足够低。举一个简化的数学例子,如果证明者在不知道秘密信息却能猜出正确答案的概率为 1/2,重复交互十次,证明者每次都命中的概率仅有万分之 9.7,想让验证者错误地认可虚假证明的可能性极低。
3.2 非交互式零知识证明
交互式零知识证明具有局限性,一方面是需要证明者和验证者同时存在并进行重复验证,另一方面是每计算一个新的证明都需要证明者和验证者传递一组信息,证明不可在独立的验证中重复使用。
为了解决交互式零知识证明的局限性,Manuel Blum, Paul Feldman, 和 Silvio Micali 提出了非交互式零知识证明,由证明者和验证者共享密钥,且仅需进行一轮验证来使得零知识证明更加有效。证明者将秘密信息通过特殊算法来计算生成一个零知识证明,发送给验证者。验证者使用另外一种算法检查证明者是否知道秘密信息。该零知识证明一旦生成,任何有共享密钥和验证算法的人都可以进行验证。
非交互式零知识证明是零知识证明技术的一大突破,促进了今天使用零知识证明系统的发展。主要方法有 ZK-SNARK 和 ZK-STARK。
4. 零知识证明的主要技术路径
Alchemy(2022)将零知识证明的技术路径分为 ZK-SNARK、ZK-STARK 和 递归 ZK-SNARK。
4.1 ZK-SNARK
ZK-SNARKs 是一个零知识的简洁的非交互式的证明。
公链要确保在网络上执行交易的正确性,需要通过让其他计算机(节点)重新运行每笔交易来实现。但这种方法会使每个节点重新执行每笔交易,会减慢网络的速度,限制可扩展性。节点还必须存储交易数据,导致区块链的规模呈指数级增长。
对于这些限制,ZK-SNARK 就发挥了作用。它可以证明在链外进行的计算的正确性,而不需要节点重放计算的每一步。这也消除了节点对存储多余交易数据的需求,提高网络的吞吐量。
使用 SNARK 验证链外计算将计算编码为一个数学表达式来构成有效性证明。验证者检查证明的正确性。若证明通过了所有检查,那么底层计算就被认为是有效的。有效性证明的大小要比它所验证的计算小很多倍,因此我们称 SNARKs 是简洁的原因。
大多数使用 ZK-SNARK 的 ZK Rollup 遵循以下步骤。
1. L2 的用户签署交易后提交给验证者。
2. 验证者利用密码学将多个交易压缩生成相应的有效性证明(SNARK)。
3. L1 链上的智能合约对有效性证明进行验证,决定了这批交易是否发布到主链上。
值得一提的是 ZK-SNARK 需要进行可信设置。在这阶段,密钥生成器会获取一个程序和一个秘密参数来生成两个可用的公钥,分别用于创建证明和验证证明。这两个公钥只需通过一个可信的设置仪式生成一次公共参数,就可供希望参与零知识协议的各方多次使用。用户需要相信可信设置仪式的参与者不作恶,且没有办法评估参与者的诚实性。知道秘密参数便可生成假证明,欺骗验证者,因此存在潜在安全隐患。目前有研究员在探索 ZK-SNARK 无需信任假设的方案。
优势
1. 安全性
ZK rollup 被认为比 OP rollup 更安全的扩展方案,因为 ZK-SNARK 使用了先进的加密安全机制,很难欺骗验证者和进行恶意行为。
2. 高吞吐量
ZK-SNARK 减少了以太坊底层的计算量,缓解了主网堵塞情况,链下计算分担交易费用,带来更快的交易速度。
3. 小证明尺寸
SNARK 证明的小尺寸使它们容易在主链上得到验证,这意味着验证链下交易的 Gas Fee 较低,减少了用户的成本。
局限
1. 相对中心化
大多数时候都依赖于一个可信的设置。这和区块链去信任的初衷相违背。
用 ZK-SNARK 生成有效性证明是一个计算密集型的过程,证明者必须投资于专门的硬件。这些硬件价格昂贵,只有少数人负担得起,因此 ZK-SNARK 的证明过程是高度集中的。
2.ZK-SNARK使用椭圆曲线密码学(ECC)来加密用于产生有效性证明的信息,目前相对安全,但量子计算的进步可能会打破其安全模型。
使用 ZK SNARK的项目
Polygon Hermez
Polygon 在 2021 年 以 2.5 亿美元并购 Hermez,成为首个两个区块链网络全面并购的案例。Hermez 给 Polygon 快速增长的用户群带来的 ZK 技术和工具,使 Polygon 获得开发 zkEVM 的支持。Hermez 1.0 是支付平台,把一批交易在链外执行,允许用户便捷地把 ERC-20 代币从一个 Hermez 账户转移到另一个 Hermez 账户,每秒交易可达 2000 次。
Hermez 2.0 作为一个零知识的 zkEVM 以透明方式执行以太坊交易,包括具有零知识验证的智能合约。其可与以太坊完全兼容,无需对智能合约代码进行太多改动,方便开发者将 L1 的项目部署到 Polygon Hermez 上。Hermez 1.0 使用 SNARK-proofs,2.0 中同时使用 SNARK-proofs 和 STARK-proofs。在 2.0,使用 STARK-proof 证明链外交易的有效性。但 STARK-proof 在主链上验证的成本很高,因此引入 SNARK-proof 来验证 STARK 。
zkSync
Matter Labs 于 2020 年推出的 zkSync 1.0 不支持智能合约,主要用于交易或转账。支持智能合约的 ZkSync 2.0 已于 2023 年 3 月份公开上线主网。
ZkSync 把以太坊上的智能合约源代码 Solidity 编译为 Yul 来实现 EVM 的兼容性。Yul 是可以编译成不同 EVM 的字节码的中间语言。使用 LLVM 编译器框架可以将 Yul 代码重新编译为为 zkSync 的 zkEVM 设计的自定义、电路兼容的字节码集。通过这种方法,免除通过更高级别的代码对 EVM 执行中的所有步骤进行 zk 证明,从而在保持高性能的同时更容易使证明过程去中心化。未来还可以通过构建新的编译器前端来添加对 Rust、Javascript 或其他语言的支持,增加 zkEVM 架构的灵活性和更多的开发者。
Aztec
Aztec 是第一个混合型 zkRollup,在一个环境中同时实现公共和私有智能合约的执行。这是一个零知识的执行环境,而非 zkEVM。通过将公共和私有执行合并到单个混合汇总中来实现机密性,例如公开 AMM 的隐私交易、公开游戏中的私密对话、公开 DAO 的隐私投票等等。
4.2 ZK-STARK
ZK-STARK 不需要可信的设置。ZK-STARK 是 for Zero-Knowledge Scalable Transparent Argument of Knowledge 的缩写。相比 ZK-SNARK, ZK- STARK 有更好的可拓展性和和透明性。
优势
1. 去信任
ZK-STARK 公开可验证随机来取代可信设置,减少对参与人的依赖,提高协议安全性。
2. 更强的扩展能力
即使底层计算的复杂性呈指数级增长,ZK-STARK 依然保持了较低的证明和验证时间,而非像 ZK-SNARK 线性增长。
3. 更高的安全保证
ZK-STARK 使用抗碰撞哈希值进行加密,而不是 ZK-SNARK 中使用的椭圆曲线方案,可抗量子计算的攻击。
局限
1. 更大的证明尺寸
ZK-STARK 证明尺寸更大,使得在主网验证的成更更高。
2.较低的采用率
ZK-SNARK 是零知识证明是区块链中的第一个实际应用,因此大多数 ZK rollup 采用 ZK-SNARK, 具有更成熟的开发者系统和工具。尽管 ZK-STARK 也有以太坊基金会的支持,但是相比之下采用率不足,基础工具还有待完善。
哪些项目使用 ZK-STARK?
Polygon Miden
Polygon Miden,一个基于 Ethereum L2 的扩展解决方案,利用 zk-STARK 技术将大量 L2 交易集成到单一的以太坊交易中,从而提升了处理能力并降低了交易成本。在不进行分片的情况下,Polygon Miden 可以在 5 秒内产生一个区块,并且其 TPS 可以达到 1000 以上。而在进行分片后,其 TPS 可高达 10,000。用户只需要 15 分钟,就能将资金从 Polygon Miden 提现到 Ethereum。Polygon Miden 的核心功能是一个基于 STARK 的图灵完备虚拟机——Miden VM,它使得合约的形式化验证变得更为简便。
StarkEx 和 StarkNet
StarkEx 是一个需要许可的、为特定应用程序定制的扩展解决方案的框架。项目可以使用 StarkEx 来进行低成本的链下计算,生成证明执行正确性的 STARK 证明。这样的证明包含 12,000–500,000 笔交易。最后将证明发送到链上的 STARK 验证器,验证正确后接受状态更新。在 StarkEx 上部署的应用程序包括永续期权 dYdX、NFT L2 Immutable、体育数字卡牌交易市场 Sorare 和多链 DeFi 聚合器 rhino.fi。
StarkNet 是一个无需许可的 L2,任何人员都可以在其中部署以 Cairo 语言开发的智能合约。部署在 StarkNet 上的合约之间可以进行交互来构建新的可组合协议。与应用程序负责提交交易的 StarkEx 不同,StarkNet 的排序器批量交易并发送它们进行处理和证明。StarkNet 更适合需要与其他协议同步交互或超出 StarkEx 应用范围的协议。随着 StarkNet 开发的进展,基于 StarkEx 的应用将能够移植到 StarkNet,享受可组合性。
ZK-SNARK 和 ZK-STARK 对比
4.3 递归 ZK-SNARK
普通 ZK rollup 只能处理一个交易区块,这限制了他们可以处理的交易数量。递归 ZK-SNARK 可以验证一个以上的交易区块,把不同的 L2 区块生成的 SNARK 合并为一个单一的有效性证明,提交给 L1 链。一旦 L1 链上合约接受了提交的证明,所有这些交易都会变得有效, 极大地增加了可以用零知识证明最终完成的交易数量。
Plonky2 是 Polygon Zero 的一种使用递归 ZK-SNARK 来增加交易的新证明机制。递归 SNARK 通过将几个证明聚集到一个递归证明中,来扩展证明生成过程。Plonky2 使用同样的技术来减少生成新区块证明的时间。Plonky2 将成千上万的交易并行生成证明,再递归地将它们聚合成一个区块证明,因此生成速度很快。而普通的证明机制试图一次性生成整个区块证明,效率更低。此外,Plonky2 还可以在消费级设备上生成证明,解决了 SNARK 证明常伴随的的硬件集中化问题。
5. Zero Knowledge Rollup VS Optimistic Rollup
ZK-SNARK 和 ZK-STARK 已经成为区块链扩展项目的核心基础设施,特别是 Zero Knowledge Rollup 方案中。Zero-Knowledge Rollup 就是指是指使用零知识证明技术将所有的计算转移到链下处理来减轻网络堵塞的一种以太坊的二层扩容解决方案。Zero Knowledge Rollup 的主要优点是可以大幅提高以太坊的交易吞吐量,同时保持较低的交易费用,且交易一旦打包进 rollup,就能立即确定。
目前以太坊的 L2 扩展方案除了 Zero Knowledge Rollup, 还有 Optimistic Rollup。在 Optimistic Rollup 运行的交易被默认为有效并立即执行。只有当发现欺诈性交易时(有人提交欺诈证明),该交易才会被撤销。所以安全性是低于 Zero Knowledge Rollup 的。为了防止欺诈交易,Optimistic Rollup 设有一段挑战期,如果交易需要在挑战期过后才能最终确定。这可能导致用户在取回他们的资金时需要等待一段时间。
最初设计 EVM 的时候没有考虑到使用零知识证明技术。以太坊创始人 Vitalik 认为短期内 Zero Knowledge Rollup 存在技术上的复杂性,但最终在扩容战争中会战胜 Optimistic Rollup。以下是 Zero Knowledge Rollup 和 Optimistic Rollup 的对比。
来源:SUSS NiFT, ChatGPT
6. 零知识证明技术的未来前景如何?
零知识证明技术领域处于独特的地位:近年来,经过大量努力致力于推进该领域的研究,许多成果在密码学和安全通信领域都是相当新的。因此,许多有趣的问题还有待学术界和开发者社区解答。与此同时,零知识证明技术被用于各类项目,展现了零知识技术的挑战并拓展了其要求。
零知识证明技术值得关注的领域之一是零知识证明技术的后量子安全性的讨论。可公开验证的 SNARK(简洁的非交互式知识论证)是零知识技术领域的关键组成部分。然而,大多数广泛使用的可公开验证的 SNARK 方案并不被认为是量子安全的。例如 Groth16、Sonic、Marlin、SuperSonic 和 Spartan。这些方案所依赖的数学问题可在量子计算机的帮助下会被有效解决,这大大损害了它们在后量子世界中的安全性。
我们发现学术界正在积极寻找量子安全的零知识证明,该证明可用于各种没有预处理阶段的语句。目前最先进的量子安全零知识证明的例子包括 Ligero、Aurora、Fractal、Lattice Bulletproofs 和 LPK22 等方案。Ligero、Aurora 和 Fractal 基于哈希函数,而 Lattice Bulletproofs 和 LKP22 基于点阵函数。这两个函数都被认为是量子安全的。推广这些方案并提高其效率已成为趋势。
我们对零知识技术未来的另一个期望是它抵抗攻击的能力和实现相关的代码成熟度。鉴于编写的代码量的增加,将会有更多安全且经过审查的库和最佳实践用于各种零知识证明技术。当然,未来也会有更多将等待被发现和沟通的常见错误。我们期望该领域成熟并被高度采用,努力标准化协议并确保不同实现之间的互操作性, 一个名为 ZKProof 的项目已经开始这样做了。
零知识技术社区中将继续存在的另一个趋势是在高效算法和可能的特殊硬件上进行更多工作。近年来,我们已经看到证明大小的减小以及证明者和验证者变得更加高效。算法、特殊硬件和计算优化的进步可能会带来更快、更具扩展性的实现。
虽然现有算法的效率有利于未来零知识证明技术的用户,但我们也期望看到零知识证明的功能不断扩大。过去,我们在实现预处理 ZK-SNARK 时遇到过很多实例。现在我们发现越来越多的可升级 ZK-SNARK 实例。此外,一些零知识证明技术的使用更多是因为其简洁性,而不是其零知识能力。
最后,零知识证明技术的另一个趋势是机器学习与零知识证明的交叉(ZKML)。这个想法需要在多方环境中训练大型语言模型,并使用零知识技术来验证计算。这对于当前人工智能非常有用。该领域有兴起项目的可能。
结束语
本文由区块链安全联盟成员共同撰写,通过本文的介绍,我们可以了解到零知识证明在区块链领域的广泛应用,技术路径,发展趋势与所面临的挑战。相信随着硬件技术与密码学的发展,零知识证明将在未来取得更多突破,为数字世界提供更快速,更安全的应用服务。