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 erklärt, 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 demonstrieren, wie Dateien signiert werden, bevor sie per E-Mail geteilt oder auf einer Website veröffentlicht werden.
Mit GnuPG gibt es mehrere Methoden zum Signieren einer Datei.
$ gpg --help | grep -i sign
Sign, 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
Während jede Option besprochen wird, werde ich eine einfache Textdatei signieren.
$ cat sample.txt
Sample text for gpg signing
Machen Sie eine Signatur
Mit dem --sign
Option 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 der Übertragung. Es ist nicht privat, da jeder mit dem öffentlichen Schlüssel die Datei entschlüsseln kann.
$ gpg -s sample.txt
Das Ergebnis ist eine Datei mit dem Namen sample.txt.gpg.
$ file sample*
sample.txt: ASCII text
sample.txt.gpg: data
Um nur die Signatur zu überprüfen, verwenden Sie --verify
Möglichkeit. Verwenden Sie --decrypt
, um sowohl den Inhalt anzuzeigen als auch die Signaturüberprüfung anzuzeigen Option.
$ gpg --decrypt sample.txt.gpg
Sample text for gpg signing
gpg: Signature made Sat 30 May 2020 09:16:24 AM EDT
gpg: using DSA key 15AC***********
...omitted...
Machen Sie eine getrennte Signatur
Die Option der getrennten Signatur ist verfügbar, um jedem die Möglichkeit zu geben, die Nachricht anzuzeigen, ohne über den öffentlichen Schlüssel zu verfügen. Dadurch wird eine separate Signaturdatei erstellt, die bei Bedarf zur Überprüfung der ursprünglichen Nachricht verwendet wird. In ihrer einfachsten Form enthält diese Datei einen Hash der ursprünglichen Nachricht und ist 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 --detach-sign
Option.
$ gpg -b sample.txt
Das Ergebnis ist eine separate .sig Datendatei.
$ file sample*
sample.txt: ASCII text
sample.txt.gpg: data
sample.txt.sig: data
Wenn Sie eine Datendatei nicht teilen, posten oder per E-Mail versenden möchten, können Sie die Datei mit --armor
signieren Option, und es wird eine ASCII-Textdatei mit der Signatur erstellt. Es wird auch die .asc-Datei verwenden Erweiterung anstelle der .sig Erweiterung:
$ cat sample.txt.asc
-----BEGIN PGP SIGNATURE-----
iF0EABECAB0WIQQVrPeUo9lk0dnOTCbvwxHCv6EJdAUCXtO/yAAKCRDvwxHCv6EJ
dC2BAJ49fIcOdBUdE0PELySEMlKNzVnZLgCdG1gsTim3gab2dgL6qagHArSlgq8=
=IvP/
-----END PGP SIGNATURE-----
Dem Empfänger müssen sowohl die ursprüngliche Klartextdatei als auch die separate Signaturdatei 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...
Erstellen Sie eine Klartextsignatur
Das --clear-sign
Option ist eine neuere Option in Bezug auf die lange Geschichte von GPG und ist sehr verbreitet für Dateien, die auf Websites veröffentlicht werden, wie z. B. die Fedora-Download-CHECKSUM-Dateien. 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.
Das --clear-sign
Option erstellt eine neue Datei mit der .asc Erweiterung.
$ gpg --clear-sign sample.txt
$ file sample*
sample.txt: ASCII text
sample.txt.asc: ASCII text
sample.txt.gpg: data
sample.txt.sig: data
Um die Signatur zu überprüfen, verwenden Sie --verify
Möglichkeit:
$ 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, dass die zugehörige Originaldatei nicht überprüft wird. Sie können diese Datei umbenennen, bevor Sie sie auf Ihrer Website veröffentlichen. Die Verifizierung überprüft weiterhin den Inhalt der Datei.
Obwohl dies oft die bequemste Methode für die Verbraucher Ihrer Produkte ist, gibt es eine Warnung in der GPG-Manpage, dass getrennte Signaturen die bessere Option sind, wenn eine vollständige Verifizierung erforderlich ist.
Von der GPG-Manpage:
Hinweis:Bei der Überprüfung einer Klartext-Signatur überprüft GPG nur, was die Klartext-signierten Daten ausmacht, und keine zusätzlichen Daten außerhalb der Klartext-Signatur oder der Kopfzeilen direkt nach der Strichmarkierungslinie. Die Option --output kann verwendet werden, um die eigentlichen signierten Daten auszugeben, aber es gibt auch andere Fallstricke bei diesem Format. Es wird empfohlen, Klartext-Signaturen zugunsten getrennter Signaturen zu vermeiden.
Verwenden eines bestimmten Schlüsselpaars
Die obigen Beispiele wurden alle mit dem ersten privaten Schlüssel signiert, der in meinem Schlüsselbund verfügbar ist. Ich möchte vielleicht 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, achten Sie darauf, auch den --keyring
anzugeben Option.
Auch wenn nur eine Person den Schlüssel zum Signieren von Dateien verwendet, erstellen Sie ein separates Schlüsselpaar zum Signieren. Verwenden Sie denselben Schlüssel nicht 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.
Um die Datei mit einem bestimmten Schlüssel aus einem Schlüsselbund zu signieren, verwenden Sie den --local-user
Identitätsoption.
$ gpg --local-user "My Project 2" --clear-sign sample.txt
Schluss machen
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, der zur Überprüfung der Signaturen verwendet wird, alle auf einer Website veröffentlicht werden. Verbraucher können dann die Downloads überprüfen, bevor sie Software auf ihren Systemen installieren.
[ Möchten Sie mehr über Sicherheit erfahren? Schauen Sie sich die Checkliste für IT-Sicherheit und Compliance an. ]