Как открытый ключ рассчитывается из закрытого ключа, закодированного в base58?

Я следил за этим сообщением и создал закрытый ключ для биткойн-кошелька. В сообщении говорится, что после нахождения случайного 256-битного (32 байта) целого числа необходимо добавить номер версии и добавить к нему контрольную сумму. Это создает 37-байтовый шестнадцатеричный код. Теперь я пытаюсь найти открытый ключ, связанный с этим закрытым ключом. Я узнал, что ОТКРЫТЫЙ ключ рассчитывается путем применения кривой ECDSA secp256k1 к закрытому ключу. Но только 32 байта принимаются на вход алгоритмом ECDSA.
Так что я делаю неправильно?
Заранее спасибо.

Ответы (1)

Закрытый ключ — это просто сгенерированная вами энтропия в 32 байта. Между кошельками этот закрытый ключ может быть закодирован в формате, который предоставляет дополнительную информацию, такую ​​как сеть (основной/тестовый/альтернативный) и был ли использован сжатый или несжатый открытый ключ. Эта кодировка называется форматом импорта кошелька.

  • version(1B) (основная сеть 0x80/тестовая сеть 0xEF)
  • privatekey(32Б)
  • 0x01маркер сжатия (1B)
  • checksum(4Б)

https://teachbitcoin.io/wallets.html#/2

Контрольная сумма - это все, что предшествует ей. Данные, наконец, закодированы в base58.

Чтобы взять эти данные WIF и создать открытый ключ, кошельку просто нужно извлечь закрытый ключ (32B) и вычислить точку открытого ключа.

  • private_key * Generator_point = public_key(x,y)

Полученная точка открытого ключа x, y является вашим открытым ключом. Если рынок сжатия включен, возьмите координату x и добавьте к ней 0x02 или 0x03 в зависимости от того, четная она или нечетная.

  • сжатый открытый ключ:0x02/0x03 + x_coordinate(32B)
  • несжатый открытый ключ:0x04 + x_coordinate(32B) + y_coordinate(32B)
Большое спасибо .. это было очень полезно !!. Я только начинаю узнавать о блокчейне. Еще раз спасибо :)
Потрясающий! Рад, что было полезно!