Конскрипт

Модуль Conscrypt ускоряет улучшение безопасности и повышает безопасность устройства, не полагаясь на обновления OTA. Он использует код Java и собственную библиотеку для реализации Android TLS, а также большую часть криптографических функций Android, таких как генераторы ключей, шифры и дайджесты сообщений. Conscrypt доступен как библиотека с открытым исходным кодом , хотя при включении в платформу Android он имеет некоторые специализации.

Модуль Conscrypt использует BoringSSL , собственную библиотеку, которая является ответвлением Google OpenSSL и которая используется во многих продуктах Google для криптографии и TLS (особенно в Google Chrome) в сочетании с кодом Conscrypt (как Java, так и собственным кодом). BoringSSL не имеет официальных выпусков (все пользователи создают его самостоятельно) и не дает никаких гарантий относительно стабильности API или ABI.

Изменения в 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.