python ecdsa — Как получить открытый ключ из подписи и сообщения

#python #cryptography #ecdsa

Вопрос:

Учитывая подпись и сообщение, должна быть возможность получить открытый ключ. Как это можно сделать с ecdsa помощью библиотеки на python или, в более общем плане, как это можно сделать на python с использованием любой библиотеки?

Прямо сейчас у меня есть что-то вроде

 from ecdsa import SigningKey, SECP256k1

sk = SigningKey.generate(curve=SECP256k1)
vk = sk.verifying_key

msg = b"Some arbitrary message"
signature = sk.sign(msg)

print("Signing (Private) key: ", sk.to_string().hex())
print("Verifying (Public) key: ", vk.to_string().hex())
print("Signature: ", signature.hex())
print(vk.verify(signature, msg))
 

это подписывает и подтверждает сообщение, которое отлично, но я ищу что-то вроде

 vk2 = vk_from_signature(signature, msg, curve=SECP256k1)
if vk.to_string().hex() == vk2.to_string().hex():
    print("SUCCESS")
 

Комментарии:

1. Восстановление открытого ключа описано в разделе 1, стр. 47 и здесь . Библиотека ecdsa предоставляет Signature#recover_public_keys() метод, который определяет ключи-кандидаты. Для дополнительной поддержки, вероятно, представляют интерес библиотеки Python с отношением к биткоину или Эфириуму .