Открыть сервис

BIP32

BIP32 (Bitcoin Improvement Proposal 32, «Улучшительное предложение биткоина № 32») — это технический стандарт, описывающий иерархические детерминированные (HD) кошельки для криптовалют. Предложенный Питером Вюлле в 2012 году, BIP32 позволяет генерировать неограниченное количество ключей (адресов) из одного начального seed-значения, что упрощает резервное копирование и управление средствами.

История и контекст

До появления BIP32 каждый адрес криптовалютного кошелька создавался независимо от других. Для этого требовалось генерировать случайные числа, что приводило к необходимости резервировать каждую пару «приватный ключ — публичный ключ» отдельно. Если пользователь терял резервную копию одного ключа, он терял доступ к соответствующему адресу. BIP32 решил эту проблему, внедрив иерархическую детерминированную (HD) структуру.

Идея детерминированных кошельков обсуждалась в криптографическом сообществе с 2011 года. BIP32, опубликованный 11 февраля 2012 года, стал первым стандартизированным решением. Он был включён в ядро Bitcoin Core в версии 0.13.0 (2016 год) и с тех пор используется большинством современных криптовалютных кошельков, включая аппаратные (Ledger, Trezor) и программные (Electrum, Exodus).

Принцип работы

Seed-фраза и мастер-ключ

Основой HD-кошелька является seed — случайная последовательность битов (обычно 128, 256 или 512 бит). Из seed с помощью алгоритма HMAC-SHA512 генерируется мастер-ключ (master key), который состоит из:

  • Мастер-приватного ключа (256 бит);
  • Мастер-кода цепочки (256 бит) — вспомогательной информации для генерации дочерних ключей.

Мастер-ключ не используется напрямую для подписания транзакций; он служит корнем иерархии.

Иерархическая структура

BIP32 определяет дерево ключей, где каждый узел может порождать до 2³¹ дочерних узлов. Каждый дочерний узел, в свою очередь, может порождать свои дочерние узлы. Глубина дерева не ограничена, но на практике обычно используется до 5 уровней.

Ключи нумеруются по индексам от 0 до 2³¹-1. Индексы от 0 до 2³¹-1 используются для нормальных дочерних ключей, а от 2³¹ до 2³²-1 — для усиленных (hardened) дочерних ключей.

Генерация дочерних ключей

Для генерации дочернего ключа используется функция CKD (Child Key Derivation). Она принимает:

  • родительский ключ (приватный или публичный);
  • родительский код цепочки;
  • индекс дочернего узла.

Алгоритм:

  1. Вычисляется HMAC-SHA512(родительский код цепочки, [родительский публичный ключ || индекс]).
  2. Результат делится на две части: левые 256 бит — дочерний код цепочки, правые 256 бит — дочерний ключ.
  3. Для приватных ключей дочерний ключ = родительский приватный ключ + левые 256 бит (по модулю порядка кривой secp256k1).
  4. Для публичных ключей дочерний ключ = родительский публичный ключ + левые 256 бит (как точка на кривой).

Усиленные дочерние ключи (индекс ≥ 2³¹) используют родительский приватный ключ вместо публичного. Это предотвращает возможность вычислить дочерние приватные ключи, зная только дочерние публичные ключи и родительский публичный ключ.

Пути деривации

Для идентификации конкретного ключа в иерархии используется путь деривации (derivation path) — последовательность индексов, разделённых косой чертой. Пример: m/44'/0'/0'/0/0.

  • m — мастер-ключ (корень).
  • 44' — усиленный уровень BIP44 (стандарт для мультивалютных кошельков).
  • 0' — усиленный уровень для конкретной криптовалюты (0 — Bitcoin).
  • 0' — усиленный уровень для счёта (account).
  • 0 — нормальный уровень для внешней цепочки (change chain).
  • 0 — нормальный уровень для адреса.

Апостроф (') обозначает усиленную деривацию. Пути деривации стандартизированы в BIP44, BIP49 и BIP84 для разных типов адресов.

Преимущества и недостатки

Преимущества

  • Удобство резервного копирования. Достаточно сохранить одну seed-фразу (обычно 12–24 слова), чтобы восстановить все ключи кошелька.
  • Иерархическая организация. Можно создавать отдельные подкошельки для разных целей (например, для разных валют или счетов).
  • Возможность генерации публичных ключей без приватных. Это позволяет создавать «наблюдательные» кошельки (watch-only wallets), которые могут отслеживать баланс, но не могут тратить средства.
  • Детерминированность. Один и тот же seed всегда генерирует одинаковую последовательность ключей, что упрощает синхронизацию между устройствами.

Недостатки

  • Риск компрометации seed. Если seed-фраза попадёт к злоумышленнику, он получит доступ ко всем средствам, когда-либо связанным с этим кошельком.
  • Сложность реализации. Некорректная реализация BIP32 может привести к уязвимостям, таким как утечка мастер-ключа при неправильной обработке кода цепочки.
  • Ограничение на количество дочерних ключей. Максимум 2³¹ ключей на каждом уровне, что достаточно для большинства сценариев, но теоретически может быть недостаточно для очень больших систем.

Применение

BIP32 является основой для:

  • Криптовалютных кошельков — аппаратных, программных и мобильных.
  • Платёжных систем, где требуется генерировать уникальные адреса для каждого платежа.
  • Мультивалютных кошельков (например, Exodus, Trust Wallet), где один seed управляет ключами для Bitcoin, Ethereum, Litecoin и других криптовалют.
  • Сервисов подписи транзакций (HSM, облачные кошельки), где приватные ключи хранятся в защищённом окружении, а публичные ключи передаются на клиент.

Критика и альтернативы

Основная критика BIP32 связана с тем, что он не предусматривает шифрование seed-фразы по умолчанию. Также стандарт не определяет формат seed-фразы — это было сделано позже в BIP39. Некоторые исследователи указывали на потенциальную уязвимость в схеме деривации публичных ключей: если злоумышленник получит доступ к родительскому публичному ключу и одному дочернему приватному ключу, он может вычислить все дочерние приватные ключи (для нормальной деривации). Усиленная деривация решает эту проблему, но требует наличия родительского приватного ключа.

Альтернативы BIP32 включают:

  • BIP32-Ed25519 — адаптация для кривой Ed25519, используемой в Monero и некоторых других криптовалютах.
  • SLIP-0010 — улучшенная версия для кривых Ed25519 и NIST P-256.
  • BIP-32 для Ethereum — модификация для учёта особенностей Ethereum (например, использование 256-битных ключей вместо 512-битных).

Интересные факты

  • BIP32 был предложен Питером Вюлле, который также участвовал в разработке BIP39 (мнемонические фразы) и BIP43 (иерархические пути).
  • Стандарт BIP32 используется не только в биткоине, но и в других криптовалютах, включая Litecoin, Dogecoin, Zcash и многие другие.
  • Seed-фраза по BIP39 может быть использована для восстановления кошелька на любом устройстве, поддерживающем BIP32/BIP39, независимо от производителя.
  • В 2018 году была обнаружена уязвимость в некоторых реализациях BIP32, позволяющая злоумышленнику восстановить мастер-ключ, если он знает несколько дочерних приватных ключей. Эта уязвимость была исправлена в последующих версиях библиотек.

Источники

  • Bitcoin Improvement Proposal 32 (BIP32) — оригинальная спецификация.
  • Bitcoin Improvement Proposal 39 (BIP39) — мнемонические фразы.
  • Bitcoin Improvement Proposal 44 (BIP44) — мультивалютные пути.
  • «Mastering Bitcoin» by Andreas M. Antonopoulos — глава об HD-кошельках.
  • Документация Bitcoin Core (bitcoin.org).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →