Moduł Conscrypt przyspiesza działanie zabezpieczeń i zwiększa bezpieczeństwo urządzenia bez korzystania z aktualizacji OTA. Wykorzystuje kod Java i natywną bibliotekę, aby zapewnić implementację TLS na Androidzie, a także dużą część funkcji kryptograficznych Androida, takich jak generatory kluczy, mechanizmy szyfrowania i podsumowania wiadomości. Conscrypt jest dostępny jako biblioteka open source, ale w ramach platformy Android ma też pewne specjalizacje.
Moduł Conscrypt korzysta z BoringSSL, natywnej biblioteki, która jest odgałęzią OpenSSL firmy Google i jest używana w wielu usługach Google do szyfrowania i protokołu TLS (zwłaszcza w Google Chrome) w połączeniu z kodem Conscrypt (zarówno w języku Java, jak i w kodzie natywnym). BoringSSL nie ma oficjalnych wersji (wszyscy użytkownicy budują z najnowszej wersji) i nie gwarantuje stabilności interfejsu API ani ABI.
Zmiany w Androidzie 15
Android 15 ogranicza korzystanie z protokołu TLS w wersjach 1.0 i 1.1. Te wersje zostały wcześniej wycofane na Androida, ale teraz nie są dostępne w aplikacjach kierowanych na Androida 15.
Zmiany w Androidzie 14
Android 14 wprowadza aktualizowany główny magazyn zaufania w Conscrypt. Certyfikaty CA (lub certyfikaty) zapewniają główny poziom zaufania w przypadku kluczy publicznych używanych na Androidzie i w internecie. Certyfikaty są regularnie sprawdzane pod kątem prawidłowego podpisu kryptograficznego, dlatego muszą być udostępniane i przechowywane na wszystkich urządzeniach, na których są używane.
Przed wersją Mainline Android przechowywał certyfikaty na partycji systemowej (w system/ca-certificates
) i aktualizował je przy każdej aktualizacji Androida. Dzięki Mainline można teraz częściej aktualizować certyfikaty za pomocą aktualizacji Mainline. Ta nowa funkcja powinna usprawnić procesy aktualizacji, skrócić czas rozwiązywania problemów i wydłużyć czas eksploatacji urządzeń.
Począwszy od Androida 14 główne certyfikaty zaufania są przechowywane w module APEX Conscrypt i na partycji systemowej. Aplikacje nadal mogą wybierać własne certyfikaty i modyfikować ich działanie za pomocą NetworkSecurityConfig
.
Android 14 wprowadza inne zmiany w module Conscrypt:
- Dodano implementację AES-CMAC MAC.
- Wycofano i usunięto implementacje MAC „PBEwithHmacSHA2-*”.
- Dodano ograniczoną obsługę kluczy, uzgodnień i podpisów X25519.
- Zaktualizowano BoringSSL w celu zapewnienia poprawności X.509.
- Wycofanie obsługi certyfikatów podpisanych przy użyciu MD5 w publicznych interfejsach API CertPath. Od poziomu API 16 takie certyfikaty nie są akceptowane w przypadku połączeń TLS.
Zmiany w Androidzie 10
Android 9 nie zawiera publicznego interfejsu API dla Conscrypt, ale zamiast tego korzysta z dostawcy zabezpieczeń, który implementuje standardowe klasy dla architektury kryptograficznej Javy (JCA), w tym Cipher i MessageDigest, oraz rozszerzenia gniazda bezpiecznego Javy (JSSE), w tym SSLSocket i SSLEngine.
Użytkownicy korzystają z tych klas, a niektóre niepubliczne interfejsy Conscrypt są używane przez libcore
lub kod frameworków.
Android 10 dodaje w android.net.ssl
niewielką liczbę publicznych metod interfejsu API, aby umożliwić dostęp do funkcji Conscrypt, które nie są udostępniane przez klasy w javax.net.ssl
. Android 10 zawiera również uproszczoną wersję biblioteki Bouncy Castle, która zapewnia dostęp do mniej popularnych narzędzi kryptograficznych w ramach środowiska wykonawczego Androida (niedostępnego w module Conscrypt).
Format i zależność
Moduł Conscrypt (com.android.conscrypt
) jest rozpowszechniany jako plik APEX, który zawiera kod Conscrypt w języku Java i bibliotekę natywnych funkcji Conscrypt, która dynamicznie łączy się z bibliotekami NDK na Androida (np. liblog
). Biblioteka natywnych funkcji zawiera też kopię BoringSSL, która została zweryfikowana (certyfikat #3753) w ramach programu weryfikacji modułów kryptograficznych (CMVP) NIST.
Moduł Conscrypt udostępnia te interfejsy API:
- Publiczne interfejsy API to rozszerzenia klas i interfejsów w pakietach
java.*
ijavax.*
oraz klas w pakiecieandroid.net.ssl.*
. Kod aplikacji zewnętrznej nie wywołuje bezpośrednio Conscrypt. Standardy interfejsów API platformy zapewniają ich zgodność wsteczną i następczą. - Interfejsy API platformy podstawowej to ukryte interfejsy API używane przez framework do uzyskiwania dostępu do funkcji niepublicznych. Są one stosunkowo ograniczone. Najważniejszym użytkownikiem jest
NetworkSecurityConfig
, który rozszerza menedżera zaufania Conscrypt (komponent weryfikujący certyfikaty) o funkcję konfiguracji zabezpieczeń sieci. - Interfejsy API wewnątrz rdzenia są ograniczone do konstruktorów bez parametrów, które są wywoływane przez mechanizmy JCA i JSEE.