BCrypt.dll
BCrypt.dll — это системная библиотека (динамически подключаемая библиотека, DLL) операционных систем семейства Microsoft Windows, начиная с Windows Vista и Windows Server 2008. Она реализует интерфейс криптографических примитивов (Cryptographic Primitives) и предоставляет приложениям доступ к функциям шифрования, хеширования, генерации случайных чисел и подписи данных через программный интерфейс (API) Windows Cryptography API: Next Generation (CNG). BCrypt.dll является заменой устаревшей библиотеки CryptoAPI (advapi32.dll) и ключевым компонентом современной криптографической подсистемы Windows.
Назначение и роль в системе
BCrypt.dll входит в состав Cryptographic Primitives Library (библиотека криптографических примитивов) и служит низкоуровневым интерфейсом для выполнения криптографических операций. В отличие от CryptoAPI, которая предоставляла высокоуровневые абстракции (например, хранилища сертификатов), CNG и BCrypt.dll ориентированы на работу непосредственно с алгоритмами. Библиотека используется как системными компонентами (например, BitLocker, Secure Boot, TLS/SSL в Windows), так и сторонними приложениями, которым требуется выполнение криптографических функций без обращения к внешним библиотекам.
Основные функции, реализуемые через BCrypt.dll:
- симметричное шифрование (AES, DES, 3DES, RC2, RC4);
- асимметричное шифрование и подпись (RSA, DSA, ECDSA, Diffie-Hellman);
- хеширование (SHA-1, SHA-256, SHA-384, SHA-512, MD2, MD4, MD5);
- генерация криптостойких случайных чисел;
- управление ключами (импорт, экспорт, создание);
- работа с эллиптическими кривыми (ECDH, ECDSA).
Архитектура и интерфейс
BCrypt.dll реализует модель провайдеров (providers), которая позволяет подключать различные алгоритмы через единый API. Каждый алгоритм представлен в виде отдельного модуля — криптографического провайдера (cryptographic provider), который может быть встроенным в библиотеку или загружаться из внешних DLL. Провайдеры регистрируются в реестре Windows и могут быть заменены или расширены сторонними разработчиками.
Основные типы объектов, с которыми работает API:
- BCRYPT_ALG_HANDLE — дескриптор алгоритма (например, AES, SHA-256);
- BCRYPT_KEY_HANDLE — дескриптор ключа (для симметричных и асимметричных алгоритмов);
- BCRYPT_HASH_HANDLE — дескриптор объекта хеширования;
- BCRYPT_SECRET_HANDLE — дескриптор секретного согласования (например, для Diffie-Hellman).
Ключевые функции API (префикс BCrypt):
BCryptOpenAlgorithmProvider— открывает провайдер для указанного алгоритма;BCryptGenerateSymmetricKey/BCryptGenerateKeyPair— создание ключа;BCryptEncrypt/BCryptDecrypt— шифрование и расшифровка;BCryptHashData/BCryptFinishHash— хеширование данных;BCryptSignHash/BCryptVerifySignature— подпись и проверка подписи;BCryptGenRandom— генерация случайных чисел;BCryptCloseAlgorithmProvider— закрытие провайдера.
История и развитие
BCrypt.dll была впервые представлена в составе Windows Vista (2006 год) как часть новой криптографической платформы CNG. Разработка CNG была вызвана необходимостью модернизации устаревшей CryptoAPI, которая имела ограничения по производительности, не поддерживала современные алгоритмы (например, эллиптические кривые) и была сложна в расширении. CNG и BCrypt.dll были спроектированы с учётом требований FIPS 140-2 (федеральный стандарт США по криптографической безопасности) и поддерживают сертификацию модулей.
В Windows 7 и Windows Server 2008 R2 библиотека была расширена поддержкой алгоритмов ECDSA и ECDH. В Windows 8 и Windows Server 2012 добавлена поддержка шифрования AES с режимами GCM и CCM, а также улучшена производительность симметричного шифрования за счёт аппаратных инструкций AES-NI. В Windows 10 и Windows 11 библиотека продолжает развиваться: добавлена поддержка алгоритмов Curve25519, Ed25519, SHA-3, а также интеграция с виртуализацией и защищёнными анклавами (Virtualization-Based Security, VBS).
Расположение и версии
Файл BCrypt.dll находится в системной папке C:\Windows\System32\ (для 64-разрядных систем) и C:\Windows\SysWOW64\ (для 32-разрядных приложений на 64-разрядной системе). Размер файла в разных версиях Windows варьируется от 100 до 200 КБ. Версия библиотеки привязана к версии операционной системы и не обновляется отдельно от неё.
Безопасность и критика
BCrypt.dll является критически важным компонентом системы безопасности Windows. Уязвимости в ней могут привести к компрометации шифрования, подписи или генерации ключей. За историю существования библиотеки было зафиксировано несколько уязвимостей, в том числе:
- CVE-2016-0147 — уязвимость в реализации шифрования RC4, позволявшая восстановить открытый текст;
- CVE-2017-0282 — проблема с обработкой ключей в режиме GCM, приводившая к утечке информации;
- CVE-2020-0601 — уязвимость в проверке подписей ECDSA (так называемый «криптографический баг»), позволявшая подделывать сертификаты.
Microsoft регулярно выпускает исправления для этих уязвимостей в рамках обновлений безопасности (Patch Tuesday). Пользователям рекомендуется своевременно устанавливать обновления Windows.
Применение в разработке
BCrypt.dll используется разработчиками приложений для Windows, которым требуется выполнение криптографических операций без использования сторонних библиотек (например, OpenSSL, LibTomCrypt). Для работы с BCrypt.dll в языках программирования C/C++ необходимо подключить заголовочный файл bcrypt.h и библиотеку bcrypt.lib. Пример простейшего вызова:
```c
include <windows.h>
include <bcrypt.h>
pragma comment(lib, "bcrypt.lib")
BCRYPT_ALG_HANDLE hAlg; BCryptOpenAlgorithmProvider(&hAlg, BCRYPT_SHA256_ALGORITHM, NULL, 0); // ... выполнение хеширования ... BCryptCloseAlgorithmProvider(hAlg, 0); ```
В .NET Framework и .NET Core/5+ библиотека BCrypt.dll используется неявно через классы пространства имён System.Security.Cryptography (например, SHA256.Create()), которые под капотом вызывают функции CNG.
Сравнение с другими криптографическими библиотеками
BCrypt.dll является частью встроенной криптографической подсистемы Windows и не требует установки дополнительных компонентов. В отличие от OpenSSL, которая кроссплатформенна и имеет открытый исходный код, BCrypt.dll привязана к Windows и распространяется только в составе ОС. Преимущества BCrypt.dll:
- интеграция с системными механизмами безопасности (например, защита ключей через TPM или Virtualization-Based Security);
- поддержка аппаратного ускорения (AES-NI, SHA extensions);
- сертификация FIPS 140-2 (в сертифицированных конфигурациях).
Недостатки:
- ограниченный набор алгоритмов по сравнению с OpenSSL;
- отсутствие поддержки некоторых современных протоколов (например, TLS 1.3 реализован отдельно в SChannel);
- зависимость от версии Windows.
Интересные факты
- Название BCrypt.dll не связано с алгоритмом хеширования паролей bcrypt (Bcrypt). Это совпадение: BCrypt в Windows расшифровывается как «Base Cryptography» (базовая криптография).
- BCrypt.dll является частью модуля CNG, который также включает библиотеки NCrypt.dll (для работы с хранилищами ключей) и KsecLib.dll (криптографическая библиотека режима ядра).
- В Windows 10 и 11 библиотека поддерживает алгоритмы постквантовой криптографии (экспериментально, через обновления).
Источники
- Microsoft Docs: Cryptography API: Next Generation (CNG)
- Microsoft Docs: BCrypt Functions
- Windows Internals, Part 1 (7th edition) — Pavel Yosifovich, Mark Russinovich, David Solomon
- Common Vulnerabilities and Exposures (CVE) database — MITRE Corporation
- Microsoft Security Response Center (MSRC) — бюллетени безопасности
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →