El módulo Conscrypt acelera las mejoras de seguridad y mejora la seguridad del dispositivo sin depender de actualizaciones OTA. Utiliza código Java y una biblioteca nativa para proporcionar la implementación 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 biblioteca de código abierto , aunque tiene algunas especializaciones cuando se incluye en la plataforma Android.
El módulo Conscrypt utiliza BoringSSL , una biblioteca nativa que es una bifurcación de OpenSSL de Google y que se utiliza 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 ofrece garantías sobre la estabilidad de API o ABI.
Cambios en Android 14
Android 14 presenta un almacén de confianza raíz actualizable dentro de Conscrypt. Los certificados (o certificados) de CA proporcionan las raíces de confianza para las claves públicas utilizadas en Android e Internet en general. Estos certificados se verifican de forma rutinaria para garantizar una firma criptográfica adecuada, por lo que deben proporcionarse y almacenarse en todos los dispositivos que dependen de ellos.
Antes de Mainline, Android almacenaba los certificados en la partición del sistema (en system/ca-certificates
) y los actualizaba con cada versión de Android. Ahora, con Mainline, es posible actualizar los certificados con más frecuencia mediante las actualizaciones de trenes de Mainline. Esta nueva capacidad debería agilizar los procesos de actualización, permitirnos tener tiempos de respuesta más rápidos para los problemas y ayudar a extender la vida útil de los dispositivos.
A partir de Android 14, los certificados de confianza raíz se almacenan en el módulo APEX de Conscrypt y en la partición del sistema. Las aplicaciones aún pueden elegir sus propios certificados y modificar el comportamiento de los certificados mediante NetworkSecurityConfig
.
Android 14 incluye estos otros cambios en el módulo Conscrypt:
- Se agregó implementación MAC AES-CMAC.
- Implementaciones MAC `PBEwithHmacSHA2-*` obsoletas y eliminadas.
- Se agregó soporte limitado para claves, acuerdos de claves y firmas X25519.
- BoringSSL actualizado para la corrección X.509.
- Se eliminó la compatibilidad con certificados firmados MD5 en las API públicas de CertPath. Estos certificados no se aceptan para conexiones TLS desde el nivel API 16.
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 el código libcore
o frameworks utiliza algunas API de Conscrypt no públicas.
Android 10 agrega una pequeña cantidad de métodos API públicos en android.net.ssl
para acceder a la funcionalidad Conscrypt que no está expuesta en las clases de 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 ( com.android.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 de módulos criptográficos (CMVP) del NIST.
El módulo Conscrypt expone las siguientes API:
- Las API públicas son extensiones de clases e interfaces en paquetes de
java.*
yjavax.*
, además de clases deandroid.net.ssl.*
. El código de la aplicación externa no llama a Conscrypt directamente. Los estándares API de plataforma garantizan que estas API sigan siendo compatibles con versiones anteriores y posteriores. - Las API de la plataforma principal son API ocultas que utiliza el marco para acceder a funciones no públicas. Estos son relativamente limitados; el usuario más grande es
NetworkSecurityConfig
, que extiende el administrador de confianza Conscrypt (el componente que verifica los certificados) para implementar la función de configuración de seguridad de la red . - Las API intranúcleo están limitadas a constructores sin argumentos llamados reflexivamente por la maquinaria JCA y JSEE.