Эллиптическая кривая двойная и добавление реализации в PythonPython

Программы на Python
Ответить
Anonymous
 Эллиптическая кривая двойная и добавление реализации в Python

Сообщение Anonymous »

Я пытаюсь реализовать алгоритм «удвоить и сложить» для быстрого умножения точек на эллиптической кривой в Python (3, пожалуйста).

На основе предыдущего ответ (о сложении и удвоении),

Сложение точек эллиптической кривой над конечным полем в Python

Википедия страница,

https://en.wikipedia.org/wiki/Elliptic_ ... iplication

и мой учебник («Информационная безопасность», Марк Стэмп) я придумал следующий код:

Код: Выделить всё

def point_add(N_x, N_y, Q_x, Q_y, p):
m = (Q_y - N_y) * pow((Q_x-N_x), p-2, p)
ret_x = (m ** 2 - N_x - Q_x) % p
ret_y = (m*(N_x - ret_x) - N_y) % p
return ret_x, ret_y

def point_double(N_x, N_y, a, p):
m = (3*(N_x ** 2)+a) * pow(2*N_y, p-2, p)
ret_x = (m ** 2 - N_x - Q_x) % p
ret_y = (m*(N_x - ret_x) - N_y) % p
return ret_x, ret_y

multiplier_A = 44
multiplier_B = 57
a = 10
b = -21
p = 41
N_x = 3
N_y = 6
Q_x = 0
Q_y = 0

multiplier_A = list(bin(multiplier_A)[2:])
multiplier_B = list(bin(multiplier_B)[2:])

for x_a in multiplier_A:
if x_a == '1':
Q_x, Q_y = point_add(N_x, N_y, Q_x, Q_y, p)
N_x, N_y = point_double(N_x, N_y, a, p)

print(Q_x, Q_y)
Что, конечно же, возвращает неверный результат.

Где я ошибаюсь? Новая реализация с нуля также приветствуется.

ОБНОВЛЕНИЕ

Я хотите умножить точку (3,6) на multiplier_A и multiplier_B. Сейчас я пытаюсь использовать только multiplier_A(3,6).
, b и p — параметры эллиптической кривой

Подробнее здесь: https://stackoverflow.com/questions/525 ... -in-python
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»