Ist es möglich, Archive zu signieren?


15

Ich habe mit openssl gespielt, um einen Pub- / Prv-Schlüssel zu erstellen, eine Signatur einer Datei zu erstellen und diese zu validieren. Ich spielte mit Cryptophane (Windows Gnupg Frontend) und hörte von Keyservern +, die mit dem Signieren von Text gespielt wurden.

Ich habe jedoch noch nie ein Dateiarchiv signiert. Wenn ich ein Archiv veröffentlichen möchte (7z, rar oder zip, ist es egal) und ich möchte, dass meine Benutzer oder meine Software überprüfen können, ob DIESES Archiv signiert wurde, wie soll ich das tun? Der öffentliche Schlüssel müsste natürlich öffentlich verfügbar sein. Aber das Hinzufügen der Signatur zum Archiv stört mich. Kann ich mit Software + Archiv eine komprimierte Archivdatei signieren und überprüfen?


Warum willst du es unterschreiben? Sie können einfach einen SHA1-Hash erstellen und den Hash für Ihre Kunden / Benutzer zur Überprüfung bereitstellen. Dies reicht aus, um zu bestätigen, dass die Datei nicht manipuliert wurde. Ihre Benutzer müssen zwar in der Lage sein, den Hash zu überprüfen, dies ist jedoch nicht schwieriger als die Überprüfung einer Signatur.
BJ292

@ BJ292: Und wie stellen Sie sicher, dass der Hash nicht manipuliert wurde?
user1686

@grawity - Ich bin mir nicht sicher, ob ich folge - wozu soll ich den Hash manipulieren? Ich sende Ihnen eine Datei und den Hash - Sie erstellen den Hash aus der Datei neu und bestätigen, dass er übereinstimmt - dies bestätigt, dass die Datei nicht geändert wurde. In den meisten Fällen ist dies alles, was die meisten Leute wollen - Bestätigung, dass die Datei unverändert von A nach B gelangt ist. Sicherlich hört sich das so an, wonach das OP strebt.
BJ292,

3
@ BJ292: Sie gehen davon aus, dass es im OP nur um versehentliche Datenkorruption geht. Dies wurde in der Frage nicht angegeben (oder abgelehnt), aber das OP fragt nach digitalen Signaturen. Daher gehe ich davon aus, dass ein Schutz vor absichtlichen (möglicherweise böswilligen) Datenänderungen erforderlich ist .
user1686

1
@ BJ292: Die Dateien werden auf anderen ppls-Sites gespiegelt. Ich möchte sie signieren, damit keiner der Spiegel manipuliert werden kann

Antworten:


10

Eine übliche Methode besteht darin , eine getrennte Signatur in einer .sigDatei zu erstellen (normalerweise eine PGP-Signatur mit gpg -b- X.509 ist sehr ungewöhnlich) und beide Dateien am selben Speicherort bereitzustellen. Beispielsweise:

ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.19.tar.bz2
ftp://ftp.gnupg.org/gcrypt/gnupg/gnupg-2.0.19.tar.bz2.sig

Dies kann für jede Art von Datei verwendet werden, der Benutzer muss die Signatur jedoch manuell mithilfe von überprüfen gpg --verify.


Leider unterstützt von den derzeit verwendeten kein (mir bekanntes) Archivformat integrierte Signaturen mit PGP oder X.509. (Dies schließt CAB aus, das von Windows intern, aber praktisch nirgendwo sonst verwendet wird und dessen Signierung ziemlich kompliziert ist.) WinRAR 4 konnte einen "Authentizitätsüberprüfungs" -Datensatz in einem proprietären Format hinzufügen, verwendet jedoch Ihre WinRAR-Lizenz als Signaturschlüssel, der wiederholt geknackt wurde. (Update: Diese Funktion wurde aus Sicherheitsgründen aus WinRAR 5 entfernt .)


Unter Windows (und bald auch unter Mac OS X) ist es möglich, ein "selbstextrahierendes Archiv" zu erstellen - eine digital signierte ausführbare Datei, die ein Archiv aus sich selbst extrahiert. So funktionieren beispielsweise Software-Installer unter Windows. SFXs sind jedoch auf ein einziges Betriebssystem beschränkt, sodass sie nur zum Verteilen von Programmen geeignet sind , nicht von Dokumenten oder Bildern. (Java-Programme können signiert werden und sind plattformübergreifend, aber nur wenige Systeme haben noch eine Java-Laufzeit.)


2

Jar-Archive, die mit Javas jar-tool erstellt wurden, sind praktisch zip-Archive, und es gibt ein Tool, den jarsigner, um sie zu signieren.

Hier sind einige nützliche Links:

Zunächst sieht es etwas kompliziert aus ("Was, ich brauche Keeytool? Was noch?"), Aber es ist einfach, die Schritte zu befolgen, um es auf einfache Weise zu lösen. Es klappt. Dann können Sie tiefer in die Materie eintauchen.


Dies ist wahr (XPI-Archive sind ebenfalls in sehr ähnlicher Weise ZIP-signiert), aber AFAIK, nur die Java Runtime überprüft tatsächlich JAR-Signaturen, und die Notwendigkeit der manuellen Überprüfung macht es noch unpraktischer als GnuPG.
user1686

Was meinst du mit manual verification? Was ist die Alternative? Ein Autopopup, das sich alle 10 Minuten selbst überprüft? Soll das Betriebssystem das Archiv beim Booten automatisch überprüfen? Wenn ein Archiv empfangen wird - sei es von CD, E-Mail-Anhang, Download, ...? Sollte es ein Plugin in Ihrem Virenscanner sein?
Benutzer unbekannt

Damit meine ich die Überprüfung, die vom Archivextraktionstool vor / während der Extraktion oder vom Betriebssystem / der Laufzeit während der Programmausführung durchgeführt wurde. Beispielsweise .debwerden Paketsignaturen dpkgvor der Installation des Pakets überprüft , ohne dass der Benutzer zusätzliche Maßnahmen ergreift.
user1686

@grawity: Signierte Applets, die in ein Glas gepackt wurden, werden vor der Ausführung überprüft. Es ist trivial, ein minimales Shell-Skript zu generieren, das Verifikation (jarsigner) mit Extraktion (jar) kombiniert.
Benutzer unbekannt

Der dritte Link "Wiki zum Signieren von JAR-Dateien" ist kaputt
Jason S

0

Sicher, jedes Mal, wenn Sie signierte Software installieren, überprüfen Sie ein signiertes Archiv. Um eines zu erstellen, sollten Sie dieselben Verpackungstools verwenden, die Entwickler verwenden. Es gibt einige Kompromisse zwischen Benutzerfreundlichkeit und plattformübergreifender Kompatibilität. Ich kann mir keine Möglichkeit vorstellen, ein plattformübergreifend signiertes selbstextrahierendes Archiv zu erstellen.

Erstellen Sie für Windows ein selbstextrahierendes Archiv mit dem Tool iexpress und signieren Sie es dann mit signtool.exe, wie hier beschrieben . Wenn Ihre Benutzer auf die Datei doppelklicken, wird das vertraute Dialogfeld angezeigt, in dem Sie als Herausgeber des Archivs identifiziert werden.


-1

Mit diesen beiden Befehlen können Sie Dateien mit jarsigner signieren:

keytool -genkeypair -alias <key-alias> -keyalg RSA -keystore <keystore> -validity 180

jarsigner -verbose -sigalg SHA256withRSA -digestalg SHA-256 -keystore <keystore> <file-to-sign> <key-alias>

Sie müssen Java JDK in Ihrem PC installieren.

-Der erste Befehl erstellt den Schlüsselspeicher im aktuellen Verzeichnis (sofern er noch nicht vorhanden ist). Es generiert ein öffentliches / privates Schlüsselpaar mit dem Algorithmus SHA-256.

-Der zweite signiert die Datei mit demselben Algorithmus, dem Keystore und dem Alias, der vom ersten generiert wurde.

Um eine mit einem Schlüsselspeicher signierte Datei zu überprüfen, können Sie den folgenden Befehl ausführen:

jarsigner -keystore <keystore> -verify -verbose -certs <file-signed>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.