Conscrypt

O módulo Conscrypt acelera as melhorias de segurança e melhora a segurança do dispositivo sem depender de atualizações OTA. Ele usa código Java e uma biblioteca nativa para fornecer a implementação do TLS do Android, além de uma grande parte da funcionalidade criptográfica do Android, como geradores de chaves, cifras e resumos de mensagens. O Conscrypt está disponível como uma biblioteca de código aberto, mas tem algumas especializações quando incluído na plataforma Android.

O módulo Conscrypt usa BoringSSL, uma biblioteca nativa que é uma versão do Google da OpenSSL e que é usada em muitos produtos do Google para criptografia e TLS (principalmente o Google Chrome), em conjunto com o código Conscrypt (Java e código nativo). O BoringSSL não tem versões oficiais (todos os usuários fazem o build a partir do início) e não oferece garantias sobre a estabilidade da API ou da ABI.

Mudanças no Android 15

O Android 15 restringe o uso das versões 1.0 e 1.1 do TLS. Essas versões foram descontinuadas no Android, mas agora não são mais permitidas para apps destinados ao Android 15.

Mudanças no Android 14

O Android 14 apresenta uma loja de confiança raiz atualizável no Conscrypt. Os certificados (ou certificados) de CA fornecem as raízes de confiança para chaves públicas usadas no Android e na Internet em geral. Esses certificados são verificados rotineiramente para garantir a assinatura criptográfica adequada. Portanto, eles precisam ser fornecidos e armazenados em todos os dispositivos que dependem deles.

Antes do Mainline, o Android armazenava certificados na partição do sistema (em system/ca-certificates) e os atualizava com cada versão do Android. Agora, com o Mainline, é possível atualizar certificados com mais frequência usando atualizações de treinamento do Mainline. Esse novo recurso vai simplificar os processos de atualização, permitir que tenhamos tempos de resposta mais rápidos para problemas e ajudar a prolongar a vida útil dos dispositivos.

A partir do Android 14, os certificados de confiança raiz são armazenados no APEX do módulo Conscrypt e na partição do sistema. Os apps ainda podem escolher os próprios certificados e modificar o comportamento deles usando NetworkSecurityConfig.

O Android 14 inclui estas outras mudanças no módulo Conscrypt:

  • Adição da implementação de MAC AES-CMAC.
  • As implementações de MAC "PBEwithHmacSHA2-*" foram descontinuadas e removidas.
  • Adição de suporte limitado para chaves X25519, acordos de chaves e assinaturas.
  • Atualização do BoringSSL para correção do X.509.
  • A compatibilidade com certificados assinados por MD5 nas APIs públicas do CertPath foi descontinuada. Esses certificados não são aceitos para conexões TLS desde o nível 16 da API.

Mudanças no Android 10

O Android 9 não inclui uma API pública específica do Android para o Conscrypt, mas usa um provedor de segurança que implementa classes padrão para a Arquitetura de criptografia Java (JCA, na sigla em inglês), incluindo Cipher e MessageDigest, e a extensão de soquete segura Java (JSSE, na sigla em inglês), incluindo SSLSocket e SSLEngine. Os usuários interagem com essas classes, e algumas APIs do Conscrypt não públicas são usadas pelo código do libcore ou do framework.

O Android 10 adiciona um pequeno número de métodos de API pública em android.net.ssl para acessar a funcionalidade do Conscrypt que não é exposta pelas classes em javax.net.ssl. O Android 10 também inclui uma cópia simplificada do Bouncy Castle para fornecer ferramentas criptográficas de menor popularidade como parte do Android Runtime (não incluídas no módulo Conscrypt).

Formato e dependências

O módulo Conscrypt (com.android.conscrypt) é distribuído como um arquivo APEX que inclui o código Java do Conscrypt e uma biblioteca nativa do Conscrypt que vincula de forma dinâmica às bibliotecas do NDK do Android (como liblog). A biblioteca nativa também inclui uma cópia do BoringSSL que foi validada (Certificado #3753) pelo Programa de validação de módulo criptográfico (CMVP) do NIST.

O módulo Conscrypt expõe as seguintes APIs:

  • As APIs públicas são extensões de classes e interfaces em pacotes em java.* e javax.*, além de classes em android.net.ssl.*. O código do app externo não chama o Conscrypt diretamente. Os padrões de API da plataforma garantem que essas APIs permaneçam compatíveis com versões anteriores e posteriores.
  • As APIs principais da plataforma são APIs ocultas usadas pelo framework para acessar funcionalidades não públicas. Elas são relativamente limitadas. O maior usuário é NetworkSecurityConfig, que estende o gerenciador de confiança do Conscrypt (o componente que verifica certificados) para implementar o recurso de configuração de segurança de rede.
  • As APIs intra-core estão limitadas a construtores sem argumento chamados de forma refletida pelas máquinas JCA e JSEE.