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协议。于是开疆智…

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的系统优化。正好这个领域我比较熟悉,以前都是在公司做项目,也不怎么涉猎系统优…

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

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

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

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

2024.6.9 四

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

Ajax 快速入门

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

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

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

HTML-CSS练习例子

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

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

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

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

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

大数据数仓的数据回溯

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

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

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

基于stm32最小版的超声波测距模块

目录 一、模块准备 二、HC-SR04模块原理解释 三、程序完整代码 四、烧录结果 总结 一、模块准备 STM32F103C8T6 HC-SR04 ST-Link(其他烧录器也可以) 0.96寸OLED屏幕(非必须,仅供显示测距结果,可以使用串口助手代替…

nodejs最新某东h5st(4.7.2)参数分析与javascript逆向纯算法还原(含算法源码)(2024-06-09)

一、作者声明: 文章仅供学习交流与参考!严禁用于任何商业与非法用途!否则由此产生的一切后果均与作者无关!如有侵权,请联系作者本人进行删除! 二 、写在前面 h5st从4.1一路更新到4.7.2,逐渐vmp…

66. UE5 RPG 实现远程攻击武器配合角色攻击动画

在制作游戏中,我们制作远程攻击角色,他们一般会使用弓箭,弩,弹弓等武器来进行攻击。比如你使用弓箭时,如果角色在播放拉弓弦的动画,但是弓箭武器没有对应的表现,会显得很突兀。所以,…

k8s和deepflow部署与测试

Ubuntu-22-LTS部署k8s和deepflow 环境详情: Static hostname: k8smaster.example.net Icon name: computer-vm Chassis: vm Machine ID: 22349ac6f9ba406293d0541bcba7c05d Boot ID: 605a74a509724a88940bbbb69cde77f2 Virtualization: vmware Operating System: U…

克鲁斯卡尔算法最小生成树--C语言

同样是最小生成树,普利姆算法是从一个起始顶点开始,逐步扩展生成树,每次选择连接生成树和未包含顶点的最小边。而克鲁斯卡尔算法是按权值排序的方式,从最小的边开始逐步添加到生成树中,确保不会形成环,直到…

自友科技破解走班教育排课难题

新高考后,校园教务都面临着晋级,其中走班教育的分班排课是个巨大的挑战。 所以在分班排课的时候要清楚一下几个问题 一是:清楚的核算学生的选考科目。学生选科提交后做好并承认,最好是在分班后不要改或很少的一部分人改动。 二是…

达梦8 探寻达梦排序原理:传统排序机制(SORT_FLAG=0)

测试版本:--03134283938-20221019-172201-20018 达梦的排序机制由四个dm.ini参数控制: #maximum sort buffer size in Megabytes ,有效值范围(1~2048) SORT_BUF_SIZE 100 #ma…