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

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 →