O módulo Conscrypt acelera 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 Android TLS, bem como uma grande parte da funcionalidade criptográfica do Android, como geradores de chaves, cifras e resumos de mensagens. Conscrypt está disponível como uma biblioteca de código aberto , embora tenha algumas especializações quando incluída na plataforma Android.
O módulo Conscrypt usa BoringSSL , uma biblioteca nativa que é um fork do OpenSSL do Google 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 possui lançamentos oficiais (todos os usuários constroem a partir do head) e não oferece garantias quanto à estabilidade da API ou ABI.
Mudanças no Android 14
O Android 14 apresenta um armazenamento confiável raiz atualizável no Conscrypt. Os certificados (ou certs) 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, devem 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 a cada versão do Android. Agora com o Mainline, é possível atualizar certificados com mais frequência usando atualizações de trem do Mainline. Esse novo recurso deve agilizar os processos de atualização, permitir 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 módulo Conscrypt APEX e na partição do sistema. Os aplicativos ainda podem escolher seus próprios certificados e modificar o comportamento do certificado usando NetworkSecurityConfig
.
O Android 14 inclui estas outras alterações no módulo Conscrypt:
- Adicionada implementação AES-CMAC MAC.
- Implementações MAC `PBEwithHmacSHA2-*` obsoletas e removidas.
- Adicionado suporte limitado para chaves X25519, contratos de chave e assinaturas.
- BoringSSL atualizado para correção X.509.
- Suporte descartado para certificados assinados por MD5 nas APIs CertPath públicas. 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 Conscrypt, mas usa um provedor de segurança que implementa classes padrão para Java Cryptography Architecture (JCA), incluindo Cipher e MessageDigest, e Java Secure Socket Extension (JSSE), incluindo SSLSocket e SSLEngine. Os usuários interagem com essas classes e algumas APIs Conscrypt não públicas são usadas pelo código libcore
ou frameworks.
O Android 10 adiciona um pequeno número de métodos de API públicos em android.net.ssl
para acessar a funcionalidade Conscrypt que não é exposta pelas classes em javax.net.ssl
. O Android 10 também inclui uma cópia reduzida do Bouncy Castle para fornecer ferramentas criptográficas de menor popularidade como parte do Android Runtime (não incluído 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 Conscrypt Java e uma biblioteca nativa Conscrypt que se vincula dinamicamente às bibliotecas Android NDK (como liblog
). A biblioteca nativa também inclui uma cópia do BoringSSL que foi validada ( Certificado #3753 ) através do Programa de Validação de Módulo Criptográfico (CMVP) do NIST.
O módulo Conscrypt expõe as seguintes APIs:
- APIs públicas são extensões de classes e interfaces em pacotes em
java.*
ejavax.*
, além de classes emandroid.net.ssl.*
. O código do aplicativo externo não chama o Conscrypt diretamente. Os padrões da API da plataforma garantem que essas APIs permaneçam compatíveis com versões anteriores e futuras. - As APIs da plataforma principal são APIs ocultas usadas pela estrutura para acessar funcionalidades não públicas. Estes são relativamente limitados; o maior usuário é
NetworkSecurityConfig
, que estende o gerenciador de confiança Conscrypt (o componente que verifica certificados) para implementar o recurso de configuração de segurança de rede . - APIs intra-core são limitadas a construtores sem argumento chamados reflexivamente pelas máquinas JCA e JSEE.