Проверить каждый шаг — значит на каждом этапе получить объект, который можно сверить с эталоном: контрольную сумму фразы, отпечаток ключа, путь деривации и первый адрес. Ощущение доказательством не является. Фраза считается проверенной тогда, когда записанный заранее адрес совпал посимвольно с адресом, который выдало второе устройство при том же пути деривации. Проверяют их по отдельности.

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

Что считается доказательством на каждом шаге

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

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

По тексту стандарта BIP-39, принятого 10 сентября 2013 года, длина контрольной суммы равна энтропии, делённой на 32. Для фразы из 24 слов это 256 бит случайности плюс 8 бит суммы, итого 264 бита, которые разбиваются на 24 группы по 11 бит. Каждая группа — номер слова в списке из 2048 позиций.

Уровни доказательства и что отсеивает каждый

Объект сверки Какую ошибку отсеивает Чего не замечает Где его взять
Контрольная сумма фразы Опечатку в слове и перестановку слов: кошелёк отказывается принимать такой набор Подмену одной корректной фразы на другую корректную фразу Проверяется автоматически при вводе фразы в кошелёк
Отпечаток главного ключа Ввод не той фразы: отпечаток у каждой фразы свой и записывается заранее Ошибку в выборе пути деривации, отпечаток от пути не зависит Показывается в настройках кошелька и в описании мультиподписи
Путь деривации Расчёт адресов по чужой ветке: другой путь даёт другие адреса из той же фразы Подмену самой фразы, путь одинаков у разных владельцев Записывается при настройке, виден в параметрах кошелька
Первый адрес ветки Любое расхождение в звеньях выше: фразе, пути, формате адресов Состояние остальных адресов ветки, если адреса сдачи не сверялись Выводится кошельком после восстановления из фразы

Сверка идёт снизу вверх. Начинать с адреса рациональнее: совпал адрес — сошлись и фраза, и путь, и формат. Расхождение же раскручивают в обратную сторону, по звеньям, пока не найдётся место, где эталон и полученное значение разошлись.

Как записать путь деривации, чтобы его можно было сверить

Путь задан стандартом BIP-44 и состоит из пяти уровней: назначение, тип монеты, номер счёта, признак внутреннего либо внешнего адреса и номер адреса. Первые три уровня защищённые. Последние два публичные. Тип монеты берётся не произвольно: номера закреплены в отдельном реестре SLIP-0044, где за биткоином стоит индекс 0, за лайткоином 2, за эфиром 60, за троном 195.

Записывать путь нужно целиком, а не одним номером монеты. Та же фраза при изменении номера счёта даёт другую ветку адресов с нулевым балансом, и это выглядит как утрата средств, хотя средства на месте. Если сверка дала пустой кошелёк, перебирайте уровни пути прежде, чем делать какие-либо выводы о фразе.
BIP-44 задаёт предел поиска использованных адресов: при 20 неиспользованных адресах подряд кошелёк считает, что дальше по ветке пусто, и прекращает сканирование. Отсюда следует практическое правило — средства, лежащие за пределами разрыва в 20 адресов, восстановленный кошелёк самостоятельно не найдёт, и такой адрес придётся добавлять вручную.

Проверка шаг за шагом с фиксацией результата

  1. Выпишите на отдельный лист эталоны до начала проверки: отпечаток главного ключа, путь деривации целиком, формат адресов и первый адрес ветки.
  2. Введите фразу на втором устройстве и дождитесь, что кошелёк её принял — отказ на этом шаге означает ошибку в словах, а не в пути.
  3. Сверьте отпечаток главного ключа с выписанным эталоном: совпадение подтверждает, что введена та самая фраза, а не другая корректная.
  4. Задайте путь деривации в точности по записи и убедитесь, что кошелёк показывает тот же формат адресов, что и рабочий профиль.
  5. Сравните первый внешний адрес и первый адрес сдачи посимвольно от начала до конца, не ограничиваясь знаками по краям строки.
  6. Запишите дату проверки и результат по каждому из четырёх объектов, затем стёрите второе устройство до заводского состояния.
Схема из пяти шагов: запись эталонов, ввод фразы, сверка отпечатка ключа, установка пути деривации, посимвольное сравнение адресов
Схема из пяти шагов: запись эталонов, ввод фразы, сверка отпечатка ключа, установка пути деривации, посимвольное сравнение адресов

Чем отличается пройденная проверка от «вроде сошлось»

Признак один: результат записан. Пройденная проверка оставляет след — лист с четырьмя строками, датой и пометкой о совпадении. Несостоявшаяся проверка следа не оставляет вовсе, поэтому через полгода владелец не может ответить, что именно он сверял и чем закончил. Фиксация и превращает процедуру в доказательство, которое работает без участия памяти. Лист дешевле памяти.

Второй признак — повторяемость. Проверка считается корректной, если по тем же записям её способен повторить другой человек и получить тот же результат. Это требование отсекает привычку сверять «по памяти»: владелец помнит начало адреса, видит знакомые знаки и останавливается, хотя середина строки могла разойтись.

Типовые ошибки: сверка не того объекта

  • Сверяют четыре знака в начале и четыре в конце адреса. Середину строки такая сверка не покрывает, а именно там и расходятся адреса из разных веток.
  • Принимают успешный ввод фразы за проверку фразы. Кошелёк подтвердил корректность набора слов, но не их принадлежность вашему хранилищу.
  • Эталоны выписывают после восстановления, а не до него. Тогда сверять нечего: оба значения получены из одного источника в один момент.
  • Путь деривации запоминают по названию формата адресов. Названия у разных кошельков различаются, а номера уровней пути одинаковы и однозначны.
  • Второе устройство после сверки оставляют настроенным. Фраза при этом живёт в двух местах, и число точек утечки удваивается.

Что делать, если шаг не сошёлся

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

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

Чек-лист

  • Эталоны выписаны до начала проверки: отпечаток ключа, путь деривации, формат адресов, первый адрес.
  • Фраза принята кошельком, то есть контрольная сумма сошлась.
  • Отпечаток главного ключа на втором устройстве совпал с записью.
  • Путь деривации задан целиком по всем пяти уровням, а не по номеру монеты.
  • Первый внешний адрес и первый адрес сдачи сверены посимвольно.
  • Результат по каждому объекту и дата записаны, второе устройство стёрто.

Частые вопросы

Зачем сверять отпечаток ключа, если адреса совпали?

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

Можно ли проверить фразу без устройства, онлайн-калькулятором?

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

Что записывать как путь деривации?

Все пять уровней по BIP-44: назначение, тип монеты из реестра SLIP-0044, номер счёта, внешний или внутренний адрес, номер адреса. Рядом укажите формат адресов, который показывает кошелёк. Названия форматов у разных приложений расходятся, а номера уровней одинаковы.

Как часто повторять полную проверку по четырём объектам?

Раз в полгода достаточно для хранилища, которое не меняется. Внеплановую проверку проводят при переписывании фразы на новый носитель, при смене устройства и при добавлении нового счёта в кошелёк. В этих случаях меняется один из эталонов, и запись обновляют.

Расчёт контрольной суммы и вывод семени описаны в тексте стандарта BIP-39 о мнемонических фразах, а номера типов монет для пути деривации закреплены в реестре SLIP-0044.

Вердикт

Проверка без записанного эталона остаётся ритуалом. Сверять нужно с тем, что зафиксировано заранее, и по четырём объектам, а не по одному ощущению узнавания. Самый недооценённый из них — путь деривации: именно он чаще всего превращает рабочее хранилище в «пустой кошелёк» и заставляет владельца искать несуществующую ошибку в словах. Выпишите эталоны сегодня. Проверка после этого занимает четверть часа.

Разборы стандартов и практику проверок публикуем в нашем Telegram-канале Cryptium.