Zasady Certificate Transparency w Androidzie

Wszelkie pytania dotyczące tych zasad należy kierować na forum zasad CT:ct-policy@chromium.org

Gdy certyfikat Transport Layer Security (TLS) połączenia zostanie zweryfikowany, jest on oceniany pod kątem zgodności z zasadami przejrzystości certyfikatów Androida. Certyfikaty, którym towarzyszą sygnatury czasowe certyfikatów (SCT) spełniające te zasady, są uznawane za zgodne z zasadami przejrzystości certyfikatów.

Zgodność z protokołem CT jest osiągana, gdy certyfikat i zestaw towarzyszących mu SCT spełniają zestaw wymagań technicznych egzekwowanych przez popularne biblioteki TLS (w tym wbudowaną bibliotekę Conscrypt) podczas weryfikacji certyfikatu, które są zdefiniowane w niniejszych zasadach.

Stany logów CT

Zgodność z CT na Androidzie jest określana na podstawie oceny SCT z logów CT i sprawdzania, czy w momencie sprawdzania logi te są w odpowiednim stanie. Zbiór możliwych stanów dziennika CT:

  • Pending
  • Qualified
  • Usable
  • ReadOnly
  • Retired
  • Rejected

Aby pomóc w zrozumieniu wymagań dotyczących zgodności z CT na Androidzie, definicje tych stanów, wymagania dotyczące dzienników w każdym stanie oraz wpływ tych stanów na działanie Androida zostały szczegółowo opisane w wyjaśnieniu cyklu życia dziennika CT w dokumentacji Chrome.

Certyfikaty zgodne z CT

Certyfikat TLS jest zgodny z CT, jeśli towarzyszy mu zestaw SCT, który spełnia co najmniej jedno z kryteriów zdefiniowanych poniżej, w zależności od tego, jak SCT są dostarczane do Androida. W aplikacjach na Androida, które wymuszają CT, wszystkie publicznie zaufane certyfikaty TLS muszą być zgodne z CT, aby można było je prawidłowo zweryfikować. Certyfikaty, które nie są rejestrowane w CT lub mają niewystarczającą liczbę SCT, nie są jednak uznawane za nieprawidłowo wydane.

Podczas oceny certyfikatu pod kątem zgodności z CT Android bierze pod uwagę kilka czynników, w tym liczbę sygnatur czasowych podpisanego certyfikatu (SCT), operatora dziennika CT, który wydał SCT, oraz stan dziennika CT, który wydał SCT, zarówno w momencie weryfikacji certyfikatu, jak i w momencie utworzenia SCT przez dziennik CT.

W zależności od sposobu prezentowania SCT na Androidzie zgodność z CT można osiągnąć, spełniając jedno z tych kryteriów:

Osadzone SCT:

  1. co najmniej 1 osadzony SCT z dziennika CT, który w momencie sprawdzania miał stan Qualified, Usable lub ReadOnly;
  2. Istnieją osadzone SCT z co najmniej N różnych dzienników CT, które w momencie sprawdzania miały stan Qualified, Usable, ReadOnly lub Retired, gdzie N jest zdefiniowane w tej tabeli;
  3. Wśród SCT spełniających wymaganie 2 co najmniej 2 SCT muszą być wydane przez różnych operatorów dzienników CT uznawanych przez Androida;
Okres ważności certyfikatu Liczba SCT z różnych dzienników CT
<= 180 dni 2
> 180 dni 3

SCT dostarczane za pomocą protokołu OCSP lub TLS:

  1. co najmniej 2 SCT z dziennika CT, który w momencie sprawdzania miał stan Qualified, Usable lub ReadOnly;
  2. Wśród SCT spełniających wymaganie 1 co najmniej 2 muszą być wydane przez różnych operatorów dzienników CT uznawanych przez Androida.

W przypadku osadzonych sygnatur SCT i sygnatur dostarczanych za pomocą protokołów OCSP lub TLS niepowtarzalność operatora dziennika jest definiowana jako posiadanie oddzielnych wpisów w sekcji operatorów na liście dzienników.

W rzadkich przypadkach, gdy dziennik CT zmienia operatora w trakcie swojego istnienia, może zawierać listę previous_operators wraz z ostateczną sygnaturą czasową, która wskazuje, kiedy dziennik był obsługiwany przez poprzedniego operatora. Aby zapobiec przerwaniu działania istniejących certyfikatów w wyniku zmian operatora dziennika, operator każdego SCT jest określany jako operator w momencie wydania SCT przez porównanie sygnatury czasowej SCT z sygnaturami czasowymi previous_operators, jeśli są obecne.

Ważne uwagi

Jeśli któreś z powyższych kryteriów zgodności z CT jest spełnione przez kombinację SCT w procesie uzgadniania połączenia, dodatkowe SCT, niezależnie od ich stanu, nie będą miały pozytywnego ani negatywnego wpływu na stan zgodności certyfikatu z CT.

Aby przyczynić się do zgodności certyfikatu z CT, SCT musi zostać wydany przed sygnaturą czasową Retired dziennika, jeśli taka istnieje. Android używa najwcześniejszego SCT spośród wszystkich SCT przedstawionych do oceny zgodności z CT w porównaniu z sygnaturami czasowymi Retired dziennika CT. Uwzględnia to przypadki skrajne, w których dziennik CT zostaje wycofany podczas procesu przesyłania żądań rejestracji certyfikatu.

„Osadzony SCT” oznacza SCT dostarczony za pomocą rozszerzenia SignedCertificateTimestampListX.509v3 w ramach samego certyfikatu. Wiele serwerów TLS nie obsługuje OCSP Stapling ani rozszerzenia TLS, więc urzędy certyfikacji powinny przygotować się na osadzanie SCT w wydawanych certyfikatach, aby zapewnić prawidłową weryfikację lub traktowanie EV w Androidzie.

Jak dzienniki CT są dodawane do Androida

Kryteria, które decydują o tym, kiedy dzienniki CT mogą uzyskać stan Qualified, oraz okoliczności, w których mogą uzyskać stan Retired, znajdziesz w zasadach Chrome CT Log Policy.

CT Enforcement Timeout

Każdego dnia Google publikuje nową listę dzienników CT, która zawiera świeżelog_list_timestamp. Urządzenia z Androidem będą raz dziennie próbować pobrać najnowszą wersję tej listy w celu weryfikacji. Jeśli w danym momencie na urządzeniu nie ma listy logów lub sygnatura czasowa listy logów jest starsza niż 70 dni, egzekwowanie CT zostanie wyłączone. Ten limit czasu daje ekosystemowi CT pewność, że nowe dzienniki CT będą mogły bezpiecznie przejść do stanu „Usable” w określonym czasie po osiągnięciu stanu Qualified.

Lista logów Androida

Lista logów Androida jest publikowana w pliku log_list.json, który jest aktualizowany codziennie. Ta lista logów jest udostępniana bez stabilnego interfejsu API, umowy SLA ani gwarancji dostępności.

Android udostępnia listę logów CT podmiotom przesyłającym certyfikaty (np. urzędom certyfikacji) oraz monitorom i audytorom CT, którzy chcą zachować zgodność z ekosystemami CT i WebPKI lub badać ich zawartość.

Nieuprawnione korzystanie z listy logów CT na Androidzie zagraża nie tylko Twoim użytkownikom, ale też użytkownikom Androida i całemu ekosystemowi CT. Jeśli chcesz dodać do aplikacji egzekwowanie CT, użyj mechanizmu obsługiwanego przez platformę Android.

Korzystanie z listy logów CT na Androida w sposób niezgodny z tymi zasadami odbywa się na własne ryzyko i może spowodować nieprawidłowe działanie aplikacji lub biblioteki. Android musi mieć możliwość wprowadzania zmian na liście logów CT w odpowiedzi na incydenty w ekosystemie CT, aby zachować bezpieczeństwo użytkowników Androida. Android może podejmować działania, aby zapewnić, że zależności od listy logów CT innych firm nie będą zagrażać jego zdolności do reagowania na takie incydenty, w tym wprowadzać niezapowiedziane zmiany na liście logów, aby zakłócić nieautoryzowane użycie.