The recurrence of points like (1, 2) on various elliptic curves is due to their structure and properties.
As elliptic curves are typically defined over fields like the real numbers or finite fields and their equation generally follows the form :
y^2 = x^3 + ax + b. For a point (1, 2) to satisfy multiple curves, the coefficients
a and
b must align accordingly.
For curves of the form
y^2 = x^3 + b, substituting x = 1 and y = 2 gives us
2^2 = 1^3 + b, leading to
b = 3.
This process can be repeated for any value of
b to check if a particular point lies on the curve.
Python Script for Analyzing Points on Elliptic Curves:
import matplotlib.pyplot as plt
import numpy as np
def is_on_curve(x, y, b):
return y**2 == x**3 + b
def plot_elliptic_curves(b_values, points, x_range):
fig, ax = plt.subplots(figsize=(12, 8))
x = np.linspace(x_range[0], x_range[1], 400)
for b in b_values:
y_squared = x**3 + b
y_positive = np.sqrt(y_squared)
y_negative = -y_positive
ax.plot(x, y_positive, label=f"y² = x³ + {b}")
ax.plot(x, y_negative, label=f"_")
for point in points:
if is_on_curve(point[0], point[1], b):
ax.plot(point[0], point[1], 'ro')
ax.set_xlabel("x")
ax.set_ylabel("y")
ax.set_title("Elliptic Curves and Points")
ax.legend()
plt.grid(True)
plt.show()
b_values = range(1, 11)
points_to_test = [(1, 2), (1, 3), (2, 3), (2, 4)]
x_range = (-2, 3)
plot_elliptic_curves(b_values, points_to_test, x_range)
This script can be expanded to test a larger set of points and a broader range of
b values.
Results :
For
b = 1, the point (2, 3) lies on the curve
y^2 = x^3 + 1.
For
b = 3, the point (1, 2) lies on
y^2 = x^3 + 3, as in your example.
For
b = 8, the points (1, 3) and (2, 4) lie on
y^2 = x^3 + 8.
No points tested lie on the curves for
b = 2, 4, 5, 6, 7, 9, 10.
This script can be expanded to test a larger set of points and a broader range of
b values.
Your observation about even private keys generating valid x coordinates but invalid y coordinates for secp256k1 is interesting. It suggests a possible pattern or property of the curve that might be worth exploring
The use of a specific value like lambda to create a triangle and the effects on the x coordinates is a part of exploring the geometrical properties of elliptic curves. The invariant y coordinate in your experiments is peculiar and might be an artifact of the specific curve and values you're using.
While it's theoretically possible to reverse-engineer
k from
P and
G, the computational power required makes it impractical I believe.
Magic.