Conscrypt

El módulo Conscrypt acelera las mejoras de seguridad y mejora la seguridad del dispositivo sin depender de actualizaciones OTA. Usa código Java y una biblioteca nativa para proporcionar la implementación de TLS de Android y una gran parte de su funcionalidad criptográfica, como generadores de claves, algoritmos de cifrado 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 de Android.

El módulo Conscrypt usa BoringSSL, una biblioteca nativa que es una bifurcación de OpenSSL de Google y que se usa en muchos productos de Google para la criptografía y TLS (en particular, Google Chrome), junto con el código de Conscrypt (código Java y nativo). BoringSSL no tiene versiones oficiales (todos los usuarios compilan desde la versión principal) y no ofrece garantías sobre la estabilidad de la API o la ABI.

Cambios en Android 15

Android 15 restringe el uso de las versiones 1.0 y 1.1 de TLS. Estas versiones dejaron de estar disponibles en Android, pero ahora no se permiten para las apps que se orientan a Android 15.

Cambios en Android 14

Android 14 presenta un almacén de confianza raíz actualizable en Conscrypt. Los certificados de AC (o certificados) proporcionan las raíces de confianza para las claves públicas que se usan en Android y en Internet en general. Estos certificados se revisan periódicamente para garantizar una firma criptográfica adecuada, por lo que se deben proporcionar y almacenar en todos los dispositivos que los usan.

Antes de Mainline, Android almacenaba 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 tren de Mainline. Esta nueva función debería optimizar 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 apps aún pueden elegir sus propios certificados y modificar su comportamiento con NetworkSecurityConfig.

Android 14 incluye los siguientes cambios en el módulo de Conscrypt:

  • Se agregó la implementación de MAC AES-CMAC.
  • Se dieron de baja y se quitaron las implementaciones de MAC "PBEwithHmacSHA2-*".
  • Se agregó compatibilidad limitada con claves, acuerdos de claves y firmas X25519.
  • Se actualizó BoringSSL para la corrección de X.509.
  • Se dejó de admitir certificados firmados con MD5 en las APIs públicas de CertPath. Estos certificados no se aceptan para las conexiones TLS desde el nivel de API 16.

Cambios en Android 10

Android 9 no incluye una API pública específica de Android para Conscrypt, sino que usa un proveedor de seguridad que implementa clases estándar para la arquitectura de criptografía de Java (JCA), incluidos Cipher y MessageDigest, y la extensión de conexión segura (JSSE) de Java, incluidos SSLSocket y SSLEngine. Los usuarios interactúan con esas clases, y libcore o el código de los frameworks usan algunas APIs no públicas de Conscrypt.

En Android 10, se agrega una pequeña cantidad de métodos de API pública en android.net.ssl para acceder a la funcionalidad de Conscrypt que las clases de javax.net.ssl no exponen. Android 10 también incluye una copia reducida de Bouncy Castle para proporcionar herramientas de criptografía menos populares como parte de Android Runtime (no se incluye en el módulo de 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 de forma dinámica a las bibliotecas del NDK de Android (como liblog). La biblioteca nativa también incluye una copia de BoringSSL que se validó (Certificado n° 3753) a través del Programa de validación de módulos criptográficos (CMVP) del NIST.

El módulo Conscrypt expone las siguientes APIs:

  • Las APIs públicas son extensiones de clases e interfaces en paquetes de java.* y javax.*, además de las clases de android.net.ssl.*. El código externo de la app no llama a Conscrypt directamente. Los estándares de las APIs de la plataforma garantizan que estas APIs sean retrocompatibles y sean compatibles con versiones futuras.
  • Las APIs de la plataforma principal son APIs ocultas que usa el framework para acceder a funciones no públicas. Estos son relativamente limitados. El usuario más grande es NetworkSecurityConfig, que extiende 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 APIs intranúcleo se limitan a constructores de cero argumentos que llama de forma reflexiva el mecanismo de JCA y JSEE.