В криптографии эллиптических кривых есть скалярное умножение с использованием сложения и удвоения точек.
Существует ли вообще разделение точек пополам. Проще говоря, если точка равна P, то есть ли способ получить точку P/2
Я использовал следующий код Python. Не могли бы вы помочь мне изменить код, чтобы я мог выполнить идеальную операцию выделения?
from sympy import mod_inverse, isprime
# secp256k1 parameters
p = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F
a = 0
b = 7
# Elliptic curve point doubling formula
def point_doubling(x, y, p):
# Slope lambda for point doubling
lambda_ = (3 * x**2 + a) * mod_inverse(2 * y, p) % p
x_r = (lambda_**2 - 2 * x) % p
y_r = (lambda_ * (x - x_r) - y) % p
return x_r, y_r
# Point halving function
def point_halving(x_P, y_P, p):
# Solve for x_Q such that x_P = lambda^2 - 2x_Q (mod p)
for x_Q in range(p):
# Check if y_Q exists
y_Q_squared = (x_Q**3 + a * x_Q + b) % p
y_Q = pow(y_Q_squared, (p + 1) // 4, p) # Modular square root
# Check if 2Q = P
if y_Q and point_doubling(x_Q, y_Q, p) == (x_P, y_P):
return x_Q, y_Q
return None
# Generator point G (compressed coordinates from secp256k1 spec)
x_G = 55066263022277343669578718895168534326250603453777594175500187360389116729240
y_G = 32670510020758816978083085130507043184471273380659243275938904335757337482424
# Halve the generator point
Q = point_halving(x_G, y_G, p)
print("Halved point Q:", Q)
Подробнее здесь: https://stackoverflow.com/questions/793 ... yptography
Уполовинивание точки в криптографии на эллиптических кривых ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение