El módulo Conscrypt acelera las mejoras de seguridad y mejora la seguridad del dispositivo sin depender de las actualizaciones OTA. Utiliza código Java y una biblioteca nativa para proporcionar la implementación de TLS de Android, así como una gran parte de la funcionalidad criptográfica de Android, como generadores de claves, cifrados y resúmenes de mensajes. Conscrypt está disponible como una biblioteca de código abierto , aunque tiene algunas especializaciones cuando se incluye en la plataforma Android.
El módulo Conscrypt usa BoringSSL , una biblioteca nativa que es una bifurcación de Google de OpenSSL y que se usa en muchos productos de Google para criptografía y TLS (sobre todo Google Chrome), junto con el código Conscrypt (tanto Java como código nativo). BoringSSL no tiene versiones oficiales (todos los usuarios construyen desde la cabeza) y no garantiza la estabilidad de API o ABI.
Cambios en Android 10
Android 9 no incluye una API pública específica de Android para Conscrypt, sino que utiliza un proveedor de seguridad que implementa clases estándar para Java Cryptography Architecture (JCA), incluidos Cipher y MessageDigest, y Java Secure Socket Extension (JSSE), incluidos SSLSocket y SSLEngine. Los usuarios interactúan con esas clases y algunas API de Conscrypt no públicas son utilizadas por libcore
o código de marcos.
Android 10 agrega una pequeña cantidad de métodos de API públicos en android.net.ssl
para acceder a la funcionalidad de Conscrypt que no están expuestas por las clases en javax.net.ssl
. Android 10 también incluye una copia reducida de Bouncy Castle para proporcionar herramientas criptográficas de menor popularidad como parte de Android Runtime (no incluido en el módulo Conscrypt).
Formato y dependencias
El módulo Conscrypt se distribuye como un archivo APEX que incluye el código Java de Conscrypt y una biblioteca nativa de Conscrypt que se vincula dinámicamente a las bibliotecas NDK de Android (como liblog
). La biblioteca nativa también incluye una copia de BoringSSL que ha sido validada ( Certificado #3753 ) a través del Programa de validación del módulo criptográfico (CMVP) del NIST.
El módulo Conscrypt expone las siguientes API:
- Las API públicas son extensiones de clases e interfaces en paquetes bajo
java.*
yjavax.*
, además de clases bajoandroid.net.ssl.*
. El código de la aplicación externa no llama a Conscrypt directamente. Los estándares API de la plataforma garantizan que estas API sigan siendo compatibles con versiones anteriores y posteriores. - Las API de la plataforma central son API ocultas que utiliza el marco para acceder a la funcionalidad no pública. Estos son relativamente limitados; el usuario más grande es
NetworkSecurityConfig
, que amplía el administrador de confianza de Conscrypt (el componente que verifica los certificados) para implementar la función de configuración de seguridad de la red . - Las API intra-core están limitadas a constructores de cero argumentos llamados reflexivamente por la maquinaria JCA y JSEE.