Перейти к содержимому
buybitcoinsmart

Глоссарий / Адреса и ключи

Публичный ключ

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

Умножение приватного ключа на фиксированную точку кривой дает публичный ключ, и ни один известный метод не обращает этот шаг. Сжатые ключи занимают 33 байта, а Taproot сократил их еще больше до x-only формы размером 32 байта, определенной в BIP-340. Как пользователь вы редко видите такой ключ, потому что большинство адресов публикуют только хеш ключа и раскрывают сам ключ, когда биткоины наконец перемещаются.

Как это работает

Публичные ключи получаются из одной конкретной кривой, и всю работу выполняет ее арифметика. Биткоин использует secp256k1, заданную уравнением «y в квадрате равно x в кубе плюс 7» над большим простым полем, вместе с согласованной начальной точкой, называемой генератором. Прибавление этого генератора к самому себе столько раз, сколько указывает приватный ключ, дает другую точку на кривой, и эта точка является публичным ключом. Операция быстра в одном направлении и при всех известных сегодня методах невыполнима в другом, и в этом вся основа владения биткоином.

На практике встречаются три кодировки. Исходная несжатая форма тратит 65 байт на запись обеих координат после префикса 0x04. Сжатая форма сохраняет только координату x и байт четности, всего 33 байта, и является стандартом по умолчанию уже более десяти лет. Taproot идет на шаг дальше с x-only ключами ровно по 32 байта, отбрасывая байт четности, поскольку вместо этого BIP-340 фиксирует это соглашение.

Где ключ появляется в блокчейне, зависит от типа выхода. Выход старого формата или SegWit версии 0 фиксирует 20-байтовый хеш публичного ключа, поэтому в блокчейне виден только хеш и ничего больше, пока биткоины не потрачены, и в этот момент тратящий должен раскрыть ключ, хеш которого с ним совпадает. Выход Taproot устроен иначе: ключ выхода размером 32 байта находится в самом адресе и виден с момента поступления средств.

Почему это важно при покупке биткоина

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

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

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

Как проследить ключ до блокчейна

Возьмите кошелек, использующий стандартный путь нативного SegWit, m/84'/0'/0'/0/0. Ключ на этом пути имеет размер 33 сжатых байта. Кошелек хеширует его сначала с помощью SHA-256, а затем RIPEMD-160, получая 20 байт, и кодирует эти байты как адрес bc1q. Все, что отправлено на этот адрес, теперь заперто на хеш, и сеть никогда не видела ключ.

Когда вы тратите, поле свидетеля содержит два элемента: подпись и публичный ключ размером 33 байта. Каждый узел хеширует ключ, проверяет, что результат совпадает с 20 байтами, которые требовал выход, затем проверяет подпись по ключу. Трата действительна, только если верно и то и другое. Начиная с этого блока ключ становится публичным, и это хорошая причина не оставлять баланс на адресе, с которого вы уже тратили.

Публичный ключ vs приватный ключ

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

Не путать с

Часто задаваемые вопросы

Безопасно ли делиться своим публичным ключом?

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

Публичный ключ и мой биткоин-адрес это одно и то же?

Нет. В выходах legacy и в нативных выходах SegWit адрес содержит 20-байтовый хеш публичного ключа, а не сам ключ. Адреса Taproot являются исключением: они напрямую содержат ключ длиной 32 байта.

Может ли кто-то украсть мои биткоины, если у него есть мой xpub?

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

Читайте далее

Связанные термины

Еще в разделе «Адреса и ключи»

Читать эту страницу на английском