Transparent 且 Post-quantum zkSNARKs

1. 引言

前序博客有:

  • SNARK原理示例
  • SNARK性能及安全——Prover篇
  • SNARK性能及安全——Verifier篇

在这里插入图片描述
上图摘自STARKs and STARK VM: Proofs of Computational Integrity。
在这里插入图片描述
上图选自:Dan Boneh 斯坦福大学 CS251 Fall 2023 Building a SNARK 课件。

SNARK方案由 Polynomial IOP(信息理论对象) ➕ 多项式承诺方案(密码学对象) 组成。

当前的Polynomial IOP主要分为三大类:

  • 1)基于interactive proofs(IPs)的Polynomial IOP:如Hyrax、vSQL、Libra、Virgo等。【 P P P无需做FFT运算】
  • 2)基于multi-prover interactive proofs(MIPs)的Polynomial IOP:如Spartan、Brakedown、Xiphos等。【 P P P无需做FFT运算】
  • 3)基于constant-round的Polynomial IOP:如Marlin、PlonK、StarkWare的SNARKs等。【 P P P需要做FFT运算】

以上方案都是通过增加 P P P开销,来减少proof长度以及降低 V V V开销。
以上1)2)类,只要其结合的多项式承诺方案也不需要FFT,则 P P P无需做FFT运算。

当前的多项式承诺方案主要分为四大类:

  • 1)基于pairing的多项式承诺方案(既不transparent,也不post-quantum)
    • KZG10、PST13、ZGKPP18等。
    • 独特属性有:具有constant sized evaluation proofs。
  • 2)基于discrete logarithm的多项式承诺方案(transparent,但不post-quantum)
    • 如BCCGP16、Bulletproofs、Hyrax、Dory等。【其中Dory即需要discret-log hardness,还需要pairing。】
  • 3)基于IOPs+hashing(transparent 且 post-quantum)
    • 如Ligero、FRI、Brakedown等。
  • 4)基于Groups of unknown order的多项式承诺方案(若使用class groups具有transparent属性,但不是post-quantum的)
    • 如DARK、Dew等。
    • 由于使用class groups, P P P非常慢。

现有的多项式承诺方案有:

  • KZG多项式承诺:PlonK和Marlin采用KZG多项式承诺。其既不是transparent的,也不是post-quantum secure的。2020年。
  • Bulletproofs多项式承诺:为transparent的,但不是post-quantum secure的。2017年。
  • Hyrax多项式承诺:为transparent的,但不是post-quantum secure的。2017年。
  • Dory多项式承诺:为transparent的,但不是post-quantum secure的。2020年。
  • FRI多项式承诺:为post-quantum secure的。2017年。基于纠错码。
  • Ligero多项式承诺:为post-quantum secure的。2017年。基于纠错码。
  • Ligero++多项式承诺:为post-quantum secure的。2020年。基于纠错码。
  • Brakedown多项式承诺:为post-quantum secure的。2021年。基于纠错码。
  • Orion多项式承诺:为post-quantum secure的。2022年。基于纠错码。

上面的5种post-quantum secure多项式承诺方案均是基于纠错码,使用的唯一密码学原语为哈希。同时具有如下属性:

  • 验证开销随着bits of security的位数增加而增加。(所谓验证开销,是由 哈希evaluation数量以及field operation数量 来衡量的。)

粗略来说,这些post-quantum多项式承诺方案的单次“迭代”仅可实现小数量的bits of security(如2-4)。因此,需重复该协议多次来“放大”安全等级,而随着每次重复,验证开销也会随之增加。因此,控制PQ-SNARKs的验证开销(对应为区块链应用中的gas开销),协议设计者通常有动力将security level设置为较低值。

除极少数例外情况(见2018年论文 Batching Techniques for Accumulators with Applications to IOPs and Stateless Blockchains)外,Non-PQ-SNARK(透明和不透明)中不会出现具体安全和验证成本之间的紧张关系。Non-PQ-SNARK使用椭圆曲线群,其中离散对数被认为很难计算,其安全级别由所使用的群确定。椭圆曲线群的合适大小,以及每个群操作的成本,随着所需的安全级别而增长。然而,proof 中群元素的数量与群的选择无关。

而在PQ-SNARKs中,不仅hash evaluation的size会随着所需的安全等级增加而增加,proof中所需的evaluation数以及Verifier计算的 evaluation数也将随着所需安全等级增加而增加。

本文重点关注Transparent 且 Post-quantum zkSNARKs,在:

  • libiop: a C++ library for IOP-based zkSNARKs(C++)【2021年5月后未更新】

中实现了几种仅依赖于lightweight symmetric cryptography(任意Cryptographic hash function)的 Transparent 且 Post-quantum zkSNARKs 方案:

  • 1)Ligero协议:argument size为 O ( N ) O(\sqrt{N}) O(N ),见2017年论文Ligero: Lightweight Sublinear Arguments Without a Trusted Setup。
  • 2)Aurora协议:argument size为 O ( log ⁡ 2 N ) O(\log ^2 N) O(log2N),见2018年论文Aurora: Transparent Succinct Arguments for R1CS。
  • 3)Fractal协议:argument size为 O ( log ⁡ 2 N ) O(\log ^2 N) O(log2N),见2019年论文FRACTAL: Post-Quantum and Transparent Recursive Proofs from Holography。

以上这3种Transparent 且 Post-quantum zkSNARKs 方案,均支持基于smooth prime fields和binary extension fields的R1CS。所谓R1CS,为一种NP-complete relation that generalizes arithmetic circuit satisfiability。

不同于Ligero,其中Aurora和Fractal中有额外有趣的点在于:

  • FRI low-degree test:详情见Fast Reed-Solomon Interactive Oracle Proofs of Proximity。

2. 由IOPs 到 zkSNARKs

Interactive Oracle Proofs(IOPs):

  • 为Probabilistically checkable proof 的multi-round generalization
  • IOPs的性能,优于,PCPs
  • libiop: a C++ library for IOP-based zkSNARKs库,通过Interactive Oracle Proofs(IOPs)(本文接下来按作者名,称为BCS transformation),实现了由IOPs构建的zkSNARKs。

BCS transformation:

  • 使用cryptographic hash function(模型化为random oracle)
  • 来将,任意public-coin IOP
  • 编译为某SNARG

该SNARG具有如下属性:

  • transparent:生成/验证proof strings所需的全局参数,仅为,该哈希函数
  • post-quantum:在quantum random oracle模型内,其是安全的
  • lightweight:除该哈希函数之外,无需其它密码学依赖

BCS transformation的描述见:

  • Eli Ben-Sasson、Alessandro Chiesa 和 Nicholas Spooner 2016年论文 Interactive Oracle Proofs

BCS transformation的post-quantum安全性论证见:

  • Alessandro Chiesa、Peter Manohar 和 Nicholas Spooner 2020年论文 Succinct Arguments in the Quantum Random Oracle Model

BCS transformation保持了proof of knowledge:

  • 若底层的IOP是proof of knowledge,则所生成的SNARG为an argument of knowledge(即 a SNARK)

同理,BCS transformation保持了zero knowledge:

  • 若底层IOP是(honest-verifier)zero knowledge,则所生成的SNARK是zero knowledge的(即 a zkSNARG)

同时,BCS transformation可扩展为:

  • 向holographic IOPs,编译为,preprocessing SNARGs
    • 详情见:Alessandro Chiesa、Dev Ojha 和 Nicholas Spooner 2019年论文 FRACTAL: Post-Quantum and Transparent Recursive Proofs from Holography
    • 该特性,使得SNARGs可为,任意计算(而不仅仅是结构化计算),提供fast verification。

3. IOP协议

  • https://github.com/scipr-lab/libiop/tree/master/libiop/iop:该目录下包含了编写IOP协议的基础设施。
  • https://github.com/scipr-lab/libiop/tree/master/libiop/protocols:该目录下包含了几个使用该基础设施实现的协议,具体为:
languageround
complexity
oracle length
(field elts)
query
complexity
indexer time
(field ops)
prover time
(field ops)
verifier time
(field ops)
Ligero-IOPR1CS2O(N)O(N0.5)N/AO(N logN)O(N)
Aurora-IOPR1CSO(log N)O(N)O(log N)N/AO(N logN)O(N)
Fractal-IOPR1CSO(log N)O(N)O(log N)O(N logN)O(N logN)O(log N)

其中:

  • 1)Ligero-IOP:见2017年论文Ligero: Lightweight Sublinear Arguments Without a Trusted Setup。
    • 更准确来说,Ligero论文中仅描述了arithmetic circuits构建。而Aurora论文附录中解释了如何将,该arithmetic circuits构建,扩展为,支持R1CS。因此,实际在libiop: a C++ library for IOP-based zkSNARKs代码库中所实现的Ligero协议,借助了Aurora论文中的该扩展技术。
  • 2)Aurora-IOP:见2018年论文Aurora: Transparent Succinct Arguments for R1CS。
  • 3)Fractal-IOP:见2019年论文FRACTAL: Post-Quantum and Transparent Recursive Proofs from Holography。

其中比Ligero-IOP更高效,的,Aurora-IOP和Fractal-IOP,结合了2大元素:【详情见 2018年论文Aurora: Transparent Succinct Arguments for R1CS 】

  • 1)RS-encoded IOP,即基于纠错码
    • https://github.com/scipr-lab/libiop/tree/master/libiop/protocols/encoded:该目录下包含了RS-encoded IOPs,覆盖了Ligero、Aurora和Fractal协议核心的RS-encoded IOPs。
  • 2)对RS code的proximity test
    • https://github.com/scipr-lab/libiop/tree/master/libiop/protocols/ldt:该目录下包含了对RS code的proximity tests。其包含了:
      • direct test:用于Ligero
      • FRI protocol:用于Aurora和Fractal。

4. BCS transformation

  • https://github.com/scipr-lab/libiop/tree/master/libiop/bcs:该目录下将BCS transformation作为独立组件。
  • https://github.com/scipr-lab/libiop/tree/master/libiop/snark:该目录下,包含,将BCS transformation用于以上IOP协议,所获得的zkSNARKs。具体有:
languageindexer timeprover timeargument sizeverifier time
Ligero-SNARKR1CS N/A Oκ(N logN)Oκ(N0.5)Oκ(N)
Aurora-SNARKR1CS N/A Oκ(N logN)Oκ(log2 N)Oκ(N)
Fractal-SNARKR1CSOκ(N logN)Oκ(N logN)Oκ(log2 N)Oκ(log2 N)

其中:

  • κ 用于表示上表中的asymptotics还依赖于该安全参数。
  • make_zk:设置该标签,表示该BCS transformation应保留zero knowledge属性;而不设置,则表示该所转换的IOP是非zero knowledge的,因此也无需保留zero knowledge属性。

5. libiop库安装及测试

编译运行前,需安装:

  • 依赖项Installation instructions

测试文件见:

  • https://github.com/scipr-lab/libiop/blob/master/libiop/tests

若运行所有测试用例,则运行:

make check

若仅运行Aurora协议所有测试用例,则运行:

	$ ./test_aurora_snark$ ./test_aurora_protocol

6. libiop库性能分析

  • https://github.com/scipr-lab/libiop/tree/master/libiop/profiling:该目录下包含生成,具有timing和argument size信息的,协议执行traces。
    • 这些traces均对应为单线程环境

如,可基于181 bit prime field(其中RS-extra-dimensions=3),采用如下命令,为Ligero、Aurora和Fractal创建traces:

  $ ./instrument_aurora_snark --make_zk 1 --is_multiplicative 1 --field_size=181 --optimize_localization=1$ ./instrument_fractal_snark --make_zk 1 --is_multiplicative 1 --field_size=181 --optimize_localization=1$ ./instrument_ligero_snark --make_zk 1 --is_multiplicative 1 --field_size=181 --RS_extra_dimensions=3

根据以上命令所生成的traces,绘制了如下性能分析图表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参考资料

[1] libiop: a C++ library for IOP-based zkSNARKs

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

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

相关文章

工业通讯现场中关于EtherCAT转TCPIP网关的现场应用

在当今工业自动化的浪潮中,EtherCAT技术以其高效、实时的特性成为了众多制造业的首选。然而,随着工业互联网的发展,对于数据的远程访问和云平台集成的需求日益增长,这就需要将EtherCAT协议转化为更为通用的TCP/IP协议。于是开疆智…

Verilog实现的数字钟

在Verilog中实现一个数字钟通常会涉及到几个部分:时钟源(通常是一个外部晶振或PLL)、计数器、以及显示逻辑(可能是七段数码管或LCD显示)。这里,我将给出一个简化的Verilog代码示例,用于演示一个…

kafka-消费者-消费异常处理(SpringBoot整合Kafka)

文章目录 1、消费异常处理1.1、application.yml配置1.2、注册异常处理器1.3、消费者使用异常处理器1.4、创建生产者发送消息1.5、创建SpringBoot启动类1.6、屏蔽 kafka debug 日志 logback.xml1.7、引入spring-kafka依赖1.8、消费者控制台:1.8.1、第一次启动SpringK…

日进2000,我怎么做到的

昨天遇到一个有意思的项目,让我一天进账2000,一个字:爽。 这几天接洽了一位新客户,主要诉求就是优化系统,基于LNMP的系统优化。正好这个领域我比较熟悉,以前都是在公司做项目,也不怎么涉猎系统优…

Vue2计算属性(computed)和侦听器(watch)

文章目录 1.计算属性1.1 什么是计算属性1.2 计算属性怎么用?1.3 计算属性的作用 2.侦听器(watch)3.computed和watch选择4.什么时候用箭头函数什么时候用普通函数 1.计算属性 1.1 什么是计算属性 (1)Vue的原有属性:data对象当中的…

HCIP-Datacom-ARST自选题库_10_其他判断【23道题】

1.端到端时延等于路径上所有处理时延与队列时延之和。 2.部署PPP Multilink之后,数据将根据源地址和目的地址均匀的分配在各条成员链路上。 3.流镜像分为本地流镜像和远程流镜像两种方式。√ 4.IP报文中用Tos字段进行Q0S标记,Tos字段中是使用前6bit来…

知识图谱的应用---智能电网

文章目录 智能电网典型应用 智能电网 智能电网以物理电网为基础,将现代先进的传感测量技术、通讯技术、信息技术、计算机技术和控制技术与物理电网高度集成而形成的新型电网。它以充分满足用户对电力的需求和优化资源配置、确保电力供应的安全性、可靠性和经济性、满…

2024.6.9 四

Python的异常处理 在python里,错误和异常是不同的概念 错误: Python 的语法错误或者称之为解析错,大多是因为写代码写错了出现的 异常: 即便 Python 程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。 大多数的异常…

SAP_ABAP_消息类型

消息类型 A (Abort) - 中断消息 描述: 严重错误消息,表示操作无法继续。结果: 终止当前事务,用户必须修正错误后才能继续。使用场景: 当出现无法恢复的严重错误时使用。 E (Error) - 错误消息 描述: 错误消息,表示用户输入或操作有误。结果: …

用C++编写电机控制代码

在实际应用中,电机控制通常涉及到硬件接口,比如通过Arduino或Raspberry Pi这样的微控制器来实现。在这里我们可以先模拟一个简单的直流电机(DC Motor)控制程序的概念。我们假设有一个电机控制库,名为MotorControlLibra…

Ajax 快速入门

Ajax 概念:Ajax是一种Web开发技术,允许在不重新加载整个页面的情况下,与服务器交换数据并更新网页的部分内容。 作用: 数据交换:Ajax允许通过JavaScript向服务器发送请求,并能够接收服务器响应的数据。 异…

JavaScript Number 对象

JavaScript Number 对象 JavaScript 中的 Number 对象是内置的基本数据类型之一,用于表示数值。在 JavaScript 中,所有数字都是以 64 位浮点数的形式存储的,这意味着它可以表示整数和小数。本文将详细介绍 Number 对象的属性、方法和使用场景。 Number 对象的创建 创建 N…

STM32H750启动和内存优化(分散加载修改)

前些日子有个朋友一直给我推荐STM32H750这款芯片,说它的性价比,说它多么多么好。于是乎,这两天试了试,嚯,真香!我们先看看基本配置 这里简单总结下,cortex-m7内核,128k片内flash …

HTML-CSS练习例子

HTML CSS 练习 https://icodethis.com 作为前端练习生。不敲代码只看,入门是很慢的,所以直接实战是学习前端最快的途径之一。 这个网站练习HTML CSS的,可以打开了解一下,可以每天打卡,例子简单,循序渐进&…

视觉SLAM14精讲——相机与图像3.1

视觉SLAM14精讲 三维空间刚体运动1.0三维空间刚体运动1.1三维空间刚体运动1.2李群与李代数2.1相机与图像3.1 视觉SLAM14精讲——相机与图像3.1 视觉SLAM14精讲简介相机模型内参K 简介 相机是VSLAM中的核心传感器。本章知识点内容涉及到相机相关的知识以及3D计算视觉的一些基础…

Python第二语言(六、Python异常)

目录 1. 捕获异常(try: except: else: finally:) 1.1 概念 1.2 基础语法(try: except:) 1.3 捕获异常(异常也有类型) 1.4 捕获多个异常(try:except(Name…

基于阿里云服务网格流量泳道的全链路流量管理(三):无侵入式的宽松模式泳道

作者:尹航 在前文《基于阿里云服务网格流量泳道的全链路流量管理(一):严格模式流量泳道》、《基于阿里云服务网格流量泳道的全链路流量管理(二):宽松模式流量泳道》中,我们介绍了流…

大数据数仓的数据回溯

在大数据领域,数据回溯是一项至关重要的任务,它涉及到对历史数据的重新处理以确保数据的准确性和一致性。 数据回溯的定义与重要性 数据回溯,也称为数据补全,是指在数据模型迭代或新模型上线后,对历史数据进行重新处理…

Linux性能优化-网络篇-网络延迟

文章目录 前言一、网络延迟网络延迟应用程序延迟 二、网络延迟测试1.ping命令2.hping3命令3. traceroute 命令 前言 很多时候,我们听到大家抱怨,网好卡啊,请求好慢啊,这些其实都是网络延迟比较大的原因。这篇文字带你了解网络延迟…

开源多平台AI音乐生成器本地安装结合cpolar内网穿透实现远程访问

文章目录 前言1. 本地部署2. 使用方法介绍3. 内网穿透工具下载安装4. 配置公网地址5. 配置固定公网地址 前言 本文主要介绍如何在Windows系统电脑上快速本地部署一个文字生成音乐的AI创作工具MusicGPT,并结合cpolar内网穿透工具实现随时随地远程访问使用。 MusicG…