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

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

Сжатый публичный ключ

Что такое сжатый публичный ключ?
Сжатый публичный ключ хранит только координату x точки кривой плюс однобайтовый флаг четности, поэтому полный публичный ключ укладывается в 33 байта вместо 65.

У каждой точки на secp256k1 при заданном x есть два возможных значения y, поэтому запись того, какое из них верно, стоит один байт вместо 32. Кошельки генерируют сжатые ключи по умолчанию с версии Bitcoin Core 0.6, выпущенной в марте 2012 года, а сэкономленные байты снимаются с размера каждого входа, который вы позже потратите. Более дешевая трата и есть вся выгода, а в повседневном использовании формат незаметен.

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

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

Кодировка помещает этот бит в первый байт. Префикс 0x02 означает, что значение y четное, 0x03 означает, что оно нечетное, а 32 следующих байта представляют собой координату x. Общая длина: 33 байта. Старый формат обозначает себя префиксом 0x04 и несет обе координаты полностью, то есть занимает 65 байт. Любое программное обеспечение, читающее ключ, может различить их уже по первому байту, и именно так кошельки сохраняли совместимость при переходе.

Сэкономленные 32 байта попадают в разные места в зависимости от типа выхода. Во входе старого формата ключ находится в скрипте разблокировки и учитывается с полным весом, поэтому 32 байта стоят 32 vbytes, около 640 сатоши при ставке комиссии 20 sat/vB. Во входе SegWit ключ находится в свидетеле, который учитывается с четырехкратной скидкой, поэтому те же 32 байта стоят 8 vbytes. Ни одна из этих цифр сама по себе невелика, и обе повторяются на каждом входе каждой транзакции, которую вы когда-либо подпишете.

Где это видно

Со сжатыми ключами вы встречаетесь в необработанных данных транзакций. Откройте любую недавнюю трату в обозревателе блоков, и публичный ключ в свидетеле или скрипте будет начинаться с 02 или 03, за которыми следуют 64 шестнадцатеричных символа. Ключи, начинающиеся с 04, представляют собой реликты.

Формат также определяет, как выглядит адрес. Хеширование сжатого ключа дает иной результат, чем хеширование несжатой версии того же ключа, поэтому один приватный ключ может соответствовать двум совершенно отдельным адресам старого формата с раздельными балансами. Кошельки решают это соглашением, а не хитростью: все, что выводится через BIP-32, а это охватывает каждый кошелек с сид-фразой в обычном использовании, сжато на всем протяжении, а строка формата импорта кошелька, начинающаяся с K или L, сообщает, что ключ принадлежит сжатой стороне этой развилки.

SegWit устранил неоднозначность навсегда. BIP-143 запрещает несжатые ключи внутри программ свидетеля версии 0, поэтому любой адрес bc1q сжат по правилу, а Taproot пошел дальше, определив ключи x-only длиной 32 байта, которые полностью отбрасывают байт четности.

Сжатый публичный ключ vs несжатый публичный ключ

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

Не путать с

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

Делает ли использование сжатых ключей мой биткоин более защищенным?

Нет, безопасность одинакова, поскольку обе формы описывают одну и ту же точку кривой. Выгода состоит в размере: 33 байта вместо 65 на каждом входе, который вы тратите, что снижает комиссию за ту же транзакцию.

Нужно ли мне что-то делать, чтобы использовать сжатые ключи?

Нет. Каждый кошелек, построенный на сид-фразе, использует их на всем протяжении, а адреса нативного SegWit их требуют. Формат становится вопросом только тогда, когда вы импортируете ключ, созданный до 2012 года.

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

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

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