Dateien unter Linux verschlüsseln – Asymmetrische Verschlüsselung mit GPG :: ITv4 Tipps & Tricks rund um IT
Dateien unter Linux verschlüsseln – Asymmetrische Verschlüsselung mit GPG

GPG ist eine kostenlose, weit verbreitete Verschlüsselungssoftware zum Ver- und Entschlüsseln von Dateien. In diesem Beitrag erkläre ich kurz und einfach, wie man mithilfe eines Public-Keys und dem Private-Key Dateien ver- und entschlüsseln kann. Darauf folgen noch weitere nützliche Befehle.


Wie funktioniert die asymmetrische Verschlüsselung?

Bei der asymmetrischen Verschlüsselung gibt es einen Private Key und einen bzw. mehrere Public Keys. Ich erkläre eine Verschlüsselung einmal kurz anhand von Person A, welche eine Datei für Person B verschlüsseln möchte.

Person B stellt Person A einen Public Key zur Verfügung, damit diese eine Datei sicher (also verschlüsselt) an sie übertragen kann. Dieser Schlüssel ist öffentlich und es macht auch nichts, wenn ein Dritter an diesen gelangt. Diesen Key kann man sich als offenes Schloss vorstellen. Person A verschlüsselt nun für Person B mit diesem Key die Datei, das Schloss wird geschlossen.

Person B empfängt diese Datei nun. Da sie den Private Key besitzt, kann sie diese Datei entschlüsseln, also das Schloss mit dem Schlüssel öffnen. Niemand sonst kann das Schloss öffnen.


GPG installieren

Zum Installieren von GPG unter Debian oder Ubuntu muss lediglich folgender Befehl in der Shell ausgeführt werden:

sudo apt-get install gnupg2


Public- und Private-Key generieren

Zunächst müssen für die asymmetrische Verschlüsselung ein Public-Key und ein Private-Key generiert werden. Der Public-Key ist, wie der Name schon sagt, öffentlich. Jeder kann ihn haben, er ist kein Geheimnis, denn er dient lediglich zum Verschlüsseln. Zum Entschlüsseln werden dann der Private-Key sowie das hinterlegte Passwort benötigt. Dieser muss sorgfältig aufbewahrt werden und darf nicht an die Öffentlichkeit. Mit ihm lassen sich alle verschlüsselten Daten entschlüsseln.

Mit folgendem Befehl generierst du deine Keys:

gpg --full-generate-key

Gib zunächst eine 1 ein, um die Auswahl RSA and RSA zu wählen.

Für die höchste Sicherheit sollen die Schlüssel 4096 Bits lang sein.

Der Einfachheit halber sollen die Schlüssel nicht ablaufen, daber 0 eingeben und noch mit Y bestätigen. Soll deiner nur für einen bestimmten Zeitraum gültig sein solltest du bedenken, dass nach Ablauf das Verschlüsseln mit diesem Key nicht mehr möglich ist. Das Entschlüsseln funktioniert weiterhin.

Jetzt noch einen Namen für den Key, deine E-Mail-Adresse und optional eine Bemerkung eingeben. Ich verwende encrypter. Bestätige die Eingaben anschließend mit o.

Screenshot

Vergib nun ein Passwort, welches für alle Verschlüsselungen mit diesem Key verwendet werden soll. Dieses darf nicht zu einfach sein, da das Programm sonst die Eingabe verweigert.

Screenshot

Das Generieren kann einige Minuten dauern, es erscheint auch kein Fortschrittsbalken oder Ähnliches. Das ist ganz normal, nicht wundern. Um den Prozess zu beschleunigen, kann man in einer weiteren Shell einige rechenintensive Befehle ausführen, wie beispielsweise diesen:

dd if=/dev/sda of=/dev/zero

Ist der Vorgang abgeschlossen, erscheint diese Art von Ergebnis:

Screenshot

Jetzt wird der Public-Key exportiert:

gpg --export --armor encrypter > encrypterPublicKey.asc

Dieser Key wird nun an die Personen verschickt, die Dateien für dich verschlüsseln und übertragen möchten.


Public-Key Empfänger: Schlüssel importieren

Der Empfänger deines Public-Keys importiert nun deinen öffentlichen Schlüssel:

gpg --import encrypterPublicKey.asc

Screenshot

Public-Key vertrauen

Der importe Schlüssel sollte nun noch als vertrautlich gekennzeichnet werden, um keine Warnhinweise von GPG zu erhalten. Du solltest dir dabei sicher sein, dass dieser Schlüssel auch wirklich von der richtigen Person stammt.

gpg --edit-key encrypter

In der Shell von GPG gibst du nun

trust

ein und drückst die 5 und daraufhin y. Beende die Shell anschließend mit

quit

Screenshot

Datei verschlüsseln

Mit folgendem Befehl können du, und auch die Besitzer von deinem Public-Key, Dateien verschlüsseln. Ich verschlüssele in diesem Beispiel eine einfache .txt-Datei.

Beim ersten Verschlüsseln prüft GPG noch die Datenbank der vertrauenswürdigen Schlüssel, von nun an erscheint keinerlei Meldung, nachdem der Befehl erfolgreich ausgeführt wurde.

gpg -e -r encrypter <DATEINAME>.txt


Datei entschlüsseln

Du als Besitzer vom Private-Key kannst die Datei nun mit folgendem Befehl entschlüsseln. Zum Entschlüsseln der Datei ist dein für den Schlüssel festgelegtes Passwort notwendig. Diese Abfrage erscheint nicht jedes Mal, da das Passwort für einige Zeit zwischengespeichert wird.

gpg -d -o <DATEINAME>.txt <DATEINAME>.txt.gpg

Screenshot

Datei verschlüsseln & signieren

Wie kann der Empfänger eigentlich sicher sein, dass auch wirklich der erwartete Sender die Datei verschlüsselt hat? Richtig, gar nicht.

Damit der Empfänger sicherstellen kann, dass auch wirklich der richtige Sender die Datei verschlüsselt hat, kann der Verschlüsseler die Datei noch zusätzlich signieren. Das Funktioniert dann genau umgekehrt: Mit dem Private-Key wird signiert und mit dem Public-Key wird die Signatur überprüft.

Für die Verwendung mit GPG wird einfach das sign-Parameter in den Befehl mit eingefügt.

Der Verschlüsseler muss das Passwort von seinem Private-Key eingeben, sofern er nur einen Private-Key im KeyRing hat:

gpg -e -r encrypter --sign <DATEINAME>.txt

Hat er mehrere Private-Keys und möchte mit einem bestimmten signieren, muss folgender Befehl abgesetzt werden und dabei die E-Mail-Adresse abgeändert werden:

gpg -e -r encrypter --sign --default-key <EMAIL@EXAMPLE.COM> <DATEINAME>.txt

Zum Entschlüsseln wird der übliche Befehl verwendet, hier ändert sich nichts:

gpg -d -o <DATEINAME>.txt <DATEINAME>.txt.gpg

Nach dem Entschlüsselungsvorgang wird nun eine Information über denjenigen angezeigt, der die Datei verschlüsselt hat.

Wurde die Datei von einer unbekannten Person verschlüsselt, dessen Public-Key du nicht besitzt, würde folgende Meldung erscheinen:

gpg: encrypted with 4096-bit RSA key, ID XXXXXXXXXXXXXXXX, created 2020-03-09
      "encrypter <test@eurenikz.de>"
gpg: Signature made So 08 Mär 2020 19:53:20 CET
gpg:                using RSA key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
gpg: Can't check signature: public key not found

Für den Fall, dass du den Public-Key besitzt, diesem aber noch nicht vertraut hast, erscheint folgende Ausgabe:

gpg: encrypted with 4096-bit RSA key, ID XXXXXXXXXXXXXXXX, created 2020-03-09
       "encrypter <test@eurenikz.de>"
gpg: Signature made So 08 Mär 2020 19:58:51 CET
gpg:                using RSA key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
gpg: Good signature from "DerSender <sender@example.com>" [unknown]
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: XXXX XXXX XXXX XXXX XXXX  XXXX XXXX XXXX XXXX XXXX

Der Public-Key wurde erkannt, aber ihm wurde noch nicht vertraut. Zum Sicherstellen, ob der Schlüssel auch wirklich vom Sender stammt, können beide Parteien beispielsweise in der Ausgabe von gpg --list-keys den RSA-Schlüssel (Fingerprint) vergleichen. Das ist die 40-stellige Zeichenfolge über der E-Mail-Adresse.

Wurde dem Schlüssel nun vertraut, erscheint folgende Erfolgs-Meldung beim Entschlüsseln:

gpg: encrypted with 4096-bit RSA key, ID XXXXXXXXXXXXXXXX, created 2020-03-09
      "encrypter <test@eurenikz.de>"
gpg: Signature made So 08 Mär 2020 20:01:03 CET
gpg:                using RSA key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
gpg: Good signature from "DerSender <sender@example.com>" [ultimate]

Public-Key zum Schlüsselserver hochladen

Damit Andere deinen Public-Key ganz einfach importieren können, ohne dass du diesen verschicken musst, kannst du ihn auch ganz einfach zu einem öffentlichen Schlüsselserver hochladen. Ich verwende in diesem Beispiel den Schlüsselserver pgp.mit.edu. Der RSA KEY ist die die 40-stellige Zeichenfolge über der E-Mail-Adresse vom Schlüssel aus der Ausgabe von gpg --list-keys.

gpg --send-keys --keyserver pgp.mit.edu <RSA KEY>


Public-Key vom Schlüsselserver herunterladen

Der Empfänger kann diesen Schlüssel mithilfe der hinterlegten E-Mail-Adresse dann ganz einfach in der Datenbank vom Schlüsselserver suchen und importieren:

gpg --keyserver pgp.mit.edu --search-keys <EMAIL@EXAMPLE.COM>

Alle Funde werden nacheinander angezeigt, beginnend mit Fund Nummer 1. Dies ist in der Regel der richtige Schlüssel, daher wird er mit der Eingabe von 1 importiert.

Sofern man sicher ich, dass der Schlüssel der richtige Person gehört, wird ihm jetzt noch vertraut. Wie das geht, habe ich zuvor bereits erklärt.


Alle Schlüssel aus dem KeyRing ausgeben

Den sogenannten KeyRing kann man sich als Schlüsselbund vorstellen, an dem alle deine Public- und Private-Keys hängen. Sie sind in deinem System gespeichert.

Mit folgendem Befehl kannst du dir alle in deinem System hinterlegten Public-Keys ausgeben lassen. Das sind alle, die du jemals generiert oder importiert hast:

gpg --list-keys

Und mit folgendem Befehl die Private-Keys:

gpg --list-secret-keys


Schlüssel aus dem KeyRing löschen

Verwende folgenden Befehl, um einen Public-Key aus deinem KeyRing zu löschen. Beachte jedoch, dass dies nicht möglich ist, wenn du noch den dazugehörigen Private-Key besitzt.

gpg --delete-key <Username>

Mit folgendem löschst du einen Private-Key:

gpg --delete-secret-key <Username>


Private-Key exportieren und importieren

Einen Private-Key kannst du mit diesem Befehl exportieren:

gpg --export-secret-keys encrypter > encrypterPrivateKey.asc

... Und so importieren:

gpg --import encrypterPrivateKey.asc

Denke immer daran, einem importieren Key zu vertrauen. Wie das geht, habe ich ja bereits weiter oben erklärt.


War dieser Artikel hilfreich?

1
EurenikZ

EurenikZ

Ich bin Janis, 21 Jahre jung und komme aus Frankfurt am Main. Aktuell mache ich eine Ausbildung zum Fachinformatiker für Systemintegration. Neben meinem vServer beschäftige ich mich viel mit Coden und meinen Webseiten. Zocken ist ebenfalls eine meiner Leidenschaften, mein Lieblings-Genre ist Battle Royale und Survival.

Zuletzt aktualisiert

07.07.2020