Verschlüsseln

Das Conscrypt-Modul beschleunigt Sicherheitsverbesserungen und verbessert die Gerätesicherheit, ohne auf OTA-Updates angewiesen zu sein. Es verwendet Java-Code und eine native Bibliothek, um die Android-TLS-Implementierung sowie einen großen Teil der kryptografischen Android-Funktionalität wie Schlüsselgeneratoren, Chiffren und Nachrichtenauszüge bereitzustellen. Conscrypt ist als Open-Source-Bibliothek verfügbar, verfügt jedoch über einige Spezialisierungen, wenn es in die Android-Plattform integriert wird.

Das Conscrypt-Modul verwendet BoringSSL , eine native Bibliothek, die ein Google-Fork von OpenSSL ist und in vielen Google-Produkten für Kryptografie und TLS (vor allem Google Chrome) in Verbindung mit Conscrypt-Code (sowohl Java als auch nativer Code) verwendet wird. BoringSSL verfügt über keine offiziellen Versionen (alle Benutzer bauen aus dem Kopf) und gibt keine Garantien für die API- oder ABI-Stabilität.

Änderungen in Android 14

Android 14 führt einen aktualisierbaren Root-Trust-Store in Conscrypt ein. CA-Zertifikate (oder Zertifikate) bilden die Vertrauensbasis für öffentliche Schlüssel, die in Android und im Internet insgesamt verwendet werden. Diese Zertifikate werden regelmäßig überprüft, um eine ordnungsgemäße kryptografische Signatur sicherzustellen. Sie müssen daher auf allen Geräten bereitgestellt und gespeichert werden, die auf sie angewiesen sind.

Vor Mainline speicherte Android Zertifikate in der Systempartition (in system/ca-certificates ) und aktualisierte sie mit jeder Android-Version. Mit Mainline ist es jetzt möglich, Zertifikate mithilfe von Mainline-Zugaktualisierungen häufiger zu aktualisieren. Diese neue Funktion soll Aktualisierungsprozesse rationalisieren, uns schnellere Bearbeitungszeiten bei Problemen ermöglichen und dazu beitragen, die Lebensdauer der Geräte zu verlängern.

Ab Android 14 werden Root-Trust-Zertifikate im Conscrypt-Modul APEX und der Systempartition gespeichert. Apps können weiterhin ihre eigenen Zertifikate auswählen und das Zertifikatverhalten mithilfe von NetworkSecurityConfig ändern.

Android 14 enthält diese weiteren Änderungen am Conscrypt-Modul:

  • AES-CMAC MAC-Implementierung hinzugefügt.
  • Veraltete und entfernte „PBEwithHmacSHA2-*“-MAC-Implementierungen.
  • Eingeschränkte Unterstützung für X25519-Schlüssel, Schlüsselvereinbarungen und Signaturen hinzugefügt.
  • BoringSSL für X.509-Korrektheit aktualisiert.
  • Die Unterstützung für MD5-signierte Zertifikate in den öffentlichen CertPath-APIs wurde eingestellt. Solche Zertifikate werden seit API Level 16 nicht mehr für TLS-Verbindungen akzeptiert.

Änderungen in Android 10

Android 9 enthält keine Android-spezifische öffentliche API für Conscrypt, sondern verwendet stattdessen einen Sicherheitsanbieter, der Standardklassen für Java Cryptography Architecture (JCA), einschließlich Cipher und MessageDigest, und Java Secure Socket Extension (JSSE), einschließlich SSLSocket und SSLEngine, implementiert. Benutzer interagieren mit diesen Klassen und einige nicht öffentliche Conscrypt-APIs werden von libcore oder Frameworks-Code verwendet.

Android 10 fügt eine kleine Anzahl öffentlicher API-Methoden in android.net.ssl ​​hinzu, um auf Conscrypt-Funktionen zuzugreifen, die von den Klassen unter javax.net.ssl ​​nicht verfügbar gemacht werden. Android 10 enthält außerdem eine abgespeckte Kopie von Bouncy Castle , um weniger beliebte kryptografische Tools als Teil der Android Runtime bereitzustellen (nicht im Conscrypt-Modul enthalten).

Format und Abhängigkeiten

Das Conscrypt-Modul ( com.android.conscrypt ) wird als APEX- Datei verteilt, die den Conscrypt-Java-Code und eine native Conscrypt-Bibliothek enthält, die dynamisch mit Android NDK-Bibliotheken verknüpft ist (z. B. liblog ). Die native Bibliothek enthält auch eine Kopie von BoringSSL, die durch das Cryptographic Module Validation Program (CMVP ) des NIST validiert wurde ( Zertifikat Nr. 3753 ).

Das Conscrypt-Modul stellt die folgenden APIs bereit:

  • Öffentliche APIs sind Erweiterungen von Klassen und Schnittstellen in Paketen unter java.* und javax.* sowie Klassen unter android.net.ssl.* . Externer App-Code ruft Conscrypt nicht direkt auf. Plattform-API-Standards stellen sicher, dass diese APIs abwärts- und vorwärtskompatibel bleiben.
  • Kernplattform-APIs sind versteckte APIs, die vom Framework verwendet werden, um auf nicht öffentliche Funktionen zuzugreifen. Diese sind relativ begrenzt; Der größte Benutzer ist NetworkSecurityConfig , das den Conscrypt Trust Manager (die Komponente, die Zertifikate überprüft) erweitert, um die Netzwerksicherheitskonfigurationsfunktion zu implementieren.
  • Intra-Core-APIs sind auf Null-Argument-Konstruktoren beschränkt, die von der JCA- und JSEE-Maschinerie reflektierend aufgerufen werden.