楕円曲線の有理点の数の求め方 schoof アルゴリズムその1 - Pebble Coding
の続きです。
を素数 l=2, 3, 5, ...について計算するアルゴリズムは以下の通りです。
素体, 楕円曲線とします。
まず、l=2の場合は、の値が1かどうか調べます。
ここでgcdはxの素体上の1変数多項式での最大公約数を意味します。
値が1の場合は 、1でない場合はとなり完了です。
残りはl=3以上の場合です。
a) を求めます。
b) に対して以下を実行します。
b-i) (x, y) のj等倍点のx, yの2変数多項式を計算し、とします。
ここではまだだけ計算すればよく、はあとでもよいです。
j等倍点の多項式の具体的な表現は複雑なのでここでは省略し次の記事に回します。
b-ii) のx'を計算します。
というのは除法多項式(division polynomial)と呼ばれるx, yの2変数多項式で、
楕円曲線の係数A, Bから一意的に決まるものですが、具体的な表現は複雑なので省略し次の記事に回します。
係数が奇数の場合はxのみの多項式となりますがlは奇素数なので、xの多項式です。
真ん中のプラスは楕円曲線の2点の加法を表します。
ここでの2点は等しくないと仮定してよいです。
2点が等しい場合は、d)以降のロジックでカバーするようになっています。
というのは、上のx, yの2変数多項式でのモジュラ演算を意味します。
は点(x, y)を倍した点という意味です。
2変数多項式であるx'を計算したら、
が成り立つかどうか調べます。
成り立つ場合はb-iii)へ進みます。成り立たない場合は、次のjに対してb-i)を行います。
全てのjに対して成り立たない場合はd)へ進みます。
b-iii) y'とを計算します。どちらも、yが係数につくことがわかっていますので、
が成り立つか調べます。
成り立つ場合は、成り立たない場合はで完了です。
d) を満たすwが存在するか計算します。
存在しない場合はとなり完了です。
存在する場合はe)へ進みます。
e) w等分点のx座標を求めます。 が1かどうか調べます。
1の場合は、で完了です。
1でない場合は、 を計算します。
1の場合は、で完了、
1でない場合は、で完了です。
素体上の多項式の計算が山ほど出てきて、手計算でやるにはしんどいですね。
実際には、プログラミング言語やsageなど多項式を扱えるシステムを使うことになります。
schoofのアルゴリズムはベビーステップジャイアントステップ法よりも効率がよいことが知られています。
現在、暗号に利用されている170bitを超える素体上の楕円曲線の位数はSchoof法を改良したSchoof-Elkies-Atkinsで計算されているようです。
http://memoirs.is.kochi-u.ac.jp/Vol28/MemoirsF28-1.pdf
補足
が根を持つとすると、を満たすeがあり、
点P(e, 0)が曲線上の点になり、P+P = Oです。
P + P = 0つまり2P = Oなので、2倍点です。
この2倍点が存在するので、Oと合わせて、{P, O}が位数2の部分群をなすことになります。
ラグランジュの定理により楕円曲線の有理点の個数#Eは部分群の位数の倍数になるので、#Eは2の倍数だと分かります。
#E=q+1-aで#Eが偶数、qは奇数なのでaは偶数と確定します。
有限体の理論より、を満たすxはの要素なので、
が で根を持つとき、の根でもあります。
したがって、がで割り切れるとき、はに根を持ちます。
なので、かどうかを調べればよいことが分かります。