Signieren von Android-Apps: Wie es funktioniert und warum es wichtig ist
Jedes Mal, wenn Sie eine App auf Ihrem Android-Telefon installieren, findet im Hintergrund eine stille, aber wichtige Sicherheitsüberprüfung statt. Ihr Telefon überprüft den digitale Signatur des APK-Pakets. Dieser kryptografische Handshake verhindert, dass böswillige Hacker Ihre Apps mit Malware „vergiften“, und stellt gleichzeitig sicher, dass Entwickler Updates veröffentlichen können, ohne ihre Identität zu verlieren.
Wenn Sie Apps schreiben, müssen Sie das Signieren einfach richtig hinbekommen. Wenn Sie einfach nur gerne an Android herumbasteln, ist es einer der am befriedigendsten zu verstehenden Teile des Systems. In jedem Fall ist So funktioniert die App-Signierung Ihre Zeit wert. Im Folgenden gehen wir durch die Technologie, wie sich die Signaturschemata entwickelt haben und wie Sie online Zertifikate manuell überprüfen nutzen können.
- Warum jede Android-App signiert sein muss und um welche Kryptografie es sich dabei handelt (RSA/EC).
- Der Unterschied zwischen den Signaturschemata v1 (JAR), v2, v3 und v4 und welches davon Ihre App heute verwenden sollte.
- Wie Android entscheidet, ob ein Update basierend auf der Signaturkontinuität zugelassen wird.
- Wie die Schlüsselrotation es einem Entwickler ermöglicht, seinen Signaturschlüssel zu ändern, ohne bestehende Installationen zu beschädigen.
- So überprüfen Sie die Signatur einer APK selbst, in der Befehlszeile oder mit unserem browserbasierter Verifizierer.
Was ist App-Signierung?
Im Kern handelt es sich bei der App-Signatur um einen Prozess, bei dem ein Entwickler einen Privater Schlüssel verwendet, um einen Signaturblock für die Dateien seiner App zu generieren. Der entsprechende Öffentlicher Schlüssel wird dann im APK im Ordner META-INF eingebettet. Wenn Ihr Telefon versucht, die App zu installieren, prüft es anhand des öffentlichen Schlüssels, ob die Signatur mit dem Inhalt der Datei übereinstimmt.
Dies bietet zwei Haupteigenschaften:
- Unveränderlichkeit: Wenn ein einzelnes Byte des App-Codes geändert wird (z. B. durch einen Trojaner), stimmt die Signatur nicht mehr mit der Datei überein und Android verweigert die Installation.
- Identitätsnachweis: Wenn eine App versucht, eine vorhandene zu aktualisieren, müssen ihre Signaturen übereinstimmen. Aus diesem Grund können Sie keine manipulierte Facebook-App über die offizielle installieren.
Entwicklung von Signatursystemen
Google hat den Signaturmechanismus kontinuierlich verbessert, um sowohl Geschwindigkeit als auch Sicherheit zu verbessern:
- V1 (Jar-Signierung): Signiert einzelne Dateien innerhalb der APK (ZIP). Dies ist langsam, da das Betriebssystem jede Datei entpacken und überprüfen muss. Es ist auch anfällig für bestimmte ZIP-Manipulationen.
- V2 (APK-Signaturschema): Signiert den gesamten Binärblock des APK. Zur Überprüfung ist kein Entpacken erforderlich, was den Vorgang unglaublich schnell macht. Es wurde in Android 7.0 (Nougat) eingeführt.
- V3 (Schlüsseldrehung): Erweitert V2 durch Hinzufügen einer „Linie“ von Schlüsseln. Damit kann ein Entwickler nachweisen, dass ein neuer Schlüssel der autorisierte Nachfolger eines älteren Schlüssels ist. Eingeführt in Android 9.0 (Pie).
- V4 (Streaming-Signierung): Speziell für inkrementelle Installationen entwickelt, sodass Apps überprüft werden können, während sie noch über USB oder WLAN heruntergeladen werden.
Warum Zertifikate für das Sideloading wichtig sind
Wenn Sie eine APK von einer inoffiziellen Quelle herunterladen, ist Zertifikat-Hashing Ihr bester Freund. Ein Zertifikat-Fingerabdruck (z. B. ein SHA-256-Hash) identifiziert den Signaturschlüssel des Entwicklers eindeutig. Jede App behält bei allen Updates den gleichen Signaturschlüssel, sodass Sie den Fingerabdruck einer APK mit dem vom Entwickler veröffentlichten Wert vergleichen können, um zu bestätigen, dass sie echt ist.
Wenn Sie vermuten, dass eine APK gefälscht ist, sollten Sie sie über unseren Online-APK-Verifizierer ausführen. Unser Tool zeigt Ihnen:
- Der Allgemeiner Name (CN) des Unterzeichners (z. B. „Android“).
- Der Gültigkeitsdauer des Zertifikats.
- Der SHA-1/SHA-256-Fingerabdrücke.
So überprüft Android eine Signatur zur Installationszeit
Der Schritt „Zertifikat überprüfen“ wird so oft beschönigt, dass es sich lohnt, einen Blick darauf zu werfen, was das Betriebssystem tatsächlich tut, wenn Sie auf ein APK tippen und Android entscheidet, ob es installiert werden soll:
- Öffnen Sie die APK als ZIP und suchen Sie den Signaturblock. Für v2/v3-Signaturen handelt es sich um einen strukturierten Block unmittelbar vor dem zentralen Verzeichnis; Für das Legacy-v1-Schema ist es der Inhalt von META-INF/*.RSA, *.DSA oder *.EC.
- Berechnen Sie SHA-256-Digests jedes zweiten Bytes der APK. Der Signaturblock wird von seinem eigenen Digest ausgeschlossen; alles andere wird in definierten Blöcken gehasht.
- Überprüfen Sie den Digest jedes Blocks anhand der im Signaturblock aufgezeichneten Digests. Wenn auch nur ein einziges Byte geändert wurde, seit der Entwickler die Datei signiert hat, stimmen die Digests nicht überein und die Installation wird mit der allgemeinen Fehlermeldung „App nicht installiert“ abgelehnt.
- Stellen Sie sicher, dass der Signaturblock selbst mit dem privaten Schlüssel des Zertifikats erstellt wurde. Der öffentliche Schlüssel des Zertifikats wird zur Überprüfung der kryptografischen Signatur im Block verwendet. Eine erfolgreiche Prüfung bedeutet, dass derjenige, der die Datei signiert hat, den mit diesem Zertifikat gepaarten privaten Schlüssel besaß.
- Vergleichen Sie den Fingerabdruck des Zertifikats mit einer vorhandenen Installation desselben Paketnamens. Wenn das Paket bereits installiert ist und das neue APK mit einem anderen Zertifikat signiert ist, wird die Installation mit INSTALL_FAILED_UPDATE_INCOMPATIBLE abgelehnt. Dies ist der Hauptschutz des Betriebssystems gegen Identitätsdiebstahl: Ein böswilliger Akteur kann Ihre Bank-App nicht durch eine eigene Kopie ersetzen, es sei denn, er hat auch den Signaturschlüssel der Bank gestohlen.
Nichts davon beweist, dass der Entwickler vertrauenswürdig ist, sondern nur, dass die Datei, die Sie installieren möchten, byte-identisch mit dem ist, was er signiert hat, und dass keine andere Partei sie manipuliert hat. Vertrauen in den Entwickler ist eine separate Entscheidung, die Sie selbst treffen, indem Sie entscheiden, aus welchen Quellen Sie installieren.
Was „Signaturkonflikt“ wirklich bedeutet
Die häufigste Überraschung beim Querladen ist der Fehler „Signaturkonflikt“ beim Update. Folgendes passiert tatsächlich:
- Sie haben App X-Version 1.0 aus dem Play Store installiert.
- Sie laden App X-Version 1.1 von einer Nicht-Play-Quelle herunter.
- Das Betriebssystem sieht denselben Paketnamen (com.example.app), aber das APK ist mit einem anderen Zertifikat signiert (dem Signaturschlüssel der Nebenquelle, nicht dem des ursprünglichen Herausgebers). Die Installation wird abgelehnt.
In der Praxis geschieht dies auf zwei Arten:
- Die Drittanbieter-APK ist wirklich von einem anderen Verlag, beispielsweise eine „modifizierte“ oder „gepatchte“ Kopie. Das Verweigern der Installation ist das richtige Verhalten. Die Installation würde bedeuten, einem Fremden dieselben Daten anzuvertrauen, die die App Ihrer Bank bereits berührt hat.
- Das Drittanbieter-APK ist ein erneutes Hochladen der offiziellen APK, aber das Play App Signing-System von Google signiert den Download jedes Benutzers mit dem Upload-Schlüssel-Wrapper des Benutzers. Zwei Geräte können manchmal leicht unterschiedliche Signaturdaten für dieselbe konzeptionelle App-Version sehen. In diesem Fall stimmt der Fingerabdruck des Zertifikats im Stammverzeichnis immer noch überein; Sie können dies mit unserem APK-Verifizierer überprüfen.
Wenn der Fingerabdruck des Zertifikats wirklich von Ihrer bestehenden Installation abweicht, besteht die einzige Möglichkeit darin, zuerst die aktuelle Kopie zu deinstallieren (wobei ihre Daten verloren gehen), bevor Sie die Ersatzkopie laden, und niemals die Signaturüberprüfung zu deaktivieren.
Generieren Ihres eigenen Signaturschlüssels (für Entwickler)
Wenn Sie Android-Apps erstellen, müssen Sie eventuell Ihre eigenen Builds signieren. Der standardmäßige einzeilige Befehl, der keytool aus einem Java SDK verwendet, lautet:
keytool -genkeypair -v \
-keystore my-release.keystore \
-alias my-app -keyalg RSA -keysize 2048 \
-validity 10000
Zwei Dinge, die Sie wissen sollten:
- Der Gültigkeit ist wichtig: 10.000 Tage (ungefähr 27 Jahre) sind der herkömmliche Wert, da das Betriebssystem Updates, die mit einem fast abgelaufenen oder abgelaufenen Schlüssel signiert sind, als kompromittiert behandelt. Generieren Sie einmalig einen langlebigen Schlüssel und schützen Sie ihn.
- Nach der Veröffentlichung können Sie die Schlüssel nicht mehr einfach wechseln. Das v3-Signaturschema fügt den Schlüssel Drehung als explizite Funktion hinzu: Ein altes Zertifikat „segnet“ ein neues durch einen gespeicherten Beweis, sodass das Betriebssystem Aktualisierungen des neuen Schlüssels akzeptieren und gleichzeitig die Identitätskontinuität wahren kann. Ohne Version 3 bedeutet der Verlust des Originalschlüssels, dass alle vorhandenen Installationen verwaist sind.
Für seitlich geladene Testbuilds ist ein unsignierter Debug-Keystore in Ordnung; Verwenden Sie für die Produktion einen passwortgeschützten Schlüsselspeicher mit langer Gültigkeit, der im Offline-Backup gespeichert ist.
Überprüfen Sie die App-Identität wie ein Profi
Vertrauen Sie keinen generischen Dateinamen. Überprüfen Sie in Sekundenschnelle den kryptografischen Kern Ihrer APKs.
Jetzt Zertifikate verifizierenHäufige Fallstricke beim Signieren
- Selbstsignierte Zertifikate: Die meisten Android-Apps sind selbstsigniert. Im Gegensatz zu SSL für Websites gibt es für die Signatur von Android-Apps keine zentrale Autorität. Sie müssen dem Entwickler direkt vertrauen.
- Debug-Zertifikate: Apps, die zum Testen erstellt wurden, verwenden einen generischen „Debug“-Schlüssel. Diese Apps sollten niemals der Öffentlichkeit zugänglich gemacht werden und werden von vielen Sicherheitsfiltern blockiert.
- Schlüsselverlust: Wenn ein Entwickler seinen privaten Schlüsselspeicher verliert, kann er das tun niemals Aktualisieren Sie ihre App erneut. Sie müssten eine „neue“ App mit einem anderen Paketnamen veröffentlichen.
Auswahl des richtigen Signaturschemas für Ihr Ziel-SDK
App-Signaturen sind ein wesentlicher Bestandteil der Android-Sicherheit. Sobald die Beziehung zwischen privatem und öffentlichem Schlüssel stimmt, können Sie eine seitlich geladene App nach ihren Vorzügen beurteilen und bestätigen, dass das, was Sie installieren, nicht geändert wurde, seit der Entwickler es signiert hat. Weitere Informationen zu Android-Interna finden Sie in unserem Anleitung zum XAPK-Format.