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