Как кошелек получает открытый ключ с адреса?

У меня сложилось впечатление, что адреса — это просто закодированные, хэшированные открытые ключи с префиксом и что в блокчейне используется только открытый ключ (а не адрес) для транзакций. Но если публичный ключ хешируется, как кошелек получает публичный ключ от адреса для создания транзакции?

Я провел некоторые исследования, которые подтвердили мои сомнения , что это невозможно . Поэтому мне было интересно, как кошелек создает транзакцию, если у него нет открытого ключа?

РЕДАКТИРОВАТЬ: я имею в виду, как кто-то, пытающийся отправить 10 BTC, получает открытый ключ получателя для оплаты открытого ключа от получателей по адресу. Я полностью понимаю криптографический элемент пар частного и открытого ключей и то, как тратится биткойн, а не то, как открытый ключ получателя получается из адреса. То, что я видел, это то, что (чаще всего) транзакции оплачиваются хэшем открытого ключа (P2PKH), а не тем, что я изначально думал, что все txns оплачиваются открытым ключом (P2PK).

Ответы (4)

Проще говоря, вы этого не сделаете. Адрес представляет собой хэш открытого ключа с контрольной суммой и префиксом (1). Причина, по которой адреса не являются просто открытыми ключами, неизвестна, вам придется спросить об этом сатоши, однако это, вероятно, сделает их короче. У BTC есть P2PK, но он редко используется, поскольку открытый ключ намного длиннее адреса. Надеюсь это поможет!

Возможно, вас смущает фраза «кошелек», так как только кошелек получателя должен знать открытый ключ, и он у него есть, потому что он создал адрес в первую очередь.

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

В обычном рабочем процессе участвуют два кошелька. Назовем их Сьюзи (отправитель) и Руди (получатель).

  • Руди генерирует закрытый ключ x.
  • Руди вычисляет открытый ключ, соответствующий x, называемый P.
  • Руди вычисляет адреса A, соответствующие P, хешируя их.
  • Руди отправляет А Сьюзи (отправляя лично, или размещая на веб-сайте, или показывая в виде QR-кода, или...).
  • Suzy создает транзакцию, которая содержит выходные данные, адресованные A. Suzy понятия не имеет, какому открытому ключу A соответствует A, но ему все равно. Этот адрес действительно кодирует «требуется открытый ключ и действительная подпись для этого ключа, а хэш открытого ключа должен быть A».
  • Suzy транслирует транзакцию в сеть, где ее подхватывают майнеры, которые помещают ее в блок, завершая передачу.
  • Теперь, когда Руди хочет потратить монеты, которые он получил от Сюзи, ему нужно выполнить условие, которое Сюзи поставила в транзакции. Для этого требуется открытый ключ P (поскольку это единственный известный открытый ключ, хэш которого равен A) и подпись, созданная с использованием закрытого ключа x (это единственный закрытый ключ, который может создавать подписи, действительные для P). К счастью, у Руди есть и x, и P, потому что он их создал.
Спасибо, я всегда думал, что сделки, где P2PK.
Просто чтобы прокомментировать, что хэш публичного ключа не является адресом. Адрес представляет собой двойной хэш публичного ключа [ т.е. pubkeyhash=sha256(pubkey), address=sha256(pubkeyhash)=sha256(sha256(pubkey))=sha256d(pubkey) ]
@Jose В общепринятой терминологии «хэш публичного ключа» относится к SHA256 + RIPEMD160.
У меня был тот же вопрос о том, как кошельки получают хэш ключа паба с адреса. Вот красивая диаграмма, которая иллюстрирует возможность перехода от биткойн-адреса к хэшу открытого ключа и обратно — Learnmeabitcoin.com/guide/p2pkh

У меня сложилось впечатление, что адреса просто закодированы

Да, адреса закодированы (base58 или base32) для удобства чтения человеком. Они включают контрольную сумму для обеспечения защиты от ошибок при записи и вводе адреса. Биткойн-адрес может представлять владельца пары закрытый/открытый ключ или любой другой скрипт, который может быть представлен через P2SH или P2WSH.

Но если публичный ключ хешируется, как кошелек получает публичный ключ от адреса для создания транзакции?

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

Однако у вас может быть кошелек только для просмотра, если вы опасаетесь использовать закрытые ключи на устройстве, подключенном к сети. Кошелек только для просмотра позволяет вам наблюдать за тем, что происходит с этими биткойнами из холодного хранилища, не раскрывая приватные ключи онлайн-миру. Это включает в себя импорт вашего основного открытого ключа на уровне учетной записи, который помогает вам создавать разные адреса для этой учетной записи. С помощью главного открытого ключа на уровне учетной записи вы можете создавать адреса получения/изменения, поскольку у вас есть доступ к открытым ключам, которые будут использоваться для создания этих адресов. Программное обеспечение просто хэширует открытые ключи и кодирует их так, как вам нравится (P2WPKH или P2PKH).

@ArielHurdle Вы не можете получить открытый ключ из адреса. Адреса в основном представляют hash160собой открытый ключ, а хэши — это односторонние математические функции. Если вы хотите создать транзакцию P2PK, вам нужно напрямую запросить у получателя открытый ключ.

Существуют различные виды выходов, на которые может быть оплачена транзакция. Для простоты я объясню это на примере вывода Pay-to-PubkeyHash (P2PKH). Я думаю, что именно на этом основан ваш вопрос.

С выходом P2PKH вы правы. Адрес — это просто закодированный и хэшированный открытый ключ с префиксом. Вы можете удалить префикс и изменить кодировку, но вы не можете найти прообраз хеша (в нашем случае открытого ключа).

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

спасибо, так что в записях транзакций блокчейна используется не открытый ключ получателя, а хэш открытого ключа? а потом я предполагаю, что при получении баланса вы сканируете блокчейн со своим адресом, а не с открытым ключом?
Существуют различные виды сделок. Для P2PKH при оплате на адрес включается только хэш открытого ключа (хотя кто-то, проводящий вывод P2PKH, раскрывает открытый ключ). Кошелек знает закрытые ключи, вычисляет открытые ключи и их хэши и «сканирует» их.
@ oxb10c хорошо, так что для P2PKH кошельку не нужен открытый ключ, но как насчет транзакций P2PK? как кошелек их отправляет?
Для P2PK вы не хешируете открытый ключ в адресе, просто кодируете и добавляете префикс.
Ясно, значит, получатель сгенерирует свой адрес вот так, Publickey --> encode (eg AES?) --> add prefix = addressа затем отправитель отменит этот процесс?
В протоколе Биткойн нигде нет шифрования. Для P2PK отправитель помещает публичный ключ прямо в кредитную транзакцию, а чтобы его потратить, получатель предоставляет подпись. Но адресов для выходов P2PK нет, поэтому отправителю нужен какой-то другой способ выяснить полный открытый ключ получателя. Такие сделки сейчас большая редкость.