Szyfrowanie

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.*javax.* oraz klas w pakiecie android.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.