Компания Google опубликовала репозиторий с исходными текстами проекта BoringSSL, в рамках которого ведётся разработка независимого форка OpenSSL. Проект включает наработки, которые уже используется в Google для усиления безопасности OpenSSL. За годы в Google создано большое число патчей к OpenSSL, около 70 из которых не были приняты в основной состав OpenSSL, так как они носили экспериментальный характер или приводили к нарушению API или ABI. Теперь эти патчи легли в основу проекта BoringSSL. Разработку BoringSSL возглавил Адам Лэнгли (Adam Langley, agl), известный эксперт по компьютерной безопасности, отвечающий в Google за обеспечение работы инфраструктуры доступа по HTTPS и сетевой стек Chrome.
Развитию BoringSSL как открытого проекта способствовала недавняя череда серьёзных уязвимостей в OpenSSL, GnuTLS и SSL-реализации от компании Apple, которые были вызваны ошибками, находящимися в коде длительное время и остававшимися незамеченными. Всё это вызвало интерес по использованию усиливающих безопасность OpenSSL патчей в Android, Chrome и других продуктах. Поддерживать работу большого числа внешних патчей поверх OpenSSL является достаточно сложной задачей. Поэтому решено сменить модель их поддержания и вместо адаптации патчей к изменяющейся кодовой базе OpenSSL перейти к развитию самодостаточного форка, в который будут импортироваться изменения из OpenSSL.
Код BoringSSL скоро будет добавлен в репозиторий Chromium, а в дальнейшем возможно появится в составе платформы Android. Сохранение совместимости с OpenSSL на уровне API и ABI не гарантируется. При этом, BoringSSL не позиционируется как замена OpenSSL. Google продолжит передачу исправлений ошибок и важных изменений в OpenSSL и будет оказывать финансовую поддержку данному проекту. Кроме того, создатели BoringSSL намерены организовать сотрудничество с LibreSSL, форком OpenSSL от проекта OpenBSD. Для организации обмена кодом с LibreSSL компания Google уже перелицензирвала часть своих патчей под лицензией ISC, что позволит наладить взаимный обмен патчами.
Из изменений можно отметить:
- удаление нереализованных функций,
- сокращение числа поддерживаемых форматов в ClientHello,
- обеспечения одновременной поддержки старого и нового алгоритмов поиска сертификатов X.509,
- реализация функции OPENSSL_str[n]casecmp,
- удаление макросов DANE,
- ограничение _X509_CHECK_FLAG_DOT_SUBDOMAINS только внутренним применением,
- изменение метода проверки имени хоста по маске,
- реализация расширения Intel SHA,
- поддержка асинхронного поиска сеансов,
- возможность использования только SHA-256 в клиентских сертификатах,
- поддержка ChannelID,
- реализация безопасных одноразовых кодов для (EC)DSA,
- новая реализация функции tls1_change_cipher_state,
- поддержка SSL AEAD, использование интерфейса AEAD в EVP и AES-GCM,
- поддержка шифров ChaCha20-Poly1305, ECDHE-PSK-WITH-AES-128-GCM-SHA256,
- рефакторинг ssl3_send_client_verify,
- новые функции для определения принадлежности семействам шифров.