Conscrypt

Das Conscrypt-Modul beschleunigt Sicherheitsverbesserungen und verbessert die Gerätesicherheit, ohne dass OTA-Updates erforderlich sind. Es verwendet Java-Code und eine native Bibliothek, um die Android-TLS-Implementierung sowie einen Großteil der kryptografischen Funktionen von Android wie Schlüsselgeneratoren, Chiffren und Nachrichten-Digests bereitzustellen. Conscrypt ist als Open-Source-Bibliothek verfügbar, hat aber einige Spezialisierungen, wenn es in der Android-Plattform enthalten ist.

Das Conscrypt-Modul verwendet BoringSSL, eine native Bibliothek, die eine Google-Ableitung von OpenSSL ist und in vielen Google-Produkten für Kryptografie und TLS (insbesondere Google Chrome) in Verbindung mit Conscrypt-Code (sowohl Java- als auch nativer Code) verwendet wird. BoringSSL hat keine offiziellen Releases (alle Nutzer bauen aus dem Head-Build) und es werden keine Garantien hinsichtlich der API- oder ABI-Stabilität übernommen.

Änderungen in Android 15

Unter Android 15 ist die Verwendung der TLS-Versionen 1.0 und 1.1 eingeschränkt. Diese Versionen wurden in Android früher eingestellt, sind jetzt aber für Apps, die auf Android 15 ausgerichtet sind, nicht mehr zulässig.

Änderungen in Android 14

In Android 14 wird in Conscrypt ein aktualisierbarer Root-Trust-Store eingeführt. Zertifizierungsstellenzertifikate (oder Zertifikate) bilden die Vertrauenswürdigkeitsbasis für öffentliche Schlüssel, die in Android und im Internet allgemein verwendet werden. Diese Zertifikate werden regelmäßig auf ordnungsgemäße kryptografische Signatur geprüft. Sie müssen daher auf allen Geräten bereitgestellt und gespeichert werden, auf denen sie verwendet werden.

Vor Mainline speicherte Android Zertifikate in der Systempartition (in system/ca-certificates) und aktualisierte sie mit jeder Android-Version. Mit Mainline können Zertifikate jetzt häufiger mithilfe von Mainline-Zugupdates aktualisiert werden. Diese neue Funktion sollte die Aktualisierungsprozesse optimieren, die Bearbeitungszeit bei Problemen verkürzen und die Lebensdauer der Geräte verlängern.

Ab Android 14 werden Root-Vertrauenszertifikate im Conscrypt-Modul APEX und in der Systempartition gespeichert. Apps können weiterhin eigene Zertifikate auswählen und das Zertifikatsverhalten mit NetworkSecurityConfig ändern.

Android 14 enthält außerdem die folgenden Änderungen am Conscrypt-Modul:

  • AES-CMAC-MAC-Implementierung hinzugefügt
  • MAC-Implementierungen von „PBEwithHmacSHA2-*“ wurden eingestellt und entfernt.
  • Es wurde eine eingeschränkte Unterstützung für X25519-Schlüssel, Schlüsselvereinbarungen und Signaturen hinzugefügt.
  • BoringSSL wurde für die Richtigkeit von X.509-Zertifikaten 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 die Java Cryptography Architecture (JCA) implementiert, einschließlich Cipher und MessageDigest, sowie die Java Secure Socket Extension (JSSE), einschließlich SSLSocket und SSLEngine. Nutzer interagieren mit diesen Klassen und einige nicht öffentliche Conscrypt APIs werden von libcore- oder Framework-Code verwendet.

In Android 10 werden in android.net.ssl einige öffentliche API-Methoden hinzugefügt, um auf Conscrypt-Funktionen zuzugreifen, die von den Klassen unter javax.net.ssl nicht bereitgestellt werden. Android 10 enthält außerdem eine Slimm-Version von Bouncy Castle, um kryptografische Tools von geringerer Beliebtheit als Teil von 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 (z. B. liblog) verknüpft ist. Die native Bibliothek enthält auch eine Kopie von BoringSSL, die vom Cryptographic Module Validation Program (CMVP) des NIST validiert wurde (Zertifikat 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 sorgen dafür, dass diese APIs abwärts- und vorwärtskompatibel bleiben.
  • Kernplattform-APIs sind ausgeblendete APIs, die vom Framework zum Zugriff auf nicht öffentliche Funktionen verwendet werden. Diese sind relativ begrenzt. Der größte Nutzer ist NetworkSecurityConfig, der den Conscrypt-Vertrauensmanager (die Komponente, die Zertifikate überprüft) erweitert, um die Funktion zur Netzwerksicherheitskonfiguration zu implementieren.
  • Intra-Core-APIs sind auf Konstruktoren mit null Argumenten beschränkt, die von der JCA- und JSEE-Maschinerie rekursiv aufgerufen werden.