Wie wird eine .apk-Datei signiert?
Dies ist nicht eine Frage darüber, wie Zeichen ein .apk-Datei. Ich möchte wissen, was bedeutet die Unterzeichnung tatsächlich bedeutet und wie es umgesetzt wird.
Innerhalb der .apk-Datei gibt es META-INF-Ordner und im inneren, gibt es zwei Dateien.
Erste ist CERT.SF enthält SHA1 hashes für die verschiedenen Komponenten und sieht wie folgt aus:
Name: res/layout/main.xml
SHA1-Digest: Cox/T8fN1X9Hv4VqjH9YKqc/MsM=
Name: AndroidManifest.xml
SHA1-Digest: wZ418H9Aix1LNch3ci7c+cHyuZc=
Name: resources.arsc
SHA1-Digest: P+uoRrpFyVW6P3Wf+4vuR2ZSuXY=
Name: classes.dex
SHA1-Digest: cN3zXtGii9zuTOkBqDTLymeMZQI=
Dort ist auch eine Datei namens CERT.RSA. Ich nehme an, es ist der öffentliche Schlüssel zum verifizieren der Signatur.
Meine Frage ist, wo ist die Signatur für das ganze .apk-Datei gespeichert ist? Und was ist eigentlich unterzeichnet? Es könnte entweder
- .apk-Datei als einzelne binäre Objekt und dieses ist unterzeichnet
- oder CERT.SF ist unterzeichnet, die enthält die einzelnen hashes für die verschiedenen Komponenten
Wäre es auch viel besser, wenn Sie können zeigen Sie mir die Dokumentation der detaillierten Signierung und Verifizierung.
InformationsquelleAutor der Frage Szere Dyeri | 2010-08-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese hat eigentlich nichts mit Android. APK-Dateien sind signiert mit
jarsigner
. Hier ist ein link zu der page.InformationsquelleAutor der Antwort CommonsWare
In der Tat ist dies nicht eine bestimmte Android-Frage, sondern eine Java-in-der Allgemeinen Frage, aber ich poste die Antwort auf jeden Fall...
Zunächst: Nur die XXX.SF-Datei unterzeichnet wird; dies bedeutet, dass alle aufgeführten Dateien in die XXX.SF-Datei signiert sind "indirekt", weil XXX.SF enthält Ihre hashes. In der Tat, alle Dateien, die sich nicht im "Meta-Inf" sollte hashes! Das ganze .apk-Archiv ist nicht signiert.
Den XXX.SF-Datei ist mehr oder weniger eine Kopie des MANIFESTS.MF-Datei. Dort ist eine Zeile "SHA1-Digest-Manifest", das ist der SHA-1-hash von "MANIFESTIEREN.MF" selbst; die "SHA1-Digest" - Zeilen nicht enthalten die hashes der Dateien, sondern die hashes des Baumes entsprechenden Zeilen in der Manifest.MF-Datei wie diese:
SHA1("Name: mit dem Namen"+CR+LF+"SHA1-Digest: "+SHA1(file_content)+CR+LF+CR+LF)
Dateiformat XXX.DSA/.RSA ist die gleiche wie für eine S/MIME-E-Mail-Signatur (für den Inhalt der XXX.SF) jedoch werden die Daten nicht base64-codiert sind und keine header - /trailer-Linien eingesetzt werden. "openssl smime -sign-outform DER" schaffen würde, dieses format.
Mehrere Zertifikate signiert werden können eine ZIP-Datei. In diesem Fall mehrere Paare von (XXX.SF/.RSA, YYY.SF/.RSA, ...) vorhanden.
InformationsquelleAutor der Antwort Martin