Перейти к содержимому
buybitcoinsmart

Глоссарий / Адреса и ключи

Деривация BIP-86

Что такое Деривация BIP-86?
Деривация BIP-86 помещает счета Taproot с одним ключом на путь m/86'/0'/0', а затем модифицирует каждый производный ключ его собственным хешем, чтобы адрес фиксировал непригодный для траты путь скрипта.

Определено в BIP-86.

BIP-86 охватывает кошельки, хранящие выходы Taproot для одного подписанта, и повторяет структуру счетов BIP-44 со значением 86' на уровне назначения. BIP-49 и BIP-84 тоже определяют второй шаг для адреса, но только BIP-86 меняет сам ключ: значение из 32 байт в вашем адресе представляет собой выведенный вами ключ, модифицированный хешем самого себя. Восстановите свои слова в программном обеспечении, которое сканирует только BIP-84, и ваш баланс bc1p будет равен нулю.

Как это работает

Деривация BIP-86 происходит в два шага, и только первый представляет собой привычный спуск по дереву ключей.

Первый шаг представляет собой путь. Шаблон имеет вид m / purpose' / coin_type' / account' / change / address_index, со значением 86' в слоте назначения и неизменным использованием всех уровней ниже, поэтому первый счет биткоина находится на m/86'/0'/0', а его первый ключ для получения находится на m/86'/0'/0'/0/0.

На втором шаге BIP-86 расходится со своими предшественниками. BIP-49 и BIP-84 тоже определяют второй шаг, но у них производный ключ оборачивается в скрипт, и свидетель все равно раскрывает ключ, созданный этим путем. BIP-86 заменяет ключ. Он цитирует BIP-341 о правиле, которому должен соответствовать: "If the spending conditions do not require a script path, the output key should commit to an unspendable script path instead of having no script path." Поэтому производный ключ читается как внутренний ключ через lift_x, и в цепочку попадает этот внутренний ключ плюс int(HashTapTweak(bytes(internal_key)))G. В результате получается одна вставка данных из 32 байт после OP_1, записанная как 0x5120, за которой следует модифицированный ключ, а для траты нужна лишь подпись в свидетеле при пустом scriptSig.

Опубликованные тестовые векторы показывают разницу. На пути m/86'/0'/0'/0/0 внутренний ключ, выведенный из сид-фразы, равен cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115, тогда как ключ, который видит сеть, равен a60869f0dbcf1dc659c9cecbaf8050135ea9e8cdc487053f1dc6880949dc684c и закодирован как bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr. Реализация, которая пропускает второй шаг, публикует вместо этого первое значение, поэтому она выдает вам правдоподобные адреса, которые соответствующий стандарту кошелек, восстанавливающий ту же сид-фразу, никогда не найдет.

Документ написал Ava Chow, 22 июня 2021 года ему был присвоен номер, и теперь он имеет статус Deployed.

Где это встречается

Деривация BIP-86 стоит за большинством кошельков с одной подписью, которые выдают вам адрес bc1p, не спрашивая, какой формат вам нужен. Bitcoin Core сделал кошельки дескрипторов вариантом по умолчанию в версии 23.0, и примечания к выпуску этой версии говорят, что вновь созданный кошелек дескрипторов содержит автоматически сгенерированный дескриптор tr(), "which allows for creating single key Taproot receiving addresses".

Аппаратные устройства догоняли с очень разной скоростью. В нашем обзоре KeepKey указано, что поддержка выходов Taproot этим устройством появилась в прошивке 7.10.0 в феврале 2025 года, поэтому дешевое устройство подписи может хранить сид-фразу, ветвь 86' которой оно вам не покажет, тогда как другое программное обеспечение, читающее те же слова, тратит эти средства обычным образом.

Спецификация необычайно откровенно объясняет, почему фиксированный путь все еще нужен. В разделе мотивации она признает, что "there are now solutions which obviate the need for fixed derivation paths for specific script types", имея в виду дескрипторы, а затем называет причину, по которой они не решают вопрос: многие программные кошельки и аппаратные устройства подписи по-прежнему сохраняют резервную копию только сид-фразы, без записи о пути или типе скрипта рядом с ней. Дескриптор несет эту информацию, а список слов не несет, поэтому вместо него ее несет число 86.

Деривация BIP-86 vs P2TR

Деривация BIP-86 представляет собой один рецепт заполнения выхода P2TR, а не определение такого выхода. P2TR является версией свидетеля 1 и принимает любой ключ выхода из 32 байт, включая ключ, агрегированный из нескольких подписантов по MuSig2, и ключ, фиксирующий дерево действительно пригодных для использования скриптов. BIP-86 охватывает самый узкий случай в этом пространстве: один подписант, одна сид-фраза и путь скрипта, намеренно оставленный непригодным для траты, чтобы за ключом ничего не скрывалось. Каждый адрес, который создает BIP-86, является выходом P2TR, а большая часть того, что может выразить P2TR, полностью находится вне его области, поэтому кошелек, который заявляет о поддержке Taproot, может все равно отклонить ветвь с мультиподписью или временной блокировкой в том же формате адреса.

Не путать с

Часто задаваемые вопросы

Какой путь деривации используют адреса Taproot?

Счета Taproot с одной подписью находятся на m/86'/0'/0', со значением 0 ниже для адресов получения и 1 для сдачи. Адреса в этой ветви начинаются с bc1p. BIP-44, BIP-49 и BIP-84 используют одну и ту же форму пути из пяти уровней, а меняется число назначения наверху.

Ключ на m/86'/0'/0'/0/0 является ключом в моем адресе?

Нет. BIP-86 модифицирует этот производный ключ хешем самого себя, прежде чем он станет адресом, поэтому значение в цепочке не совпадает со значением, которое вывел ваш кошелек. Тестовые векторы спецификации публикуют оба для одного пути: внутренний ключ cc8a4bc64d897bddc5fbc2f670f7a8ba0b386779106cf1223c6fc5d7cd6fc115 и ключ выхода a60869f0dbcf1dc659c9cecbaf8050135ea9e8cdc487053f1dc6880949dc684c.

Нужен ли мне BIP-86, если в моем кошельке используются дескрипторы выходов?

Нет, если дескриптор хранится вместе с вашей резервной копией, поскольку дескриптор tr() прямо фиксирует тип скрипта и путь. BIP-86 существует для обычного случая, который называет спецификация, когда резервная копия представляет собой только сид-фразу и ничего больше, а именно так до сих пор работает большинство аппаратных устройств подписи.

Читайте далее

Связанные термины

Еще в разделе «Адреса и ключи»

Читать эту страницу на английском