xpub — не Bitcoin-адрес и не ключ подписи. Он экспортирует узел дерева BIP32, чтобы watch-only wallet или сервер приёма создавал нижележащие публичные ключи и адреса. Владелец обычно не может тратить, но видит ветвь; значение адресов также зависит от derivation path и script policy.
BIP32 представляет расширенный публичный ключ как публичную точку K вместе с 32-байтовым chain code c. Сериализация также несёт version bytes, depth, parent fingerprint и child number. xpub — не отдельный адрес, а узел иерархии и данные для продолжения его публичной ветви.
CKDpub объединяет parent public key, chain code и индекс через HMAC-SHA512. Для индексов от 0 до 2³¹−1 она создаёт child public key и новый chain code, позволяя онлайн-кошельку выпускать receive и change адреса без секрета подписи. Выводятся только потомки экспортированного узла.
Hardened-индексы начинаются с 2³¹ и обозначаются апострофом или h. Для их расчёта нужны приватные данные, поэтому CKDpub из parent xpub невозможна. Кошельки обычно закаливают purpose, coin type и account, затем экспортируют account xpub, изолируя другие hardened-счета.
Сериализация BIP32 занимает 78 байт: версия, depth, parent fingerprint, child number, chain code и 33 байта key material. Base58Check даёт 111 символов; mainnet public начинается с xpub, testnet — с tpub. Префикс является результатом version bytes, а не отдельным видом криптографического ключа.
xpub не сообщает, должны ли ключи образовать P2PKH, wrapped SegWit, native SegWit, Taproot или multisig, а без key origin путь может быть неясен. SLIP-0132 ввёл ypub, zpub и другие версии как подсказки; descriptor явно записывает script, fingerprint, path, xpub, wildcard и checksum.
Обладатель account xpub может вычислить все незакалённые receive и change public keys ветви и связать их транзакции и балансы. Передача налоговому сервису или вставка в публичный block explorer создаёт постоянный обзор счёта и может связать сетевые либо личные данные с on-chain историей.
Сам xpub обычно не подписывает. Критическое исключение BIP32: parent xpub вместе с private key одного незакалённого потомка позволяет восстановить parent private key и остальную ветвь. Поэтому xpub защищают как чувствительные данные, а границы account делают hardened.
Watch-only wallet следит за xpub, строит неподписанную transaction и передаёт её устройству подписи. Магазин создаёт уникальные адреса без хранения xprv. Это ограничивает прямую кражу после взлома сервера, но не слежение; receive address следует проверять на доверенном дисплее.
В multisig собственный seed не описывает весь кошелёк: точное восстановление требует public keys cosignerов, threshold, script type и derivation data. Descriptor хранит policy точнее набора xpub. Восьмизначный master fingerprint помогает сопоставлению, но не доказывает личность и может столкнуться.
Перед импортом определите network, account, derivation path, ожидаемый script type, receive/change ветви и диапазон индексов. Сравните xpub или descriptor на доверенном устройстве, выведите несколько адресов и сверьте с исходным кошельком; не отдавайте xpub стороннему explorer без осознанной потери приватности. Источники: BIP 32 — Hierarchical Deterministic Wallets; BIP 380 — Output Script Descriptors General Operation; SLIP-0132 — Registered HD Version Bytes; Bitcoin Core — Output Descriptors; Trezor — What Is a Public Key (XPUB)?.
Для полной картины прочитайте эту статью вместе с HD Wallet, Watch-only Wallet, Приватность в Bitcoin, Derivation Path, Bitcoin, Output Descriptor. На эту статью также ссылаются HD Wallet, Cold Storage, Watch-only Wallet, Output Descriptor.