Аутентификация на основе ключевых пар и так давно уже придумана была, где то в конце 80х, ты немного опоздал.
Интересно. Дай ссылку на исходники, где используется - именно ECDSA.
А DSA и RSA видимо не подойдут?
Вот, даже на Вики в статье один из возможных способов применения -
ClickНо как ты определишь, мульт ли это, или два человека, через один шлюз сидят и пишут с одного IP?
Никак, поэтому и регистрация чаще всего по другому происходит.
Вот тут глянь, передаётся ли в самой строке подписи public-key, или адрес подписанта. А то там не очень понятно как-то.
Все понятно, как я и говорил:
Идет получение публичного ключа (с приватного можно получить публичный, наоборот - нельзя)
public_key = private_key.get_verifying_key()
Собственно вот подпись сообщения, как можно заметить, аргументами здесь выступает некая строка,
messagesignature = private_key.sign_digest( Hash( msg_magic( [color=green]message[/color] ) ), sigencode = ecdsa.util.sigencode_string )
Дальше там указывается адрес, и в принципе все. Вот тебе более короткий и понятный код:
# SECP256k1 is the Bitcoin elliptic curve
sk = ecdsa.SigningKey.generate(curve=ecdsa.SECP256k1)
vk = sk.get_verifying_key()
sig = sk.sign(b"message")
vk.verify(sig, b"message") # True
Идет генерация закрытого ключа sk (signing key), с него получаем открытый ключ vk (verifying key), проводим подпись sig с помощью закрытого ключа а верифицируем с помощью открытого.
Открытый ключ всегда передается отдельно,
сертификатом где помимо ключа указано какой алгоритм (ECDSA, RSA, DSA или что-то другое) использовался.
Скорее всего, они уже включены в подпись, но я чё-то не вижу где.
Как можно заметить выше - нет. Да это и по логике видно, подпись == шифрование. Если ты зашифруешь что-то ключиком который только закрывает, то получить это что-то без ключика который открывает нельзя. А если ты этот ключик который открывает положил в сундучок, а потом закрыл ключом который закрывает, то все.