Moduł Conscrypt przyspiesza ulepszenia zabezpieczeń i poprawia bezpieczeństwo urządzeń bez polegania na aktualizacjach OTA. Wykorzystuje kod Java i natywną bibliotekę, aby zapewnić implementację Android TLS, a także dużą część funkcji kryptograficznych Androida, takich jak generatory kluczy, szyfry i skróty wiadomości. Conscrypt jest dostępna jako biblioteka typu open source , chociaż ma pewne specjalizacje, gdy jest zawarta na platformie Android.
Moduł Conscrypt używa BoringSSL , natywnej biblioteki, która jest rozwidleniem Google dla OpenSSL i która jest używana w wielu produktach Google do kryptografii i TLS (przede wszystkim Google Chrome), w połączeniu z kodem Conscrypt (zarówno Java, jak i kod natywny). BoringSSL nie ma oficjalnych wydań (wszyscy użytkownicy budują z głowy) i nie daje żadnych gwarancji dotyczących stabilności API lub ABI.
Zmiany w Androidzie 10
Android 9 nie zawiera publicznego interfejsu API specyficznego dla systemu Android dla Conscrypt, ale zamiast tego używa dostawcy zabezpieczeń, który implementuje standardowe klasy dla architektury Java Cryptography Architecture (JCA), w tym Cipher i MessageDigest, oraz Java Secure Socket Extension (JSSE), w tym SSLSocket i SSLEngine. Użytkownicy wchodzą w interakcję z tymi klasami, a niektóre niepubliczne interfejsy API Conscrypt są używane przez kod libcore
lub framework.
Android 10 dodaje niewielką liczbę publicznych metod interfejsu API w android.net.ssl
, aby uzyskać dostęp do funkcji Conscrypt, która nie jest ujawniana przez klasy w ramach javax.net.ssl
. Android 10 zawiera również odchudzoną kopię Bouncy Castle , aby zapewnić mniej popularne narzędzia kryptograficzne w ramach Android Runtime (nie wchodzi w skład modułu Conscrypt).
Format i zależności
Moduł Conscrypt (`com.android.conscrypt`) jest dystrybuowany jako plik APEX , który zawiera kod Conscrypt Java i natywną bibliotekę Conscrypt, która dynamicznie łączy się z bibliotekami Android NDK (takimi jak liblog
). Natywna biblioteka zawiera również kopię BoringSSL, która została zweryfikowana ( Certyfikat #3753 ) przez program walidacji modułów kryptograficznych (CMVP) NIST.
Moduł Conscrypt udostępnia następujące interfejsy API:
- Publiczne API to rozszerzenia klas i interfejsów w pakietach pod
java.*
ijavax.*
, plus klasy podandroid.net.ssl.*
. Kod aplikacji zewnętrznej nie wywołuje bezpośrednio Conscrypt. Standardy Platform API zapewniają, że te interfejsy API pozostają zgodne wstecz i do przodu. - Podstawowe interfejsy API platformy to ukryte interfejsy API używane przez platformę w celu uzyskania dostępu do niepublicznych funkcji. Są one stosunkowo ograniczone; największym użytkownikiem jest
NetworkSecurityConfig
, który rozszerza menedżera zaufania Conscrypt (składnik weryfikujący certyfikaty) o zaimplementowanie funkcji konfiguracji zabezpieczeń sieci . - Wewnątrzrdzeniowe interfejsy API są ograniczone do konstruktorów z zerowymi argumentami, nazywanych refleksyjnie przez maszynerię JCA i JSEE.