Skip to content

Latest commit

 

History

History
191 lines (124 loc) · 6.98 KB

readme.md

File metadata and controls

191 lines (124 loc) · 6.98 KB
title tags
36. Weil 配对
zk
abstract algebra
elliptic curve
group theory
finite field
pairing

WTF zk 教程第 36 讲:Weil 配对

这一讲,我们将介绍 Weil 配对,它在基于配对的加密算法和零知识证明中扮演着重要角色。

1. Weil 配对

1.1 推导

Weil 配对是一种基于椭圆曲线的双线性配对。我们定义在域 $K$ 上的椭圆曲线 $E(K)$,根据我们之前推导的挠群性质, $m$-挠群 $E[m]$ 同构于 $\mathbb{Z}/m\mathbb{Z} \times \mathbb{Z}/m\mathbb{Z}$。Weil 配对 $e_m(P,Q)$$E[m]$ 上的两点 $P, Q$ 映射到 $\mu_m$ 上,也就是:

$$ e_m(P,Q): E[m] \times E[m] \to \mu_m $$

其中 $\mu_m$$m$ 次单位根群,指所有满足方程 $z^m = 1$ 的元素 $z$ 构成的集合。

对于在椭圆曲线上的有理函数 $f$,我们可以定义它的主除子(椭圆曲线上点的形式和):

$$ D_f = \text{div}(f) = \sum_{P \in E}{n_P[P]} $$

根据主除子定理,我们总能找到一个有理函数 $f = f_Q$,它的除子满足:

$$ D_f = \text{div}(f) = m[Q] - m[O] $$

因为该除子满足 $\text{deg}(D_f) = m - m = 0$$\text{sum}(D_f) = mQ - mO = O - mO = O$(点 $Q$$m$-挠群上)。

接下来,我们定义 $[m]$ 次标量乘法映射 $[m]: E \to E$,设 $Q' \in E[m^2]$ 为椭圆曲线上满足 $[m]Q' = Q$ 的点;再定义 $[m]$ 的逆映射 $[m]^*$,在这里它指的是找到那些被 $m$ 倍映射到特定点的所有点,即满足 $Q' = [m]^*Q$ 的点 $Q$。根据主除子定理,我们也总能找到一个有理函数 $g = g_Q$,它的除子满足:

$$ D_g = \text{div}(g) = [m]^* [Q] - [m]^* [O] = \sum_{R \in E[m]}{[Q' + R] - [R]} $$

表示 $g$ 在所有 $[m]^* Q$ 上都有零点,在所有 $[m]^* O$ 上都有极点。因为 $[m]Q'=Q$,因此 $[m]^* (Q)$ 就是 $Q'$ 加上所有的 $E[m]$ 中的点( $[m]$ 映射是 $m$-挠群到自身的一个满射)。根据挠群定义, $[m]^*O$ 就是所有 $E[m]$ 中的点。容易知道 $\text{deg}(D_g) = m^2 - m^2 = 0$$\text{sum}(D_f) = m^2 Q' + \sum_{R \in E[m]}{R - R} = O - m^2O = O$(挠群 $E[m]$ 共有 $m^2$ 个元素)。

我们容易验证 $f \circ [m]$$g^m$ 有相同的除子。其中 $f \circ [m] = f([m]Q)$,相当于在每个点 $Q$ 上应用 $f$ 前,先将 $Q$ 变换成它的 $m$ 倍点 $[m]P$,因此 $f \circ [m]$ 在所有 $[m]^*Q$ 上都有零点,每个零点重数为 $m$;在所有 $[m]^*O$ 上都有极点,每个极点重数也为 $m$。对于 $g^m$,它的零点和极点与 $g$ 的位置相同,只不过重数乘以 $m$。因此有 $\text{div}(f \circ [m])=\text{div}(g^m)$。根据除子的唯一性定理,函数 $f \circ [m]$$g^m$ 成常数比例,我们不妨设:

$$ f \circ [m] = g^m $$

现在,让我们假设挠群 $E[m]$ 上的另一点 $P$,有 $[m]P = O$,那么对于椭圆曲线上任意一点 $X$,有:

$$ g(X+P)^m = f([m]X + [m]P) = f([m]X) = g(X)^m $$

也就是说 $g^m$ 在点 $X$$X+P$ 处有相同的值。我们可以定义一个新的函数 $e_m(P, Q) = \frac{g_Q(X+P)}{g_Q(X)}$,根据上面的等式,有 $e_m(P, Q)^m = 1$,因此 $e_m(P, Q) \in \mu_m$$m$ 次单位根之一,是有限的。另外根据代数几何的态射性质(不在本教程覆盖范围内), $e_m(P, Q)$ 是个常数,与点 $X$ 的选取无关。

这个 $e_m(P,Q)$ 就是 Weil 配对,现在我们给出它的定义:Weil 配对 $e_m$ 将椭圆曲线 $m$-挠群上的两个点 $P, Q$ 映射到 $m$ 次单位根上:

$$ e_m: E[m] \times E[m] \to \mu_m $$

它的具体形式:

$$ e_m(P, Q) = \frac{g_Q(X+P)}{g_Q(X)} $$

其中 $X$ 是椭圆曲线 $E$ 上的可以使得 $g_Q(X+P)$$g_Q(X)$ 定义良好且非零的点。

1.2 性质

性质1. 双线性: 对于 $E[m]$ 上的挠点 $P, Q, R$,满足 $e_m(P + R, Q) = e_m(P, Q) e_m(R, Q)$$e_m(P, Q + R) = e_m(P, Q) e_m(P, Q)$

点我展开证明👀

证明 $e_m(P + R, Q) = e_m(P, Q) e_m(R, Q)$

根据 Weil 配对定义:

$$ e_m(P + R, Q) = \frac{g_Q(X+P + R)}{g_Q(X)} $$

$$ = \frac{g_Q(X+P + R)}{g_Q(X+P)} \frac{g_Q(X+P)}{g_Q(X)} $$

$X+P = Y$,原式: $$ = \frac{g_Q(Y + R)}{g_Q(Y)} \frac{g_Q(X+P)}{g_Q(X)} $$

$$ = e_m(R, Q) e_m(P, Q) $$

证毕。

证明 $e_m(P, Q + R) = e_m(P, Q) e_m(P, R)$

这个证明相对困难,需要用到除子理论的相关内容。首先,我们先设 $f_Q, f_R, f_S, g_Q, g_R, g_S$ 分别是点 $Q, R, S= Q+R$ 的函数。然后我们设椭圆曲线上的函数 $h$ 满足:

$$ \text{div}(h) = (Q+R) - (Q) - (R) + (O) $$

根据除子定理,有:

$$ \text{div}(\frac{f_S}{f_Qf_R}) = m \text{div}(h) $$

因此 $f_S = c f_Q f_R h^m$,其中 $c$ 是常数。又因为 $f_i \circ [m] = g_i^m$,我们将上式两边复合上 $[m]$,得到:

$$ g_S = c'g_Qg_R(h \circ [m]) $$

因此:

$$ e_m(P, Q+R) = \frac{g_S(X + P)}{g_S(X)} = \frac{g_Q(X+P)g_R(X+P)h([m]X + [m]P)}{g_Q(X)g_R(X)h([m]X)} $$

又因为 $[m]P = O$,因此原式:

$$ = \frac{g_Q(X+P)g_R(X+P)}{g_Q(X)g_R(X)} = e_m(P, Q) e_m(P,R) $$

证毕。

性质2. 非退化性: 若对于所有的 $P \in E[m]$,有 $e_m(P,Q) = 1$ 成立,那么 $Q = O$

性质3. 交错性: $e_m(P, Q) = e_m(Q, P)^{-1}$,且 $e_m(P, P) = 1$

2. Weil 配对常用形式

上一节介绍的 Weil 配对中的 $g$ 函数非常难求,因此我们经常用另一种形式:

$$ e_m(P, Q) = \frac{f_P(Q+X)}{f_P(X)} / \frac{f_Q(P-X)}{f_Q(-X)} $$

其中点 $P, Q$ 属于椭圆曲线的 $m$-挠群 $E[m]$,点 $X$ 为椭圆曲线上满足 $X \notin \set{O, P, -Q, P-Q}$ 的任意一点,函数 $f_P$$f_Q$ 为定义在椭圆曲线上的有理函数,满足:

$$ \text{div}(f_P) = m[P] - m[O] $$

$$ \text{div}(f_Q) = m[Q] - m[O] $$

这个形式的 Weil 配对 $e_m(P, Q) \in \mu_m$,同样满足上一节的性质:双线性,非退化性,和交错性。

2.1 例子

下面我们举个 Weil 配对的例子。我们设定义在 $F_5$ 上的椭圆曲 $E: y^2 = x^3 - x \pmod{5}$。它有3个根 $\alpha_1, \alpha_2, \alpha_3$,分别为 $0, -1, 1$,对应椭圆曲线上的3个点 $P_1(0,0), P_2(-1,0), P_3(1,0)$。由于他们满足 $2P_1 = 2P_2 = 2P_3 = O$,因此它们加上无穷远点 $O$ 构成了椭圆曲线的 $2$-挠群 $E[2] = \set{P_1, P_2, P_3, O}$。对于点 $P_i$,我们可以定义有理函数 $f_{Pi} = x - \alpha_i$,对应的主除子满足:

$$ \text{div}(f_{Pi}) = 2[P_i] - 2[O] $$

我们取 $P_1, P_3$ 和椭圆曲线上的另一点 $X = (2,1)$ 来计算 Weil 配对:

$$ e_2(P_1, P_3) = \frac{f_1(P_3+X)}{f_1(X)} / \frac{f_3(P_1-X)}{f_3(-X)} $$

其中 $P_3 + X = (3,3)$, $P1 - X = (2, 1)$, $-X = (2, 4)$, $f_1(P_3+X) = 3$, $f_1(X)= 2$, $f_3(P-X) = 1$, $f_3(-X) = 1$。因此 Weil 配对:

$$ e_2(P_1, P_3) = \frac{3}{2} / \frac{1}{1} = 3 * 3 = -1 \pmod 5 $$

可以看到, $e_2(P_1, P_3) = -1 \in \mu_2$

3. 总结

这一讲,我们介绍了 Weil 配对的推导和两种形式。推导比较繁琐,应用时记住结论就可以了。下一讲,我们将介绍计算 Weil 配对的有效算法。