Podpisywanie aplikacji

Zadbaj o dobrą organizację dzięki kolekcji Zapisuj i kategoryzuj treści zgodnie ze swoimi preferencjami.

Podpisywanie aplikacji pozwala programistom zidentyfikować autora aplikacji i zaktualizować swoją aplikację bez tworzenia skomplikowanych interfejsów i uprawnień. Każda aplikacja uruchomiona na platformie Android musi być podpisana przez programistę . Aplikacje, które próbują zainstalować bez podpisania, będą odrzucane przez Google Play lub instalatora pakietów na urządzeniu z Androidem.

W Google Play podpisywanie aplikacji łączy zaufanie firmy Google do programisty i zaufanie programisty do aplikacji. Deweloperzy wiedzą, że ich aplikacja jest dostarczana, niezmodyfikowana, na urządzeniu z Androidem; a programiści mogą zostać pociągnięci do odpowiedzialności za zachowanie ich aplikacji.

W systemie Android podpisywanie aplikacji jest pierwszym krokiem do umieszczenia aplikacji w jej piaskownicy aplikacji. Podpisany certyfikat aplikacji określa, który identyfikator użytkownika jest powiązany z daną aplikacją; różne aplikacje działają pod różnymi identyfikatorami użytkownika. Podpisywanie aplikacji zapewnia, że ​​jedna aplikacja nie może uzyskać dostępu do żadnej innej aplikacji, z wyjątkiem dobrze zdefiniowanego IPC.

Po zainstalowaniu aplikacji (pliku APK) na urządzeniu z systemem Android Menedżer pakietów weryfikuje, czy plik APK został prawidłowo podpisany za pomocą certyfikatu zawartego w tym pakiecie APK. Jeśli certyfikat (a dokładniej klucz publiczny w certyfikacie) jest zgodny z kluczem używanym do podpisywania dowolnego innego pakietu APK na urządzeniu, nowy pakiet APK ma możliwość określenia w manifeście, że podobnie będzie współdzielił identyfikator UID z innym pakietem -podpisane pliki APK.

Wnioski mogą być podpisane przez stronę trzecią (OEM, operator, rynek alternatywny) lub samodzielnie. Android zapewnia podpisywanie kodu przy użyciu certyfikatów z podpisem własnym, które programiści mogą generować bez pomocy lub pozwolenia z zewnątrz. Wnioski nie muszą być podpisane przez organ centralny. Android obecnie nie przeprowadza weryfikacji CA dla certyfikatów aplikacji.

Aplikacje mogą również deklarować uprawnienia bezpieczeństwa na poziomie ochrony podpisu, ograniczając dostęp tylko do aplikacji podpisanych tym samym kluczem przy jednoczesnym zachowaniu odrębnych identyfikatorów UID i piaskownic aplikacji. Bliższe relacje z udostępnioną piaskownicą aplikacji są dozwolone za pośrednictwem funkcji udostępnionego identyfikatora UID, w której co najmniej dwie aplikacje podpisane przy użyciu tego samego klucza programisty mogą zadeklarować wspólny identyfikator UID w swoim manifeście.

Schematy podpisywania APK

Android obsługuje trzy schematy podpisywania aplikacji:

Aby uzyskać maksymalną zgodność, podpisuj aplikacje za pomocą wszystkich schematów, najpierw v1, następnie v2, a następnie v3. Urządzenia z Androidem 7.0+ i nowszymi instalują aplikacje podpisane schematami v2+ szybciej niż te podpisane tylko schematem v1. Starsze platformy Androida ignorują sygnatury v2+ i dlatego wymagają aplikacji zawierających sygnatury v1.

Podpisywanie JAR (schemat v1)

Podpisywanie APK było częścią Androida od samego początku. Opiera się na sygnowanym JAR . Szczegółowe informacje na temat korzystania z tego schematu znajdziesz w dokumentacji Android Studio dotyczącej podpisywania aplikacji .

Podpisy v1 nie chronią niektórych części APK, takich jak metadane ZIP. Weryfikator APK musi przetworzyć wiele niezaufanych (jeszcze nie zweryfikowanych) struktur danych, a następnie odrzucić dane nieobjęte podpisami. Daje to sporą powierzchnię ataku. Co więcej, weryfikator APK musi zdekompresować wszystkie skompresowane wpisy, zużywając więcej czasu i pamięci. Aby rozwiązać te problemy, w systemie Android 7.0 wprowadzono schemat podpisu APK w wersji 2.

Schemat podpisu APK v2 i v3 (schemat v2+)

Urządzenia z systemem Android 7.0 i nowszym obsługują schemat sygnatur APK v2 (schemat v2) i nowsze. (Schemat v2 został zaktualizowany do wersji 3 w systemie Android 9, aby uwzględnić dodatkowe informacje w bloku podpisywania, ale poza tym działa tak samo.) Zawartość APK jest zaszyfrowana i podpisana, a następnie wynikowy blok podpisywania APK jest wstawiany do APK. Aby uzyskać szczegółowe informacje na temat stosowania schematu v2+ do aplikacji, zobacz Schemat podpisu APK v2 .

Podczas walidacji schemat v2+ traktuje plik APK jako obiekt BLOB i wykonuje sprawdzanie podpisów w całym pliku. Wszelkie modyfikacje APK, w tym modyfikacje metadanych ZIP, unieważniają podpis APK. Ta forma weryfikacji APK jest znacznie szybsza i umożliwia wykrycie większej liczby klas nieautoryzowanych modyfikacji.

Nowy format jest kompatybilny wstecz, więc pliki APK podpisane nowym formatem podpisu można instalować na starszych urządzeniach z Androidem (które po prostu ignorują dodatkowe dane dodawane do pliku APK), o ile te pliki APK są również podpisane w wersji 1.

Proces weryfikacji podpisu APK

Rysunek 1. Proces weryfikacji podpisu APK

Skrót całego pliku APK jest weryfikowany na podstawie podpisu v2+ przechowywanego w bloku podpisywania APK. Skrót obejmuje wszystko oprócz bloku podpisywania APK, który zawiera sygnaturę v2+. Wszelkie modyfikacje APK poza blokiem podpisywania APK unieważniają podpis APK w wersji v2+. Pliki APK z pozbawionym podpisu v2+ są również odrzucane, ponieważ ich podpis v1 wskazuje, że plik APK został podpisany w wersji v2, co sprawia, że ​​Android 7.0 i nowsze wersje odmawiają weryfikacji plików APK przy użyciu ich podpisów v1.

Aby uzyskać szczegółowe informacje na temat procesu weryfikacji podpisu APK, zobacz sekcję Weryfikacja schematu podpisu APK v2.