HD-кошельки: как из 12 слов получаются все ваши ключи (BIP-39, BIP-32, BIP-44)
Как seed-фраза превращается в ключи: энтропия и словарь BIP-39, PBKDF2, иерархия BIP-32, путь BIP-44 для Ethereum и роль пароля-«25-го слова». С примерами.
В этой статье
Когда вы создаёте кошелёк, он просит записать 12 или 24 слова. Одна эта фраза восстанавливает все ваши адреса во всех сетях. Как такое возможно? За этим стоят три стандарта: BIP-39, BIP-32 и BIP-44. Практические правила хранения фразы - в чек-листе безопасности, а здесь разберём устройство.
Проблема: много ключей - много резервных копий
Хороший кошелёк использует для каждого адреса новый ключ (приватность, удобство). Но хранить копию каждого ключа - кошмар. Идея HD-кошелька (hierarchical deterministic): один секрет детерминированно порождает бесконечное дерево ключей. Сохранили один секрет - сохранили всё.
Шаг 1. Энтропия и слова (BIP-39)
Всё начинается со случайного числа - энтропии: 128 бит для 12 слов или 256 бит для 24 слов.
- К энтропии добавляется контрольная сумма: первые биты её хеша SHA-256 (4 бита для 128 бит, 8 бит для 256 бит).
- Получившаяся строка делится на группы по 11 бит.
- Каждая группа - число от 0 до 2047 - это номер слова в словаре из 2048 слов.
Итого: 128 + 4 = 132 бита → 12 слов; 256 + 8 = 264 бита → 24 слова.
Свойства словаря: слова различаются первыми четырьмя буквами, нет похожих по написанию; контрольная сумма позволяет заметить опечатку (но не все).
Шаг 2. От слов к seed
Слова (в виде строки) превращаются в 512-битный seed функцией PBKDF2-HMAC-SHA512 с 2048 итерациями. «Солью» служит строка "mnemonic" плюс необязательная парольная фраза.
- Без пароля seed определяется одними словами.
- С паролем («25-е слово») получается совершенно другой seed и другие кошельки. Не зная пароля, фраза бесполезна. Но если забыть пароль, деньги потеряны навсегда. Это мощная защита и мощный риск.
Шаг 3. Дерево ключей (BIP-32)
Из seed получается главный ключ (master): функция HMAC-SHA512 с ключом "Bitcoin seed" даёт 64 байта. Первые 32 байта - закрытый ключ, остальные 32 - код цепочки (chain code), добавочная энтропия для вывода потомков.
Из любого ключа можно вывести дочерние по индексу: child(parent, i). Это снова HMAC, и результат детерминирован. Так строится дерево:
master
├── 0
│ ├── 0 (адрес 1)
│ └── 1 (адрес 2)
└── 1Есть два вида потомков:
- Нормальные (индекс < 2^31): можно вывести из открытого ключа родителя без секрета.
- Усиленные (hardened, индекс ≥ 2^31, обозначаются апострофом
'): требуют закрытого ключа родителя; из утечки дочернего ключа нельзя восстановить родителя.
Шаг 4. Путь вывода (BIP-44)
BIP-44 договорился, по какому пути искать ключи, чтобы разные кошельки давали одинаковые адреса:
m / purpose' / coin_type' / account' / change / address_indexДля Ethereum стандартный путь:
m/44'/60'/0'/0/0 - первый адрес
m/44'/60'/0'/0/1 - второй адресЗдесь 60 - код Ethereum в реестре. Один и тот же путь используют все EVM-сети (Base, Polygon, BNB Chain), поэтому у вас один адрес в каждой сети. Для Bitcoin код 0, поэтому там другие ключи.
Что это значит для вас
- Фраза = всё. Любой, кто знает слова (и пароль, если был), владеет всеми адресами и всеми активами во всех EVM-сетях.
- Кошельки совместимы. Фразу можно восстановить в другом кошельке по стандарту и получить те же адреса. Вы не привязаны к приложению.
- Аппаратный кошелёк хранит seed внутри и подписывает на устройстве; слова нужны только как резервная копия.
- Один адрес - один ключ. Из одного адреса не вывести остальные. Но из seed выводятся все.
- Можно отделять роли. Разные «аккаунты» (
account') дают разные независимые наборы адресов из одной фразы. Однако безопаснее для разных ролей использовать разные фразы (зачем разделять кошельки).
Расширенные открытые ключи (xpub)
Расширенный открытый ключ позволяет выводить все дочерние адреса, не зная секрета. Удобно: сервис может показывать вам новые адреса. Но утечка xpub вместе с любым дочерним закрытым ключом раскрывает родительский: нужно беречь xpub от публикации.
Пример: восстановление
Мария потеряла телефон. Она покупает новый, устанавливает любой совместимый кошелёк и вводит 12 слов. Кошелёк:
- проверяет контрольную сумму слов;
- строит seed (с паролем, если он был);
- выводит ключи по пути
m/44'/60'/0'/0/i; - вычисляет адреса (как ключ превращается в адрес) и сверяет с блокчейном, где есть баланс.
Все прежние адреса появились снова. Если телефон украл вор, а фраза хранилась только в нём, деньги потеряны. Но бумажная копия спасает.
Что почитать дальше
Узнайте, как эти ключи используются для подписей: ECDSA и EIP-712. Или как кошельки превращаются в «умные»: абстракция аккаунтов.
Читайте также
- 1 · Основы
Криптокошелёк, адрес и seed-фраза: как не потерять деньги
Как устроен криптокошелёк: закрытый и открытый ключ, адрес, seed-фраза, виды кошельков и главные правила безопасности для новичка.
3 мин чтения - 1 · Основы
Криптография с открытым ключом: как подпись доказывает, что это вы
Как работают закрытый и открытый ключи, откуда берётся адрес, что такое цифровая подпись ECDSA и почему кошельку не нужен пароль. С наглядным примером.
3 мин чтения
Упоминается в статьях
- Криптография с открытым ключом: как подпись доказывает, что это вы
- Криптокошелёк, адрес и seed-фраза: как не потерять деньги
- Мошенничество в P2P-сделках: 10 красных флагов
- Словарь терминов: блокчейн, кошельки, смарт-контракты и эскроу от A до Я
- Чек-лист безопасности кошелька: 15 правил, которые защитят ваши деньги
- Абстракция аккаунтов (ERC-4337): умные кошельки и спонсирование газа
Готовы попробовать?
Создайте первую сделку за пару минут. Деньги блокируются в смарт-контракте и выплачиваются по правилам, которые видны заранее.

