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, ma ha alcune specializzazioni quando è 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 fornisce alcuna garanzia sulla stabilità dell'API o dell'ABI.
Modifiche in Android 15
Android 15 limita l'utilizzo delle versioni 1.0 e 1.1 di TLS. 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 regolarmente controllati per garantire un'adeguata firma crittografica, quindi devono essere forniti e archiviati su tutti i dispositivi che li utilizzano.
Prima di Mainline, Android memorizzava i certificati nella partizione di sistema (in system/ca-certificates
) e li aggiornava a 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 durata dei dispositivi.
A partire da Android 14, i certificati di attendibilità radice vengono archiviati nell'APEX del modulo 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 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 all'interno 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.*
ejavax.*
, oltre alle classi inandroid.net.ssl.*
. Il codice dell'app esterna 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. Sono relativamente limitati. L'utente di dimensioni maggiori è
NetworkSecurityConfig
, che estende il Gestore 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.