144 / 736PATH

Derivation Path

Шлях деривації ключа

З однієї резервної копії гаманець може створити багато рахунків і адрес. Derivation Path указує, до якого місця в цій структурі дійти, щоб під час відновлення знайти ті самі ключі, що використовувалися раніше.

Derivation Path — точна послідовність кроків, за якою гаманець виводить певний ключ із початкового. Уявіть папки на комп’ютері: правильного диска замало, якщо ви відкрили не ті папки. Проте ключі математично обчислюються, а не шукаються в збережених файлах. Однакові початкові дані й шлях дають однаковий результат. Інший шлях може привести до іншої частини того самого гаманця. Це не платіжна адреса, не пароль і не заміна резервної копії.

Анна відновлює гаманець, а програма просить шлях, про який раніше не доводилося думати. Гаманець — це застосунок або пристрій для отримання й надсилання біткоїнів. Запис m/0/7 здається складним, але читається послідовно: m — головний приватний вузол, від нього виводиться ключ 0, а вже від цього ключа — ключ 7. Вузол тут означає місце в дереві ключів, а не комп’ютер у мережі Bitcoin. Числа — це індекси, порядкові позиції, а не суми чи номери транзакцій. Стандарт BIP 32 використовує розширений ключ: окрім самого ключа він містить chain code, додаткові дані для виведення інших ключів. Тому одного запису шляху без початкового ключа недостатньо для підписання платежу. [1] [10]

Візьмімо m/84'/0'/0'/0/7. Перша частина після m позначає BIP 84 для нативного SegWit, способу побудови адрес і витрачання коштів. Далі йдуть Bitcoin mainnet, основна мережа зі справжніми біткоїнами, рахунок 0, зовнішня гілка отримання 0 та індекс 7. Це восьма адресна позиція, бо відлік починається з нуля. Рахунок відокремлює групу коштів, а гілка визначає призначення адрес. У структурі BIP 44 гілка 1 слугує власній решті — сумі, що залишається відправникові після платежу. Перші три кроки мають апостроф і є hardened, останні два — звичайні. Що змінює ця позначка? [2] [5]

Приватний ключ — секретне числове значення, за допомогою якого гаманець створює цифровий підпис, що дозволяє витратити кошти. Hardened позначає спосіб виведення, для якого потрібен приватний ключ батьківського вузла. Звичайний крок дозволяє вивести дочірній публічний ключ з xpub, розширеного публічного ключа. Разом із відповідним типом скрипту це дає змогу будувати адреси без можливості підписувати платежі. Сам xpub не пройде через крок hardened. За BIP 380 записи 0' і 0h означають те саме, але не звичайний 0. Для технічних читачів: BIP 32 ділить 32-бітові індекси на звичайні від 0 до 2^31−1 і hardened від 2^31 до 2^32−1; позначка перетворює нуль на індекс 2^31. Якщо її пропустити, зміниться обчислення, а не лише вигляд запису. [1] [7] [10]

BIP 43 називає перший рівень hardened словом purpose — призначення структури. Узгоджені значення допомагають гаманцям розуміти звичайне використання гілки. Для орієнтиру: 44' позначає традиційний P2PKH, платіж, захищений хешем публічного ключа; 49' — P2SH-P2WPKH, SegWit у старішій оболонці для сумісності; 84' — нативний P2WPKH; 86' — single-key P2TR, конструкцію Taproot з одним внутрішнім ключем. Це різні способи задавати умови витрачання грошей. Саме число не перетворює шлях на відповідний скрипт і не нав’язує його через консенсус мережі. Програма має справді побудувати правильний вихід. До того ж не всі гаманці дотримуються цих домовленостей. [3] [2] [4] [5] [6]

Анна може підключити лише xpub одного рахунку, щоб бачити надходження, а не весь гаманець. Якщо він походить із m/84'/0'/0', він уже на рівні рахунку. До попереднього прикладу залишається відносний суфікс /0/7. Повторне додавання всього шляху від кореня почало б нове виведення не з того місця; до того ж кроки hardened із xpub виконати неможливо. Експортований розширений ключ містить глибину в дереві й fingerprint батьківського вузла, короткий ідентифікаційний відбиток, але не повний запис попередніх кроків. Тому відсутній початковий шлях не завжди можна просто прочитати з самого xpub. [1] [7]

Descriptor описує ключі й умови витрачання, з яких програма будує відстежувані виходи. BIP 380 дозволяє перед ключем у квадратних дужках записати fingerprint і шлях його походження. Ці кроки вже виконані. Суфікс після ключа натомість задає подальше виведення; зірочка * може позначати ряд нащадків. Fingerprint має чотири байти й допускає колізії: різні ключі можуть мати однаковий короткий відбиток. Це не доказ особи й не заміна ключа. Bitcoin Core 29.0 має команду deriveaddresses у RPC, програмному інтерфейсі вузла. Вона обчислює адреси з descriptor і заданого діапазону, якщо він потрібен; саме обчислення не перевіряє баланс і не надсилає коштів. [7] [1] [9]

Сам шлях не створить ваших ключів без початкових даних. Передача xpub — інша справа: отримувач може виводити публічні ключі доступної гілки й за відповідного типу скрипту стежити за її адресами. Права витрачати це не дає, але приватність може постраждати. BIP 32 попереджає і про менш очевидний ризик: батьківський xpub разом із розкритим приватним ключем нащадка, доступного звичайними кроками, може відкрити розширений приватний ключ батьківського вузла. Межа hardened блокує саме цей шлях до ключа вищого рівня. Вона не скасовує розкритий ключ і не рятує кошти, якими він керує. [1]

Повернімося до відновлення. Seed Phrase — резервні слова. За BIP 39 із них і можливої passphrase утворюється seed, початковий секрет для створення ключів. Passphrase — додатковий секретний текст, а не звичайний пароль застосунку. З іншим seed той самий шлях дає інші ключі. Також мають збігатися мережа, рахунок, гілка й тип скрипту. Програма повинна перевірити достатньо адрес та історії: Gap Limit зупиняє пошук після ряду невикористаних адрес. Нульовий баланс сам по собі не доводить втрату ключів. Анна може порівняти результат із відомою адресою отримання та давніми платежами. Прийняття шляху програмою означає лише, що вона вміє його обробити, а не що знайшла весь початковий гаманець. [8] [2] [7]

Для повної картини прочитайте також HD Wallet, Extended Public Key (xpub), Gap Limit, Output Descriptor, BIP 39, Seed Phrase. На цю статтю також посилаються HD Wallet, Watch-only Wallet, Change Address, Extended Public Key (xpub).

DOC · 001BIP 32 — Hierarchical Deterministic WalletsСпецифікація DOC · 002BIP 44 — Multi-Account HierarchyСпецифікація DOC · 003BIP 43 — Purpose FieldСпецифікація DOC · 004BIP 49 — P2WPKH nested in P2SHСпецифікація DOC · 005BIP 84 — Native P2WPKH derivationСпецифікація DOC · 006BIP 86 — Single Key P2TR OutputsСпецифікація DOC · 007BIP 380 — Output Script DescriptorsСпецифікація DOC · 008BIP 39 — From mnemonic to seedСпецифікація DOC · 009Bitcoin Core 29.0 — deriveaddresses RPCДокументація DOC · 010Bitcoin Developer Guide — WalletsДокументація
Переглянуто: Спочатку джерела · Не інвестиційна порада