Компания Google представила BoringSSL, форк OpenSSL
Компания 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,
новые функции для определения принадлежности семействам шифров.