Conscrypt

Il modulo Conscrypt accelera i miglioramenti della sicurezza e migliora la sicurezza del dispositivo senza fare affidamento sugli aggiornamenti OTA. Utilizza codice Java e una libreria nativa per fornire l'implementazione di TLS per Android, nonché una grande parte delle funzionalità di crittografia di Android, come generatori di chiavi, algoritmi di crittografia e digest dei messaggi. Conscrypt è disponibile come libreria open source, anche se presenta alcune specializzazioni se inclusa nella piattaforma Android.

Il modulo Conscrypt utilizza BoringSSL, una libreria nativa che è un fork di OpenSSL di Google e che viene utilizzata in molti prodotti Google per la crittografia e TLS (in particolare Google Chrome), in combinazione con il codice Conscrypt (sia Java che codice nativo). BoringSSL non ha release ufficiali (tutte le compilazioni degli utenti vengono eseguite da "head") e non offre alcuna garanzia in merito alla stabilità dell'API o dell'ABI.

Modifiche in Android 15

Android 15 limita l'utilizzo delle versioni TLS 1.0 e 1.1. Queste versioni erano state precedentemente ritirate in Android, ma ora non sono consentite per le app che hanno come target Android 15.

Modifiche in Android 14

Android 14 introduce un archivio attendibile radice aggiornabile in Conscrypt. I certificati CA (o certificati) forniscono le radici di attendibilità per le chiavi pubbliche utilizzate in Android e in internet in generale. Questi certificati vengono controllati regolarmente per garantire la firma crittografica corretta, quindi devono essere forniti e archiviati su tutti i dispositivi che si basano su di essi.

Prima di Mainline, Android archiviava i certificati nella partizione di sistema (in system/ca-certificates) e li aggiornava con ogni release di Android. Ora con Mainline, è possibile aggiornare i certificati più di frequente utilizzando gli aggiornamenti dei treni Mainline. Questa nuova funzionalità dovrebbe semplificare le procedure di aggiornamento, consentirci di avere tempi di risposta più rapidi per i problemi e contribuire a prolungare la vita utile dei dispositivi.

A partire da Android 14, i certificati di attendibilità radice vengono archiviati nel modulo APEX di Conscrypt e nella partizione di sistema. Le app possono comunque scegliere i propri certificati e modificarne il comportamento utilizzando NetworkSecurityConfig.

Android 14 include le seguenti altre modifiche al modulo Conscrypt:

  • È stata aggiunta l'implementazione del MAC AES-CMAC.
  • Implementazioni MAC "PBEwithHmacSHA2-*" ritirate e rimosse.
  • È stato aggiunto il supporto limitato per chiavi, contratti chiave e firme X25519.
  • BoringSSL aggiornato per la correttezza di X.509.
  • È stato ritirato il supporto per i certificati firmati con MD5 nelle API CertPath pubbliche. Questi certificati non sono stati accettati per le connessioni TLS dal livello API 16.

Modifiche in Android 10

Android 9 non include un'API pubblica specifica per Android per Conscrypt, ma utilizza un provider di sicurezza che implementa classi standard per JCA (Java Cryptography Architecture), tra cui Cipher e MessageDigest, e JSSE (Java Secure Socket Extension), tra cui SSLSocket e SSLEngine. Gli utenti interagiscono con queste classi e alcune API Conscrypt non pubbliche vengono utilizzate dal codice di libcore o dei framework.

Android 10 aggiunge un numero limitato di metodi API pubblici in android.net.ssl per accedere alle funzionalità di Conscrypt non esposte dalle classi in javax.net.ssl. Android 10 include anche una copia ridotta di Bouncy Castle per fornire strumenti di crittografia meno diffusi nell'ambito di Android Runtime (non inclusi nel modulo Conscrypt).

Formato e dipendenze

Il modulo Conscrypt (com.android.conscrypt) viene distribuito come file APEX che include il codice Java di Conscrypt e una libreria nativa di Conscrypt che si collega dinamicamente alle librerie NDK di Android (ad esempio liblog). La libreria nativa include anche una copia di BoringSSL che è stata convalidata (certificato n. 3753) tramite il Cryptographic Module Validation Program (CMVP) del NIST.

Il modulo Conscrypt espone le seguenti API:

  • Le API pubbliche sono estensioni di classi e interfacce nei pacchetti java.* e javax.*, oltre alle classi in android.net.ssl.*. Il codice dell'app esterno non chiama direttamente Conscrypt. Gli standard delle API di piattaforma garantiscono che queste API rimangano compatibili con le versioni precedenti e future.
  • Le API di piattaforma di base sono API nascoste utilizzate dal framework per accedere alle funzionalità non pubbliche. Questi sono relativamente limitati; l'utente più grande è NetworkSecurityConfig, che estende il gestore dell'attendibilità Conscrypt (il componente che verifica i certificati) per implementare la funzionalità di configurazione della sicurezza di rete.
  • Le API intra-core sono limitate ai costruttori senza argomenti chiamati in modo riflessivo dal meccanismo JCA e JSEE.