Модуль Conscrypt ускоряет улучшение безопасности и повышает ее уровень на устройстве без использования беспроводных обновлений. Она использует код Java и нативную библиотеку, чтобы обеспечить реализацию TLS в Android, а также большую часть криптографических функций Android, таких как генераторы ключей, шифры и дайджесты сообщений. Conscrypt доступна как библиотека с открытым исходным кодом, хотя при включении в платформу Android она имеет некоторые особенности.
В модуле Conscrypt используется BoringSSL – нативная библиотека, которая представляет собой форк OpenSSL от Google и применяется во многих продуктах Google для криптографии и TLS (в частности, в Google Chrome). BoringSSL используется вместе с кодом Conscrypt (как Java, так и нативным кодом). У BoringSSL нет официальных выпусков (все пользователи собирают код из основной ветки), и мы не гарантируем стабильность API или ABI.
Изменения в Android 15
В Android 15 ограничено использование TLS версий 1.0 и 1.1. Ранее эти версии были объявлены устаревшими в Android, а теперь они запрещены для приложений, предназначенных для Android 15.
Изменения в Android 14
В Android 14 представлено обновляемое хранилище доверенных корневых сертификатов в Conscrypt. Сертификаты ЦС – это корень доверия для открытых ключей, используемых в Android и интернете в целом. Эти сертификаты регулярно проверяются на наличие правильной криптографической подписи, поэтому они должны быть предоставлены и сохранены на всех устройствах, которые их используют.
До появления Mainline сертификаты в Android хранились в системном разделе (в каталоге system/ca-certificates) и обновлялись с каждым выпуском Android. Теперь, благодаря Mainline, сертификаты можно обновлять чаще, используя обновления Mainline train. Это позволит нам быстрее выпускать обновления и устранять проблемы, а также продлить срок службы устройств.
Начиная с Android 14 корневые сертификаты хранятся в APEX-модуле Conscrypt и системном разделе. Приложения по-прежнему могут выбирать собственные сертификаты и изменять их поведение с помощью NetworkSecurityConfig.
В Android 14 также внесены следующие изменения в модуль Conscrypt:
- Добавлена реализация MAC-алгоритма AES-CMAC.
- Прекращена поддержка и удалены реализации MAC `PBEwithHmacSHA2-*`.
- Добавлена ограниченная поддержка ключей X25519, согласований ключей и подписей.
- Обновлена библиотека BoringSSL для корректной работы с сертификатами X.509.
- Прекращена поддержка сертификатов с подписью MD5 в общедоступных API CertPath. Такие сертификаты не принимаются для TLS-подключений начиная с уровня API 16.
Изменения в Android 10
В Android 9 нет специального общедоступного API для Conscrypt, но вместо него используется поставщик безопасности, который реализует стандартные классы для архитектуры Java Cryptography Architecture (JCA), включая Cipher и MessageDigest, и Java Secure Socket Extension (JSSE), включая SSLSocket и SSLEngine.
Пользователи взаимодействуют с этими классами, а некоторые непубличные API Conscrypt используются кодом libcore или фреймворков.
В Android 10 добавлено несколько общедоступных методов API в android.net.ssl для доступа к функциям Conscrypt, которые не представлены классами в javax.net.ssl. В Android 10 также входит урезанная копия Bouncy Castle, которая предоставляет менее популярные криптографические инструменты в составе Android Runtime (не включены в модуль Conscrypt).
Формат и зависимости
Модуль Conscrypt (com.android.conscrypt) распространяется в виде APEX-файла, который содержит код Java Conscrypt и нативную библиотеку Conscrypt, динамически связанную с библиотеками Android NDK (например, liblog). Нативная библиотека также включает копию BoringSSL, которая была проверена (сертификат № 3753) в рамках программы проверки криптографических модулей (CMVP) Национального института стандартов и технологий США (NIST).
Модуль Conscrypt предоставляет следующие API:
- Общедоступные API – это расширения классов и интерфейсов в пакетах под
java.*иjavax.*, а также классы подandroid.net.ssl.*. Внешний код приложения не вызывает Conscrypt напрямую. Стандарты Platform API обеспечивают обратную и прямую совместимость этих API. - Основные API платформы – это скрытые API, которые используются фреймворком для доступа к закрытым функциям. Их относительно немного. Самый крупный пользователь –
NetworkSecurityConfig, который расширяет менеджер доверия Conscrypt (компонент, проверяющий сертификаты), чтобы реализовать функцию настройки сетевой безопасности. - Внутренние API ограничены конструкторами без аргументов, которые вызываются рефлексивно механизмами JCA и JSEE.