Глоссарий / Адреса и ключи
Путь деривации
- Что такое путь деривации?
- Путь деривации представляет собой маршрут по дереву ключей HD-кошелька, записываемый как m/84h/0h/0h/0/0, который указывает программе, какой именно ключ из миллиардов нужно восстановить из вашей сид-фразы.
Определено в BIP-44.
Путь является координатой, а не секретом. Два числа в начале определяют, восстанавливают ли ваши слова адреса, начинающиеся с 1, 3, bc1q или bc1p, потому что BIP-44, BIP-49, BIP-84 и BIP-86 читают одну и ту же фразу по-разному. Записать путь рядом с резервной копией означает разницу между восстановлением, которое находит ваши биткоины, и восстановлением, которое показывает ноль.
Как это работает
Путь читается слева направо, по одному уровню на каждый слэш, и каждый уровень сужает поиск. Буква m в начале обозначает мастер-ключ, сгенерированный из вашей сид-фразы. Все, что после нее, является индексом, а апостроф или h помечает этот индекс как усиленный (hardened).
Первый уровень представляет собой назначение (purpose), и именно он определяет, как выглядят ваши адреса.
| Стандарт | Путь счета | Адреса, которые он создает |
|---|---|---|
| BIP-44 | m/44h/0h/0h | legacy, начинающиеся с 1 |
| BIP-49 | m/49h/0h/0h | вложенный SegWit, начинающиеся с 3 |
| BIP-84 | m/84h/0h/0h | нативный SegWit, начинающиеся с bc1q |
| BIP-86 | m/86h/0h/0h | Taproot, начинающиеся с bc1p |
Второй уровень представляет собой тип монеты, взятый из реестра SLIP-0044, где биткоину соответствует 0, а любой тестовой сети 1. Третий уровень представляет собой номер счета, который позволяет одной сид-фразе содержать личный кошелек на 0h и рабочий кошелек на 1h без общей истории. После этого усиление прекращается: четвертый уровень представляет собой цепочку, 0 для адресов, которые вы выдаете, и 1 для сдачи, а пятый является индексом адреса, который растет по мере получения платежей.
Это разделение на усиленные и обычные уровни сделано намеренно. Поскольку уровень счета усилен, расширенный публичный ключ для m/84h/0h/0h можно экспортировать на смартфон или бухгалтеру, который затем может вывести все адреса получения и сдачи под ним, но не может перейти вбок в другой счет или подняться вверх к мастер-ключу.
Мультиподпись использует собственную ветвь. BIP-48 помещает ключи соподписантов на m/48h/0h/0h/2h для нативного SegWit, где последний усиленный уровень называет тип скрипта, поэтому устройство может отличить счет с одной подписью от счета с мультиподписью до того, как что-либо подпишет.
Почему это важно при покупке биткоина
Путь никогда не затрагивает вашу безопасность. Он ничего не меняет в том, насколько трудно украсть ваши биткоины, и меняет все в том, сможет ли программное обеспечение перед вами их найти.
Сбой, который это вызывает, распространен и неизменно пугает. Вы покупаете на бирже, выводите средства на устройство, и биткоины попадают на адреса bc1q под m/84h/0h/0h. Год спустя вы восстанавливаете те же 24 слова в другом приложении, которое по умолчанию использует legacy, и баланс показывает 0,00000000, тогда как обозреватель блоков по-прежнему показывает ваши средства нетронутыми на старом адресе. Ничего не потеряно. Приложение ищет в неверной ветви дерева с четырьмя миллиардами потомков на каждом уровне.
Значения по умолчанию различаются между кошельками, которые рассматривает этот сайт. Приложения Trezor Suite и Ledger Live представляют счета по типу адреса и молча выбирают назначение за вас. Electrum спрашивает, какой тип скрипта вам нужен при восстановлении, и прячет поле пути со свободным вводом за расширенной опцией. Sparrow сканирует несколько стандартных путей одновременно и показывает, в каком из них есть история. Ни один из них не ошибается, и ни один не может угадать, что сделал другой.
Две привычки устраняют всю проблему. Запишите путь счета и тип адреса на той же заметке, что и название кошелька, и храните эту заметку там, куда можно попасть без сид-фразы, например в менеджере паролей, поскольку сама по себе она ничего не раскрывает. Затем, прежде чем доверять восстановлению, сравните первый адрес получения, который оно показывает, с тем, который показывает ваше исходное устройство. Если эти две строки совпадают, все адреса ниже них тоже совпадут.
Восстановление 24 слов в Electrum и ноль на балансе
Восстановление по неверному пути выглядит так. Trezor Model T был настроен с 24 словами, вывод с биржи ушел на его первый адрес нативного SegWit, и теперь устройство лежит в ящике. Месяцы спустя фразу вводят в Electrum на ноутбуке.
Electrum спрашивает тип скрипта перед сканированием. Выберите legacy p2pkh, и он выведет m/44h/0h/0h, покажет адреса, начинающиеся с 1, ничего не найдет и сообщит о пустом кошельке. Биткоины по-прежнему на адресе bc1q, по-прежнему подтверждены и по-прежнему видны любому, у кого есть txid.
Исправление занимает минуту. Восстановите снова, выберите нативный SegWit или откройте расширенное поле деривации и введите m/84'/0'/0' вручную. Electrum просканирует заново, баланс появится, и список адресов начнется с той же строки, которую Trezor показывает на вкладке получения. Если он по-прежнему показывает ноль, а вы знаете, что платежи уходили дальше по ветви, увеличьте лимит разрыва (gap limit) со значения по умолчанию 20, прежде чем предполагать, что что-то пропало.
Ничто в этой последовательности не создавало риска для биткоинов, потому что восстановление является операцией чтения. Вы можете попробовать каждое назначение по очереди, одно за другим, и единственная цена состоит во времени каждого повторного сканирования.
Путь деривации vs дескриптор вывода
Путь говорит где; дескриптор говорит где, что и начиная с какого ключа. Дескриптор wpkh([fingerprint/84h/0h/0h]xpub/0/*) содержит тот же путь, плюс тип скрипта как функцию-обертку, плюс сам расширенный ключ, плюс контрольную сумму, которая ловит ошибочно набранный символ. Передать кому-то путь не сообщает ему ничего о вашем кошельке. Передать ему дескриптор означает передать всю вашу историю адресов и каждый будущий адрес на этой ветви, поэтому один безопасно отправить по электронной почте, а другой нет.