. 1.已知点G=(2,7)在椭圆曲线E11(1,6)上,求2G和3G。
时间: 2024-03-18 20:44:55 浏览: 348
根据椭圆曲线的加法规则,可以通过将点 G 与自身相加得到 2G,再将点 G 与 2G 相加得到 3G。
首先,计算斜率 k = (3x1^2 + a) / 2y1,其中 x1 = 2,y1 = 7,a = 11。
k = (3*2^2 + 11) / (2*7) = 29/14
然后,计算 x3 = k^2 - 2x1 = (29/14)^2 - 4 = 117/49
计算 y3 = k(x1 - x3) - y1 = (29/14)(2 - 117/49) - 7 = -958/343
因为椭圆曲线是对称的,所以2G 的另一个解是 (x3, -y3)。
因此,2G = (117/49, 958/343) 和 (117/49, -958/343)。
接下来,我们将点 G 与 2G 相加来得到 3G。
计算斜率 k = (y2 - y1) / (x2 - x1),其中 x1 = 2,y1 = 7,x2 = 117/49,y2 = 958/343。
k = (958/343 - 7) / (117/49 - 2) = -29/21
计算 x3 = k^2 - x1 - x2 = (-29/21)^2 - 2 - 117/49 = 340/441
计算 y3 = k(x1 - x3) - y1 = (-29/21)(2 - 340/441) - 7 = -2975/9261
因为椭圆曲线是对称的,所以3G 的另一个解是 (x3, -y3)。
因此,3G = (340/441, 2975/9261) 和 (340/441, -2975/9261)。
相关问题
对E11 (1,6)上的点G=(2,7),计算2G,3G,4G,5G的值。
给定E11上的椭圆曲线方程为:$y^2=x^3+x+6$,点G=(2,7)。
首先计算2G的值:
计算斜率$k=\frac{3x^2+1}{2y}=\frac{3\cdot2^2+1}{2\cdot7}=\frac{13}{14}$。
然后根据加法公式计算2G的值:
$x_2=k^2-x_1-x_1= \left(\frac{13}{14}\right)^2-2-2=-\frac{489}{196}$
$y_2=k(x_1-x_2)-y_1=\frac{13}{14}(2+\frac{489}{196})-7=\frac{345}{196}$
因为$(x_2,y_2)$不在E11上,需要将其变换到E11上。计算$x_2^{-1}\bmod{11}$的值为$5$,则
$x_2=5(-\frac{489}{196})=4$
$2G=(4,6)$。
接下来,我们可以用类似的方法计算3G、4G和5G的值:
- 3G=2G+G
- $k=\frac{y_2-y_1}{x_2-x_1}=\frac{3}{4}$
- $x_3=k^2-x_1-x_2=\frac{25}{16}-4-4=-\frac{39}{16}$
- $y_3=k(x_1-x_3)-y_1=\frac{3}{4}(4+\frac{39}{16})-6=\frac{63}{16}$
- $3G=(-\frac{39}{16}, \frac{63}{16})$
- 4G=2(2G)
- $k=\frac{y_2-y_1}{x_2-x_1}=\frac{5}{9}$
- $x_4=k^2-x_2-x_2=\frac{25}{81}-4-4=-\frac{332}{81}$
- $y_4=k(x_2-x_4)-y_2=\frac{5}{9}(4+\frac{332}{81})-\frac{345}{196}=\frac{935}{81}$
- $4G=(-\frac{332}{81}, \frac{935}{81})$
- 5G=4G+G
- $k=\frac{y_4-y_1}{x_4-x_1}=\frac{11}{9}$
- $x_5=k^2-x_1-x_4=\frac{121}{81}-4+\frac{332}{81}=\frac{373}{81}$
- $y_5=k(x_1-x_5)-y_1=\frac{11}{9}(2-\frac{373}{81})-7=-\frac{34883}{6561}$
- $5G=(\frac{373}{81}, -\frac{34883}{6561})$
因此,2G=(4,6),3G=(-39/16,63/16),4G=(-332/81,935/81),5G=(373/81,-34883/6561)。
已知椭圆曲线E11(1,6)表示 y2 = (x3 + x + 6) mod 11,用python编程求出该曲线上所有的点。
在Python中,我们可以使用elliptic_curve库来处理椭圆曲线。但是,对于模数较小的情况(如11),直接计算所有点可能会非常耗时,因为每个点都需要通过逐个尝试所有可能的x值来找到对应的y值,而这个集合通常是无限的,除非曲线有特殊性质(比如存在无穷远点)。对于这种简单的曲线,更常见的做法是使用更高效的算法,例如Baby-step Giant-step。
以下是一个基本的示例,展示如何遍历可能的x值并检查它们是否满足曲线方程:
```python
def find_points_on_curve(E11):
p = 11
a = 0
b = 6
points = []
def point(x):
y_square = ((x**3 + a*x + b) % p)**(p+1) % p
if y_square == 0 and x != 0 and x ** 2 != -b % p:
return (x, int(y_square ** 0.5)) # 返回合法的点对,注意模p取整
for i in range(1, p): # 取模11是因为我们只关心小于p的x值
point_x = point(i)
if point_x:
points.append(point_x)
# 包含原点O=(0,0)
points.append((0, 0))
return points
# 计算E11的所有点
all_points = find_points_on_curve((1, 6))
print("椭圆曲线E11上的所有点:", all_points)
阅读全文
相关推荐

















