Criptografar

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.* e javax.* , além de classes em android.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.