Что такое открытый ключ из 130 шестнадцатеричных символов?

Я зашел на https://www.bitaddress.org , и на последней вкладке есть место для ввода закрытого ключа, и он показывает различные форматы открытых и закрытых ключей.
Мне странно, что открытый ключ может быть либо 33 Base58, либо 130 Base16. Это кажется неправильным, тем более что закрытый ключ — 51 Base58 или 64 Base16, что имеет смысл.

Так что дает? Вот принтскрин:

Биткойн-адрес (33 или 34 символа, начинается с «1»): 1EHNa6Q4Jz2uvNExL497mE43ikXhwF6kZm.

Открытый ключ (130 символов [0-9A-F]): 0479BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F8179 8483ADA7726A3C4655DA4FBFC0E110FF8A8FD17B448A68554198C10D08

Шестнадцатеричный формат закрытого ключа (64 символа [0-9A-F]): XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Что заставляет вас думать, что открытый ключ может быть 33 с основанием 58? Этого точно быть не может.
Он думал, что его биткойн-адрес — это то же самое, что и его открытый ключ, только в другом формате, а не просто хэш его открытого ключа, содержащий гораздо меньше информации.

Ответы (2)

Закрытые ключи Биткойн имеют размер 32 байта, но часто хранятся в полной сериализованной форме OpenSSL размером 279 байтов. Они сериализованы как 51 символ base58 или 64 шестнадцатеричных символа.

Открытые ключи Биткойн (традиционно) составляют 65 байт (первый из которых 0x04). Обычно они кодируются как 130 шестнадцатеричных символов.

Сжатые открытые ключи Биткойн (по состоянию на 0.6.0) составляют 33 байта (первый из которых 0x02 или 0x03). Обычно они кодируются как 66 шестнадцатеричных символов.

Биткойн-адреса: RIPEMD160 (SHA256 (публичный ключ)), 20 байт. Обычно они кодируются как 34 символа base58.

Итак, позвольте мне проверить мое понимание: закрытый ключ составляет 32 байта, а открытый ключ имеет компоненты x и y какой-то магической кривой, что делает его 64 байта. Я предполагаю, что в первые дни они использовали полный открытый ключ. Это было хорошо, но для предотвращения случайного неправильного использования требовалась контрольная сумма и префикс. Но когда они добавили это, оно стало слишком длинным, люди жаловались, поэтому они добавили немного сжатия и сократили его. То, что мы сейчас называем биткойн-адресом, теперь составляет 20 байт. Это примерно правильно?
Обратите внимание, что точечное сжатие (превращение 65-байтового публичного ключа в 33-байтовый) — это не то же самое, что хеширование (которое делается для адресов).
Кроме того, хеширование и добавление контрольной суммы всегда выполнялось в адресах. Просто изначально адреса не предназначались для использования в качестве нормы для выполнения транзакций (с использованием «IP-транзакций», которые напрямую согласовывали публичный ключ).

Ваш открытый ключ состоит из 65 байтов данных : начальный байт 0x04, за которым следуют 32 байта для координаты X и 32 байта для координаты Y точки, которую он представляет. Для отображения полного ключа требуется 130 шестнадцатеричных символов по 4 бита на символ.

Ваш биткойн-адрес — это хэш вашего открытого ключа. Это немного сложнее , включая несколько хэшей и встроенную контрольную сумму , но в основном это правда.

Невозможно перейти с вашего биткойн-адреса на ваш открытый ключ. Существует множество открытых ключей с одним и тем же биткойн-адресом. Соответствующий приватный ключ может потратить средства на этот адрес, если средства были отправлены через официальный клиент. Невероятно сложно найти пару ключей с тем же биткойн-адресом, что и существующий адрес. Проверка возможности расходования средств, отправленных на биткойн-адрес, выглядит следующим образом:

Получатель вывода транзакции:

  • должен предоставить открытый ключ, который хэшируется на адрес, указанный создателем этой транзакции, и
  • должен быть в состоянии продемонстрировать, что он владеет соответствующим закрытым ключом, подписав им свою новую транзакцию

Ни в коем случае не проверяется, что у отправителя есть тот же открытый ключ, что и у предполагаемого получателя. Действительно, создатель транзакции не знает открытый ключ предполагаемого получателя, а знает только его биткойн-адрес.

Проверьте (новую) первую ссылку на мой ответ. Я связал его со страницей ECDSA вики, где говорится о размерах ключей.
Сжатые открытые ключи, которые будут использоваться с биткойна 0.6.0, составляют всего 33 байта.