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

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

HD-кошелек

Другие названия: HD-протокол, иерархический детерминированный кошелек, BIP32.

Что такое HD-кошелек?
HD-кошелек выводит все ключи, какие ему когда-либо понадобятся, из одного случайного сида, упорядочивая их в виде дерева родителей и потомков, которое BIP-32 описал в 2012 году.

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

Один сид порождает мастер-ключ, мастер-ключ порождает ветви, а ветви порождают каждый адрес, который вы используете. BIP-32 получил номер 11 февраля 2012 года, и фактически все аппаратные, мобильные и настольные кошельки, поставляемые сегодня, следуют ему. Именно поэтому двенадцать слов на карточке могут восстановить кошелек, которым вы пользуетесь уже десять лет.

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

HD-кошелек превращает одно число в иерархию с помощью хеша с ключом, применяемого снова и снова. Сид подается в HMAC-SHA512 с фиксированной ключевой строкой "Bitcoin seed" и дает 64 байта: левые 32 становятся мастер-приватным ключом, а правые 32 становятся мастер-цепным кодом. Эта пара является корнем всего, что находится ниже.

Каждый следующий шаг берет ключ, его цепной код и номер индекса, хеширует их тем же способом и дает дочерний ключ с собственным цепным кодом. У каждого узла есть 4 294 967 296 возможных дочерних элементов, разделенных на две половины: индексы ниже 2 147 483 648 являются обычными и могут быть вычислены только из публичной части, а индексы на этой линии или выше являются усиленными и требуют приватного ключа. Повторение шага строит дерево, а позиция в этом дереве записывается как путь деривации.

Именно детерминированность делает эту конструкцию ценной. Один и тот же сид, переданный любой корректной реализации, навсегда производит в точности те же ключи в том же порядке. Ключ никогда не хранится, а только пересчитывается, поэтому резервная копия представляет собой предложение, а не файл, который растет при каждом получении платежа.

Слова являются отдельным уровнем, и путаница между двумя уровнями вызывает большинство проблем с восстановлением. BIP-39 определяет, как фраза, взятая из списка из 2048 слов, становится сидом, растягиваясь через PBKDF2 с HMAC-SHA512 на 2048 итераций, с солью из строки "mnemonic" плюс необязательной кодовой фразы (passphrase). BIP-32 ничего не знает о словах, а BIP-39 ничего не знает о деревьях. Их связывает соглашение, поэтому два кошелька могут совпадать по вашей фразе и при этом расходиться по вашим адресам.

Bitcoin Core создает только иерархические детерминированные кошельки начиная с версии 0.16.0. До этого кошелек хранил пул несвязанных случайных ключей, и резервная копия устаревала в тот момент, когда пул продвигался дальше нее.

Почему это важно при покупке биткоина

Фраза, которую вы записываете при настройке кошелька, является единственным, что стоит между вами и каждым биткоином, который вы когда-либо купите, и именно древовидная структура делает это утверждение верным.

Сделайте резервную копию один раз, и она останется полной. Сто выводов с биржи на сто новых адресов являются потомками одного корня, поэтому ничто из того, что вы делаете потом, не расширяет то, что вам нужно защищать. Это самое крупное практическое улучшение в хранении биткоина с момента выхода первого клиента, и в равной мере это причина того, что сид-фраза, сфотографированная один раз, скомпрометирована навсегда: фотография охватывает биткоины, которые вы еще не купили.

Переносимость является вторым выигрышем, и у нее есть подвох. Фраза, записанная на Trezor или Ledger, восстанавливается в Sparrow, Electrum или BlueWallet, потому что все они реализуют один и тот же стандарт. Подвох в маршруте. BIP-44 создает адреса, начинающиеся с 1, BIP-49 создает 3, BIP-84 создает bc1q, а BIP-86 создает bc1p, и все из одинаковых слов. При восстановлении в программное обеспечение, которое по умолчанию использует другое назначение, баланс показывает ноль, пока биткоины остаются нетронутыми на другой ветви. Запись пути деривации рядом с резервной копией, и ничего другого рядом с ней, предотвращает именно эту панику.

Лимит разрыва (gap limit) является третьим, что стоит знать. Восстановленный кошелек сканирует вперед 20 неиспользованных адресов по BIP-44 и затем перестает искать. Сорок нажатий кнопки получения на кошельке, для которого вы никогда не делали резервную копию, и затем использование последнего адреса является надежным способом получить восстановление, которое сообщает о пустом балансе.

Чтение m/84'/0'/0'/0/0 уровень за уровнем

Путь деривации работает как почтовый адрес, сужаясь на каждом уровне. Читайте стандартный путь native SegWit слева направо.

  • m является мастер-ключом, произведенным из вашего сида.
  • 84' выбирает назначение BIP-84, которое создает адреса native SegWit, начинающиеся с bc1q. Апостроф помечает уровень как усиленный.
  • 0' является типом монеты, и 0 означает основную сеть биткоина. Тестовая сеть была бы 1'.
  • 0' является счетом, поэтому отдельный счет для бизнеса был бы 1'.
  • 0 является цепочкой: 0 для адресов, которые вы выдаете, 1 для сдачи.
  • 0 является индексом адреса, увеличивающийся с каждым полученным платежом.

Первые три уровня являются усиленными, а последние два нет, намеренно. Именно это разделение позволяет экспортировать расширенный публичный ключ уровня счета в кошелек только для наблюдения, который затем может генерировать адреса получения и сдачи, никогда не имея возможности достичь родственного счета или подняться обратно к мастер-ключу.

HD-кошелек vs сид-фраза

HD-кошелек представляет собой схему деривации; сид-фраза является одним из способов записать число, из которого он исходит. BIP-32 определяет дерево и принимает любой сид от 128 до 512 бит, рекомендуя 256. BIP-39 определяет слова. Electrum поставляет собственный несовместимый формат фразы и при этом остается полностью иерархическим детерминированным, что показывает, что два уровня действительно независимы. Различие важно, когда программное обеспечение заявляет о поддержке восстановления BIP-39: это обещание о чтении ваших слов, а не о том, на какой ветви оно будет искать после этого.

HD-кошелек vs путь деривации

HD-кошелек представляет собой дерево; путь деривации представляет собой один маршрут через него. Люди описывают кошелек как «кошелек BIP-84», как будто это категория продукта, но любой кошелек BIP-32 может пройти любой путь, и большинство современного программного обеспечения без труда покажет несколько счетов с разными назначениями из одного сида. Рассматривайте путь как координату, которую вы записываете рядом с резервной копией, а не как свойство приложения, которое вы случайно установили.

Не путать с

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

Нужно ли делать резервную копию каждого адреса, который создает мой HD-кошелек?

Нет. Каждый адрес выводится из одного и того же сида по фиксированному расчету, поэтому фраза восстановления уже охватывает адреса, которые вы еще не использовали. Запишите путь деривации вместе с фразой, и резервная копия будет полной.

Я восстановил сид, а баланс нулевой. Что пошло не так?

Почти всегда дело в пути деривации или в лимите разрыва. Одни и те же слова дают разные адреса в BIP-44, BIP-49, BIP-84 и BIP-86, а восстановленный кошелек перестает сканировать после 20 неиспользованных адресов. Проверьте другие назначения и увеличьте лимит разрыва, прежде чем считать, что что-то потеряно.

Безопаснее ли генерировать ключи по одному, чем пользоваться HD-кошельком?

Нет, и обычно он безопаснее. Каждый ключ по-прежнему выводится из энтропии объемом от 128 до 256 бит, а одна резервная копия устраняет самую частую ошибку: устаревшую копию, в которой нет ключа, использованного вами позже.

Могут ли два приложения-кошелька использовать один и тот же HD-кошелек?

Да. Импортируйте одну и ту же фразу в оба приложения и задайте один и тот же путь деривации, и они выведут одинаковые адреса и покажут одинаковые балансы. Если подписывать в обоих сразу, могут возникнуть конфликтующие транзакции, поэтому считайте одно из них основным.

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

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

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

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