SageMath构造椭圆曲线同源遇参数错误,求正确实现方法
椭圆曲线同源构造错误分析与解决
错误原因
- 多项式环不匹配:你创建了四元多项式环
R.<x,y,z,t>,但E.isogeny()要求核多项式必须是椭圆曲线基域(GF(43))上的单变量多项式(即GF(43)[x]的元素),多变量环的元素无法被函数解析。 - 核多项式结构无效:你的多项式
(x-37)^2*(x-40)^2存在冗余重数,椭圆曲线同源的核是有限子群,子群中非单位点的x坐标作为多项式根时,无需重复平方——这种错误的重数会导致函数无法识别对应的合法子群。
正确构造方式
方式1:通过子群生成元直接构造
先定位目标核子群的生成元,将生成元或子群对象传入E.isogeny():
# 初始化基域与椭圆曲线 F = GF(43) # 用Weierstrass标准形式定义曲线(对应y² = x³ -14x² -6x +17) E1 = EllipticCurve(F, [-14, -6, 0, 0, 17]) # 找到核子群的2阶点(对应你多项式中的根) # 求解y=0时的x根,即2阶点的x坐标 poly = x^3 -14*x^2 -6*x +17 roots = poly.roots(F) P = E1(roots[0][0], 0) Q = E1(roots[1][0], 0) # 生成目标子群(论文示例2.5中的4阶子群) target_subgroup = E1.subgroup([P, Q]) # 构造同源 phi = E1.isogeny(target_subgroup)
方式2:使用合法的单变量核多项式
若坚持用核多项式构造,需确保多项式是核子群所有非单位点x坐标的无重数乘积:
# 定义单变量多项式环 R.<x> = F[] # 计算P+Q的x坐标(子群中的第三个非单位点) PQ = P + Q # 构造核多项式:包含所有非单位点的x坐标 kernel_poly = (x - P[0]) * (x - Q[0]) * (x - PQ[0]) # 生成同源 phi = E1.isogeny(kernel_poly)
关键注意事项
E.isogeny()的核多项式参数,其根必须严格对应核子群中所有非单位点的x坐标:2阶点(y=0)仅对应一个根,非2阶点则每个x坐标对应两个点(±y),但多项式只需包含一次该x因子。- 始终使用曲线基域上的单变量多项式环,不要引入无关变量。
内容的提问来源于stack exchange,提问作者stillconfused
相关产品推荐
相关产品推荐

