Extended Public Key (xpub) відповідає BIP32 — правилам упорядкування ключів у гаманці. Він дозволяє обчислювати інші публічні ключі в певній частині гаманця, а за відповідними правилами адрес — готувати адреси для отримання коштів і відстежувати платежі. Для витрачання потрібен цифровий підпис, тобто криптографічне підтвердження дозволу на транзакцію. Його створюють приватним ключем, якого xpub не містить. Тому xpub не замінює приватні ключі або Seed Phrase — резервну копію гаманця, записану послідовністю слів.
Анна користується апаратним гаманцем і хоче перевіряти в телефоні, чи заплатив клієнт. Вона переносить туди публічну конфігурацію вибраного рахунку, зокрема xpub, але жодного приватного ключа. Телефон працює як Watch-only Wallet: стежить за відповідними адресами, готує нові й складає непідписану транзакцію. Для витрачання все одно потрібен підпис пристрою із секретними ключами. Так само магазин може створювати різні адреси для замовлень, не зберігаючи ключів витрачання на сервері. Це обмежує наслідки злому, але не вирішує все: нападник може показати покупцеві власну адресу для нового платежу. [1] [5]
Звичайну Bitcoin-адресу ти даєш людині, яка має заплатити. Xpub відкриває значно ширший огляд. Хто знає xpub рахунку та правила створення його адрес, може обчислювати адреси отримання і повернення решти та пов’язувати їхню історію й баланси. Це стосується гілки, ключі якої можна обчислити з цього xpub, а не автоматично всіх рахунків гаманця. Бухгалтерський сервіс або сторонній оглядач, якому ти передав xpub, може зберегти копію і стежити за майбутніми платежами. Від’єднання застосунку не відкликає вже передану копію. Для одного платежу зазвичай вистачає однієї адреси; ширший доступ давай лише за потреби. [1] [5]
Гаманець BIP32 створює дерево ключів з однієї вихідної основи. Гілка тут — група похідних ключів, а не частина мережі чи ланцюжка блоків. Із xpub можна рухатися вниз лише кроками non-hardened. Інший вид, Hardened Derivation, потребує приватних даних і створює межу, яку сам xpub не перетинає. Поширена структура BIP44 ставить таку межу перед окремими рахунками. Тому експорт xpub одного рахунку сам по собі не відкриває інших. Важлива й глибина експорту: xpub лише гілки отримання дає вужчий огляд, ніж xpub цілого рахунку, який зазвичай охоплює й решту. [1] [6]
З тих самих публічних ключів за різними правилами можна створити різні Bitcoin-адреси. Вихід транзакції — це запис суми й умов, за яких її можна витратити згодом. Застосунок має знати тип виходу гаманця, наприклад Native SegWit або Taproot, а також гілку й порядкові номери для виведення. Префікси ypub і zpub за SLIP-0132 підказують тип адрес, але не описують весь гаманець. Output Descriptor точніший: це текст із ключами та правилами створення адрес і умов витрачання. Він може містити походження ключа, шлях виведення та контрольну суму для виявлення помилок набору. Вона перевіряє текст, а не надійність його відправника. Не кожен дескриптор містить лише публічні дані: деякі включають приватні ключі. Розрізняй їх перед передаванням. [2] [3] [4]
Спочатку перевір мережу, вибраний рахунок, тип адрес і шлях виведення — інструкції, що визначають місце ключа в дереві. Порівняй кілька адрес отримання з початковим гаманцем, а для апаратного гаманця скористайся його довіреним екраном за процедурою виробника. Однакової назви рахунку недостатньо. Нульовий баланс після імпорту не обов’язково означає втрату: можливо, ти спостерігаєш інший рахунок, інший тип адрес або надто вузький діапазон їхніх номерів. Не вводь через це слова відновлення на випадковому сайті. Для самого перегляду шукай експорт публічної конфігурації, а не Seed Phrase чи xprv — розширений приватний ключ. [4] [5]
Сам xpub не є ключем підпису. Проте BIP32 має важливий зв’язок: батьківський xpub, у документації parent xpub, разом із приватним ключем нащадка non-hardened дозволяє обчислити батьківський приватний ключ. Для віддаленішого нащадка всі проміжні кроки мають бути non-hardened, а для обчислення потрібно знати відповідний шлях. Це не крадіжка лише зі знання адреси. Небезпечне поєднання — витік публічного огляду та секретного ключа з тієї самої гілки. Нападник може отримати й інші ключі під цим батьківським ключем. Межі hardened розділяють рахунки, але не захищають уже розкритий приватний ключ. [1]
Гаманець Multisig може вимагати два підписи з трьох ключів. Але знати, які два ключі ти можеш відновити, недостатньо. Щоб відтворити правильні умови витрачання, потрібні також публічні дані інших залучених ключів, їхнє розташування, необхідна кількість підписів і правила виведення. Тому разом із секретними резервними копіями зберігай конфігурацію гаманця, наприклад публічний дескриптор з усіма потрібними xpub. Він не дозволяє витрачати, але може бути необхідним для відновлення. Master fingerprint — вісім шістнадцяткових символів, які позначають початковий ключ, — допомагає зіставити конфігурацію. Це не унікальне посвідчення особи: різні ключі можуть мати однаковий fingerprint. [4] [5]
Публічний ключ перевіряє підписи, створені відповідним приватним ключем. BIP32 додає chain code — 32-байтове значення для виведення наступних ключів. Разом вони утворюють розширений публічний ключ. Його переносний запис також містить версію та місце в дереві: глибину, fingerprint безпосереднього батьківського ключа й номер нащадка. Це не те саме, що повний шлях від першого ключа гаманця. Отже, xpub — не окрема адреса отримання, не пароль рахунку й не список транзакцій. Гаманець для спостереження сам знаходить транзакції відповідних адрес у ланцюжку. [1]
Функція CKDpub за BIP32 бере батьківський публічний ключ, його chain code та індекс нащадка. Через HMAC-SHA512, криптографічне обчислення над цими даними, вона готує наступний публічний ключ і новий chain code. Індекси, доступні для публічного виведення ключів, мають значення від 0 до 2³¹−1. Індекси hardened починаються з 2³¹ і зазвичай позначаються в шляхах апострофом або h; CKDpub із xpub їх не виведе. Повторення дозволених кроків створює нащадків, а не сусідні гілки чи предків експортованого ключа. За рідкісного невалідного результату, описаного в BIP32, реалізація переходить до наступного індексу. Звичайному користувачу ці обчислення не потрібні: важливо правильно перенести конфігурацію. [1]
Стандартний запис BIP32 до текстового кодування займає 78 байтів: версія 4, глибина 1, fingerprint батьківського ключа 4, номер нащадка 4, chain code 32 і дані ключа 33. Base58Check додає контрольну суму й перетворює запис на 111 символів. Публічна версія основної мережі Bitcoin починається з xpub, тестова — з tpub; приватні відповідники — з xprv і tprv. Tpub не означає Taproot. Префікс походить від байтів версії й не описує всіх правил адрес. Під час імпорту програма має перевірити й валідність публічного ключа, а не лише перші літери чи довжину. [1] [3]
Для повної картини прочитайте також HD Wallet, Watch-only Wallet, Приватність у Bitcoin, Derivation Path, Bitcoin, Output Descriptor. На цю статтю також посилаються HD Wallet, Cold Storage, Watch-only Wallet, Output Descriptor.