---
# System prepended metadata

title: On Proving pairing理解

---


Pairing for beginners[1]摘要
>因为篇幅有限，这里列举了on proving pairing论文中需要的知识点。

1. 群环域
* 群（G）定义了一个集合和一个群运算+，满足封闭性和结合律,存在单位元和逆元素
* 环（Z）在群的基础上多定义了一个群运算x，也满足封闭性和结合律，且存在 
（乘法）单位元（不要求存在逆元素）。 
* 域（F）在环的基础上，除了加法单位元之外所有元素存在（乘法）的逆元素，也就是说域同时满足加法群和乘法群
整数集构成一个环但不构成域。有理数集，实数集和复数集均构成域

群具有如下性质：
* 一个群 G 的元素个数称为群的阶，记作 $\#G$。 
* 一个群元素 P 的阶为最小的整数 k 使得 $kP = O$（k 个 P 进行群运算，O 为单 
位元）称为 P 的阶。 
* 群内任何一个元素的阶一定整除群的阶。 
* 如果一个元素 P 的阶等于群的阶，则 P 是 G 的一个生成元，且 $G = {P, 2P, ...}$ 
是一个 cyclic group循环群。 
参考[2]
2. 循环子群和协因子
   如果一个群的阶为合数，根据拉格朗日定理，一定存在多个循环子群。比如定义在有限域Fq上的椭圆曲线群的阶为$\#E(Fq)=105=3*5*7$, 一定存在阶为{1,3,5,7,15,..105}的循环子群。
   如何获得这些循环子群？ 就要用到协因子cofactor的概念，cofactor $h=\#E/r$，r是目标循环子群的阶。比如获取r=3阶子群，h=105/3=35, 然后用h乘以群的生成元P=(47,12)，就得到3阶群的生成元$[35](47,12)=(28,8)$，继而得到整个3阶子群。这里群元素点的坐标(x,y)。
注意，协因子的概念非常重要。

3. r-torsion 点
r-torsion点是一类很重要的子群，$E[r]=\{P \in E: [r]P=O\}$
$$ E[r] \cong Z_r \times Z_r $$
r-torsion是定义在$E(\overline{F_q})$上的所有r阶点构成的子群，$E[r]$是两个模r剩余类环(也就是整数集合Z通过模r运算得到的商集)$Z_r$的乘积，一般来说这个群的阶为$\#E[r]=r^2$
注意，群元素是在ECC上的点，而不是有限域中的数值。这些r-torsion点有r+1个阶为r的循环子群组成，之所以是r+1,是因为每个子群都有一个共同的单位元。[Beginner Figure 4.1]


4. 如何找到所有r-torsion点
我们已经知道r-torsion点一定有$r^2$个，也知道$E[F_q]$有一个r阶子群，如果$E[F_q]$只包含一个循环子群，可以扩展到$E[F_{q^2}]$上再获取一个循环子群，要想获取到所有$r^2$个点，并不是一定要扩张r次，往往k次就够了，k<<r, 判断标准就是$q^k-1$能整除r, 而有趣的是，一旦$q^k-1$能整除r,就一下子找到了所有的r-torsion点。k就是嵌入度
* k 是使得$r|(q^k-1)$的最小正整数
* K 也是使得有限域$F_{q^k}$包含了所有r次单位根的最小正整数$(x^r=1 mod F_{q^k})$
* K 同时也是使得所有r-torsion点在$E(F_{q^k})$上能找到的最小正整数
可见r次单位根似乎和r-torsion点之间有种特殊的联系
举例说明(beginner 4.1.1)，Let $q=11，E/Fq: y^2=x^3+4, E(F_q)$有12个点也就是$\#E(F_q)=12$，想获取所有3-torsion点，即E[3]=3*3=9, 可以看到只有3个在$E(F_q)$中，同时$q-1/3 \ne 0$,但是$(q^2-1) =0\ mod\ 3$,所以嵌入度k=2，在$F_{q^2}$上就能找到所有9个点
[Beginner Figure 4.1]
![image](https://hackmd.io/_uploads/ry816J7nA.png)



这里要说明的是k=2扩域的构造，不是简单的扩展到$q^2=11*11$,而是$F_{q^2}=Fq(i), i^2+1=0$的形式来构造，类似虚数的形式。
如果q-1/r=0, 就说明所有r-torsion点在$E(F_q)$上就能找到，不需要扩域。[Beginner example 4.1.2]


5. Divisors
要理解pairing，绕不开Divisors的概念，divisor来自代数集合，比较抽象，定义：
$$ D= {\sum_{P \in {E(\overline{F}_{q})} }n_{P}(P)} $$
$n_{p}$是P点的系数也叫阶
个人理解：divisor是因子的意思，类似多项式Q=$(x-1)^{2}(x-2)$,其中x-1因子的阶是2，在椭圆曲线上，一条曲线（包括直线）和椭圆曲线的交点就构成了这些divisors，如果是切线，degree就是2
例如，y=ax+b和ECC相交于三个点P,Q,-(P+Q)，其实还有极点O,阶为-3即-3O
关于divisors还有其他一些概念和性质，比如这些degree的和一定是0，请参考Beginner。


6. Wei reciprocity(Wei 互换)
在一个Divisor $D={\sum_{P \in E}}{n_p}(P)$上计算函数$f \in F_{q}(E)$有一个自然的定义
     $$f(D)={\prod_{P \in E}}f(P)^{n_p}$$
也就是将D的点代入f函数计算。
Wei reciprocity说的就是：假设两个函数f,g，在一个椭圆曲线上的Divisor为(f)和(g),那么就有：
$$ f((g) = g((f))$$
也就是各自的Divisor点代入到对方函数，结果相等
Example3.3.1, $E/F_{503}: y^2=x^3+1$, 函数$f:\frac{20y+9x+179}{199y+187x+359}=0$ and $g: y+251x^2+129x+201=0$
因子
(f)=2(433,98)+(232,199)-(432,27)-2(127,258)
(g)=(413,369)+(339,199)+(147,443)+(124,42)-4O
这样这些divisor可以代入对方函数计算。具体请参考Beginner
Wei互换就有了pairing的雏形。

7. Pairing
pairing的定义是一个双线性映射
         $$e: G_1 * G_2=G_t$$
$G_1,G_2$ 定义在群 $E(F_{p^k})$ 上，而 $G_t$ 定义在乘法群$F_{p^k}^*$上。
注意：左侧是椭圆曲线上的加法群，右侧是有限域上的乘法群。G1和G2中间的乘，就是普通意义上的乘法, pairing把椭圆曲线和有限域两个世界联系在了一起，amazing! 
我们时常使用的是左侧,双线性性质如下，不论左侧如何乔装改扮，右侧始终如一
    $$e(aP, bQ) = e(P, bQ)^a = e(aP, Q)^b = e(P,Q)^{ab} = e(bP,aQ)$$

8. Wei pairing
根据上面Divisor知识，对于任一m属于整数集($m\in Z$),P是椭圆曲线点($P\in E$),有：
$$ (f_{m,P}) = m(P)-([m]P)-(m-1)O$$
这里系数和m-1-(m-1)=0, 也就是说,对系数和为0的divisor一定存在一个函数$f_{m,P}$
或者说就是给定divisor，我们可以构造出相关的和ECC相交的曲线函数
有一些限定条件考虑文章的可读性没有列出，感兴趣读者可以学习Beginner
如果m=r，根据r-torsion点的性质，[r]P=O,O是无穷远点或叫单位元，也就有：
$$ (f_{r,P}) = r(P)-r(O)$$
如何计算($f_{r,P}$)的值？
观察到$(f_{m+1},P ) − (f_m,P ) = (P) + ([m]P) − ([m + 1]P) − (O)$
而$f_{0,P}=1$，可以通过渐进迭代的方式从$f_{0,P}$得到$f_{1,P}$, 到$f_{2,P}$...$f_{r,P}$
而每一步都是一个斜线和一个垂直线$ℓ_{[m]P,P} /v_{[m+1]P}$的值相除的结果,
其中斜线是$(P)+([m]P)$两个点连线来构造，垂直线为过([m+1]P)点来构造。
可以看到如果r很大，计算量是非常大的，著名的miller loop就是把这个计算过程优化到生产级别。
[Beginner Figure 5.1]:
![image](https://hackmd.io/_uploads/HJFMayXnA.png)

Wei Pairing:
设$P,Q\in E(F_{q^k})[r]$，即定义在有限域$F_{q^k}$上的椭圆曲线上的r-torsion点， $D_P,D_Q$是degree=0的divisors，存在函数f,g使得$(f)=rD_P, (g)=rD_Q$
定义Wei Pairing是一个映射：
$$ w_r: E(F_{q^k})[r] * E(F_{q^k})[r] \to u_r$$
$$ w_r(P,Q)=\frac{f(D_Q)}{g(D_P)}$$
$u_r$是r次单位根，注意：$f(D_Q)$不是$f(D_P)$,意思是把Q点divisor代入到$D_P$构造的f函数计算，g的参数是P点的Divisor。两者相除的结果是对应有限域$F_{q^k}$上的r次单位根
具体计算例子可以参考[Beginner Example 5.1.1]加深理解。
可以看到Wei Paring需要两个来自r-torsion点参数，计算量大，而tate pairing只需要1个


9. Tate Pairing
Tate Pairing要比Wei Pairing复杂，但是计算更加精简
Tate Pairing需要了解陪集和商群的概念，其中G2就是定义在$E(F_{q^k})$等价的商群上的

9.1 r倍点陪集
$E(F_{q^k})$上所有点的r倍构成一个陪集,不是群，它的数量是协因子$h=\#E(F_{q^k})/r^2$,定义：
$$rE(F_{q^k}) = \{[r]P: P \in E(F_{q^k}) \}$$
注意，这里跟r-torsion点的区分，r-torsion点有$r^2$个，获取r-torsion点的方法是：
$$r_{torsion} = \{[h]P: P \in E(F_{q^k}) \}$$
可以看到，任何一个r-torsion点Q, $rQ=[rh]P=O$, 任何一个r倍点Q,$hQ=[hr]P=O$
对r倍点加上任意一个其他的$E(F_{q^k})$上的不在r-torsion中的点R构成另一个陪集.
这样的陪集正好有$r^2$个(想想为什么?)，而且有趣的是，每一个陪集里都有唯一的r-torsion中的点。
这些陪集构成一个商群E/rE, 单位元是r倍点陪集rE, 而pairing中的G2就定义在这个商群上。
这个商群的每一个陪集有一个重要的性质，陪集内部的两个元素的差一定在rE中，因为每个陪集都是rE的元素加上一个随机点R构造的，两点的差就把这个R消去了，所以一定在rE中。
参考如下Biginner书中的例子:
Firgure5.3集中了所有3-torsion点，
Firgure5.2 则列出了$r^2=9$个陪集，每个陪集都包含有一个r-torsion中的点，第一个陪集是r倍点陪集，包含单位元O点
![image](https://hackmd.io/_uploads/BkcH61mnC.png)

9.2 Tate Pairing Map:
设$P\in E(F_{q^k})[r]$，$Q\in E(F_{q^k})$即E/rE的等价类群，可见G2范围放宽了， $D_P,D_Q$是degree=0的divisors，存在函数f使得$(f)=rD_P$
$$ t_r: E(F_{q^k})[r] * E(F_{q^k})/rE(F_{q^k}) \to F_{q^k}^*/(F_{q^k}^*)^r$$
$$ t_r(P,Q)=f(D_Q)$$
可见，只需要计算$f(D_Q)$就可以了，但是$G_t$不再是r次单位根$u_r$而是一个有限域乘法商群，和E/rE非常相似。
$(F_{q^k}^*)^r$是$(F_{q^k}^*)$的子群，定义为：
$$(F_{q^k}^*)^r = {\{u^r: u \in F_{q^k}^*\}}$$
和rE定义何其相似，它们在映射上存在某种关系。
因此，$F_{q^k}^*/(F_{q^k}^*)^r$是$F_{q^k}^*$的等价类，等价关系是$a1/a2 \in(F_{q^k}^*)^r$, 也就是说，两个tate pairing相等，只要它们两个的商属于$(F_{q^k}^*)^r$, 换句话说，两个等价的tate pairing的结果不一定相等，但是他们一定在同一个乘法商群的陪集里，两个结果的商一定在类似r倍点的$(F_{q^k}^*)^r$中
可以参考书中Example5.2.2,
$t_r(P,Q)=4i+4, t_r(P,[2]Q)=2i+4=t_r(P,Q)^2$ 但是$t_r([2]P,Q)=3i+2$
即$t_r([2]P,Q)，t_r(P,[2]Q) \notin (F_{q^k}^*)^r$, 可以验证$(3i+2)^{3^2-1}=4$
但是$t_r([2]P,Q)/t_r(P,[2]Q) \in (F_{q^k}^*)^r$，可以验证$((3i+2)/(2i+4))^8=i^8=1$

9.3 Tate pairing final exponent
为了直接判断两个Tate pairing相等，可以提指到$(q^k-1)/r$幂次，得到r次单位根
$$ T_r: E(F_{q^k})[r] * E(F_{q^k})/rE(F_{q^k}) \to u_r$$
$$ T_r(P,Q)=t_r(P,Q)^{\#F_{q^k}/r}=f_{r,P}(D_Q)^{(q^k-1)/r}$$
原理就是，有限域商群中的陪集也是从$(F_{q^k}^*)^r=\{u^r\}$乘一个随机数s而来，即
${\{u^r\}} \to {s*\{u^r\}}$, 对陪集中元素提指后，所有的${\{u^r\}^{(q^k-1)/r}}$将变为1，而只剩下${s}^{(q^k-1)/r}$,是r次单位根。
这个提指就叫final exponent.
理论上来说没问题了，但是生产上为了保证安全r和q都非常大，都在256bit幂次级别的计算，这样几乎不可能投入使用，这样就有了miller loop算法和针对r值计算量更小的ate pairing

10. Miller Loop
在之前章节中介绍了$f_{r,P}$的计算可以通过$f_{1,P}，f_{2,P}..f_{r,P}$迭代计算而来。
考虑之前介绍过的divisor：
$$ (f_{m,P}) = m(P)-([m]P)-(m-1)O$$
miller观察到，它的平方为：
$$ (f_{m,P}^2) = 2m(P)-2([m]P)-2(m-1)O$$
同时：
$$ (f_{2m,P}) = 2m(P)-([2m]P)-(2m-1)O$$
两者很相似，差值为：
$$ (f_{2m,P})-(f_{m,P}^2) = 2([m]P)-([2m]P)-O$$
其中，$2([m]P)$，是$[m]P$点的double，$-([2m]P)$是$[2m]P$点的垂直线，差值就是两者的线性函数相除。也就是说$f_{2m,P}$可以通过$f_{m,P}^2*(line_{[m]P,[m]P}/v_{[2m]P})$计算得到。同样是迭代，这次是从1,2,4,8..m这样的double得到，如果m不能被2整除，可以用之前的迭代add即可。效率指数倍提升。
![image](https://hackmd.io/_uploads/r1HdaJ7n0.png)
Miller Loop解决的是给定m，可以指数效率计算得到，而下面的Ate paring 解决的是让m尽量小.

11. Ate pairing
$$ a_T: G_2 * G_1 \to G_T$$
$$ a_T(Q,P) = f_{T,Q}(P)^{q^k-1/r}$$
可见，ate pairing和tate pairing类似，只是把$G_1,G_2$顺序反了一下，同时miller loop的迭代数量也从$r$改为了$T$, $T<<r$。T是什么？

11.1 
根据Hasse bound定理
$$|q+1-t|=\#E(F_q), |t| \le 2\sqrt{q}$$
也就是说，ECC阶和q+1相差一个t，这个t叫做"trace of Frobenius", 椭圆曲线参数选定，t也就定了，定义T=t-1，$|q-T|=\#E(F_q)$。
$$r(x)=x^4-x^2+1, t(x)=x+1, t<<r$$
考虑$q \equiv T\ mod\ r, q^k \equiv 1\ mod\ r \to T^k \equiv 1\ mod\ r$, 有$$T^k-1=rm,m \in Z$$.

考虑$G_2$在前面的tate pairing $e(Q,P)=f_{r,Q}(P)^{(q^k-1)/r}$，那么根据双线性性质有$$e(Q,P)^m=f_{mr,Q}(P)^{(q^k-1)/r}=f_{T^k-1,Q}(P)^{(q^k-1)/r}$$
而$f_{T^k-1,Q}(P) = \prod{f_{T,[T^i]Q}(P)}$(注:根据divisor的性质)
因为$Q \in G_2$,可以很好利用Frobenius 自同态的性质${[T^i]Q=\pi^i(Q)}$
Frobenius 自同态是一个很强大技巧，可以参考[3] 
这样$\prod{f_{T,[T^i]Q} \to f_{T,Q}^{q^i}(P)}$，
tate pairing 和ate pairing等价：$e(Q,P)=a_T(Q,P)^v$
我们就可以计算$a_T(Q,P)$来判断两个ate pairing是否相等,T要远远小于r。

11.2 Optimal Ate pairing
Vercauteren研究到，$T \equiv q\ mod\ r$只是一个$\lambda_i \equiv q^i\ mod\ r$的特例，因为$\lambda_i$是miller loop的循环长度，所以，我们希望它尽可能小，而最终就是要找到一个$\lambda_i = \sum_{i=0}^{l}c_iq^i$的最小的$c_i$系数，这是一个格问题，借助格数学最终可以得到一个最小系数。其中，BN曲线上我们得到:
$$\lambda = 6x+2+q-q^2+q^3$$
这也就是当前pairing使用的循环$f_{\lambda,Q}(P)^{(q^k-1)/r}$，其中$q-q^2+q^3$部分借助Frobenius map，它的计算几乎是免费的，所以真正耗时的是$6x+2$部分，而借助最小Hamming算法，它只有65次循环。




12. On proving pairing[4]
可以看到tate pairing最贵的计算一个是miller loop，另一个是final exponent提指，而On prove pairing paper创新的地方就是消除了final exponent部分，大大节省了验证时间。
>on prove pairing paper中使用了零知识证明中常用的“验证代替计算”的思想，比如代替计算$x^{-1}=y$，验证的思想就是提供$y$，验证$xy=1$.

已知miller loop结果是一个乘法群等价类$(F_{q^k}^*)/(F_{q^k}^*)^r$,在提指之前，两个等价的pairing x,y的结果的商肯定在$(F_{q^k}^*)^r$中，也就是$xc^r=y$,所以final exponent提指后一定为1.
也就是
$$y^{q^k-1/r}=(xc^r)^{q^k-1/r}=x^{q^k-1/r}c^{q^k-1}=x^{q^k-1/r}$$
定理1：
$$\prod_ie(P_i,Q_i)=1 \iff \exists c\in F_{q^k}^*: \prod_if_{r,Q_i}(P_i)=c^r $$
就是说，两个pairing提指后积(商)为1，等价于两个pairing的miler loop的积存在r次剩余。
如果我们提前计算好r次剩余c，就有$\prod_if_{r,Q_i}(P_i)*c^{-r}=1$
这样相比final exponent的提指$q^k-1/r$幂次，根据c计算$r$次幂，计算量小了2/3.
但是因为r很大，1/3的计算量仍然很大，还可以再优化。

回顾Optimal ate pairing的miller loop计算,达到最小循环次数，最小计算量
$$f_{\lambda,Q}(P)^{(q^k-1)/r}$$
> 那么更进一层，是否可以考虑两个miller loop的积和$c^{\lambda}$等价?

$\lambda=m\cdot r,m \in Z$, miller loop积的结果是否可以和$c^{\lambda}$即$(c^m)^r$等价，也就是要计算是否存在$\lambda$剩余。


定理2：
$$\prod_ie(P_i,Q_i)=1 \iff \exists c\in F_{q^k}^*: \prod_if_{r,Q_i}(P_i)=c^{\lambda/d} $$
定义：$\lambda=m\cdot r, d=gcd(m,h), \lambda=d\cdot m'\cdot r, h=(q^k-1)/r$
因为$\lambda$和h不互素$d=gcd(m,h)$，无法直接计算$\lambda$次剩余，但是$\lambda/d$和h互素，即$gcd(\lambda/d, h)=1$，如果f是miller loop输出，$f^h=1$，根据贝祖定理，一定存在$\lambda/d$次剩余,根据贝祖定理有
$$x\cdot \lambda/d + y\cdot h=1 \to f^{x\cdot \lambda/d}*f^{y\cdot h}=f \to {(f^x})^{\lambda/d} = f$$
$x是\lambda/d \ mod\ h的逆, f^x 即是f的 \lambda/d次剩余$ 

$\lambda=d\cdot m'\cdot r, gcd(m', h)=1,gcd(r, h)=1,gcd(d, h)\ne 1$, 因为$d|(q^k-1)$不互素, 所以f有可能不是d次剩余，作者给出的创新就是,在f是非d次剩余时候，f乘以一个非d次剩余$w$,使得$f\cdot w$是d次剩余,从而$f\cdot w$也是$\lambda$次剩余。
两点保证：
- 如果miller loop输出f不是r次剩余，$f\cdot w$也不是r次剩余
- 如果miller loop输出f不是$\lambda$次剩余，通过$f\cdot w$就可以得到$\lambda$次剩余

第一点保证了$f$不是$r$次剩余，但通过$f\cdot w$成为为$r$次剩余的可能(这样攻击者可以提供错误的f来完成证明)，可以参考作者的证明，不再赘述。
第二点作者给出引理2：
“如果b是非d次剩余，一定存在非d次剩余a，一定是r次剩余，同时$a\cdot b$是d次剩余”
证明：$h=d^s \cdot f=(p^k-1)/r, d\nmid f$, 一定可以找到a，a的阶为$d^s，ord(a)=d^s, r是素数, gcd(d^s,r)=1$,借助贝祖定理，a一定存在r次剩余，
反证法，假设a存在d次剩余，就有$b^d=a$, 因为$ord(a)=d^s, ord(b)=d^{s+1}$, 但是$d^{s+1}\nmid h, d^{s+1}\nmid q^k-1$, 也就是$b^{d^{s+1}} \ne 1$,所以a的阶为$d^s$时候，一定不存在d次剩余。
通过这个引理，可以很方便的找到一个非d次剩余，然后和b一起构造出d次剩余。
作者提出在BN curve下$d=3,s=3,d^s=27$即27-th剩余。

定理3：
$$\prod_ie(P_i,Q_i)=1 \iff \exists c，w\in F_{q^k}^*: \prod_if_{r,Q_i}(P_i)=c^{\lambda}w \land w^{d^s}=1 $$

这样可以预先根据miller loop $f\cdot w^{-1}$计算出$\lambda$剩余c，在pairing验证时候代替final exponent，使用$f\cdot (w \cdot c^{\lambda})^{-1}=1$来验证。
而$c^{\lambda}$的计算，可以嵌入到miller loop($\lambda$次循环)的计算过程中一起计算，很方便。
其中一些手推代码请参考白菜老师的文章[5]

参考:
[1] Pairing for beginners book 
[2] https://download.yeez.tech/doc/ECcurve.pdf
[3] https://learnblockchain.cn/article/8052
[4] original paper: https://eprint.iacr.org/2024/640.pdf
[5] https://learnblockchain.cn/article/8150

Touch
- twitter: @muhuali956697
- email: kokpairing@gmail.com








