Pebble Coding

ソフトウェアエンジニアによるIT技術、数学の備忘録

素体Fp上の楕円曲線 y^2 = x^3 + D の有理点の数

 {y}^{2} = {x}^{3} + Dの素体 F_p上の有理点の数を調べます。
楕円曲線Eの有理点の数を#Eと書きます。

素数pを3で割って2余る場合は、有理点の数は無限遠点を含み、#E= p + 1 であることが知られています。

 {y}^{2} = {x}^{3} + 7の場合の、有理点の数をpythonで調べた結果がこちらです。

p, p mod 3, #E
2, 2, 3 = (p+1)
3, 0,4
5,2,6
7,1,8
11,2,12 = (p+1)
13,1,7
17,2,18 = (p+1)
19,1,12
23,2,24 = (p+1)
29,2,30 = (p+1)
31,1,21
37,1,39
41,2,42 = (p+1)
43,1,31
47,2,48 = (p+1)

確かにp mod 3 = 2 の場合は成り立っていることが分かります。
この曲線はsecp256k1で使われている曲線ですが、secp256k1の素数
q = {2}^{256} - {2}^{32} - 977 = {2}^{256} - {2}^{32} - {2}^{9} - {2}^{8} - {2}^{7} - {2}^{6} - {2}^{4} - 1 はどうなっているでしょうか?
q mod 3 = 1
残念ながら余りが1なので、単純な式では出てきません。

pを3で割って1余る場合の有理点の数を算出する計算式は知られていますが、6乗根と、2次体を使った複雑なものです。
興味がある方は参考の文献を参照ください。難しすぎて鼻血が出るレベルです。。

有理点の数の計算はこちらのpythonコードを使いました。

pebble8888.hatenablog.com

参考: Kenneth Ireland Michael Rosen / A Classical Introduction to Modern Number Theory Springer-Verlag 1990