Anwendungssignatur

Die Anwendungssignierung ermöglicht es Entwicklern, den Autor der Anwendung zu identifizieren und ihre Anwendung zu aktualisieren, ohne komplizierte Schnittstellen und Berechtigungen erstellen zu müssen. Jede Anwendung , die auf der Android - Plattform ausgeführt wird , muss vom Entwickler signiert . Anwendungen, die ohne Unterschrift zu installieren versuchen, werden entweder von Google Play oder dem Paketinstallationsprogramm auf dem Android-Gerät abgelehnt.

Bei Google Play verbindet die Anwendungssignierung das Vertrauen, das Google dem Entwickler entgegenbringt, und das Vertrauen, das der Entwickler in seine Anwendung hat. Entwickler wissen, dass ihre Anwendung unverändert auf dem Android-Gerät bereitgestellt wird. und Entwickler können für das Verhalten ihrer Anwendung verantwortlich gemacht werden.

Unter Android ist die Anwendungssignierung der erste Schritt, um eine Anwendung in ihrer Anwendungs-Sandbox zu platzieren. Das signierte Anwendungszertifikat definiert, welche Benutzer-ID welcher Anwendung zugeordnet ist; verschiedene Anwendungen laufen unter verschiedenen Benutzer-IDs. Die Anwendungssignierung stellt sicher, dass eine Anwendung nur über einen wohldefinierten IPC auf eine andere Anwendung zugreifen kann.

Wenn eine Anwendung (APK-Datei) auf einem Android-Gerät installiert wird, überprüft der Paket-Manager, ob das APK ordnungsgemäß mit dem in diesem APK enthaltenen Zertifikat signiert wurde. Wenn das Zertifikat (oder genauer der öffentliche Schlüssel im Zertifikat) mit dem Schlüssel übereinstimmt, der zum Signieren eines anderen APK auf dem Gerät verwendet wird, hat das neue APK die Möglichkeit, im Manifest anzugeben, dass es eine UID auf ähnliche Weise mit dem anderen teilt -signierte APKs.

Anträge können von einem Drittanbieter (OEM, Betreiber, Alternativmarkt) oder selbst signiert werden. Android bietet Codesignatur mit selbstsignierten Zertifikaten, die Entwickler ohne externe Unterstützung oder Erlaubnis generieren können. Anträge müssen nicht von einer zentralen Behörde unterzeichnet werden. Android führt derzeit keine CA-Überprüfung für Anwendungszertifikate durch.

Anwendungen können auch Sicherheitsberechtigungen auf der Ebene des Signaturschutzes deklarieren, wodurch der Zugriff nur auf Anwendungen beschränkt wird, die mit demselben Schlüssel signiert sind, während unterschiedliche UIDs und Anwendungs-Sandboxes beibehalten werden. Eine engere Beziehung mit einer gemeinsamen Anwendungs Sandbox wird über die erlaubt geteilt UID - Funktion , bei den zwei oder mehr Anwendungen mit dem gleichen Entwicklerschlüssel unterzeichneten eine gemeinsame UID in ihrem Manifest erklären können.

APK-Signaturschemata

Android unterstützt drei Anwendungssignaturschemata:

Für maximale Kompatibilität signieren Sie Anwendungen mit allen Schemata, zuerst mit v1, dann v2 und dann v3. Android 7.0+ und neuere Geräte installieren Apps, die mit v2+-Schemas signiert sind, schneller als solche, die nur mit v1-Schema signiert sind. Ältere Android-Plattformen ignorieren v2+-Signaturen und benötigen daher Apps, die v1-Signaturen enthalten.

JAR-Signierung (v1-Schema)

Die APK-Signierung war von Anfang an ein Teil von Android. Es basiert auf unterzeichnet JAR . Einzelheiten zur Verwendung dieses Schemas finden Sie im Android Studio - Dokumentation auf Signieren App .

v1-Signaturen schützen einige Teile des APK nicht, beispielsweise ZIP-Metadaten. Der APK-Verifizierer muss viele nicht vertrauenswürdige (noch nicht verifizierte) Datenstrukturen verarbeiten und dann Daten verwerfen, die nicht von den Signaturen abgedeckt werden. Dies bietet eine beträchtliche Angriffsfläche. Darüber hinaus muss der APK-Verifizierer alle komprimierten Einträge dekomprimieren, was mehr Zeit und Speicher verbraucht. Um diese Probleme zu beheben, hat Android 7.0 das APK-Signaturschema v2 eingeführt.

APK-Signaturschema v2 & v3 (v2+ Schema)

Geräte mit Android 7.0 und höher unterstützen das APK-Signaturschema v2 (v2-Schema) und höher. (Das v2-Schema wurde in Android 9 auf v3 aktualisiert, um zusätzliche Informationen in den Signaturblock aufzunehmen, funktioniert aber ansonsten gleich.) Der Inhalt des APK wird gehasht und signiert, dann wird der resultierende APK-Signaturblock in das APK eingefügt. Einzelheiten zu dem v2 + Schema zu einem App Anwendung findet APK Signature Scheme v2 .

Während der Validierung behandelt das v2+-Schema die APK-Datei als Blob und führt eine Signaturprüfung für die gesamte Datei durch. Jede Änderung am APK, einschließlich Änderungen an ZIP-Metadaten, macht die APK-Signatur ungültig. Diese Form der APK-Überprüfung ist wesentlich schneller und ermöglicht die Erkennung von mehr Klassen nicht autorisierter Änderungen.

Das neue Format ist abwärtskompatibel, sodass APKs, die mit dem neuen Signaturformat signiert sind, auf älteren Android-Geräten installiert werden können (die die zusätzlichen Daten, die dem APK hinzugefügt werden, einfach ignorieren), solange diese APKs auch v1-signiert sind.

Vorgang zur Überprüfung der APK-Signatur

Abbildung 1. APK Signaturprüfungsprozess

Der Hash der gesamten Datei des APK wird mit der v2+-Signatur verglichen, die im APK-Signaturblock gespeichert ist. Der Hash umfasst alles außer dem APK-Signaturblock, der die v2+-Signatur enthält. Jede Änderung am APK außerhalb des APK-Signaturblocks macht die v2+-Signatur des APK ungültig. APKs mit entfernter v2+-Signatur werden ebenfalls abgelehnt, da ihre v1-Signatur angibt, dass das APK v2-signiert war, was dazu führt, dass Android 7.0 und neuer die Überprüfung von APKs mit ihren v1-Signaturen ablehnen.

Einzelheiten zur Überprüfungsprozess APK Signatur finden Sie im Bereich Überprüfung der APK Signature Scheme v2.