本篇需要(有限域上的)椭圆曲线的基础知识,相关内容可以看$[6]$这位博主写的文章,比较详细

Pasta Curve

众所周知,椭圆曲线一般都有一个曲线方程,比较常见的是以Weierstrass方程定义的椭圆曲线

$$ y^2 = x^3+ax+b $$

其他的还有蒙哥马利曲线(Montgomery Curve)、扭曲爱德华曲线(Twisted Edwards Curve)等,详见$[7]$的回答

Weierstrass方程包含两个参数$a,b$,这里要求$a,b$满足下列这个不等式

$$ 4a^3+27b^2\neq 0 $$

对于密码学中的椭圆曲线而言,除了$a,b$之外,还有一个参数,也即模数$p$,这个模数通常是一个大素数,并同时定义与该素数相关的有限域$\mathbb F_p$,且此时参数$a,b$不再从实数中选取,而是要求$a,b\in \mathbb F_p$

然后继续介绍Pasta Curve,准确来说是两条曲线,分别是Pallas和Vesta,Pasta这个词分别取自这两个单词的前两个字母和后三个字母

这两条曲线的方程参数为$a=0,b=5$,也即

$$ y^2 = x^3+5 $$

区别在于这两条曲线的基域不同,Pallas的基域为$\mathbb F_p$,Vesta的基域为$\mathbb F_q$,其中$p,q$如下

$$ p:0x40000000000000000000000000000000224698fc094cf91b992d30ed00000001\\ q:0x40000000000000000000000000000000224698fc0994a8dd8c46eb2100000001 $$

这里需要注意:$| \mathbb F_q | > | \mathbb F_p|$

然后这里引入两个名词,记$E_p$为一条定义在$\mathbb F_p$($p$为大素数)上的椭圆曲线(记为$E_p/\mathbb F_p$),记曲线构成的群的阶为$q=\#E(\mathbb F_p)$

  • Base Field(基域):由素数$p$所构成的有限域$\mathbb F_p$
  • Scalar Field(标量域):由素数$q$所构成的有限域$\mathbb F_q$

每个域中都有一个很大的阶为2的幂的乘法子群,非常适合做高效运算

此外,这两条曲线还有一个最大的特点,就是一条曲线的基域恰好是另一条曲线的标量域,也即Pallas的标量域恰好是$\mathbb F_q$,而Vesta的标量域恰好是$\mathbb F_p$,这称为相互嵌入,非常适合做递归证明

这里引用Halo2 Book中的一张图解释一下,为什么适合做递归证明

首先ZKP的电路通常都是算数电路,这些算数电路一般都是定义在有限域上的算术电路

许多ZKP方案都是基于椭圆曲线有限域构造的,比如说Groth16、Plonk等等,这些方案中通常都会对电路进行编码,或者对一些特定的值做承诺,这个步骤会将有限域上的标量值映射到椭圆曲线上的一些点

以曲线bn254来举个例子,比如现在有一个待证明的算术电路,电路中所有标量值都来自于$\mathbb F_r$这个域,此时对这个算术电路进行编码/承诺,则会得到由素数$q$所定义的椭圆曲线上的点,然后再借助这些点来完成证明/验证

参数$q,r$可以在$[8]$中找到,这里的$q$区别于上面的那个

然后回到pasta曲线,假如说现在有一个定义在$\mathbb F_q$上的算术电路,对电路进行编码/承诺之后,可以得到Pallas这条曲线上的点(由素数$p$定义的有限域$\mathbb F_p$),Prover根据这些点构造证明,交给Verifier验证即可

如果我们需要进行递归证明的话,不仅需要验证之前的证明,还需要构造一个新的证明,由于之前的证明是在$\mathbb F_p$这个域上构造的,因此证明验证和构造新的证明可以表示为一个$\mathbb F_p$上的算术电路

由于$\mathbb F_p$是曲线Vesta的标量域,此时对这个新的电路进行编码/承诺就可以得到曲线Vesta上的点(由素数$q$定义的有限域$\mathbb F_q$)

此时继续做递归证明的话,由于这些Vesta曲线上的点都是来自由$\mathbb F_q$所定义的,可以发现这样一来一回,又回到了$\mathbb F_q$这个域,此时继续构造算术电路进行编码/承诺,又可以得到Pallas这条曲线上的点

只要继续这样,基域和标量域始终在$\mathbb F_p,\mathbb F_q$之间,这样就可以继续完成递归证明,这就是Pasta这两条曲线最大的特点所在

下面这个图是Halo2 Book的图,大致就是这么一个左手倒右手的过程

曲线特性

除此之外,Pasta曲线还有一些优良的特性,以下内容参考electric coin博客$[1]$

  • 素数$p,q$的长度均为255比特,可以将点表示为两个32 Bytes的字可以在Pollard Rho攻击下提供126比特的安全性
  • 注意到$p,q$的前面的大部分和后面的一小节都包含了大量的0,因此可以以稀疏的方式表示模数,从而提高蒙哥马利归约和其他常见运算的效率
  • 支持可用于提高标量乘法性能的同态性
  • 曲线方程为$y^2=x^3+5$,$x=0$这个点not vaild(无定义的意思?),可以很好的用来表示无穷远点
  • 没有阶为5、7之类的乘法子群,适用于Rescue、Poseidon等代数Hash函数(这里没太理解,需要看一些其他资料)

References

$[1]$ The Pasta Curves for Halo 2 and Beyond - Electric Coin Company

$[2]$ PastaCurves (haskell.org)

$[3]$ The Pasta Curves for Halo 2 and Beyond(Halo 2及更高版本的Pasta曲线) - Languages / Chinese - Zcash Community Forum

$[4]$ Elliptic curves - The halo2 Book (zcash.github.io)

$[5]$ Pasta curves - Mina book (o1-labs.github.io)

$[6]$ Elliptic Curve Cryptography: finite fields and discrete logarithms - Andrea Corbellini

$[7]$ Curve25519曲线是什么? - 知乎 (zhihu.com)

$[8]$ BN254 - HackMD