http://www.7klian.com

零常识证明 Groth16计较详解

每一行是一个约束。举例,第一行的约束暗示的是:

1.1 R1CS描写

3. Prove计较

对Groth16算法的领略可查察:
零常识证明 – libsnark源代码阐明
针对每个变量,已经知道N个y值。如何选择这些y值,,对应的x值?这个就是domain的选择。选择domain,主要思量两个计较机能:1/ 拉格朗日插值 2/FFT和iFFT。libfqfft的源码提供了几种domain:

2. Setup计较

给定一系列的x和y的对应干系,通过拉格朗日插值的方法,可以确定多项式:

Groth16算法是zkSNARK的典范算法,今朝在ZCash,Filecoin,Coda等项目中利用。本文从计较劲的角度具体阐明Groth16计较。Groth16计较分成三个部门:Setup针对电路生成Pk/Vk(证明/验证密钥),Prove在给定witness/statement的环境下生成证明,Verify通过Vk验证证明是否正确。

1. 电路描写

是Vk。其他部门是Pk。可以看出,Vk的巨细取决于民众输入的变量个数,相对来说数量较量小。Pk的数据量巨细和所有的变量个数相关。计较进程,主要由scalarMul构成。

对libSnark代码库的领略可查察:
在已知证明以及Vk的环境下,通过配对(pairing)函数,很容易计较如下的等式是否创立。计较在毫秒级。

先容详细的转化之前,先先容一个简朴的术语,拉格朗日插值以及拉格朗日basis。
1) Basic Radix-2 2)Extended Radix-2 3) Step Radix-2 4) Arithmetic Sequence 5) Geometric Sequence

给定M’个变量(第一个变量约定为恒量1),以及N’个约束,所有的R1CS描写可以暗示如下:

1.2 QAP转化

很显然,生成证明的计较劲主要由四个Multiexp构成(A-1,B-1,C-2),和变量个数以及约束的个数有关。在一个大型电路中,生成证明的时间较量长(秒级,甚至分钟级)。
Groth16算法的主要计较劲由两部门构成:FFT/iFFT以及MultiExp。在生成证明时,需要4次iFFT以及三次FFT计较。Setup计较和生成证明时,需要大量的MultiExp。Verify计较劲相对较小。

确定了domain,也就确定了domain上的一组元素s:

1.3 domain选择
在domain选择后,U*V=W,可以调动为如下的多项式方程:

所有的电路描写有个专业的术语:Relation(变量和变量的干系描写)。描写Relation的语言许多:R1CS,QAP,tinyRAM,bacs等等。今朝开拓,电路一般回收R1CS语言描写。R1CS相对来说,很是直观。A*B=C(A/B/C别离是输入变量的线性组合)。可是,要应用Groth16算法,需要将R1CS描写的电路,转化为QAP描写。两种电路描写语言的转化,称为Reduction。
选择哪一种domain和输入个数(M)有关。为了共同特定domain的计较,domain的阶(M)会稍稍变大。
零常识证明 – Groth16算法先容
https://eprint.iacr.org/2016/260.pdf
本文中所有的术语和数学标记和Groth16论文保持一致(On the Size of Pairing-based Non-interactive Arguments,详细的计较在17/18页):

总结:
4. Verify计较

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。