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). Она принимает:
- родительский ключ (приватный или публичный);
- родительский код цепочки;
- индекс дочернего узла.
Алгоритм:
- Вычисляется HMAC-SHA512(родительский код цепочки, [родительский публичный ключ || индекс]).
- Результат делится на две части: левые 256 бит — дочерний код цепочки, правые 256 бит — дочерний ключ.
- Для приватных ключей дочерний ключ = родительский приватный ключ + левые 256 бит (по модулю порядка кривой secp256k1).
- Для публичных ключей дочерний ключ = родительский публичный ключ + левые 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 →