База всех приватных ключей биткоин адресов

Кошельки — это контейнеры для закрытых ключей. Обычно реализуемые в виде структурированных файлов или простых баз данных. Другой метод создания ключей- детерминированная генерация ключей. Здесь вы производите каждый новый закрытый ключ. Используя одностороннюю хэш-функцию от предыдущего закрытого ключа. Связывая их в последовательности. Пока вы можете воссоздать эту последовательность. Вам нужен только первый ключ (известный как начальный или главный ключ). Чтобы сгенерировать их все. В этом разделе мы рассмотрим различные методы генерации ключей и структуры кошельков. Построенные вокруг них.

Недетерминированные (Случайные) Кошельки

В первых биткойн-клиентах кошельки были просто коллекциями случайно сгенерированных закрытых ключей. Этот тип кошелька называется недетерминированным кошельком типа 0. Например. Клиент Bitcoin Core предварительно генерирует 100 случайных закрытых ключей при первом запуске и генерирует больше ключей по мере необходимости. Используя каждый ключ только один раз. Этот тип кошельков называется Недостатком случайных ключей является то. Что если вы генерируете их много. Вы должны хранить копии всех из них. А это означает. Что кошелек должен часто резервироваться.

Каждый ключ должен быть резервирован. Иначе средства. Которые он контролирует. Будут безвозвратно потеряны. Если кошелек станет недоступным. Это прямо противоречит принципу избегания повторного использования адреса. Используя каждый биткойн-адрес только для одной транзакции. Повторное использование адресов снижает конфиденциальность. Связывая несколько транзакций и адресов друг с другом. Недетерминированный кошелек типа 0-это плохой выбор кошелька. Особенно если вы хотите избежать повторного использования адреса. Потому что это означает управление многими ключами. Что создает необходимость в частом резервном копировании.

Хотя клиент Bitcoin Core включает в себя кошелек Type-0, использование этого кошелька не поощряется разработчиками Bitcoin Core. На рис. 4-8 показан недетерминированный кошелек. Содержащий разрозненную коллекцию случайных ключей.

Детерминированные (Посеянные) Кошельки

Детерминированные. Или” посеянные Начальное число-это случайно сгенерированное число. Которое объединяется с другими данными. Такими как индексный номер или иерархические детерминированные кошельки (BIP0032/BIP0044)) для получения закрытых ключей. В детерминированном кошельке семя достаточно для восстановления всех производных ключей. И поэтому достаточно одной резервной копии во время создания.

Семя также достаточно для экспорта или импорта кошелька. Что позволяет легко переносить все ключи пользователя между различными реализациями кошелька.

Рис. 4-8. Недетерминированный (случайный) кошелек Type-0: коллекция случайно сгенерированных ключей

Мнемонические Кодовые Слова

Мнемонические коды — это последовательности английских слов. Которые представляют (кодируют) случайное число. Используемое в качестве семени для получения детерминированного кошелька. Последовательность слов достаточна. Чтобы воссоздать семя и оттуда воссоздать кошелек и все производные ключи.

Приложение wallet. Реализующее детерминированные кошельки с мнемоническим кодом. Покажет пользователю последовательность от 12 до 24 слов при первом создании кошелька. Эта последовательность слов является резервной копией кошелька и может быть использована для восстановления и повторного создания всех ключей в одном или любом совместимом приложении кошелька. Мнемонические кодовые слова облегчают пользователям резервное копирование кошельков. Потому что они легко читаются и правильно расшифровываются. По сравнению со случайной последовательностью чисел.

Мнемонические коды определены в предложении по улучшению биткойна 39 (см. [bip0039]), которое в настоящее время находится в стадии разработки. Обратите внимание. Что BIP0039-это проект предложения. А не стандарт. В частности. Существует другой стандарт. С другим набором слов. Используемый кошельком Electrum и предшествующий BIP0039. BIP0039 используется кошельком Trezor и несколькими другими кошельками. Но несовместим с реализацией Electrum.

BIP0039 определяет создание мнемонического кода и семени следующим образом:

  1. Создайте случайную последовательность (энтропию) от 128 до 256 бит.

  2. Создайте контрольную сумму случайной последовательности. Взяв первые несколько битов ее хэша SHA256.
  3. Добавьте контрольную сумму в конец случайной последовательности.
  4. Разделите последовательность на секции по 11 бит. Используя их для индексации словаря из 2048 предопределенных слов.
  5. Составьте от 12 до 24 слов. Представляющих мнемонический код.

В таблице 4-5 показана зависимость между размером энтропийных данных и длиной мнемонических кодов в словах.

Таблица 4-5. Мнемонические коды: энтропия и длина слова

Энтропия (биты) Контрольная сумма (биты) Энтропия+контрольная сумма Длина слова

128

4

132

12

160

5

165

15

192

6

198

18

224

7

231

21

256

8

264

24

Мнемонический код представляет собой от 128 до 256 битов. Которые используются для получения более длинного (512-битного) начального кода с помощью функции растяжения ключа PBKDF2.

Полученное семя используется для создания детерминированного кошелька и всех его производных ключей.

В таблицах 4-6 и 4-7 приведены некоторые примеры мнемонических кодов и производимых ими семян.

Таблица 4-6. 128-битный энтропийный мнемонический код и результирующее семя

Энтропийный вход (128 бит)

0c1e24e5917779d297e14d45f14e1a1a

Мнемоника (12 слов)

армейский фургон defense carry ревнивый истинный мусорный иск echo media make crunch

Семя (512 бит)

3338a6d2ee71c7f28eb5b882159634cd46a898463e9d2d0980f8e80dfbba5b0fa0291e5fb88 8a599b44b93187be6ee3ab5fd3ead7dd646341b2cdb8d08d13bf7

Таблица 4-7. 256-битный энтропийный мнемонический код и результирующее семя

Энтропийный вход (256 бит)

2041546864449caff939d32d574753fe684d3c947c3346713dd8423e74abcf8c

Мнемоника (24 слова)

торт яблоко одолжить шелк одобрить фитнес топ отрицание катушки бунт остаться волк багаж кислород слабый мажор правка мера пригласить любовь ловушка поле дилемма обязать

Семя (512 бит)

3972e432e99040f75ebe13a660110c3e29d131a2c808c7ee5f1631d0a977fcf473bee22 fce540af281bf7cdeade0dd2c1c795bd02f1e4049e205a0158906c343

Иерархические детерминированные кошельки (BIP0032/BIP0044)

Детерминированные кошельки были разработаны для того. Чтобы было легко получить много ключей из одного “семениНаиболее совершенной формой детерминированных кошельков является иерархический детерминированный кошелек или HD-кошелек, определенный стандартом BIP0032. Иерархические детерминированные кошельки содержат ключи. Полученные в древовидной структуре. Так что родительский ключ может получить последовательность дочерних ключей. Каждый из которых может получить последовательность внуков ключей. И так далее. До бесконечной глубины.

Эта древовидная структура показана на рис. 4-9.

Рис. 4-9. Иерархический детерминированный кошелек типа 2: дерево ключей. Генерируемых из семени

Совет

Если вы внедряете биткойн-кошелек. Он должен быть построен как HD-кошелек в соответствии со стандартами BIP0032 и BIP0044.

HD кошельки предлагают два основных преимущества по сравнению со случайными (недетерминированными) ключами. Во-первых, древовидная структура может использоваться для выражения дополнительного организационного значения, например. Когда определенная ветвь подразделов используется для приема входящих платежей. А другая ветвь используется для получения изменений от исходящих платежей. Ветви ключей также можно использовать в корпоративной среде. Распределяя различные ветви по подразделениям. Дочерним компаниям. Конкретным функциям или категориям бухгалтерского учета.

Второе преимущество HD-кошельков заключается в том. Что пользователи могут создавать последовательность открытых ключей. Не имея доступа к соответствующим закрытым ключам.

Это позволяет использовать HD-кошельки на небезопасном сервере или только для приема. Выдавая отдельный открытый ключ для каждой транзакции. Открытые ключи не должны быть предварительно загружены или получены заранее. Но у сервера нет закрытых ключей. Которые могут потратить эти средства.

Создание HD кошелька из семени

HD-кошельки создаются из одного корневого семени, которое представляет собой 128-, 256-или 512-битное случайное число. Все остальное в HD-кошельке детерминировано производным от этого корневого семени. Что позволяет воссоздать весь HD-кошелек из этого семени в любом совместимом HD-кошельке.

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

Процесс создания мастер-ключей и мастер-кода цепочки для HD-кошелька показан на рис .4-10.

Рис. 4-10. Создание мастер-ключей и цепного кода из корневого семени

Корневое семя вводится в алгоритм HMAC-SHA512, и полученный хэш используется для создания главного закрытого ключа (m) и главного кода цепочки. Главный закрытый ключ (m) затем генерирует соответствующий главный открытый ключ (M). Используя обычный процесс умножения эллиптической кривойm * G, который мы видели ранее в этой главе. Цепной код используется для введения энтропии в функцию. Которая создает дочерние ключи из родительских ключей. Как мы увидим в следующем разделе.

Частный дочерний ключ деривации

Иерархические детерминированные кошельки используют функцию деривации дочерних ключей (CKD) для получения дочерних ключей из родительских ключей.

Функции деривации дочерних ключей основаны на односторонней хэш-функции. Которая объединяет:

  • Родительский закрытый или открытый ключ (несжатый ключ ECDSA)
  • Семя называется цепным кодом (256 бит)
  • Индексный номер (32 бита)

Цепной код используется для введения в процесс. Казалось бы. Случайных данных. Так что индекс не является достаточным для получения других дочерних ключей. Таким образом. Наличие дочернего ключа не позволяет найти его братьев и сестер. Если у вас также нет кода цепочки. Начальное семя кода цепи (в корне дерева) создается из случайных данных. В то время как последующие коды цепи выводятся из каждого родительского кода цепи.

Эти три элемента объединяются и хэшируются для генерации дочерних ключей следующим образом.

Родительский открытый ключ. Код цепочки и номер индекса объединяются и хэшируются с помощью алгоритма HMAC-SHA512 для получения 512-битного хэша. Полученный хэш делится на две половины. Правая половина 256 бит хэш-вывода становится цепным кодом для дочернего элемента. Левая половина 256 бит хэша и индексный номер добавляются к родительскому закрытому ключу для получения дочернего закрытого ключа. На рис. 4-11мы видим. Что это иллюстрируется индексом. Установленным в 0 для получения 0 ‘ — го (первого по индексу) дочернего элемента родителя.

Рис. 4-11. Расширение родительского закрытого ключа для создания дочернего закрытого ключа

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

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

Использование производных дочерних ключей

Дочерние закрытые ключи неотличимы от недетерминированных (случайных) ключей. Поскольку функция вывода является односторонней функцией. Дочерний ключ не может быть использован для поиска родительского ключа. Дочерний ключ также не может быть использован для поиска братьев и сестер. Если у вас есть n ребенок. Вы не можете найти его братьев и сестер. Таких как N–1 ребенок или n+1 ребенок. Или любые другие дети. Которые являются частью последовательности. Только родительский ключ и код цепочки могут получить все дочерние элементы. Без кода Дочерней Цепочки дочерний ключ также не может быть использован для получения внуков. Вам нужен как дочерний закрытый ключ. Так и код Дочерней Цепочки. Чтобы начать новую ветвь и получить внуков.

Так для чего же может использоваться дочерний закрытый ключ сам по себе? Он может быть использован для создания открытого ключа и биткойн-адреса. Затем он может быть использован для подписания транзакций. Чтобы потратить все. Что было оплачено по этому адресу.

Совет

Дочерний закрытый ключ. Соответствующий открытый ключ и биткойн-адрес неотличимы от ключей и адресов. Созданных случайным образом. Тот факт, что они являются частью последовательности. Не виден за пределами функции HD wallet. Которая их создала. После создания они работают точно так же. Как” обычные

Расширенные клавиши

Как мы видели ранее. Функция вывода ключа может быть использована для создания дочерних элементов на любом уровне дерева на основе трех входных данных: ключа. Кода цепочки и индекса желаемого дочернего элемента. Два основных ингредиента-это ключ и код цепочки. И в сочетании они называются расширенным ключом. Термин

Расширенные ключи хранятся и представляются просто как объединение 256-битного ключа и 256-битного цепного кода в 512-битную последовательность. Существует два типа расширенных ключей. Расширенный закрытый ключ представляет собой комбинацию закрытого ключа и кода цепочки и может использоваться для получения дочерних закрытых ключей (а из них-дочерних открытых ключей). Расширенный открытый ключ — это открытый ключ и цепной код. Который можно использовать для создания дочерних открытых ключей. Как описано в разделе создание открытого ключа.

Представьте себе расширенный ключ как корень ветви в древовидной структуре HD-кошелька. С корнем ветви вы можете получить остальную часть ветви. Расширенный закрытый ключ может создать полную ветвь. В то время как расширенный открытый ключ может создать только ветвь открытых ключей.

Совет

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

Расширенные ключи кодируются с помощью Base58Check. Чтобы легко экспортировать и импортировать между различными кошельками. Совместимыми с BIP0032. Кодировка Base58Check для расширенных ключей использует специальный номер версии. Который приводит к префиксам Поскольку расширенный ключ составляет 512 или 513 бит. Он также намного длиннее. Чем другие строки. Закодированные Base58Check. Которые мы видели ранее.

Вот пример расширенного закрытого ключа. Закодированного в Base58Check:

xprv9tyUQV64JT5qs3RSTJkXCWKMyUgoqp7f3ha1xzg6zgu6u6q9vmnjgr67lctvy5p8oyayal9cawrue9i6gonmkuga5biw6hx4tws2six3b9c

Вот соответствующий расширенный открытый ключ. Также закодированный в Base58Check:

xpub67xpozcx8pe95XVuZLHXZeG6XWXHpgq6qv5cmnfi7cs5mtjj2tgypeqbbs2uar6keceemvkzbplrtjunsdmstweylxhrgpxdp14sk9tjpw9

Вывод открытого дочернего ключа

Как уже упоминалось ранее. Очень полезной характеристикой иерархических детерминированных кошельков является возможность извлекать открытые дочерние ключи из открытых родительских ключей, не имея закрытых ключей. Это дает нам два способа получения дочернего открытого ключа: либо из дочернего закрытого ключа. Либо непосредственно из родительского открытого ключа.

Таким образом. Расширенный открытый ключ может быть использован для получения всех открытых ключей (и только открытых ключей) в этой ветви структуры HD wallet.

Этот ярлык можно использовать для создания очень безопасных развертываний только с открытым ключом. Где сервер или приложение имеют копию расширенного открытого ключа и никаких закрытых ключей вообще. Такого рода развертывание может производить бесконечное количество открытых ключей и биткойн-адресов. Но не может тратить ни одной из денег. Отправленных на эти адреса. Между тем, на другом. Более защищенном сервере. Расширенный закрытый ключ может получить все соответствующие закрытые ключи для подписания транзакций и расходования денег.

Одним из распространенных применений этого решения является установка расширенного открытого ключа на веб-сервере. Обслуживающем приложение электронной коммерции. Веб-сервер может использовать функцию деривации открытого ключа для создания нового биткойн-адреса для каждой транзакции (например. Для корзины покупок клиента). Веб-сервер не будет иметь никаких закрытых ключей. Которые были бы уязвимы для кражи. Без HD-кошельков единственный способ сделать это-сгенерировать тысячи биткойн-адресов на отдельном защищенном сервере. А затем предварительно загрузить их на сервер электронной коммерции. Этот подход громоздок и требует постоянного обслуживания. Чтобы гарантировать. Что сервер электронной коммерции не “исчерпает” ключи.

Еще одно распространенное применение этого решения — для холодных хранилищ или аппаратных кошельков. В этом случае расширенный закрытый ключ может храниться на бумажном кошельке или аппаратном устройстве (например. Аппаратном кошельке Trezor). В то время как расширенный открытый ключ может храниться в сети. Пользователь может создавать адреса Чтобы потратить эти средства. Пользователь может использовать расширенный закрытый ключ на оффлайн-подписывающем биткоин-клиенте или подписывать транзакции на аппаратном кошельке устройства (например, Trezor). Рис. 4-12 иллюстрирует механизм расширения родительского открытого ключа для получения дочерних открытых ключей.

Рис. 4-12. Расширение родительского открытого ключа для создания дочернего открытого ключа

Закаленная дочерняя Деривация ключа

Возможность вывести ветвь открытых ключей из расширенного открытого ключа очень полезна. Но она сопряжена с потенциальным риском. Доступ к расширенному открытому ключу не дает доступа к дочерним закрытым ключам. Однако, поскольку расширенный открытый ключ содержит код цепочки. Если дочерний закрытый ключ известен или каким-то образом просочился. Его можно использовать вместе с кодом цепочки для получения всех остальных дочерних закрытых ключей. Один просочившийся дочерний секретный ключ вместе с кодом Родительской Цепочки раскрывает все секретные ключи всех детей. Хуже того, дочерний закрытый ключ вместе с кодом Родительской Цепочки может быть использован для вывода родительского закрытого ключа.

Чтобы противостоять этому риску. HD кошельки используют альтернативную функцию деривации. Называемую закаленной деривацией, который “разрывает Закаленная функция деривации использует Родительский закрытый ключ для получения кода Дочерней Цепочки вместо родительского открытого ключа. Это создает Закаленная функция вывода выглядит почти идентичной обычной функции вывода дочернего закрытого ключа. За исключением того. Что родительский закрытый ключ используется в качестве входных данных для хэш-функции вместо родительского открытого ключа. Как показано на диаграмме на рис .4-13.

Рис. 4-13. Усиленная Деривация дочернего ключа; опускает Родительский открытый ключ

Когда используется закаленная частная функция деривации. Результирующий дочерний закрытый ключ и код цепочки полностью отличаются от того. Что было бы результатом нормальной функции деривации. Результирующая Поэтому усиленная Деривация используется для создания

Проще говоря. Если вы хотите использовать удобство расширенного открытого ключа для получения ветвей открытых ключей. Не подвергая себя риску утечки кода цепочки. Вы должны получить его от закаленного родителя. А не от обычного родителя. Как лучшая практика. Дочерние элементы уровня 1 Мастер-ключей всегда выводятся через закаленную деривацию. Чтобы предотвратить компрометацию мастер-ключей.

Индексные номера для нормальной и закаленной деривации

Индексный номер. Используемый в функции вывода. Представляет собой 32-разрядное целое число. Чтобы легко отличить ключи. Полученные с помощью обычной функции деривации, от ключей. Полученных с помощью закаленной деривации. Этот номер индекса разделен на два диапазона. Индексные числа от 0 до 231-1 (от 0x0 до 0x7FFFFFFF) используются только для нормального вывода. Индексные числа между 231 и 232-1 (от 0x80000000 до 0xFFFFFFFF) используются только для затвердевшего вывода. Поэтому, если индекс меньше 231, это означает. Что ребенок нормальный , тогда как если индекс равен или выше 231, ребенок закален.

Чтобы сделать индексный номер более удобным для чтения и отображения. Индексный номер для закаленных детей отображается начиная с нуля. Но с простым символом. Поэтому первый нормальный дочерний ключ отображается как 0, тогда как первый закаленный дочерний ключ (индекс 0x80000000) отображается как 0′. Затем последовательно второй закаленный ключ будет иметь индекс 0x80000001 и будет отображаться как 1′. И так далее. Когда вы видите индекс кошелька HD i’. Это означает 231+i.

Идентификатор ключа кошелька HD (путь)

Ключи в HD-кошельке идентифицируются с помощью соглашения об именовании таблицу 4-8). Закрытые ключи. Производные от главного закрытого ключа. Начинаются с буквы Открытые ключи. Производные от главного открытого ключа. Начинаются с буквы Таким образом. Первый дочерний закрытый ключ главного закрытого ключа равен m/0. Первый дочерний открытый ключ — M / 0. Второй внук первого ребенка — это m / 0 / 1, и так далее.

Например, идентификатор m/x/y/z описывает ключ. Который является z-м дочерним элементом ключа m/x/y. Который является y-м дочерним элементом ключа m / x. Который является x-м дочерним элементом m.

Таблица 4-8. Примеры путей к кошельку HD

HD путь Ключ описан

М / 0

Первый (0) дочерний закрытый ключ от главного закрытого ключа (m)

М/0 / 0

Первый внук закрытый ключ первого ребенка (m / 0)

М/0′ / 0

Первый нормальный внук первого закаленного ребенка (М / 0′)

М/1 / 0

Первый внук закрытый ключ второго ребенка (m / 1)

М/23/17/0/0

Первый праправнук открытый ключ первого правнука 18-го внука 24-го ребенка

Навигация по древовидной структуре кошелька HD

Древовидная структура кошелька HD обеспечивает огромную гибкость. Каждый родительский расширенный ключ может иметь 4 миллиарда детей: 2 миллиарда нормальных детей и 2 миллиарда закаленных детей. Каждый из этих детей может иметь еще 4 миллиарда детей. И так далее. Дерево может быть настолько глубоким. Насколько вы хотите. С бесконечным числом поколений. Однако при всей этой гибкости становится довольно трудно ориентироваться в этом бесконечном дереве. Особенно трудно переносить HD кошельки между реализациями. Потому что возможности внутренней организации в филиалы и подветвления бесконечны.

Два предложения по улучшению биткойна (BIPs) предлагают решение этой сложности. Создавая некоторые предлагаемые стандарты для структуры деревьев кошельков HD. BIP0043 предлагает использовать первый закаленный дочерний индекс в качестве специального идентификатора, который обозначает Основываясь на BIP0043, HD-кошелек должен использовать только одну ветвь дерева уровня 1, с индексным номером. Идентифицирующим структуру и пространство имен остальной части дерева. Определяя его назначение. Например. HD-кошелек. Использующий только ветвь m / i’/. Предназначен для обозначения конкретной цели. И эта цель идентифицируется индексным номером “i”.

Расширяя эту спецификацию. BIP0044 предлагает структуру мультиаккаунта в качестве” целевого 44'под BIP0043. Все HD-кошельки, следующие за структурой BIP0044, идентифицируются тем фактом. Что они использовали только одну ветвь дерева: m/44’/.

BIP0044 определяет структуру как состоящую из пяти предопределенных уровней дерева:

m / purpose' / coin_type' / account' / change / address_index

44'. Второй уровень На данный момент определены три валюты: Bitcoin-это m/44’/0′. Bitcoin Testnet-m/44’/1′, а Litecoin-m/44’/2′.

Третий уровень дерева-это Например. HD-кошелек может содержать два биткойн — m / 44′ / 0′ / 0′ и m/44’/0’/1′. Каждая учетная запись является корнем своего собственного поддерева.

На четвертом уровне. “изменение”. HD-кошелек имеет два поддерева: одно для создания адресов приема и одно для создания адресов изменения. Обратите внимание. Что в то время как предыдущие уровни использовали закаленную деривацию. Этот уровень использует нормальную деривацию. Это делается для того. Чтобы позволить этому уровню дерева экспортировать расширенные открытые ключи для использования в незащищенной среде. Используемые адреса выводятся HD-кошельком как дочерние элементы четвертого уровня. Что делает пятый уровень дерева Например. Третьим получающим адресом для биткойн-платежей на основном счете будет M/44’/0’/0’/0/2. Таблица 4-9 приведем еще несколько примеров.

Таблица 4-9. Примеры структуры кошелька BIP0044 HD

HD путь Ключ описан

М/44’/0’/0’/0/2

Третий получающий открытый ключ для основного биткоин счета

М/44’/0’/3’/1/14

Пятнадцатое изменение адреса открытого ключа для четвертого биткоин-счета

м/44’/2’/0’/0/1

Второй закрытый ключ на основном счете Litecoin для подписания транзакций

Experimenting with HD wallets using sx tools

Using the command-line tool sx, introduced in Chapter 3, you can experiment with generating and extending BIP0032 deterministic keys. As well as displaying them in different formats:

$ sx hd-seed > m # create a new master private key from a seed and store in file "m" $ cat m # show the master extended private key xprv9s21ZrQH143K38iQ9Y5p6qoB8C75TE71NfpyQPdfGvzghDt39DHPFpovvtWZaRgY5uPwV7RpEgHs7cvdgfiSjLjjbuGKGcjRyU7RGGSS8Xa $ cat m | sx hd-pub 0 # generate the M/0 extended public key xpub67xpozcx8pe95XVuZLHXZeG6XWXHpGq6Qv5cmNfi7cS5mtjJ2tgypeQbBs2UAR6KECeeMVKZBPLrtJunSDMstweyLXhRgPxdp14sk9tJPW9 $ cat m | sx hd-priv 0 # generate the m/0 extended private key xprv9tyUQV64JT5qs3RSTJkXCWKMyUgoQp7F3hA1xzG6ZGu6u6Q9VMNjGr67Lctvy5P8oyaYAL9CAWrUE9i6GoNMKUga5biW6Hx4tws2six3b9c $ cat m | sx hd-priv 0 | sx hd-to-wif # show the private key of m/0 as a WIF L1pbvV86crAGoDzqmgY85xURkz3c435Z9nirMt52UbnGjYMzKBUN $ cat m | sx hd-pub 0 | sx hd-to-address # show the bitcoin address of M/0 1CHCnCjgMNb6digimckNQ6TBVcTWBAmPHK $ cat m | sx hd-priv 0 | sx hd-priv 12 --hard | sx hd-priv 4 # generate m/0/12'/4 xprv9yL8ndfdPVeDWJenF18oiHguRUj8jHmVrqqD97YQHeTcR3LCeh53q5PXPkLsy2kRaqgwoS6YZBLatRZRyUeAkRPe1kLR1P6Mn7jUrXFquUt