Digitale Signaturen mit GnuPG

In einem früheren Artikel habe ich GnuPG eingeführt, indem ich eine signierte Datei verifiziert und eine Datei für einen Empfänger mit einem öffentlichen Schlüssel verschlüsselt habe. Ich habe auch geteilt, wie man ein Schlüsselpaar erstellt und einen öffentlichen Schlüssel exportiert, damit wir verschlüsselte Nachrichten empfangen können. In diesem Artikel werde ich zeigen, wie Sie Dateien signieren, bevor Sie sie per E-Mail freigeben oder auf einer Website veröffentlichen.

Mit GnuPG gibt es mehrere Methoden, eine Datei zu signieren.

$ gpg --help | grep -i signSign, check, encrypt or decrypt -s, --sign make a signature --clear-sign make a clear text signature -b, --detach-sign make a detached signature --verify verify a signature

Da jede Option besprochen wird, werde ich eine einfache Textdatei signieren.

$ cat sample.txt Sample text for gpg signing

Signatur erstellen

Mit der Option --sign wird die Datei effektiv mit dem privaten Schlüssel verschlüsselt. Der öffentliche Schlüssel ist erforderlich, um den Inhalt der Datei anzuzeigen. Dies zwingt den Empfänger, den Ursprung zu überprüfen, und entfernt alle Klartextinhalte aus dem Transit. Es ist nicht privat, da jeder mit dem öffentlichen Schlüssel die Datei entschlüsseln kann.

$ gpg -s sample.txt

Dies führt zu einer Datei mit dem Namen sample.txt.gpg.

$ file sample*sample.txt: ASCII textsample.txt.gpg: data
Bild
 Grafik mit zwei Dateien, die von A nach B gesendet werden, wobei eine Klartext und eine verschlüsselt ist

Um nur die Signatur zu überprüfen, verwenden Sie die Option --verify. Verwenden Sie die Option --decrypt, um sowohl den Inhalt anzuzeigen als auch die Signaturüberprüfung anzuzeigen.

$ gpg --decrypt sample.txt.gpg Sample text for gpg signinggpg: Signature made Sat 30 May 2020 09:16:24 AM EDTgpg: using DSA key 15AC***********...omitted...

Getrennte Signatur erstellen

Die Option getrennte Signatur bietet jedem die Möglichkeit, die Nachricht ohne den öffentlichen Schlüssel anzuzeigen. Dadurch wird eine separate Signaturdatei erstellt, die bei Bedarf zur Überprüfung der ursprünglichen Nachricht verwendet wird. In seiner einfachsten Form enthält diese Datei einen Hash der ursprünglichen Nachricht und wird mit dem privaten Schlüssel verschlüsselt. Jeder mit dem öffentlichen Schlüssel kann die Signatur öffnen und dann Hashes vergleichen, um die Integrität der signierten Datei zu überprüfen.

Erstellen Sie die Signaturdatei mit der Option --detach-sign.

$ gpg -b sample.txt

Das Ergebnis ist eine separate .sig-Datendatei.

$ file sample*sample.txt: ASCII textsample.txt.gpg: datasample.txt.sig: data

Bild
 Grafik mit zwei Dateien, die von A nach B gesendet werden, wobei eine Klartext und eine verschlüsselt ist

Wenn Sie eine Datendatei nicht freigeben, veröffentlichen oder per E-Mail versenden möchten, können Sie die Datei mit der Option --armor signieren. Es wird auch die verwenden .asc-Erweiterung anstelle der .sig-Erweiterung:

$ cat sample.txt.asc -----BEGIN PGP SIGNATURE-----iF0EABECAB0WIQQVrPeUo9lk0dnOTCbvwxHCv6EJdAUCXtO/yAAKCRDvwxHCv6EJdC2BAJ49fIcOdBUdE0PELySEMlKNzVnZLgCdG1gsTim3gab2dgL6qagHArSlgq8==IvP/-----END PGP SIGNATURE-----

Die ursprüngliche Klartextdatei und die separate Signaturdatei müssen beide dem Empfänger zur Verfügung gestellt werden.

Um die Signatur zu überprüfen, geben Sie die Signaturdatei und dann die Originaldatei an.

$ gpg --verify sample.txt.sig sample.txt

Wenn die Standardnamen verwendet wurden, können Sie den Namen der unverschlüsselten Datei weglassen.

$ gpg --verify sample.txt.sig gpg: assuming signed data in 'sample.txt'gpg: Signature made Sat 30 May 2020 09:23:53 AM EDT...omitted...

Klartext signieren

Die Option --clear-sign ist eine neuere Option in Bezug auf die lange Geschichte von GPG und ist sehr häufig für Dateien, die auf Websites wie den Fedora-Download-Prüfsummendateien veröffentlicht wurden. Die Inhalte sind für jedermann lesbar. Die Signaturinformationen sind auch in derselben Datei für diejenigen verfügbar, die den Ursprung und die Integrität des Inhalts überprüfen möchten.

Bild
 Inhalt der Prüfsummendatei, die sowohl den Klartext der SHA256-Summe als auch den PGP-Signaturblock anzeigt

Die Option --clear-sign erstellt eine neue Datei mit dem .asc-Erweiterung.

$ gpg --clear-sign sample.txt
$ file sample*sample.txt: ASCII textsample.txt.asc: ASCII textsample.txt.gpg: datasample.txt.sig: data

Verwenden Sie die Option --verify, um die Signatur zu überprüfen:

$ gpg --verify sample.txt.asc gpg: Signature made Sat 30 May 2020 09:27:56 AM EDT...omitted...gpg: WARNING: not a detached signature; file 'sample.txt' was NOT verified!

Beachten Sie, dass während des Überprüfungsprozesses eine Meldung angezeigt wird, die darauf hinweist, dass die zugehörige Originaldatei nicht überprüft wurde. Sie können diese Datei umbenennen, bevor Sie sie auf Ihrer Website veröffentlichen. Die Überprüfung überprüft weiterhin den Dateiinhalt.

Obwohl dies für die Verbraucher Ihrer Produkte häufig die bequemste Methode ist, wird auf der GPG-Manpage gewarnt, dass getrennte Signaturen die bessere Option sind, wenn eine vollständige Überprüfung erforderlich ist.

Aus der gpg-Manpage:

Hinweis: Bei der Überprüfung einer Klartext-Signatur überprüft GPG nur die Klartext-signierten Daten und keine zusätzlichen Daten außerhalb der Klartext-Signatur oder der Kopfzeilen, die direkt auf die Strichmarkierungslinie folgen. Die Option –output kann verwendet werden, um die tatsächlich signierten Daten zu schreiben, aber es gibt auch andere Fallstricke bei diesem Format. Es wird empfohlen, Klartext-Signaturen zugunsten von getrennten Signaturen zu vermeiden.

Mit einem bestimmten Schlüsselpaar

Die obigen Beispiele wurden alle mit dem ersten privaten Schlüssel signiert, der in meinem Schlüsselbund verfügbar ist. Möglicherweise möchte ich einen anderen Schlüssel verwenden, wenn ich eine Datei zur Veröffentlichung auf einer Website signiere. Ein Schlüsselpaar wird speziell für das Projekt oder Produkt erstellt. Das Schlüsselpaar kann sich sogar auf einem neuen gemeinsamen Schlüsselbund befinden.

$ gpg --keyring /etc/gpgkeys --no-default-keyring --full-gen-key <other options>

Wenn eine Datei signiert oder verschlüsselt ist, müssen Sie auch die Option --keyring angeben.

Selbst wenn nur eine Person den Schlüssel zum Signieren von Dateien verwendet, erstellen Sie ein separates Schlüsselpaar zum Signieren. Verwenden Sie nicht denselben Schlüssel für andere tägliche Aufgaben wie die persönliche E-Mail-Verschlüsselung. Sie können die verfügbaren privaten Schlüsselnamen mit gpg --list-secret auflisten. Die ID, der Name oder die E-Mail-Adresse können verwendet werden, um den Schlüssel zu identifizieren.

Verwenden Sie die Identitätsoption --local-user, um die Datei mit einem bestimmten Schlüssel aus einem Schlüsselbund zu signieren.

$ gpg --local-user "My Project 2" --clear-sign sample.txt

Einpacken

Wenn Ihre einfache Textdatei eine Liste von Prüfsummen-Hashes für Ihre Produktdownloads ist, können diese Datei, alle Signaturdateien und der öffentliche Schlüssel, mit dem die Signaturen überprüft werden, auf einer Website veröffentlicht werden. Verbraucher können dann die Downloads überprüfen, bevor sie Software auf ihren Systemen installieren.



+