Короткий ответ: чем сид-фраза отличается от приватного ключа

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

Поэтому вопрос «что сохранять» не имеет одного ответа для всех. Основа резервной копии — сид-фраза. Отдельные приватные ключи сохраняют только для адресов, которые в эту фразу не входят, например для аккаунтов, импортированных вручную.

КритерийСид-фразаПриватный ключ
Что этоНабор слов, кодирующий корневой секрет кошелькаОдин секрет для подписи транзакций одного аккаунта
Что восстанавливаетВесь кошелёк: адреса, выведенные по стандартным путямТолько один адрес или аккаунт
Сколько адресов покрываетПотенциально много, в разных сетяхОдин
Можно ли вывести одно из другогоИз фразы выводятся приватные ключиИсходную фразу из ключа не восстановить
Что будет при утереБез другой копии — потеря доступа ко всему кошелькуПотеря доступа к этому адресу и активам на нём
Когда сохранятьОбязательноТолько для импортированных вручную адресов

Что такое приватный ключ и что он контролирует

В Ethereum обычный пользовательский аккаунт — это внешне управляемый аккаунт, EOA. Им распоряжается тот, у кого есть приватный ключ. Аккаунты смарт-контрактов устроены иначе: у них нет приватного ключа, их поведение задаёт код контракта. Поэтому когда говорят «приватный ключ кошелька», обычно имеют в виду ключ обычного аккаунта.

В Ethereum приватный ключ — это 64 шестнадцатеричных символа. Из него получают публичный ключ, а из публичного — адрес: последние 20 байт хеша Keccak-256 от публичного ключа плюс префикс 0x. Получается 42-символьный адрес. Обратное направление невозможно: по публичному ключу нельзя вычислить приватный.

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

Приватный ключ можно хранить в зашифрованном файле, например в keystore с паролем. Этот пароль шифрует файл, но не является BIP-39 passphrase и не меняет набор адресов. Потеря пароля к keystore и потеря passphrase — разные сценарии с разными последствиями.

Что такое сид-фраза и как из неё получаются ключи

Сид-фраза, которую также называют мнемонической фразой или recovery seed, — это читаемое представление случайного секрета. По стандарту BIP-39 фраза чаще всего состоит из 12 или 24 слов; 12 слов кодируют 128 бит, 24 слова — 256 бит. Контрольная сумма помогает заметить часть опечаток при вводе, но не делает фразу «паролем» и не защищает от кражи.

Строго говоря, BIP-39 описывает именно мнемоническую фразу, а seed — это результат её преобразования. В быту и то и другое называют сид-фразой. Из seed получается мастер-ключ, а дальше работает иерархия BIP-32: из мастер-ключа выводятся дочерние ключи по путям вида m/44'/60'/0'/0/0. В этом пути 44' — назначение, 60' — код монеты Ethereum, 0' — аккаунт, 0 — ветка внешних адресов, 0 — индекс адреса.

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

Отдельный секрет — passphrase, которую иногда называют «25-м словом». Она не входит в 12 или 24 слова и не восстанавливается из них. Passphrase меняет результат вывода ключей: с той же фразой, но без passphrase вы получите другой кошелёк. По документации Trezor, если passphrase забыта, кошелёк нельзя восстановить даже при правильной резервной копии, поэтому её записывают и хранят отдельно.

У BIP-39 есть пороговая альтернатива — SLIP39, он же Shamir backup. Секрет делят на несколько долей по 20 или 33 слова; всего можно создать до 16 долей и задать порог, например 3 из 5. Любые 3 доли из 5 восстанавливают кошелёк, потеря 2 долей восстановление не блокирует, а потеря 3 делает его невозможным. Пока число долей меньше порога, отдельные доли не дают информации о секрете. Это принципиально отличается от ручного деления фразы на две части: каждая половина обычной фразы всё равно сужает перебор.

Что восстанавливает фраза, а что — ключ

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

Приватный ключ восстанавливает только один адрес или аккаунт. Если у вас остался ключ от адреса A, вы сможете импортировать его и распоряжаться средствами на A. Адреса B и C, которые были в том же кошельке, но выводились из фразы, без фразы не появятся.

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

Что в итоге сохранять

  • Сид-фразу — на физическом носителе, в двух местах.

  • Passphrase — отдельно от фразы, тоже офлайн.

  • Доли SLIP39 — если используете пороговую схему; в количестве не меньше порога.

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

  • Памятку без секретов — какой стандарт и какой кошелёк использовали; это помогает выбрать совместимый инструмент, но не заменяет секрет.

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

Один пример: одна фраза, много адресов

Представим гипотетическую фразу из 12 слов. Из неё получается мастер-ключ. По пути m/44'/60'/0'/0/0 выводится адрес A, по пути m/44'/60'/0'/0/1 — адрес B, по пути m/44'/60'/0'/0/2 — адрес C. Все три адреса относятся к одному кошельку и восстанавливаются из одной фразы, если кошелёк использует тот же путь.

Теперь представим частичную резервную копию: сохранён только приватный ключ адреса A. После сброса кошелька вы импортируете этот ключ и видите адрес A. Адреса B и C не появятся, потому что их ключи не входят в сохранённый секрет. Если бы была сохранена фраза, а не один ключ, восстановились бы все три адреса.

Пример с пороговой схемой: при SLIP39 3 из 5 любые три доли восстанавливают кошелёк. Потеря одной или двух долей не мешает восстановлению. Потеря трёх долей делает восстановление невозможным, даже если две оставшиеся доли целы. Если две доли попадут к постороннему, а порог равен трём, он не получит секрет; если у него окажутся три доли — получит.

Как хранить: правила, которые не зависят от кошелька

Главный принцип простой: секрет должен существовать офлайн и в физическом виде. Любая цифровая копия — фото, файл, заметка в облаке, сообщение в мессенджере — расширяет поверхность атаки. Если фраза попала в чужое распоряжение, кошелёк считается скомпрометированным, даже если вы пока не видите списаний.

  1. Запишите фразу вручную сразу при создании кошелька. Сверьте каждое слово с тем, что показывает устройство или приложение. Не полагайтесь на память и не откладывайте запись.

  2. Не делайте цифровых копий. Не фотографируйте фразу, не сохраняйте в облачных заметках, почте, мессенджерах и не отправляйте себе. Не вводите слова на сайтах и в приложениях, даже если вам пишет «поддержка».

  3. Сделайте физические копии на долговечном носителе. Бумага изнашивается; металлическая пластина лучше переносит воду, огонь и время. Но металл не защищает от кражи, поэтому важны ещё место и доступ.

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

  5. Passphrase храните отдельно от фразы. Если потерять passphrase, восстановление невозможно даже с правильной фразой. Если она лежит рядом с фразой, один взлом или одна находка даёт доступ ко всему.

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

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

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

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

Подходы к хранению — от аппаратного кошелька до мультиподписи — подробнее разобраны в статье «Стратегии хранения криптовалюты». О том, как устроены ключи в холодном кошельке, — в материале «Где хранятся приватные ключи в холодном кошельке?».

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

  • Фраза в облаке или в переписке. Утечка равносильна передаче кошелька постороннему: у него будет всё, что нужно для подписи.

  • Ручное деление фразы на две части «для надёжности». Каждая половина не даёт криптографической защиты пороговой схемы и сужает перебор. Для разделения секрета нужен SLIP39 или аналогичная схема, а не разрез фразы.

  • Уверенность, что приватный ключ заменит фразу. При переустановке кошелька один ключ вернёт один адрес, а не весь набор.

  • Забытый passphrase при сохранённой фразе. Правильная фраза без passphrase даёт другой кошелёк; восстановить прежний невозможно.

  • Опора на память вместо записи. Фразу из 12 или 24 слов легко перепутать через месяцы, особенно если вы редко ею пользуетесь.

  • PIN или пароль приложения считают резервной копией. PIN защищает доступ к устройству, но не восстанавливает кошелёк после сброса или поломки.

  • Ввод фразы на сайте «для проверки». Так работают фишинговые страницы. Проверять резерв нужно штатной функцией устройства или в контролируемой офлайн-среде, а не на случайном ресурсе.

  • Уничтожение старой копии до проверки новой. Если новая запись содержит ошибку, вы останетесь без рабочего бэкапа.

Вопросы и ответы

Сид-фраза и приватный ключ — это одно и то же?

Нет. Сид-фраза — корневой секрет, из которого выводится множество ключей. Приватный ключ — один ключ для одного аккаунта. Фраза восстанавливает весь кошелёк, ключ — только свой адрес.

Можно ли восстановить сид-фразу, если остался только приватный ключ?

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

Нужно ли сохранять приватные ключи, если есть сид-фраза?

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

Что будет, если потерять сид-фразу или приватный ключ?

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

Где хранить passphrase, чтобы не потерять доступ?

На физическом носителе, офлайн и отдельно от сид-фразы. Не полагайтесь на память: если passphrase забыта, кошелёк не восстановить даже с правильной фразой.