Как получить открытый ключ эллиптической кривой из закрытого ключа

Итак, мне нужно получить открытый ключ от соответствующего 256-битного числа, используя ECC spec256k1.

Итак, скажем, я получаю закрытый ключ, используя sha256 из любой парольной фразы, например:

>>> import hashlib
>>> private_key = hashlib.sha3_256(b"Led Zeppelin - No Quarter").hexdigest()
>>> private_key
'c0b279f18074de51d075b152c8ce78b7bddb284e8cfde19896162abec0a0acce'

Как мне получить открытый ключ из этого закрытого ключа? Мне нужно напечатать открытый ключ в виде строки.


person Alejandro Veintimilla    schedule 07.11.2019    source источник
comment
Это не вопрос о питоне или нет? Попробуйте это: sig" title="как сгенерировать открытый ключ из закрытого ключа, используя цифровой сигнал эллиптической кривой">bitcoin.stackexchange.com/questions/32162/   -  person Raphael    schedule 07.11.2019
comment
@Raphael да, потому что мне нужно сделать это программно   -  person Alejandro Veintimilla    schedule 07.11.2019
comment
Пожалуйста, проверьте ответ.   -  person Raphael    schedule 07.11.2019


Ответы (1)


pip install fastecdsa

from fastecdsa import keys, curve,ecdsa
priv_key, pub_key = keys.gen_keypair(curve.secp256k1) 

print(pub_key)

который дает

X: 0xcc228e1a4c8e187a0deeabcd6e43bc8f7b6bdd91b8f823912f2de188fba054e6
Y: 0x7995a9d3866a8fa11a9af933c76216a908995ec5cec6ed7d3056b787fa7d39d7

Поддерживаемые примитивы

Кривые по основным полям – Источник

Name                      Class

P192 / secp192r1          fastecdsa.curve.P192  
P224 / secp224r1          fastecdsa.curve.P224  
P256 / secp256r1          fastecdsa.curve.P256  
P384 / secp384r1          fastecdsa.curve.P384  
P521 / secp521r1          fastecdsa.curve.P521 
secp192k1                 fastecdsa.curve.secp192k1     
secp224k1                 fastecdsa.curve.secp224k1     
secp256k1 (bitcoin curve) fastecdsa.curve.secp256k1     
brainpoolP160r1           fastecdsa.curve.brainpoolP160r1   
brainpoolP192r1           fastecdsa.curve.brainpoolP192r1   
brainpoolP224r1           fastecdsa.curve.brainpoolP224r1   
brainpoolP256r1           fastecdsa.curve.brainpoolP256r1   
brainpoolP320r1           fastecdsa.curve.brainpoolP320r1   
brainpoolP384r1           fastecdsa.curve.brainpoolP384r1
brainpoolP512r1           fastecdsa.curve.brainpoolP512r1
person Raphael    schedule 07.11.2019
comment
но как мне распечатать открытый ключ - person Alejandro Veintimilla; 07.11.2019
comment
открытый ключ - байт. Вам нужно сериализоваться. Я отредактировал ответ. - person Raphael; 07.11.2019
comment
Mnn, может быть, я пропустил некоторую информацию в вопросе, мне нужны координаты {x, y}, которые, как я полагаю, 256 бит. - person Alejandro Veintimilla; 07.11.2019
comment
Ох, хорошо. Есть более простой способ сделать это. - person Raphael; 07.11.2019
comment
Это то, что вы хотите? - person Raphael; 07.11.2019
comment
Большое спасибо. Это то, что мне нужно. - person Alejandro Veintimilla; 07.11.2019
comment
Я не думаю, что secp256k1 - это та же кривая, что и curve.P256. - person President James K. Polk; 08.11.2019
comment
Это только генерирует пару ключей и не демонстрирует, как вычислить открытый ключ из закрытого ключа. - person Zenul_Abidin; 16.01.2021