Генератор открытых ключей на Python (криптография на основе эллиптических кривых SECP256K1)Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Генератор открытых ключей на Python (криптография на основе эллиптических кривых SECP256K1)

Сообщение Anonymous »

В настоящее время я новичок в Python и криптографии. Как я узнал, я пытаюсь создать открытый ключ эллиптической кривой SECP256K1 вручную (без использования соответствующей библиотеки) из случайно сгенерированного закрытого ключа. Метод генерации закрытого ключа бесплатный. Важен процесс создания из него открытого ключа.
Вот что у меня есть.

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

import random
import os
import time
import hashlib

def generate_private_key():
global P
while(True):
key=str(random.random())+str(os.urandom(100))+str(time.time())
key=hashlib.sha256(key.encode())
key=int(key.hexdigest(),16)
if(P>key):
return key

def generate_public_key(private_key):
global G
global P
bit=list(bin(private_key)[2:])
point=(0,0)
for i in bit:
if i=='0':
point=point_double(point, P)
elif i=='1':
point=point_double(point, P)
point=point_add(point,G, P)
return point

#Extended Euclidean Algorithm
def inverse(b,n):
r1=n
r2=b
t1=0
t2=1
while(r2>0):
q=r1//r2
t=t1-q*t2
t1=t2
t2=t
r=r1-q*r2
r1=r2
r2=r
if t1>0: return t1
else: return t1+t2

def point_double(point, P):
(x,y)=point
lam=3*(x**2)*inverse(2*y,P)
xsum=lam**2-x*2
ysum=lam*(x-xsum)-y
return xsum%P, ysum%P

def point_add(p1, p2, P):
(x1,y1)=p1
(x2, y2)=p2
if x1==x2 and y1==y2:
return point_double(p1)

lam=(y2-y1)*inverse(x2-x1, P)
xsum= lam**2-(x1+x2)
ysum= lam*(x1-xsum)-y1
return xsum%P, ysum%P

P=0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F

G = (0x79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798,
0x483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8)

private_key=generate_private_key()

#my private key
print(hex(private_key))

#public key
print(generate_public_key(private_key))

Я сравниваю результат своего кода с результатом этого веб-сайта: https://paulmillr.com/noble/
Однако я не могу получить тот же открытый ключ из тот же закрытый ключ.
Я думаю, вот этот процесс:
  • Создайте случайный закрытый ключ.
    Создайте открытый ключ, используя (закрытый ключ * a фиксированная точка G)
2-1. Используйте метод Double-and-Add, чтобы избежать суммирования G [закрытого ключа], поскольку оба числа слишком велики для этого.
2-2. Все дополнения сопровождаются (mod P). P тоже очень большое фиксированное число.
2-3. Не все подразделения являются подразделениями в буквальном смысле слова. Это инверсия (mod P). Решение обратного числа (mod P) выполняется с помощью расширенного алгоритма Евклида («обратная» функция в коде).
Поскольку я не был уверен, куда поместить «%P» кода, я попробовал несколько мест, вставив «%P», но пока безуспешно, и в итоге получил текущий код. Я не мог проверить результат шаг за шагом, потому что цифры и объем процесса были слишком большими.

Подробнее здесь: https://stackoverflow.com/questions/757 ... yptography
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Криптография эллиптических кривых с помощью Python в Windows
    Anonymous » » в форуме Python
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Уполовинивание точки в криптографии на эллиптических кривых
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Как подписать данные с помощью закрытого ключа ECDSA с помощью кривой P-256 (secp256k1) в Android Kotlin?
    Anonymous » » в форуме Android
    0 Ответы
    40 Просмотры
    Последнее сообщение Anonymous
  • Нужна помощь в создании кривых на основе позиций сет -кафедры (Maya/Python)
    Anonymous » » в форуме Python
    0 Ответы
    4 Просмотры
    Последнее сообщение Anonymous
  • Криптография Python генерирует CSR с вызовом раздела атрибутов
    Anonymous » » в форуме Python
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

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