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

Глоссарий / Кошельки и хранение

Сид HD-кошелька

Другие названия: Корневой сид.

Что такое сид HD-кошелька?
Сид HD-кошелька представляет собой необработанное двоичное число, от 128 до 512 бит, которое BIP-32 подает на один хеш, чтобы получить мастер-ключ кошелька и цепной код.

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

Кошельки говорят о словах, потому что люди могут переписать слова вручную, но BIP-32 слов никогда не видит. Он принимает строку байтов и выдает мастер-ключ за один проход HMAC-SHA512 с ключом из фиксированного текста "Bitcoin seed". Слова являются одним из популярных способов кодирования этой строки байтов, но не единственным используемым.

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

BIP-32 задает сид размером от 128 до 512 бит, рекомендует 256 и ничего не говорит о том, откуда берутся эти биты. Сид подается в HMAC-SHA512 как сообщение, а ключом служит ASCII-строка "Bitcoin seed". Функция возвращает 64 байта. Левые 32 байта становятся мастер-приватным ключом; правые 32 байта становятся мастер-цепным кодом, дополнительным секретом, который не дает утекшему дочернему ключу раскрыть соседние дочерние ключи. Все остальное в кошельке, каждый аккаунт, каждый адрес, каждый выход сдачи, происходит от этой пары путем повторения похожего хеша с номером индекса.

В спецификации есть один крайний случай, который на практике не встречается. Если эти левые 32 байта окажутся нулем или значением не ниже порядка кривой secp256k1, сид недействителен, и кошелек должен попробовать снова. Вероятность составляет примерно один шанс из 2 в степени 127, поэтому ни одна реализация никогда не сообщала о таком случае.

То, откуда берутся биты, является отдельным уровнем, и ответов на этот вопрос несколько. BIP-39 всегда выдает ровно 512 бит, прогоняя мнемонику через PBKDF2. Electrum прогоняет свою собственную фразу через PBKDF2 с другой солью и получает сид, который ни один инструмент BIP-39 никогда не воспроизведет из тех же слов. Кошелек также может взять 256 бит напрямую из аппаратного генератора случайных чисел и вообще не показывать фразу, именно так поступает Bitcoin Core.

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

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

Спросите Bitcoin Core о кошельке, и он сообщит hdseedid, отпечаток сида, а не какую-либо фразу, потому что Core никогда не реализовывал BIP-39. Вызов RPC sethdseed, добавленный в версии 0.17.0, мог установить конкретный сид в устаревший кошелек, а дескрипторные кошельки стали вариантом по умолчанию для создаваемых кошельков в Bitcoin Core 23.0.

Документация для разработчиков является другим местом, где это открыто видно. BIP-32 и BIP-39 публикуют тестовые векторы, в которых сид показан как 128 шестнадцатеричных символов рядом с мнемоникой, которая его породила, и это самое ясное доступное пояснение того, что это два разных объекта.

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

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

Сид является числом, а фраза представляет собой способ записать это число. Разделение этих понятий объясняет несколько вещей, которые иначе кажутся магией. Именно поэтому добавление необязательной кодовой фразы (passphrase) меняет сид, оставляя ваши слова нетронутыми. Именно поэтому фраза Electrum и фраза BIP-39 могут обе состоять из двенадцати английских слов и при этом открывать разные кошельки. И именно поэтому кошелек, рекламирующий «импорт сида», может иметь в виду мнемонику, шестнадцатеричную строку или расширенный приватный ключ, три варианта ввода, у которых общее только название.

Не путать с

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

Можно ли получить свои слова обратно из необработанного сида?

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

Почему Bitcoin Core не показывает мне 12 слов?

Core никогда не реализовывал BIP-39. Он генерирует сид напрямую из системной случайности и идентифицирует его через hdseedid, поэтому его резервной копией является файл кошелька или экспорт дескрипторов, а не мнемоника.

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

Еще в разделе «Кошельки и хранение»

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