anomalous curve

EllipticCurveにおいて、 E(F_p).order() == pであるようなもの、flobenious traceが1であるような曲線。このような曲線に対しては、SSSAAttackSmart Attackによって、離散対数問題が多項式時間で解ける

楕円曲線 E(F_p)の位数が pであるとき、そのような panomalous primeといい、また、 y^x \equiv x^3 + B \mod pの形のanomalous curve(Bachet anomalous curve)が存在する pを特にBachet anomalous primeと言う。Bachet anomalous primeは必ず中心つき六角数(centered hexagonal number)の形( 3x^2 + 3x + 1)の形をしており、また、逆も然りである(中心つき六角数が素数または素数の冪乗なら、かならずその値にたいしてanomalous curveが存在する)。

(ちなみに、Tidjeman-Zagier Conjectureより p^r = (n+1)^3 - n^3を満たすような r r = 1, 2のみである)

これを使ったanomalous curveの構築はこちら

# https://math.boisestate.edu/reu/publications/AnomalousPrimesAndEllipticCarmichaelNumbers.pdf

from sage.all import *
while True:
    n = ZZ.random_element(2**200)
    p = (n + 1) ** 3 - n ** 3
    if is_prime(p):
        break

for i in range(1,100):
    E = EllipticCurve(GF(p), [0, i])
    if E.order() == p:
        print(0)
        print(i)
        print(p)
        g = E.gens()[0]
        print(g[0])
        print(g[1])

わからんけど次のようにすると 好きなj-invariant を持ったanomalous curveが構築できるらしい。

  • discriminant dを選ぶ。 d \equiv 3 \mod 8なら s = 1、そうでなければ s = -1とする。多くの場合で d = 3, s = 1とするらしい

* p = 1 + dt^2, p \equiv 0 \mod 4を満たすように tを探索して pを決める

* a = 27d (j)^\frac{1}{3} \mod p, b = 54sd\sqrt{d(12^3 - j)} \mod p とする

http://www.monnerat.info/publications/anomalous.pdf