BoringSSL
BoringSSL — это криптографическая библиотека с открытым исходным кодом, форк библиотеки OpenSSL, разрабатываемая компанией Google. Она предназначена для использования во внутренних продуктах Google, таких как браузер Chrome, операционная система Android и другие сервисы, с целью обеспечения более строгой безопасности, упрощения кодовой базы и ускорения процесса разработки за счёт удаления устаревших и неподдерживаемых функций.
История
До появления BoringSSL основным криптографическим инструментом для многих проектов, включая Google, была OpenSSL — одна из старейших и наиболее распространённых библиотек для работы с протоколами SSL/TLS и криптографическими алгоритмами. Однако к началу 2010-х годов OpenSSL столкнулась с рядом проблем: медленное внесение исправлений, сложная и запутанная кодовая база, а также наличие большого количества устаревших и потенциально небезопасных функций. В 2014 году была обнаружена критическая уязвимость Heartbleed (CVE-2014-0160), которая затронула миллионы серверов и клиентов по всему миру, что подчеркнуло необходимость в более безопасной и управляемой альтернативе.
В ответ на это Google в 2014 году объявила о создании собственного форка OpenSSL — BoringSSL. Основная цель заключалась в том, чтобы взять за основу OpenSSL, удалить из неё всё, что не используется в продуктах Google, добавить необходимые исправления и улучшения, а также обеспечить более быстрый цикл разработки и внедрения изменений. Первоначально BoringSSL использовалась только внутри Google, но вскоре стала доступна как открытый проект на GitHub.
Отличия от OpenSSL
BoringSSL не является заменой OpenSSL в общем смысле. Она создавалась для конкретных нужд Google и поэтому имеет ряд существенных отличий:
Удаление устаревших функций
Из библиотеки были удалены многие алгоритмы и протоколы, которые считаются устаревшими или небезопасными. К ним относятся, например, поддержка SSLv2, SSLv3, а также некоторых устаревших шифров (RC4, MD5 в некоторых контекстах). Это значительно уменьшает размер кодовой базы и снижает поверхность атаки.
Упрощение API
BoringSSL стремится к более чистому и предсказуемому API. Многие функции, которые в OpenSSL были объявлены устаревшими или имели неоднозначное поведение, были переработаны или удалены. Это упрощает разработку и снижает вероятность ошибок при использовании библиотеки.
Ускоренный цикл разработки
Google активно вносит изменения в BoringSSL, добавляя поддержку новых стандартов (например, TLS 1.3) и исправляя уязвимости. В отличие от OpenSSL, где процесс принятия изменений может быть медленным, в BoringSSL изменения вносятся быстро и часто.
Поддержка только современных платформ
BoringSSL ориентирована на современные операционные системы и компиляторы. Поддержка старых платформ (например, Windows XP) была удалена, что позволяет использовать более современные возможности языка C и оптимизации.
Интеграция с Chromium
BoringSSL тесно интегрирована с браузером Chromium и его проектами-сателлитами. Это позволяет использовать специфические для Chrome функции, такие как поддержка QUIC (протокол на основе UDP) и другие расширения.
Архитектура и компоненты
BoringSSL, как и OpenSSL, состоит из нескольких основных модулей:
libcrypto
Основной криптографический модуль, содержащий реализации алгоритмов шифрования (AES, ChaCha20, RSA, ECDSA, Ed25519 и др.), хеширования (SHA-2, SHA-3), а также функции для работы с сертификатами, ключами и случайными числами.
libssl
Модуль, реализующий протоколы SSL/TLS и DTLS. Он обеспечивает установление защищённых соединений, обмен сертификатами, согласование параметров шифрования и т.д.
libdecrepit
Модуль, содержащий устаревшие функции, которые были удалены из основного API, но могут потребоваться для совместимости со старыми приложениями. Он не рекомендуется к использованию в новых проектах.
Применение
BoringSSL используется в следующих основных продуктах и проектах:
Google Chrome и Chromium
BoringSSL является основным криптографическим движком для браузера Chrome и его открытой версии Chromium. Она обеспечивает безопасное соединение по HTTPS, поддержку современных протоколов (TLS 1.3, QUIC) и защиту от атак.
Android
Начиная с Android 6.0 (Marshmallow), BoringSSL используется в операционной системе Android для обеспечения криптографических функций в системных приложениях и библиотеках.
Google Cloud Platform
Многие сервисы Google Cloud, включая Load Balancer, Cloud CDN и другие, используют BoringSSL для обработки защищённых соединений.
Другие проекты
BoringSSL также используется в некоторых других проектах, таких как Envoy Proxy (прокси-сервер для микросервисов), gRPC (фреймворк для удалённого вызова процедур) и других.
Критика и ограничения
Несмотря на свои преимущества, BoringSSL имеет и недостатки:
Ориентация на Google
Библиотека разрабатывается в первую очередь для нужд Google, что может приводить к тому, что изменения, полезные для сообщества, не принимаются, если они не соответствуют внутренним задачам компании.
Отсутствие обратной совместимости
Из-за удаления устаревших функций и изменения API, BoringSSL не является полностью совместимой с OpenSSL. Это может создавать проблемы при переносе приложений, написанных для OpenSSL, на BoringSSL.
Меньшая распространённость
По сравнению с OpenSSL, BoringSSL менее распространена в сообществе. Это означает меньшее количество сторонних библиотек, инструментов и документации, написанных специально для неё.
Интересные факты
- Название «BoringSSL» (от англ. boring — скучный) отражает стремление разработчиков сделать библиотеку предсказуемой и лишённой неожиданных сюрпризов, в отличие от OpenSSL, которая часто критиковалась за сложность и непредсказуемость.
- BoringSSL активно используется в проекте QUIC, который лёг в основу протокола HTTP/3.
- Несмотря на то, что BoringSSL является форком, она поддерживает совместимость с OpenSSL на уровне ABI (Application Binary Interface) для многих функций, что позволяет использовать её в качестве замены в некоторых случаях.
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →