Конскрипт

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

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

Изменения в Android 10

Android 9 не включает общедоступный API для Android для 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 распространяется в виде файла APEX , который включает код Conscrypt Java и собственную библиотеку 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.