bip39-explained
TARGET_LOCALE: ru
title: "Стандарт BIP-39: как работают мнемонические seed-фразы" description: "Подробный разбор стандарта BIP-39 для мнемонических seed-фраз. Узнайте технические детали энтропии, контрольной суммы, списков слов и вывода seed, используемые криптовалютными кошельками." keywords: [BIP-39, мнемоника, seed-фраза, список слов, PBKDF2, энтропия, стандарт криптовалют] sidebar_position: 3
Стандарт BIP-39: как работают мнемонические seed-фразы
BIP-39 (Bitcoin Improvement Proposal 39) определяет стандарт генерации мнемонических предложений — привычных последовательностей из 12 или 24 слов — которые кодируют энтропию, используемую для вывода ключей криптовалютного кошелька. Опубликованный в 2013 году Мареком Палатинусом, Паволом Руснаком, Аароном Вуазином и Шоном Боу, BIP-39 стал доминирующим стандартом резервного копирования кошельков практически во всех основных криптовалютах.
Техническое понимание BIP-39 дает уверенность в надежности резервной копии seed-фразы и помогает оценивать свойства безопасности разных реализаций кошельков.
Обзор BIP-39
BIP-39 задает два процесса:
- Генерация мнемоники — преобразование случайной энтропии в последовательность удобочитаемых слов.
- Вывод seed — преобразование мнемонических слов (плюс необязательная passphrase) в 512-битный бинарный seed, который можно использовать с BIP-32 для иерархической детерминированной генерации ключей.
Эти два процесса намеренно разделены. Мнемоника — это удобочитаемое представление для человека; seed — криптографический вход для вывода ключей.
Шаг 1: Генерация энтропии
Процесс начинается с блока криптографически стойких случайных данных (энтропии). BIP-39 поддерживает пять размеров энтропии:
| Entropy (bits) | Checksum (bits) | Total (bits) | Words |
|---|---|---|---|
| 128 | 4 | 132 | 12 |
| 160 | 5 | 165 | 15 |
| 192 | 6 | 198 | 18 |
| 224 | 7 | 231 | 21 |
| 256 | 8 | 264 | 24 |
На практике почти все кошельки используют либо 128 бит (12 слов), либо 256 бит (24 слова). Остальные размеры допустимы по спецификации, но реализуются редко.
Качество источника энтропии критически важно. Если генератор случайных чисел смещен, предсказуем или имеет недостаточную энтропию, полученную seed-фразу может подобрать атакующий. Подробный разбор темы смотрите в нашем руководстве по энтропии и случайности.
Источники энтропии
- Аппаратные генераторы случайных чисел (HRNG) — используются аппаратными кошельками, такими как Ledger и Trezor. Они измеряют физические явления (тепловой шум, дробовой шум), чтобы получать истинную случайность.
- CSPRNG операционной системы —
/dev/urandomв Linux/macOS,CryptGenRandomв Windows илиcrypto.getRandomValues()в браузерах. Это криптографически стойкие псевдослучайные генераторы (CSPRNG), инициализируемые источниками аппаратной энтропии. - Броски кубиков — некоторые пользователи генерируют энтропию вручную с помощью качественных игральных костей, сопоставляя броски бинарным значениям или индексам слов. Это исключает необходимость доверять программному или аппаратному RNG.
Шаг 2: Вычисление контрольной суммы
После генерации энтропии добавляется контрольная сумма:
- Вычислите SHA-256-хеш байтов энтропии.
- Возьмите первые
ENT / 32бит хеша (где ENT — длина энтропии в битах). - Добавьте эти биты контрольной суммы к энтропии.
Для 256-битной энтропии это дает 8 бит контрольной суммы, всего 264 бита.
Контрольная сумма служит механизмом обнаружения ошибок: когда вы вводите seed-фразу в кошелек для восстановления, кошелек пересчитывает контрольную сумму. Если хотя бы одно слово неверно или слова стоят в неправильном порядке, контрольная сумма не сойдется, и кошелек отклонит мнемонику. Это защищает от ошибок переписывания, но не исправляет их — только показывает, что есть ошибка.
Последствия контрольной суммы
Поскольку последнее слово мнемоники кодирует биты контрольной суммы, не все слова могут быть корректным последним словом для заданной последовательности. Для мнемоники из 24 слов последнее слово кодирует 3 бита энтропии и 8 бит контрольной суммы, поэтому при фиксированных первых 23 словах корректны только 8 из 2,048 возможных слов. Поэтому последнее слово нельзя выбирать произвольно.
Шаг 3: Отображение в слова
Объединенные биты энтропии + контрольной суммы делятся на группы по 11 бит. Каждая 11-битная группа представляет индекс от 0 до 2,047, соответствующий слову в списке слов BIP-39.
264 bits / 11 bits per word = 24 words
132 bits / 11 bits per word = 12 words
Английский список слов
Английский список слов BIP-39 содержит ровно 2,048 слов. Список тщательно подобран с учетом следующих свойств:
- Уникальные префиксы из четырех букв — никакие два слова не имеют одинаковых первых четырех символов. Это означает, что
abandonможно однозначно идентифицировать какaban, что полезно для компактных металлических резервных копий. - Обычная лексика — слова простые, широко известные на английском. Без жаргона, имен собственных и редких терминов.
- Избежание похожих слов — слова, которые легко перепутать (например, "woman" и "women"), по возможности исключены.
- Длина слов — все слова имеют длину от 3 до 8 символов.
Списки слов на других языках
BIP-39 определяет списки слов на девяти языках:
| Language | Status | Notes |
|---|---|---|
| English | Reference standard | Most widely supported |
| Japanese | Standardized | Uses katakana; spaces are ideographic (U+3000) |
| Korean | Standardized | |
| Spanish | Standardized | |
| Chinese (Simplified) | Standardized | |
| Chinese (Traditional) | Standardized | |
| French | Standardized | |
| Italian | Standardized | |
| Czech | Standardized | |
| Portuguese | Standardized |
Важное замечание по совместимости: Мнемонику, сгенерированную с одним списком слов, нельзя восстановить с помощью списка слов другого языка. Индексы слов между языками различаются. Всегда фиксируйте, какой язык использовался при создании резервной копии.
Шаг 4: Вывод seed (PBKDF2)
Мнемоническая фраза не используется напрямую как криптографический ключ. Вместо этого применяется усиление ключа через PBKDF2-HMAC-SHA512:
PBKDF2(
password = mnemonic sentence (words joined by spaces, normalized to UTF-8 NFKD),
salt = "mnemonic" + optional_passphrase,
iterations = 2048,
key_length = 512 bits
)
Это дает 512-битный seed, который служит входом для иерархического детерминированного вывода ключей BIP-32.
Ключевые свойства PBKDF2 в BIP-39
Усиление ключа — 2,048 итераций PBKDF2 добавляют вычислительную стоимость атакам перебором. Хотя 2,048 итераций по современным меркам хеширования паролей немного, основная безопасность обеспечивается энтропией самой мнемоники (128 или 256 бит), а не коэффициентом усиления ключа.
Поддержка passphrase — соль включает необязательную passphrase ("25-е слово"). Если passphrase не задана, соль — это просто строка "mnemonic". Если passphrase задана, соль становится "mnemonic" + passphrase. Это означает, что каждая разная passphrase дает полностью другой seed — и, следовательно, полностью другой набор ключей и адресов — при одной и той же мнемонике.
Нет проверки passphrase — в отличие от контрольной суммы мнемоники, у passphrase нет контрольной суммы. Любая passphrase валидна. Ввод неверной passphrase не вызывает ошибку; молча создается другой (пустой) кошелек. Это полезно для правдоподобного отрицания, но опасно для пользователей, которые забывают свою passphrase.
Нормализация Unicode — мнемоника и passphrase нормализуются в UTF-8 NFKD (Normalization Form Compatibility Decomposition) перед передачей в PBKDF2. Это обеспечивает единообразный вывод seed между реализациями, независимо от того, как операционная система внутренне представляет символы.
Шаг 5: От seed к ключам (BIP-32)
512-битный seed из PBKDF2 используется как вход в BIP-32 (Hierarchical Deterministic Wallets):
- Seed пропускается через HMAC-SHA512 с ключом "Bitcoin seed".
- Левые 256 бит становятся master приватным ключом.
- Правые 256 бит становятся master chain code.
- Вместе они образуют master расширенный приватный ключ (xprv).
Далее пути деривации BIP-44 задают стандартизированную древовидную структуру для вывода ключей и адресов конкретных монет.
Пошаговый пример
Проследим BIP-39 на упрощенном примере с 128 битами энтропии (мнемоника из 12 слов):
1. Сгенерируйте 128 бит энтропии
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
00000000 00000000 00000000 00000000
(Это энтропия из одних нулей — только для иллюстрации. Никогда не используйте на практике.)
2. Вычислите SHA-256-хеш
SHA256(0x00000000000000000000000000000000) = 374708fff7719dd5979ec875d56cd2286f6d3cf7ec317a3b25632aab28ec37bb
3. Возьмите первые 4 бита хеша как контрольную сумму
Первый байт: 0x37 = 00110111. Первые 4 бита: 0011.
4. Добавьте контрольную сумму к энтропии
128 нулевых бит + 0011 = 132 бита всего.
5. Разделите на 11-битные группы
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000000 → 0 → "abandon"
00000000011 → 3 → "about"
Результат: abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about
Это хорошо известный тестовый вектор для нулевой энтропии. Последнее слово — "about" (а не "abandon") из-за битов контрольной суммы.
6. Выведите seed с помощью PBKDF2
PBKDF2("abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about", "mnemonic", 2048, 64)
Это дает 512-битный seed, используемый для деривации BIP-32.
Используйте генератор seed-фраз SafeSeed, чтобы увидеть BIP-39 в действии. Сгенерируйте seed-фразу и наблюдайте энтропию, контрольную сумму и сопоставление слов в реальном времени. Для максимальной безопасности запускайте инструмент офлайн.
Анализ безопасности BIP-39
Безопасность энтропии
Для мнемоники из 24 слов (256 бит энтропии):
- Пространство поиска составляет 2^256, примерно 1.16 x 10^77 вариантов.
- Даже при скорости один триллион (10^12) попыток в секунду полный перебор занял бы примерно 3.67 x 10^57 лет — намного дольше возраста Вселенной (1.38 x 10^10 лет).
Для мнемоники из 12 слов (128 бит энтропии):
- Пространство поиска составляет 2^128, примерно 3.4 x 10^38 вариантов.
- При одном триллионе попыток в секунду полный перебор занял бы примерно 10^19 лет.
Оба варианта вычислительно нереализуемы на классических компьютерах.
Особенности PBKDF2
PBKDF2 с 2,048 итерациями добавляет постоянный множитель к атакам перебором, но не является главным барьером безопасности. Некоторые исследователи отмечают, что 2,048 итераций мало по сравнению с современными функциями вывода ключей, такими как Argon2 или bcrypt. Однако поскольку доминирующий фактор — энтропия мнемоники (128 или 256 бит), на практике это второстепенная проблема.
Ограничения контрольной суммы
Контрольная сумма улавливает большинство ошибок переписывания, но:
- Она обнаруживает, но не исправляет ошибки.
- Для мнемоник из 12 слов есть только 4 бита контрольной суммы, то есть примерно 1 из 16 случайных изменений пройдет проверку.
- Контрольная сумма не защищает от перестановки слов, которая случайно дает валидную контрольную сумму.
Риски passphrase
Функция passphrase мощная, но добавляет риски:
- Если вы забудете passphrase, средства невосстановимы (механизма "сброса" нет).
- Passphrase не валидируется — любая строка дает валидный кошелек.
- Атакующий, получивший мнемонику, но не passphrase, должен подбирать passphrase перебором, что дает дополнительную защиту пропорционально энтропии passphrase.
Критика BIP-39
У BIP-39 есть критики в сообществе разработки Bitcoin.
Отсутствие версионирования
BIP-39 не включает байт версии, из-за чего процесс деривации навсегда фиксирован. Если в будущем потребуется другой алгоритм вывода ключей или другие параметры, это нельзя сигнализировать в формате мнемоники. Поэтому некоторые кошельки (в частности Electrum) используют собственную мнемоническую схему с версионированием.
Жесткая привязка к списку слов
Мнемоника зависит от точного списка слов. Если список когда-либо изменится, существующие мнемоники нельзя будет восстановить. Списки слов заморожены с момента стандартизации, но эту негибкость некоторые считают ограничением дизайна.
Слабое усиление ключа
Как отмечалось выше, 2,048 итераций PBKDF2 по современным меркам считаются слабыми. Хотя это существенно не влияет на безопасность мнемоник с высокой энтропией, это дает меньшую защиту для коротких или выбранных пользователем passphrase.
Альтернатива Electrum
Кошелек Electrum использует собственную мнемоническую схему, включающую версионирование и не зависящую от фиксированного списка слов. Мнемоники Electrum несовместимы с BIP-39. Это означает, что seed-фразу Electrum нельзя восстановить в BIP-39 кошельке, и наоборот. Всегда проверяйте, какой стандарт использует ваш кошелек.
Реализации BIP-39
BIP-39 реализован практически во всех основных кошельках:
| Wallet | BIP-39 | Word Count | Notes |
|---|---|---|---|
| Ledger | Yes | 24 | Hardware, secure element |
| Trezor | Yes | 12/24 | Also supports SLIP-39 (Shamir) |
| Coldcard | Yes | 24 | Bitcoin-only hardware |
| MetaMask | Yes | 12 | Browser extension |
| Trust Wallet | Yes | 12 | Mobile |
| Exodus | Yes | 12 | Desktop/mobile |
| Electrum | No | 12 | Uses own scheme |
| BlueWallet | Yes | 12/24 | Bitcoin-focused mobile |
Тестирование и проверка
Официальные тестовые векторы
Спецификация BIP-39 включает тестовые векторы — известные значения энтропии с соответствующими мнемоническими словами и полученными seed. Они используются для проверки корректности реализаций.
Вы можете проверить реализацию BIP-39 в вашем кошельке по официальным тестовым векторам, опубликованным здесь:
Проверка вашей seed-фразы
Чтобы убедиться, что вы правильно записали seed-фразу:
- Сгенерируйте seed-фразу на аппаратном кошельке.
- Аккуратно запишите ее.
- Сбросьте аппаратный кошелек до заводских настроек.
- Восстановите кошелек по записанной seed-фразе.
- Убедитесь, что генерируются те же адреса.
- Подтвердите, что кошелек может подписывать транзакции.
Этот процесс подтверждает и правильность вашей резервной копии, и корректность реализации BIP-39 в кошельке.
FAQ
Что означает BIP-39?
BIP расшифровывается как Bitcoin Improvement Proposal. BIP-39 — это предложение номер 39, которое определяет стандарт создания мнемонических (человекочитаемых) представлений криптографической энтропии. Оно было представлено в 2013 году и принято практически всеми крупными криптовалютными кошельками.
Все ли seed-фразы из 12 слов — это BIP-39?
Нет. Некоторые кошельки (в частности Electrum) используют собственную мнемоническую схему, отличную от BIP-39. Хотя обе схемы дают фразы из 12 слов из списков слов, кодирование, списки слов и процессы деривации различаются. Фразу BIP-39 нельзя использовать в схеме Electrum, и наоборот. Всегда проверяйте документацию кошелька.
Могу ли я создать свою BIP-39 seed-фразу, просто выбрав слова?
Не следует. Технически можно выбрать 23 слова и вычислить корректное 24-е (чтобы пройти контрольную сумму), но выбор слов человеком не дает достаточной энтропии. Безопасность BIP-39 зависит от того, что слова получены из качественных случайных данных, а не выбраны человеком. Позвольте CSPRNG сгенерировать энтропию.
Почему в PBKDF2 как соль используется слово "mnemonic"?
Строка "mnemonic" — фиксированная соль, заданная BIP-39. Когда используется passphrase, она добавляется к этой соли (например, "mnemonicMyPassphrase"). Использование фиксированной известной соли обеспечивает согласованный вывод seed во всех реализациях без какой-либо дополнительной информации, кроме мнемоники и необязательной passphrase.
BIP-39 используется только для Bitcoin?
Нет. BIP-39 применяется практически во всех основных криптовалютах, включая Ethereum, Litecoin, Cardano, Solana и многие другие. Процесс генерации мнемоники и вывода seed одинаков; различаются только последующие пути деривации ключей (определяемые типами монет BIP-44) между сетями.
В чем разница между BIP-39 и SLIP-39?
BIP-39 создает одну мнемонику, представляющую весь секрет. SLIP-39 (Satoshi Labs Improvement Proposal 39) реализует разделение секрета Шамира, разбивая секрет на несколько долей (например, 3 из 5). Любое пороговое количество долей может восстановить секрет, а меньшее число долей не раскрывает информации. SLIP-39 использует другой список слов и кодирование, чем BIP-39.
Сколько существует валидных мнемоник BIP-39?
Для мнемоник из 24 слов: 2^256 (примерно 1.16 x 10^77). Для мнемоник из 12 слов: 2^128 (примерно 3.4 x 10^38). Эти числа представляют пространство энтропии. Контрольная сумма ограничивает комбинации слов, но не уменьшает энтропию — это лишь означает, что не каждая случайная последовательность из 24 слов BIP-39 образует валидную мнемонику.