BIP-38
BIP-38 — это предложение по улучшению Биткойна (Bitcoin Improvement Proposal), описывающее стандарт шифрования закрытых ключей биткойн-кошельков с использованием парольной фразы (passphrase). Предложенный в 2012 году, BIP-38 определяет процедуру, при которой закрытый ключ (private key) шифруется таким образом, что для его расшифровки и последующего использования (например, для отправки транзакции) требуется ввод правильного пароля. Основная цель BIP-38 — защита закрытых ключей от кражи или несанкционированного доступа в случае компрометации физического носителя (например, бумажного кошелька) или файла с ключами.
История
BIP-38 был предложен разработчиками под псевдонимами «Cobra» и «Theymos» и впервые опубликован 1 ноября 2012 года. Предложение было создано в ответ на растущую популярность бумажных кошельков — физических носителей, на которых закрытые ключи печатались в виде QR-кодов или текста. Основной проблемой таких кошельков была уязвимость: если злоумышленник получал физический доступ к бумаге, он мог сразу же использовать ключ для кражи средств. BIP-38 решал эту проблему, позволяя владельцу шифровать ключ паролем, который можно было запомнить или хранить отдельно.
В 2013 году BIP-38 был включён в ряд популярных биткойн-кошельков и сервисов, таких как Bitcoin-Qt (через сторонние утилиты) и blockchain.info. Однако со временем, с развитием более совершенных методов хранения (например, аппаратных кошельков и мультиподписей), использование BIP-38 сократилось, хотя он остаётся актуальным для определённых сценариев, таких как хранение резервных копий или подарков в биткойнах.
Технические детали
Формат зашифрованного ключа
BIP-38 определяет формат зашифрованного закрытого ключа, который начинается с префикса «6P» (в кодировке Base58) для обычного шифрования и «6PR» для шифрования с дополнительным параметром «сжатия» (compressed public key). Зашифрованный ключ содержит:
- Соль (salt) — случайные данные, используемые для усложнения атак по словарю.
- Флаг (flag) — указывает, является ли открытый ключ сжатым или несжатым.
- Зашифрованные данные — результат шифрования закрытого ключа с использованием алгоритма AES-256-CBC.
Процесс шифрования
- Генерация соли: создаётся случайная 4-байтовая соль.
- Вывод ключа (key derivation): с помощью функции PBKDF2 (Password-Based Key Derivation Function 2) с солью и паролем генерируется 32-байтовый ключ шифрования. Количество итераций PBKDF2 фиксировано и составляет 2048.
- Шифрование: закрытый ключ шифруется с использованием алгоритма AES-256 в режиме CBC (Cipher Block Chaining). Вектор инициализации (IV) вычисляется на основе соли и пароля.
- Формирование результата: к зашифрованным данным добавляются соль, флаг и контрольная сумма (checksum) для проверки целостности.
Процесс расшифровки
Расшифровка требует ввода пароля. Программа:
- Извлекает соль из зашифрованного ключа.
- Повторяет процесс вывода ключа с тем же паролем и солью.
- Расшифровывает данные с помощью AES-256-CBC.
- Проверяет контрольную сумму. Если она совпадает, пароль верен, и получен исходный закрытый ключ. Если нет — пароль неверен.
Безопасность
BIP-38 использует фиксированное количество итераций PBKDF2 (2048), что в современных условиях считается недостаточным для защиты от атак с использованием специализированного оборудования (ASIC, GPU). Однако на момент создания стандарта (2012 год) это количество было разумным компромиссом между безопасностью и производительностью. Для повышения защиты рекомендуется использовать длинные и сложные пароли (не менее 20 символов), содержащие буквы, цифры и символы.
Применение
Бумажные кошельки
Основное применение BIP-38 — шифрование закрытых ключей на бумажных кошельках. Владелец может распечатать зашифрованный ключ (например, в виде QR-кода) и хранить его в сейфе или другом безопасном месте. Пароль при этом запоминается или хранится отдельно. Даже если злоумышленник получит доступ к бумаге, без пароля он не сможет использовать ключ.
Подарки в биткойнах
BIP-38 часто используется для создания «подарочных» биткойн-ключей. Например, можно создать зашифрованный закрытый ключ, положить на него небольшую сумму биткойнов и подарить получателю. Получатель может расшифровать ключ только после того, как узнает пароль (например, в день рождения или на праздник).
Резервное копирование
BIP-38 может применяться для шифрования резервных копий закрытых ключей, хранящихся на внешних носителях (USB-флешки, внешние жёсткие диски) или в облачных сервисах. Это защищает ключи от кражи или утечки данных.
Критика и ограничения
Уязвимость к атакам по словарю
Основная критика BIP-38 связана с фиксированным и относительно низким количеством итераций PBKDF2. Это делает стандарт уязвимым к атакам по словарю (brute-force attacks) с использованием специализированного оборудования. Например, на современных ASIC-майнерах можно перебирать миллионы паролей в секунду. Для защиты рекомендуется использовать пароли, состоящие из случайных символов, а не слов из словаря.
Неудобство использования
BIP-38 требует от пользователя запоминать или безопасно хранить пароль, что может быть неудобно для новичков. Кроме того, процесс расшифровки требует наличия программного обеспечения, поддерживающего этот стандарт, что ограничивает его совместимость.
Устаревание
С развитием аппаратных кошельков (например, Ledger, Trezor) и мультиподписных схем (multisig) использование BIP-38 сократилось. Аппаратные кошельки обеспечивают более высокий уровень безопасности, так как закрытые ключи никогда не покидают устройство. Мультиподписи позволяют распределить контроль над средствами между несколькими сторонами, что снижает риск кражи одного ключа.
Интересные факты
- BIP-38 был одним из первых стандартов шифрования закрытых ключей в экосистеме Биткойна. До его появления бумажные кошельки часто печатали ключи в открытом виде.
- Стандарт поддерживается многими популярными кошельками, включая Electrum, Bitcoin Core (через сторонние инструменты) и Mycelium.
- В 2014 году была предложена улучшенная версия BIP-38, использующая алгоритм scrypt вместо PBKDF2, но она не была принята в качестве стандарта.
- BIP-38 не является обязательным для использования — это лишь рекомендация. Многие пользователи предпочитают другие методы защиты, такие как шифрование на уровне файла кошелька (например, с помощью BIP-32 и BIP-39).
Источники
- Bitcoin Improvement Proposal 38 (BIP-38) — официальный текст предложения.
- «Mastering Bitcoin» by Andreas M. Antonopoulos — глава о безопасности закрытых ключей.
- Bitcoin Wiki — статья «BIP 0038».
- Документация кошелька Electrum — раздел о шифровании ключей.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →