如果您有以下形式的椭圆曲线:
y^2 = x^3 + a*x + b (mod p)
有没有一个好的程序来计算这条曲线上的点数?
我已阅读有关 Schoof 和 Schoof-Elkies-Atkin (SEA) 算法的信息,但我正在寻找开源实现。有谁知道可以做到这一点的好程序?
此外,如果 a 为 1,b 为 0,则无法使用 SEA 算法,因为 j 不变量为 0。这是正确的吗?
如果您有以下形式的椭圆曲线:
y^2 = x^3 + a*x + b (mod p)
有没有一个好的程序来计算这条曲线上的点数?
我已阅读有关 Schoof 和 Schoof-Elkies-Atkin (SEA) 算法的信息,但我正在寻找开源实现。有谁知道可以做到这一点的好程序?
此外,如果 a 为 1,b 为 0,则无法使用 SEA 算法,因为 j 不变量为 0。这是正确的吗?
你听说过圣人吗?
Sage 包括 Pari,这是一个数论的开源软件包。Pari 有一个 SEA 的实现。
sage: k = GF(next_prime(10^20))
sage: E = EllipticCurve(k.random_element())
sage: E.cardinality() # less than a second
100000000005466254167
为此,我也一直在使用 Mike Scotts 程序(miracl)。只是好奇,我可能会问:您可以使用该软件生成的具有主要组顺序的域有多大?我升到了 1024 位,现在退出了,因为我需要我的办公室 PC 来连续数周运行点计数软件以外的东西。您是否制作了更大的域?如果是这样,我会很高兴获得域参数,如果您没有异议,请将它们包含在我的 ECC 软件学术签名中。
我的域可以在这里找到ECC 域页面。使用它们的软件可从此处访问手册,带有下载页面的链接
问候。
我试过圣人。我花了大约 3-4 个小时编译到 x64 ubuntu。这似乎是一个很好的程序。但是当 j-invariant 为 0 时,不能使用 SEA 算法,如果 p/k 使用较大的值,似乎会出现一些问题。
在搜索了更多之后,我还发现了 miracl:http ://www.shamus.ie/index.php?page=elliptic-curves 他们对普通的 Schoof 和 SEA 算法都有实现。但是这个程序在使用大输入值时也存在一些问题。运行 3-4 小时后,它崩溃了:/。我试图修复它,目前它正在再次运行,所以希望它会起作用。
编辑:它现在工作。上面链接中的程序与 Rasmus Faber 给出的程序相同。
这里有一些链接: P1363 草案部分的实现(本页的回溯备份链接)。