Глоссарий / Адреса и ключи
Пара ключей
- Что такое пара ключей?
- Пара ключей представляет собой один приватный ключ вместе с единственным публичным ключом, который он порождает; это единица владения, в которой считаются каждая подпись биткоина и каждый кворум мультиподписи.
Парная структура важна потому, что две половины выполняют противоположные задачи: одна создает подпись, другая позволяет посторонним ее проверить. Связь работает только в одном направлении, поэтому публикация публичной половины никогда не ставит под угрозу секретную половину. Подсчет пар позволяет оценить конфигурацию: хранилище с мультиподписью 2-из-3 состоит из трех пар ключей, хранящихся в трех местах, и любые две из них могут тратить.
Как это работает
Один приватный ключ дает ровно один публичный ключ, и это соответствие никогда не меняется. Подайте один и тот же секрет длиной 32 байта в одну и ту же арифметику кривой на любом устройстве, в любом кошельке, с разницей в десять лет, и получится идентичный публичный ключ. Именно эта детерминированность позволяет восстановить кошелек из резервной копии, и именно поэтому никому не нужно хранить публичные ключи: их пересчитывают по мере необходимости.
Пара распределяет работу при каждом расходовании. Ваше устройство использует приватную половину, чтобы создать подпись, привязанную к той самой транзакции, которая подписывается, а тысячи узлов используют публичную половину, чтобы подтвердить, что подпись соответствует и ключу, и этой транзакции. Измените один выход на один сатоши, и подпись перестанет проверяться. Размер подписи зависит от схемы: подпись Schnorr по BIP-340 занимает ровно 64 байта, а более старые подписи ECDSA в кодировке DER занимают 71 или 72 байта, что отчасти объясняет, почему транзакции, тратящие выходы Taproot, дешевле.
Иерархические детерминированные кошельки превращают один секрет в неограниченный запас пар. Деривация по BIP-32 предлагает 2 147 483 648 обычных индексов дочерних ключей на каждом уровне дерева, плюс столько же усиленных, и все они воспроизводятся из одной сид-фразы. Ваш кошелек выдает новую пару на каждый платеж из этого запаса, и именно это делает ротацию адресов практичной, а не бухгалтерским кошмаром.
Где это видно
Пара становится видимой всякий раз, когда кошельку нужно что-то доказать, а не просто потратить. Подпись сообщения является самым простым случаем: вы выбираете адрес, кошелек подписывает текстовый запрос приватной половиной, и любой может проверить результат публичной половиной. Биржи используют именно это, чтобы подтвердить, что адрес для вывода принадлежит вам, и при этом не перемещаются никакие биткоины.
С мультиподписью подсчет пар начинает иметь значение. Хранилище 2-из-3 строится из трех независимых пар, обычно создаваемых на трех отдельных устройствах, и скрипт погашения называет все три публичные половины, тогда как любых двух приватных половин достаточно для траты. Потеря одного устройства ничего вам не стоит; потеря двух стоит вам всего. Именно эта арифметика, а не марка оборудования, определяет, как откажет хранилище.
Совместное подписание показывает ту же структуру. Частично подписанная транзакция биткоина, определенная в BIP-174, перемещается между устройствами, собирая по одной подписи на пару, пока не будет достигнут кворум. Каждый подписывающий касается только своей приватной половины и видит публичные половины всех остальных, и именно для такого разделения и предназначена пара.
Пара ключей vs расширенный ключ
Пара ключей является листом, а расширенный ключ является ветвью. Расширенный ключ, записываемый как xprv или xpub, представляет собой ключ вместе с цепным кодом длиной 32 байта, и именно этот дополнительный материал позволяет ему порождать дочерние ключи. Простая пара ключей ничего не порождает: она управляет теми биткоинами, которые были привязаны к ней, и на этом останавливается. У этого различия есть резкое практическое следствие. Утечка одного публичного ключа раскрывает один адрес, а утечка xpub раскрывает все адреса, которые когда-либо создаст ветвь под ним.