Модуль Conscrypt ускоряет улучшение безопасности и повышает безопасность устройства, не полагаясь на обновления OTA. Он использует код Java и собственную библиотеку для реализации Android TLS, а также большую часть криптографических функций Android, таких как генераторы ключей, шифры и дайджесты сообщений. Conscrypt доступен как библиотека с открытым исходным кодом , хотя при включении в платформу Android он имеет некоторые специализации.
Модуль Conscrypt использует BoringSSL , собственную библиотеку, которая является ответвлением Google OpenSSL и которая используется во многих продуктах Google для криптографии и TLS (особенно в Google Chrome) в сочетании с кодом Conscrypt (как Java, так и собственным кодом). BoringSSL не имеет официальных выпусков (все пользователи создают из головы) и не дает никаких гарантий относительно стабильности API или ABI.
Изменения в Android 15
Android 15 ограничивает использование TLS версий 1.0 и 1.1. Эти версии ранее были признаны устаревшими в Android, но теперь запрещены для приложений, ориентированных на Android 15.
Изменения в Android 14
В Android 14 представлено обновляемое корневое хранилище доверия в Conscrypt. Сертификаты CA (или сертификаты) обеспечивают основу доверия для открытых ключей, используемых в Android и в Интернете в целом. Эти сертификаты регулярно проверяются на предмет правильной криптографической подписи, поэтому их необходимо предоставлять и хранить на всех устройствах, которые на них полагаются.
До Mainline Android хранил сертификаты в системном разделе (в system/ca-certificates
) и обновлял их с каждой версией Android. Теперь с Mainline сертификаты можно обновлять чаще, используя обновления поездов Mainline. Эта новая возможность должна упростить процессы обновления, позволить нам быстрее решать проблемы и помочь продлить срок службы устройств.
Начиная с Android 14, корневые сертификаты доверия хранятся в модуле Conscrypt APEX и системном разделе. Приложения по-прежнему могут выбирать свои собственные сертификаты и изменять поведение сертификатов с помощью 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, специфичный для Android, а вместо этого использует поставщика безопасности, который реализует стандартные классы для архитектуры криптографии Java (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 ) с помощью программы проверки криптографических модулей NIST (CMVP) .
Модуль Conscrypt предоставляет следующие API:
- Публичные API — это расширения классов и интерфейсов в пакетах
java.*
иjavax.*
, а также классовandroid.net.ssl.*
. Код внешнего приложения не вызывает Conscrypt напрямую. Стандарты API платформы гарантируют, что эти API остаются обратными и прямыми совместимыми. - API основной платформы — это скрытые API, используемые платформой для доступа к закрытым функциям. Они относительно ограничены; Самый крупный пользователь —
NetworkSecurityConfig
, который расширяет диспетчер доверия Conscrypt (компонент, проверяющий сертификаты) для реализации функции настройки сетевой безопасности . - Внутриядерные API ограничены конструкторами с нулевым аргументом, рефлексивно вызываемыми механизмами JCA и JSEE.