当今SNARKs全景

1. 引言

前序博客有:

  • ZKP历史总览
  • SNARK原理示例
  • SNARK性能及安全——Prover篇
  • SNARK性能及安全——Verifier篇
  • Transparent 且 Post-quantum zkSNARKs
  • SNARK Design
  • Rollup项目的SNARK景观

SNARKs因:

  • proof size
  • 证明时长
  • 验证时长
  • 密码学信任假设
  • 是否需要trusted setup

等而各不相同。从广义上讲,实际所用证明系统可分为三大类:

  • Pairing-based SNARKs:必须基于pairing曲线构建,需要可信设置,是人们通常所认为的“SNARKs”。
  • Hash-based SNARKs(或,Code-based SNARKs):不需要基于曲线构建,无需可信设置,且具有合理的后量子安全性,是人们通常所说的“STARKs”。
  • Non-Pairing Elliptic curve-based SNARKs:可基于非paiirng曲线构建,且无需可信设置,常见的如Bulletproofs和Folding schemes。

1.1 Pairing-based SNARKs

Pairing-based SNARKs包括:

  • Plonk
  • Marlin
  • Groth16

等证明系统,如果人们熟悉 ZK,大多数人会想到 Groth16 证明系统。

这些Pairing-based SNARKs的特点为:

  • proof size非常小,且大小恒定
  • 验证速度非常快
  • 但证明速度通常较慢。

这是因为Pairing-based SNARKs需要:

  • 在大素数域上工作,这很慢,
  • 而且需要使用配对友好的椭圆曲线。

由于Pairing-based SNARKs使用椭圆曲线,因此:

  • 其无法抵御量子攻击。

值得注意的是,并非所有可信设置 SNARK 都具有相同类型的可信设置:

  • 1)Groth16 要求每个电路都有一个可信设置,
  • 2)而 Plonk、Marlin 和其他基于 KZG 的证明系统可以对所有有限大小的电路使用单个可信设置。
    • 这种“universal 通用”可信设置也是可更新的:
      • 给定一个可信设置,任何人都可以稍后向可信设置添加随机性。
      • 这对于 Groth16 来说是不可能的,因为Groth16 要求每个电路都有一个新设置。

1.2 Hash-based SNARKs(或,Code-based SNARKs)

Hash-based SNARKs(或,Code-based SNARKs)中的典型代表有:

  • STARKs
  • Plonky2:带预处理的FRI-based证明系统

Hash-based SNARKs(或,Code-based SNARKs)证明系统:

  • 1)通常具有出色的prover性能,
    • 尤其是当其使用具有特殊结构的小域时,如Goldilocks、Babybear或Mersenne 31,
  • 2)但proof size要大得多。
    • 具体而言,FRI-based proof 可比 Groth16 proof 大 100 到 1000 倍(200 字节 vs. 50-200kB)。
    • 其他基于纠错码的证明系统——如Bininus(其使用Brakedown PCS而不是 FRI PCS)的proof可能更大或可能更小——若可借助STIR等类似技术,则可实现更小的proof。
  • 3)不需要可信设置,
  • 4)且在使用合适的哈希函数实例化时具有抗量子性。
  • 5)其安全性仅依赖于底层哈希函数的安全性。
    • 然而,与基于椭圆曲线的 SNARKs 相比,FRI-based证明系统的安全性提供了更多可调的自由度,这使得分析其安全性更加复杂。

大多数最先进的大型电路证明系统都针对证明时长进行了优化,因此使用FRI-based证明系统。但是,当希望在区块链上验证这些证明时,即使在以太坊上,对于纯 STARK proof 来说,这也很昂贵。因此,大多数已部署的系统将 STARK proof包装在pairing-based SNARK 中,如 Groth16 或 fflonk(Plonk 的变体)。从而提供了两种方案的主要优点:

  • 非常快的prover和非常小的proof,
  • 但牺牲了量子抗性并需要可信的设置。
  • 这也是“proof recursion递归证明”这一非常强大想法的示例:
    • 通过在另一个证明中验证证明,可以将更大的证明或可能将许多更大的证明压缩为较小的证明。

1.3 Non-Pairing Elliptic curve-based SNARKs

Non-Pairing Elliptic curve-based SNARKs中包括:

  • Bulletproofs
  • Folding Schemes

其中Bulletproofs:

  • 具有 concretely small proofs,
  • 证明时长与Pairing-based SNARKs 相当,
  • 且没有可信设置。
  • 但其验证复杂性非常差:
    • 验证Bulletproofs proof所需的时间与构建该proof所需的时间成正比。
    • 这意味着Bulletproofs-based协议仅限于像范围证明这样的小电路,更根本的是,这意味着人们无法有效地、递归地用一个Bulletproofs来验证另一个Bulletproofs——因为验证Bulletproofs的电路将比被证明的原始电路更大!

Halo改变了这一现状:

  • 展示了如何以递归方式“accumulate 积累” Bulletproofs,而无需以递归方式验证整个 Bulletproofs。

这一系列工作成果颇丰,最终催生出各种folding方案,如:

  • Nova
  • HyperNova
  • ProtoStar
  • ProtoGalaxy等等(folding方案有很多)。

与folding方案结合使用时,人们可以使用 Bulletproofs 构建具有小证明、无可信设置和相当快prover的 SNARKs。

基于folding的证明系统能否与小域 FRI 相媲美仍是一个悬而未决的问题。最近的一些工作(如Benedikt Bunz ¨等人2024年论文Accumulation without Homomorphism)实际上试图统一folding和 FRI,但仅对小深度递归有效。

2. Sumcheck 和 GKR

从历史上看,大多数 SNARKs 都使用单变量多项式将算术电路编码为 IOP。

  • 这部分是由于底层多项式承诺方案(特别是 FRI 和 KZG)的结构,也由于该方法相对简单。
  • 在基于单变量多项式的SNARKs方案中,证明者必须计算“商多项式”来证明该单变量方程得到满足。
    • 商多项式的有效计算需要具有超线性运行时间的快速傅里叶变换 (FFT), O ( n log ⁡ n ) O(n\log n) O(nlogn),并且非常昂贵。
      • 特别是,当使用大域时,FFT 计算需要大量内存。这对于快速prover来说是一个主要瓶颈。

最近,人们开始使用一种称为“Sumcheck协议”的替代协议。sumcheck协议最初于 1992 年作为纯理论成果发表(见1992年论文《Algebraic Methods for Interactive Proof Systems》),现在sumcheck协议,重新成为单变量 SNARKs 的主要痛点之一的解决方案:

  • 不再需要计算商多项式。
  • 相反,prover使用多线性多项式对witness进行编码,并与verifier进行 O ( log ⁡ n ) O(\log n) O(logn)轮交互以“fold”(注意:与“folding方案”中的“fold”不同,更像 Bulletproofs 和 FRI中的“fold”)这些多项式。
    • 这意味着,其它条件相同的情况下,sumcheck-based proof 通常比单变量proof更大,但可以在线性时间内证明,且内存要求更低。

一些sumcheck-based SNARKs 包括:

  • Spartan
  • HyperPlonk
  • Honk

从某种意义上说,sumcheck协议一直都隐藏在人们的视线中。

  • Bulletproofs 所基于的inner product argument与sumcheck协议具有相同的基本结构。
  • 事实上,这可以变得严格,详情见Jonathan Bootle等人2021年论文Sumcheck Arguments and their Applications。

这意味着人们可以非常有效地将inner product argument的结构与sumcheck-based SNARKs 结合使用。FRI 也是如此,正如最近在 BaseFold 中观察到的那样。

最近,GKR协议也引起了applied ZK 社区的新兴趣。

  • GKR 协议以 sumcheck 协议为基础,通过“layering 分层”不同的 sumcheck 实例。
    • 这限制了可以应用 GKR 的电路类型,但值得注意的是,其可完全避免对中间层进行commit。
      • 回想一下,承诺,特别是对于elliptic curve-based SNARKs,是证明中最昂贵的部分。
    • 权衡是:verifier必须与电路中的层数成比例地完成工作,对于许多类型的电路,verifier最终会有 O ( log ⁡ 2 n ) O(\log^2 n) O(log2n)的总工作量。

通过改变用于实例化 GKR 的sumcheck类型,已经出现了一些有希望的新研究成果来微调这种权衡,如Benedikt B¨unz和Jessica Chen 2024年论文《Proofs for Deep Thought: Accumulation for large memories and deterministic computations》。

3. Lookup Arguments

传统上,SNARKs 将要证明的陈述编码为算术电路中的加法和乘法“门”网络。

  • 从技术意义上讲,这已经足够了,但并不总是很有效。
    • 如,若想证明 x x x位于某个范围内,可能首先需要将该值拆分成位,检查每个位是否有效,然后检查合并这些位是否得到原始值。

若能简单地构造一组有效值并检查 x x x是这些值之一,则要简单得多。

  • 这正是Lookup Arguments所允许的:在某个表中查找一个值。

事实证明,查找表是一种非常强大的原语,早期计算机广泛使用。Lookup Arguments 非常强大,甚至可将其看成是一种“通用原语”,因为人们可仅使用查找表来实现 SNARKs——被称为“lookup singularity查找奇点”。虽然仅使用查找的 SNARKs 现如今可能效率不高,但Lookup Arguments对于许多无法高效算术化的操作类别(如转换为加法、乘法和随机查询)确实很有效。使用Lookup Arguments还可以简化 SNARKs 的分析。

有许多不同的lookup协议。

  • 1)动态表查找——最简单的协议只是在电路中构建表:适用于,当该表的内容是动态的但证明时间取决于该表的大小时:
    • 可使用plookup或log derivative Lookup Arguments来构建。
  • 2)静态表查找——当表是静态的时可使用另一组不同的Lookup Arguments:
    • 从Caulk到cq Lookup Arguments系列适用于静态表。
      • 在这些方案中,会对该静态表进行预处理,以便在证明时,prover所做的(密码学)工作仅与其想要查找的值的数量成比例。
      • 从而能够有效地构建对非常大的表的查找。
  • 3)结构化表查找——如Lasso:
    • 在这种情况下,该结构化表是预先固定的,但它具有一些结构,因此不需要为表预先计算任何东西。
    • Lasso 能够将对非常大的结构化表的查找,转换为,对一组较小表的查找。
    • 这些较小的查找可以使用不同的协议执行,且当使用 GKR 时,可以避免在证明lookup arguments时承诺任何“大”值。
    • 虽然对结构化表的限制似乎会限制该协议,但配套论文 Jolt 表明,所有 RISCV 操作都可以使用结构化查找表来实现。

4. BitVM

不幸的是,以上这些SNARKs发展都与比特币本身不兼容,因为比特币脚本和区块大小限制太有限,无法在单个比特币区块中容纳 SNARKs verifier。即使是(如 Groth16 或 BN254 上的 fflonk)针对verifier简单性优化的 SNARKs verifier也过于复杂。随着 BitVM 和最近的 BitVM2 的出现,这种情况发生了变化。

BitVM 是一种乐观协议,可用于“证明”比特币可以原生执行的更复杂statement的执行。

  • 乐观意味着 BitVM 不是由prover实际构建 SNARKs,
  • 而是依靠多个预先指定的挑战者之一来提交欺诈证明。
    • BitVM2 放宽了这一点,以便任何人都可以提交挑战,但代价是链上通信量明显增多。

基于 BitVM 的协议还有许多额外的改进,包括Alpen Labs团队的SNARKnado:

  • 可用于乐观地验证 SNARK,从而为比特币带来零知识证明的力量。

5. 结论

在过去的十到十五年里,SNARKs 已经从一门几乎完全局限于学术界的理论学科发展成为一项在世界范围内部署的实用技术。

  • 实际计算的证明速度的提高速度,甚至比摩尔定律的提高速度还要快得多,现在以数百千赫兹为单位——详情见2024年5月视频 On Comparing Proof Systems and their Implementations - Matteo Campanelli (Matter Labs)。
  • 就目前而言,这种不懈的改进步伐没有放缓的迹象。为此,非常感谢 SNARK 密码学理论家和实践者的不懈努力。

人们还欠比特币诞生前的早期黑客和密码朋克很多东西,并继承了他们的文化。

  • 与传统密码学不同,传统密码学往往受制于寻租知识产权,从而限制了其采用,如比特币中的 Schnorr 签名,而 SNARKs 研究则一直保持自由和开放。这是一个了不起的情况,不能视之为理所当然。毫无疑问,这也是极速改进的必要先决条件。随着这个领域的成熟,以及越来越多的项目寻求赚钱,至关重要的是,要保持这种微妙的平衡,并在社会上强制执行本工作必须free的规范。

大部分改进都是由区块链应用推动的。与传统的中心化服务设置不同,区块链没有可信任的第三方来委托验证。这使得区块链以及广义上的去中心化协议成为 SNARKs 的完美应用。在比特币的历史中,人们很早就认识到了这一点(见2013年8月Bitcoin论坛帖子Really Really ultimate blockchain compression: CoinWitness),但当时这项技术还不够成熟。这种情况已经或至少几乎已经不再存在,正如 SNARKs 在现实世界中的大量部署所证明的那样。现在是时候将 SNARKs 带回比特币了。

另外,2024年5月视频 On Comparing Proof Systems and their Implementations - Matteo Campanelli (Matter Labs)中指出:ZKP学术和工业实践之间存在分离,并建议构建针对ZKP的L2BEAT平台,以对各ZKP系统统一测试和评估标准。
在这里插入图片描述
在这里插入图片描述

参考资料

[1] Alpen Labs团队2024年5月29日博客 Current state of SNARKs: A survey of today’s SNARKs landscape.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/445346.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端开发设计模式——装饰器模式

目录 一、装饰器模式的定义和特点 1.定义 2.特点 二、装饰器模式的实现方式 1.在原生JS中实现(以类的形式为例) 2、在Vue中实现(以指令和混入为例) 2.1、指令方式实现装饰功能 2.2、混入方式实现装饰功能 三、装饰器模式的…

基于方块编码的图像压缩matlab仿真,带GUI界面

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 编码单元的表示 4.2编码单元的编码 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 下图是随着方块大小的变化,图像的压缩率以及对应的图像质量指标PSN…

PDF处理技巧:Windows电脑如何选择合适的 PDF 编辑器

您可以阅读本文以了解用于在 PC 上编辑 PDF 的顶级免费软件,而无需花费任何费用即可轻松进行快速编辑、拆分、合并、注释、转换和共享您的 PDF。 PDF 或可移植文档文件是由 Adobe 创建的一种多功能文件格式。它可以帮助您轻松可靠地交换文档,无论相关方…

TCN-Transformer时间序列预测(多输入单预测)——基于Pytorch框架

1 数据集介绍 我们使用的数据集包含以下几个重要的属性: date(日期) open(开盘价) high(最高价) low(最低价) close(收盘价) pre_close&…

IDE启动失败

报错:Cannot connect to already running IDE instance. Exception: Process 24,264 is still running 翻译:无法连接到已运行的IDE实例。异常:进程24,264仍在运行 打开任务管理器,找到PID为24264的CPU线程,强行结束即可。 【Ct…

EXCEL_光标百分比

Public Sub InitCells()Dim iSheet As LongFor iSheet Sheets.Count To 1 Step -1Sheets(iSheet).ActivateActiveWindow.Zoom 85ActiveWindow.ScrollRow 1ActiveWindow.ScrollColumn 1Sheets(iSheet).Range("A1").ActivateNext iSheetEnd Sub对日项目中的文档满天…

CSS 布局——清除浮动 (二)

目录 1. 清除浮动 2. 清除浮动本质 3. 清除浮动 4. 清除浮动方法 4.1 额外标签法 4.1.1 总结 4.2 父级添加 overflow 4.3 after 伪元素法 4.4 双伪元素清除浮动 5 总结 1. 清除浮动 这是上面的源代码&#xff1a; <!DOCTYPE html> <html lang"en"&…

【FPGA开发】Modelsim如何给信号分组

前面已经发布过了一篇关于 Modelsim 的入门使用教程&#xff0c;针对的基本是只有一个源文件加一个仿真tb文件的情况&#xff0c;而实际的工程应用中&#xff0c;往往是顶层加多个底层的源文件结构&#xff0c;如果不对信号进行一定的分组&#xff0c;就会显得杂乱不堪&#xf…

第33次CCF计算机软件能力认证-第4题十滴水

题干&#xff1a; 十滴水是一个非常经典的小游戏。 小 C C C 正在玩一个一维版本的十滴水游戏。 我们通过一个例子描述游戏的基本规则。 游戏在一个 1 c 1c 1c 的网格上进行&#xff0c;格子用整数 x ( 1 ≤ x ≤ c ) x(1≤x≤c) x(1≤x≤c) 编号&#xff0c;编号从左往…

Python学习-函数

函数 文章目录 函数定义与调用参数传递内存分析返回值参数定义默认值参数个数可变的参数关键字参数 变量的作用域 匿名函数基本语法示例lambda与排序高阶函数map函数reduce函数filter函数 多关键字排序 定义与调用 函数可以嵌套用 先定义后调用 def calc(a,b):cabreturn cre…

一台电脑轻松接入CANFD总线_来可CNA板卡介绍

在工业控制领域&#xff0c;常常使用的总线技术有CAN(FD)、RS-232、RS-485、Modbus、Profibus、Profinet、EtherCAT等。RS-485以其长距离通信能力著称&#xff0c;Modbus广泛应用于PLC等设备&#xff0c;EtherCAT则以其低延迟和高实时性在自动化系统中备受青睐。 其中&#xff…

Java虚拟机(JVM)介绍

**Java虚拟机&#xff08;JVM&#xff09;**是Java平台的核心组件&#xff0c;它提供了一个运行时环境&#xff0c;使得Java程序可以在不同的操作系统和硬件平台上运行而无需修改。 JVM的架构 JVM主要由以下几个部分组成&#xff1a; 类加载器&#xff08;Class Loader&#xf…

对后端返回的日期属性进行格式化(扩展 Spring MVC 的消息转换器)

格式化之前 格式化之后&#xff1a; 解决方式 方式一 在属性中加上注解&#xff0c;对日期进行格式化 JsonFormat(pattern "yyyy-MM-dd HH:mm:ss")private LocalDateTime createTime;//JsonFormat(pattern &quo…

小白必看web专题!PHP-WebShell免杀(基础版)!!真的很简单!(全网最详细版本)

大家好&#xff0c;我是Dest1ny&#xff01; 最近一直在搞辅导啥的&#xff0c;所以没啥时间搞写&#xff5e; 也谢谢大家一直的点赞&#xff0c;今天特意把之前的web专题再发一个。 废话不多说&#xff0c;我们直接开始&#xff01; CLASS-1 WebShell免杀测试 渊龙Sec团队导…

「Ubuntu」根目录存储空间不足

Linux系统不同于 Windows系统&#xff0c;复杂的文件系统常常让人头疼&#xff0c;特别是动不动就存储空间不足&#xff0c;简单的清空回收站根本不管用&#xff0c;在此推荐一个绝对好用的方法&#xff0c;并且还可以多学习一条 Linux命令 1、du 使用方法 通过使用命令 du&am…

Ubuntu24.04 安装 NCAR Command Language(NCL)

目录 一般直接在Terminal中使用apt安装命令即可&#xff0c; 出现这样的问题&#xff0c; 如何解决这个问题呢&#xff1f; 一般直接在Terminal中使用apt安装命令即可&#xff0c; sudo apt install ncl-ncarg 但是&#xff0c;由于 Ubuntu 版本较新 Ubuntu 24.04&#xff…

【Next.js 入门教程系列】07-身份验证

原文链接 CSDN 的排版/样式可能有问题&#xff0c;去我的博客查看原文系列吧&#xff0c;觉得有用的话&#xff0c; 给我的库点个star&#xff0c;关注一下吧 上一篇【Next.js 入门教程系列】06-上传文件 身份验证 本篇包括以下内容: Setting up Next AuthConfiguring the G…

基于Spring Boot的医疗病历交互系统开发指南

第2章 设计技术与开发环境 2.1 相关技术介绍 2.1.1 B/S模式分析 C/S模式主要由客户应用程序(Client)、服务器管理程序(Server)和中间件(middleware)三个部件组成。客户应用程序是系统中用户与数据组件交互。服务器程序负责系统资源&#xff0c;如管理信息数据库的有效管理&…

使用Docker搭建WAF-开源Web防火墙VeryNginx

1、说明 VeryNginx 基于 lua_nginx_module(openrestry) 开发,实现了防火墙、访问统计和其他的一些功能。 集成在 Nginx 中运行,扩展了 Nginx 本身的功能,并提供了友好的 Web 交互界面。 文章目录 1、说明1.1、基本概述1.2、主要功能1.3、应用场景2、拉取镜像3、配置文件4、…

kafka-manager修改zookeeper端口号后启动仍然连接2181端口

问题描述&#xff1a; zookeeper默认端口号修改为了2182&#xff0c;kafka-manager的配置文件application.conf中也已经修改了zkhosts为新的端口号&#xff0c;然而启动kafka-manger时报错连接连接超时&#xff0c;发现连接的还是2181端口&#xff0c;很奇怪&#xff1f;&…