Conscrypt

Модуль 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.