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
Префикс указывает, какой тип адресов использует аккаунт:
| Префикс | Стандарт | Путь первого аккаунта | Адреса |
|---|---|---|---|
xpub | BIP44 | m/44'/0'/0' | Старые адреса, начинаются с 1 |
ypub | BIP49 | m/49'/0'/0' | Вложенный SegWit, адреса начинаются с 3 |
zpub | BIP84 | m/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.
Источники
- BIP32: иерархические детерминированные кошельки
- BIP44: путь деривации и gap limit
- BIP49: ypub, вложенный SegWit
- BIP84: zpub, нативный SegWit
Частые вопросы
Можно ли украсть биткоины с помощью xpub?
С одним только xpub нельзя: он не позволяет подписывать. Если к нему добавить приватный ключ одного из адресов аккаунта, то да: весь аккаунт.
Достаточно ли xpub, чтобы видеть мой баланс?
Да. Он даёт все адреса аккаунта, а блокчейн даёт их балансы и транзакции.
Что делать, если мой xpub утёк?
Его нельзя отозвать: тот, у кого он есть, всегда будет видеть этот аккаунт. Дальше используйте новый аккаунт, xpub которого никогда никому не передавался. Перевод со старого аккаунта при этом останется видимым.
Чем отличаются xpub, ypub и zpub?
Типом адресов аккаунта: адреса начинаются с 1 у xpub, с 3 у ypub (вложенный SegWit), с bc1q у zpub (нативный SegWit).
Возьмите свой капитал под контроль
Аккаунт готов за минуту, без пароля.