Большинство владельцев Ledger Nano в какой-то момент начинают задаваться вопросом, есть ли возможность настроить их фразу восстановления. Некоторые могут пойти еще дальше и попытаться использовать случайно выбранные слова в процессе восстановления. В таких случаях после подтверждения последнего слова они почти наверняка увидят сообщение:
"Recovery phrase is invalid, retry"
Означает ли это, что создание нового кошелька с собственным набором слов невозможно?
И вот приятный сюрприз: это возможно, хотя и с определённым ограничением. Но давайте начнем с самого начала.
Первым ограничением является требование о том, чтобы все слова находились в стандартном списке BIP39.
(Предложение по улучшению Биткойна — номер 39). Подробнее узнать о том, что такое предложения по улучшению Bitcoin, можно в этой статье Википедии.
BIP39 — это не что иное, как набор из 2048 слов, выбранных таким образом, что первые 4 буквы каждого слова уникальны. Это правило применимо даже к трехбуквенным словам.
Это свойство облегчает их запоминание при создании последовательности из нескольких слов, которая и является вашим начальным числом.
Второе ограничение — это требование к последнему слову вашей последовательности. Это определенная контрольная сумма, определяемая всеми остальными элементами последовательности, и вы не можете просто выбрать его самостоятельно. Именно поэтому мы видим сообщение об ошибке каждый раз, когда мы пытаемся ввести случайно выбранные слова в качестве начального значения для нашего Ledger Nano. Обычно условию контрольной суммы соответствует более чем одно слово; однако шанс найти действительный вариант, просто угадав, невероятно мал. Количество слов, удовлетворяющих условию контрольной суммы, строго связано с общим количеством начальных слов. В случае начального числа из 24 слов (наиболее безопасный вариант) всегда есть ровно 8 возможных слов, которые могут служить контрольной суммой. Таким образом, вероятность случайного извлечения действительного слова из набора BIP39 из 2048 слов составляет ровно 8 в 2048 году, или всего 0,39%. Неудивительно, что вы увидели сообщение об ошибке.
Тогда как мы можем найти правильную контрольную сумму для выбранной нами последовательности? Например, возьмем случайный набор из 23 слов, соответствующих стандарту BIP39:
У каждого слова есть индекс, который представляет собой число, основанное на его алфавитном порядке. Важно начинать нумерацию с 0. Затем каждый индекс должен быть выражен как двоичное значение. Поскольку список BIP39 содержит 2048 элементов, индекс каждого слова должен состоять из 11 бит. Таким образом мы находим:
На следующем шаге мы объединяем все индексы, сохраняя порядок их появления. Это дает нам 253-битную двоичную последовательность:
Полученный результат дополняем дополнительными 3 битами по своему выбору.
Помните, мы говорили, что фраза восстановления из 24 слов имеет ровно 8 возможных результатов контрольной суммы?
Число 8 — это всего лишь простое следствие этих трех битов.
Все 8 результатов мы получим, просто поместив здесь 000, 001, 010, 011, 100, 101, 110 и 111.
Для этого примера мы выбираем: 000.
В конце мы объединяем его, в результате чего получается 256-битное двоичное слово:
Следующим шагом является вычисление хеша SHA256 таких подготовленных двоичных данных.
Алгоритм SHA256 (алгоритм безопасного хеширования, 256-битный вывод) является важной частью технологии блокчейн.
Подробнее о том, что такое SHA256, можно узнать в статье Википедии об алгоритме SHA-256.
В результате такого расчета мы получим следующее шестнадцатеричное слово:
Следующий шаг — извлечь первые 8 бит из приведенного выше результата. Таким образом, мы берем первые 2 шестнадцатеричных символа - 27.
Они соответствуют:
Мы снова используем те же 3 бита, которые выбрали ранее. На этот раз мы соединяем их в начале извлеченной двоичной строки. Следовательно, мы получаем:
это двоичное значение 39. Это индекс BIP39 слова контрольной суммы, которое мы пытаемся найти. Не забывайте, что нумерация индексов начинается с «0». Итак, если вы используете список слов BIP39 со стандартной нумерацией, начинающейся с "1", тогда фактический индекс будет 40. Мы находим правильный индекс на Список BIP39 и мы получаем слово: agent Наконец, фраза восстановления из 24 слов, содержащее 23 слова по нашему выбору :
Для остальных 3-битных комбинаций последнее слово контрольной суммы:


