有限体上の楕円曲線の点の個数の計算を行う Schoof のアルゴリズムについて書く。
楕円曲線
数式処理のために Sage を使う。バージョンは 9.8 である。
sage: version()
'SageMath version 9.8, Release Date: 2023-02-11'
たちどころに明らかなことは以下である。
-
$E'$ は有限集合であり、大きさは$q^2 + 1$ 以下である。- 無限遠点を除くと
$\mathbb{F} _ {q} \times \mathbb{F} _ {q}$ の部分集合なので当然。
- 無限遠点を除くと
-
$E'$ の大きさは$2q + 1$ 以下である。- 無限遠点を除くとそれぞれの x に対して y は高々 2 通りしかない。
- この式の左辺に形式的に
$\phi \leftarrow 1$ を代入して得られる式$1-t+q$ が求める位数である。 -
$E' = E(\mathbb{F} _ {q})$ の上で考えると$\phi = 1$ であるため、$1-t+q=0$ となり (上の結果を認めれば) 当たり前であることに注意。拡大体の上で考えるべきである。 -
$|t| \le 2 \sqrt{q}$ が成立する。これから、$|E'|$ は$q+1\pm 2\sqrt{q}$ の範囲内にあることがわかる。(Hasse の定理)
楕円曲線
環
-
$\phi^2((x, y)) + q(x, y)$ を計算する。 -
$\phi^2((x, y)) + q(x, y) = t_l\phi((x, y))$ なる$t_l$ がどれなのか、$-(l-1)/2 \le t_l \le (l-1)/2$ の範囲で全探索する。 -
$t \equiv t_l \pmod{l}$ という情報が得られた。これを十分多数の$l$ に対して行い中国剰余定理から$t$ を求める。
詳しくは [KIY] などを参照されたい。
楕円曲線
-
$\phi(P) = (x^{31}, y^{31}) \equiv (25x, y) \pmod{\psi_{3}(x), q}$ $(-28)^{10} \equiv 25 \pmod{31}$
-
$\phi^2(P) = (x^{961}, y^{961}) \equiv (5x, y) \pmod{\psi_{3}(x), q}$ $(-28)^{320} \equiv 5 \pmod{31}$
が成立する。
- naïve な実装では x 座標の差が可逆ではないという理由で無限遠点
$O$ を返してしまう。無限遠点はもちろん$0\phi(P)$ に等しいため、$t \equiv 0 \pmod{3}$ が成立すると誤認してしまう。 - 一方、より納得感のある解釈では傾きは
$(y-y) / (x-5x) = 0$ であるとみなせるので、和$(x_3, y_3)$ は$x_3 = 0^2 - 5x-x = 25x$ (in$\mathbb{F} _ {q}[x]$ ),$y_3 = -y$ と計算できる。$(x_3, y_3) \equiv -\phi(P) \pmod{\psi_{3}(x), q}$ が成立するため、$\phi$ のトレース$t$ は$t \equiv -1 \pmod{3}$ を満たす。 (実際には$t=11$ であるため正しい。)
実際には、
$\psi_3(x) = 3x(x^3 + 28)$ $\psi_5(x) \equiv 5(x^3 + 9)(x^3 + 11)(x^3 + 21)(x^3 + 26) \pmod{31}$ $\psi_7(x) \equiv 7(x + 4)(x + 7)(x + 20)(x^3 + 25)(x^6 + 16x^5 + 21x^4 + 18x^3 + 14x^2 + 30x + 9)(x^6 + 18x^5 + 29x^4 + 18x^3 + 8x^2 + 6x + 9)(x^6 + 28x^5 + 12x^4 + 18x^3 + 9x^2 + 26x + 9) \pmod{31}$
-
$(x, y)$ を$l$ 倍すると$O$ になるのは明らか。$l$ は素数なので、$(x, y)$ の位数は 1 または$l$ である。1 とすると$(x, y)$ が無限遠点に等しいことになり矛盾。
これを使うと先ほどの
-
${\bmod}\ x$ のとき:$(x, y) \equiv (0, \sqrt{7})$ である。これは普通に位数が 3 であるし、$(5x, y) + (x, y) \equiv 2(0, \sqrt{7})$ であるためただの二倍算である。 -
${\bmod}\ (x^3+28)$ のとき:$x-5x$ は可逆元であるため普通に計算できる。
phi^2(x) + q x = [25*x, 30]
要するに別々の事情が 2 個重なっていただけであった。
ある
例:
楕円曲線
同じような事情が任意の有限次拡大についていえる。
sage: q = 31^3
sage: E = EllipticCurve(GF(q), [0, 0, 0, 0, 7])
sage: len(E.rational_points())
29484
sage: factor(len(E.rational_points()))
2^2 * 3^4 * 7 * 13
sage: 31^3 + 1 - 29484
308
sage: 31^3 + 1 + 308
30100
sage: factor(31^3 + 1 + 308)
2^2 * 5^2 * 7 * 43
modular polynomial [KIY] について。
実数体上で議論を行うため、Weierstraß の 楕円関数から逃れることはできない。
素数
- 以下の等式が成立する:
$$\Phi_l(x, j(\tau)) = (x-j(l\tau)) \prod_{0 \le i < l} (x-j\left(\frac{\tau+i}{l}\right))$$ -
$\Phi_l(x, y)$ の係数は有理整数なので、$\Phi_l(x, j(\tau))$ の係数は$\mathbb{Z}[j(\tau)]$ の元である。
また、
-
$\phi$ の特性多項式が因数分解できること ($t^2-4q$ が${\bmod}\ l$ の平方剰余であること) - modular polynomial が有理根を持つこと
- division polynomial が
$(l-1)/2$ 次の因子を持つこと
これらいずれか一つ (つまり全て) を満たすときには division polynomial の因子を見つけることができ、上の Schoof のアルゴリズムの
-
$E$ と isogenous である曲線$\tilde{E}$ の j-不変量$\tilde \jmath$ を求める。-
$E$ の$\tau$ を$\tau$ と置くと、$\tilde \jmath = j(l\tau) \vee \exists i\ldotp \tilde \jmath = j((\tau+i)/l)$ が成立する。これらは modular polynomial の有理根として求められる。
-
-
$\tilde \jmath$ から曲線$\tilde{E}$ を復元する。 -
$F_l$ を求める。$F_l(x) = \prod_{1 \le i \le (l-1)/2} (x-\wp(i\tau_1/l))$ は有理整数の係数を持ち、次数は$(l-1)/2$ であり、division polynomial の因子である。$F_l(\wp(z))$ は関数の間のある等式を満たすので、そこから$F_l$ の係数を求める。-
$\zeta(z)$ を$\zeta'(z) = -\wp(z)$ かつ定数項が 0 となるように定め、$\tilde\zeta(z)$ も$\tilde\wp(z)$ から同様に定めると、$\sum_{|i|<l/2} \zeta(z+i\tau_1/l) = \tilde\zeta(a) - z\sum \wp(i\tau_1/l)$ などが成り立つので、そこから$F_l(\wp(z))$ の満たすべき関係式が作れる。
-
また
詳しくは [Sch1995] を参照されたい。
[CMP] https://math.mit.edu/~drew/ClassicalModPolys.html
[KIY] 小暮淳, 伊豆哲也, and 横山和弘. "Atkin, Elkies らによる Schoof のアルゴリズム改良の実装について (数式処理における理論と応用の研究)." 数理解析研究所講究録 1038 (1998): 230-243.
[Mus2005] Musiker, Gregg. "Schoof's Algorithm for Counting Points on
[Sch1995] Schoof, René. "Counting points on elliptic curves over finite fields." Journal de théorie des nombres de Bordeaux 7.1 (1995): 219-254.