当今SNARKs全景

news2024/11/17 6:51:01

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.coloradmin.cn/o/2200900.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Chatgpt 原理解构

一、背景知识 1. 自然语言处理的发展历程 自然语言处理在不同时期呈现出不同的特点和发展态势。萌芽期,艾伦・图灵在 1936 年提出 “图灵机” 概念,为计算机诞生奠定基础,1950 年他提出著名的 “图灵测试”,预见了计算机处理自然…

linux 配置nfs

服务器端 sudo apt update sudo apt-get install nfs-kernel-server配置NFS服务器 mkdir /home/aa/workspace/nfsdir chmod 777 /home/aa/workspace/nfsdir sudo vim /etc/exports添加这个语句 /home/aa/workspace/nfsdir *(rw,sync,no_root_squash,insecure)sudo systemctl …

【音频生成】mac安装ffmpeg

前言 ffmpeg是一个开放源代码的自由软件,可以执行音频和视频多种格式的录影、转换、串流功能。算的上是进行音频处理的基本软件了,也是python包pydub的依赖。如果没有安装ffmpeg,就会报这个错。 FileNotFoundError: [Errno 2] No such file…

灯塔:JavaWeb笔记

什么是HTML、CSS? HTML (HypeText Markup Lanage):超文本标记语言。 超文本:超过了文本的限制,比普通的文本更强大。除了文字信息,还可以定义图片、音频、视频等内容。 标记语言:由表签构成的语言 HTML 标签都是提前预定义好的…

IT监控可视化:运维团队的智慧之眼

在当今这个数字化时代,IT系统已成为企业运营的核心支柱。随着业务的不断扩展和IT架构的日益复杂,运维团队面临着前所未有的挑战。如何高效、准确地监控和管理IT资源,确保系统的稳定性和可用性,成为了运维工作的重中之重。而IT监控…

利用可解释性技术增强制造质量预测模型

概述 论文地址:https://arxiv.org/abs/2403.18731 本研究提出了一种利用可解释性技术提高机器学习(ML)模型性能的方法。该方法已用于铣削质量预测,这一过程首先训练 ML 模型,然后使用可解释性技术识别不需要的特征并去…

库函数相关(上一篇补充)

一、创建自己的头文件 在当前目录下创建一个my_head.h将这个文件移动到/usr/include目录 #ifndef __MY_HEAD_H__ #define __MY_HEAD_H__#include <stdio.h> #include <errno.h> #include <string.h>#define PRINT_ERR(s) do{\printf("%s %s %d\n&quo…

MongoDB初学者入门教学:与MySQL的对比理解

&#x1f3dd;️ 博主介绍 大家好&#xff0c;我是一个搬砖的农民工&#xff0c;很高兴认识大家 &#x1f60a; ~ &#x1f468;‍&#x1f393; 个人介绍&#xff1a;本人是一名后端Java开发工程师&#xff0c;坐标北京 ~ &#x1f389; 感谢关注 &#x1f4d6; 一起学习 &…

JavaEE: HTTPS的魅力与优势揭秘

文章目录 HTTPSHTTPS 是什么HTTPS 基本工作过程Fiddle 等抓包工具,为啥能解析 HTTPS 的数据? HTTPS HTTPS 是什么 HTTPS 是一个应用层协议,是在 HTTP 协议的基础上引入了一个加密层. 几个核心概念: 明文: 要传输的原始数据.密文: 把明文进行加密之后得到一个让别人不能理解…

【算法篇】三道题理解什么是递归,回溯和剪枝

递归&#xff0c;回溯&#xff0c;剪枝 想必大家再学习算法知识的路上经常听到回溯&#xff0c;剪枝类似的概念&#xff0c;对于初学者来说&#xff0c;很容易把他们理解成一种新的算法思想&#xff0c;其实回溯和剪枝只是在递归的基础上稍加修改&#xff0c;对于解决某些特定问…

k8s的pod的管理

常用的Pod基础命令 列出所有命名空间中的所有Pod kubectl get pods --all-namespaces 列出指定命名空间中的所有Pod kubectl get pods -n <namespace> 显示指定Pod的详细信息&#xff0c;包括状态、事件等 kubectl describe pod <pod-name> -n <namespace>…

机器学习入门(一)

一、机器学习概述 1、人工智能 像人一样智能的综合与分析&#xff0c;机器模拟人类。 是一个系统&#xff0c;像人那样思考&#xff0c;像人那样理性思考。 是一个系统&#xff0c;像人那样活动&#xff0c;像人那样合理的系统 2、机器学习 让机器自动学习&#xff0c;而不…

SAP将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4]

将假脱机(Spool requests)内容转换为PDF文档[RSTXPDFT4] 有时需要将Spool中的内容导出成PDF文件&#xff0c;sap提供了一个标准程序RSTXPDFT4可以实现此功能。 1, Tcode:SP01, 进入spool requests list 2, SE38 运行程序RSTXPDFT4 输入spool reqeust号码18680&#xff0c;然后…

excel 单元格嵌入图片

1.图片右键,设置图片格式 2.属性 随单元格改为位置和大小 这样的话&#xff0c;图片就会嵌入到单元格&#xff0c;也会跟着单元格的大小而改变

10-记录器

这个功能允许记录和重现以前的模拟。所有发生的事件都记录在记录器文件 recorder file中。 1 记录 所有数据仅在服务器端以二进制文件的形式写入。但是&#xff0c;记录器是使用 carla.Client管理的。 注意&#xff1a;在回放结束时&#xff0c;车辆将被设置为自动驾驶&#xf…

强化学习和QLearning及GAN到底是什么关系啊

强化学习&#xff08;Reinforcement Learning&#xff09;、Q-Learning 和生成对抗网络&#xff08;GANs&#xff09;是机器学习中的三个不同概念&#xff0c;它们虽然有一些交叉&#xff0c;但本质上是针对不同问题的技术方法。下面我来详细解释它们之间的关系和区别&#xff…

leetcode每日一题day22(24.10.2)——准时到达的列车最小时速

思路&#xff1a;这种在有约束条件情况下&#xff0c;求最值或最符合要求的情况&#xff0c;首先是很容易想到&#xff0c;从时速为1开始往后找找到满足条件就输出&#xff0c;但这无疑工程量很大&#xff0c;每种可能的速度都要对列车数组进行遍历&#xff0c; 时间复杂度为C…

链表Set_LinkList(并集)

并集是把两个集合合并&#xff0c;去除重复元素后组成的集合。 通过键盘输入将两个集合保存在链表A和链表B中&#xff0c;再创建一个链表C用于保存集合A、B的并集&#xff0c;将链表C打印输出。 提示&#xff1a; 1.相对于上一题&#xff08;链表Set_LinkList&#xff08;建立&…

java 微服务 端口冲突 redis虚拟磁盘满 nacos挂

java 微服务 端口冲突 哥 排除法呀 什么卸载软件QAQ netstat -ano | findstr :48080 输这个呀 然后 taskkill /PID 1234 /F redis虚拟磁盘满 导致 假死 挂了 nacos 挂了重启 nacosrun.bat startup -m standalone

facebook受众选择设置策略的最佳方式

在进行Facebookguanggao投放时&#xff0c;受众的选择是一个至关重要的步骤。正确的受众选择不仅能够帮助我们更好地定位目标用户&#xff0c;还能显著提高guanggao的转化率和投资回报率&#xff08;ROI&#xff09;。然而&#xff0c;受众选择的数量和范围同样是需要认真考虑的…