如何用SageMath从椭圆曲线的A+B与A-B点反推A、B点
椭圆曲线已知点和与点差求原点点的解法
核心原理
在椭圆曲线加法群中,若已知 ( C = A+B )、( D = A-B ),则可通过群运算的逆操作推导原点点:
- ( 2A = C + D ) → ( A = \frac{1}{2}(C + D) )
- ( 2B = C - D ) → ( B = \frac{1}{2}(C - D) )
这里的(\frac{1}{2})指椭圆曲线中的点二分运算,即求解满足(2P = Q)的点(P)。
SageMath 实现步骤
- 定义曲线与已知点
替换示例中的有限域阶数(K)、曲线参数(m/n),以及已知点(C=A+B)、(D=A-B)的坐标:
# 配置你的曲线参数 K = 17 E = EllipticCurve(GF(K), [2, 3]) # 对应曲线 y² = x³ + 2x + 3 # 已知点C=(x3,y3)、D=(x4,y4),替换为你的实际坐标 C = E(5, 1) D = E(10, 6)
- 计算点A
先求(C+D),再对结果做二分运算:
Q1 = C + D A = Q1 / 2 # Sage直接支持点的除法,等价于求2A=Q1的解
- 计算点B
先求(C-D)(等价于(C + (-D))),再做二分运算:
Q2 = C - D B = Q2 / 2
- 验证结果
确认推导的点满足原条件:
print("A+B == C:", A + B == C) print("A-B == D:", A - B == D)
注意事项
- 二分运算仅在(Q1)、(Q2)不是2阶挠点(即(2Q \neq O),(O)为无穷远点)时有解;若为2阶点,可能无有效解或存在多个解。
- 当有限域特征≠2时,Sage的点除法会自动调用标量乘法逆运算,即通过计算2在乘法群中的逆元实现二分。
内容的提问来源于stack exchange,提问作者Julien
相关产品推荐
相关产品推荐

