Xpub: что раскрывает публичный ключ вашего биткоин-кошелька

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

Xpub (расширенный публичный ключ) представляет собой публичный ключ аккаунта биткоин-кошелька, из которого выводятся все его адреса: тот, у кого он есть, видит каждый платёж, полученный и отправленный этим аккаунтом, но ничего не может потратить.

Что содержит xpub

Стандарт BIP32 описывает иерархические детерминированные кошельки: один сид порождает целое дерево ключей. Расширенный ключ добавляет к ключу код цепочки (chain code), который служит для вычисления его дочерних ключей. Согласно BIP32, зная расширенный публичный ключ, можно восстановить все его неусиленные (non-hardened) дочерние публичные ключи.

Кошельки упорядочивают эти ключи по пути BIP44: m / purpose' / coin_type' / account' / change / address_index. Xpub, который показывает кошелёк, относится к уровню account'. Он охватывает две цепочки адресов: 0 для адресов получения, 1 для адресов сдачи, на которые возвращается сдача от ваших собственных отправок.

xpub, ypub или zpub

Префикс указывает, какой тип адресов использует аккаунт:

ПрефиксСтандартПуть первого аккаунтаАдреса
xpubBIP44m/44'/0'/0'Старые адреса, начинаются с 1
ypubBIP49m/49'/0'/0'Вложенный SegWit, адреса начинаются с 3
zpubBIP84m/84'/0'/0'Нативный SegWit, адреса начинаются с bc1q

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

Что раскрывает xpub

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

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

Риск, о котором нужно знать

Один только xpub не позволяет тратить средства. Но BIP32 предупреждает: знать расширенный публичный ключ и любой происходящий от него неусиленный приватный ключ равносильно знанию родительского расширенного приватного ключа. Иными словами, вашего xpub и приватного ключа одного-единственного вашего адреса достаточно, чтобы потратить средства всего аккаунта.

Уровень account' усиленный: такая утечка ограничивается этим аккаунтом и не затрагивает другие аккаунты того же сида. Поэтому экспортируйте xpub, но никогда не приватный ключ адреса, и никогда никому не сообщайте свою фразу восстановления.

Как программа находит адреса

Программа, которая читает xpub, выводит адреса по порядку и останавливается после серии ни разу не использованных адресов: BIP44 устанавливает этот предел (gap limit) в 20. Если вы создали больше 20 адресов подряд и не воспользовались ими, программа, следующая этому правилу, не увидит последующих.

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

Прежде чем передать свой xpub

  • Спросите себя, кто будет его хранить: приложение, которое хранит ваш xpub на своих серверах, знает ваш аккаунт всё то время, пока хранит его, а утечка его данных раскрывает аккаунт.
  • Предпочитайте локальное чтение: кошелёк, подключённый к вашему собственному узлу, или инструмент, который выводит адреса на вашем устройстве, никому не доверяет xpub.
  • Один аккаунт на одну цель: у другого аккаунта (следующего account') другой xpub, который ничего не раскрывает о других аккаунтах.

Как CentraFIN читает ваш xpub

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

Источники

Частые вопросы

Можно ли украсть биткоины с помощью xpub?

С одним только xpub нельзя: он не позволяет подписывать. Если к нему добавить приватный ключ одного из адресов аккаунта, то да: весь аккаунт.

Достаточно ли xpub, чтобы видеть мой баланс?

Да. Он даёт все адреса аккаунта, а блокчейн даёт их балансы и транзакции.

Что делать, если мой xpub утёк?

Его нельзя отозвать: тот, у кого он есть, всегда будет видеть этот аккаунт. Дальше используйте новый аккаунт, xpub которого никогда никому не передавался. Перевод со старого аккаунта при этом останется видимым.

Чем отличаются xpub, ypub и zpub?

Типом адресов аккаунта: адреса начинаются с 1 у xpub, с 3 у ypub (вложенный SegWit), с bc1q у zpub (нативный SegWit).

Возьмите свой капитал под контроль

Аккаунт готов за минуту, без пароля.