GnuPG OpenPGP Schlüssel erstellen (Bild © PCMasters.de)
Das Dienstprogramm ist in der Regel in zwei Formen verfügbar: gpg, das für Server und eingebettete Plattformen optimiert ist, und gpg2, das für Desktop-Umgebungen konzipiert ist. In aktuellen Distributionen wie Ubuntu und Debian werden diese oft zusammengefasst, wobei das gnupg2-Paket Symlinks bereitstellt, die es dem Befehl gpg ermöglichen, die moderne, vereinheitlichte Version der Software auszuführen.
Bereitstellung und Installation
Bevor ein sicherer Kommunikationskanal eingerichtet werden kann, muss das GnuPG-Paket auf allen beteiligten Systemen installiert sein. Die meisten modernen Linux-Distributionen enthalten GPG standardmäßig; dies lässt sich durch die Ausführung von gpg --version überprüfen. Falls das Dienstprogramm nicht vorhanden ist, kann es mit den folgenden distributionsspezifischen Befehlen installiert werden:
-
Debian, Ubuntu, Mint:
sudo apt install gnupg -
RHEL, CentOS, Fedora, Rocky, AlmaLinux:
sudo yum install gnupg -
Gentoo:
sudo emerge -a app-crypt/gnupg -
Alpine:
sudo apk add gnupg -
Arch Linux:
sudo pacman -S gnupg -
OpenSUSE:
sudo zypper install gnupg
Asymmetrische Schlüsselinfrastruktur: Erstellung und Verwaltung
GPG basiert auf asymmetrischer Kryptografie und nutzt ein Schlüsselpaar: einen öffentlichen Schlüssel, der offen geteilt wird, und einen privaten Schlüssel, der geheim gehalten wird.
Erstellung eines Schlüsselpaars
Um ein neues Schlüsselpaar zu erstellen, wird folgender Befehl verwendet:
gpg --full-generate-key
Während dieses Vorgangs muss der Administrator mehrere wichtige Parameter festlegen:
- 1.Schlüsseltyp: (9) ECC (sign and encrypt) default
- 2.Elliptische Kurve: Curve 25519 default
- 3.Gültigkeit: Ein bestimmtes Ablaufdatum oder die Einstellung „nie ablaufen“.
- 4.Benutzeridentität: Ein Name und eine E-Mail-Adresse zur Identifizierung des Schlüssels.
- 5.Passphrase: Eine starke, sichere Passphrase zum Schutz des privaten Schlüssels.
Schlüsselprüfung
Um die derzeit im lokalen Schlüsselbund gespeicherten öffentlichen Schlüssel anzuzeigen:
gpg --list-public-keys
Für eine detaillierte Ansicht einschließlich des vollständigen Fingerabdrucks wird das folgende Flag hinzugefügt:
gpg --list-public-keys --keyid-format=long
So überprüfst du die auf dem System gespeicherten privaten (geheimen) Schlüssel:
gpg --list-secret-keys
Oder für das erweiterte Format:
gpg --list-secret-keys --keyid-format=long
Der Schlüsselaustausch
Damit zwei Parteien verschlüsselte Dateien austauschen können, müssen sie zunächst ihre öffentlichen Schlüssel austauschen. Dies ist ein einseitiger Vorgang; private Schlüssel dürfen niemals weitergegeben werden.
Öffentliche Schlüssel exportieren
Der öffentliche Schlüssel wird unter Verwendung der spezifischen Schlüssel-ID aus der Liste der öffentlichen Schlüssel in eine Datei exportiert:
gpg --export -o myuser.key [Schlüssel-ID]
Schlüsselübertragung und -import
Die exportierten Schlüssel werden in der Regel über sichere Kanäle übertragen. Beispielsweise kann das Dienstprogramm scp verwendet werden, um Schlüssel zwischen Servern zu übertragen:
scp myuser.key root@192.168.1.100:/root/
Sobald die Datei empfangen wurde, wird der öffentliche Schlüssel in den lokalen Schlüsselbund importiert:
gpg --import myuser.key
Die Überprüfung des Imports erfolgt durch erneutes Auflisten der öffentlichen Schlüssel, um sicherzustellen, dass der Schlüssel des Partners nun vorhanden ist.
Implementierung der Datenverschlüsselung
Die Verschlüsselung erfolgt mithilfe des öffentlichen Schlüssels des Empfängers. Dadurch wird sichergestellt, dass nur der Inhaber des entsprechenden privaten Schlüssels auf die Daten zugreifen kann.
Grundlegende Verschlüsselung
Um eine Klartextdatei (z. B. secret.txt) zu verschlüsseln, wird der folgende Befehl verwendet, wobei die E-Mail-Adresse des Empfängers angegeben wird:
gpg -e -r someuser@domain.com secret.txt
Alternativ:
gpg --encrypt --recipient someuser@domain.com secret.txt
Dieser Vorgang erzeugt eine neue Datei mit der .gpg-Erweiterung (z. B. secret.txt.gpg).
Erweiterte Verschlüsselungsoptionen
Um einen benutzerdefinierten Ausgabedateinamen anzugeben, wie z. B. config, wird das Flag -o verwendet:
gpg -e -r someuser@domain.com -o config secret.txt
In Fällen, in denen eine Datei für mehrere Personen zugänglich sein muss, können dem Befehl mehrere -r-Flags angehängt werden, eines für den öffentlichen Schlüssel jedes Empfängers.
Implementierung der Datenentschlüsselung
Die Entschlüsselung ist ein privater Vorgang, der vom Empfänger mit seinem eigenen privaten Schlüssel durchgeführt wird.
Dateien entschlüsseln
So stellst du den ursprünglichen Inhalt einer verschlüsselten Datei wieder her:
gpg -d -o secret.txt secret.txt.gpg
Bei der Ausführung fordert das System den Benutzer zur Eingabe der Passphrase auf, die während der Schlüsselgenerierung festgelegt wurde. Ist die Passphrase falsch, schlägt die Entschlüsselung fehl.
Sicherheitshärtung und Betriebsstandards
Um die Integrität des Verschlüsselungsworkflows zu gewährleisten, sollten die folgenden technischen Standards beachtet werden:
- Komplexität der Passphrase: Private Schlüssel sind nur so sicher wie die Passphrase, die sie schützt; eine Mischung aus alphanumerischen Zeichen und Sonderzeichen ist erforderlich.
- Schlüsselredundanz: Private Schlüssel sollten an einem sicheren, Offline-Speicherort gesichert werden. Der Verlust des privaten Schlüssels führt zum dauerhaften Verlust aller mit diesem Schlüssel verschlüsselten Daten.
- Lebenszyklusmanagement: Die Festlegung von Ablaufdaten für Schlüssel schränkt das Zeitfenster für einen Angreifer ein, falls ein Schlüssel kompromittiert wird.
- Fingerabdruck-Überprüfung: Öffentliche Schlüssel sollten über einen sicheren Out-of-Band-Kanal (z. B. einen Telefonanruf oder ein persönliches Treffen) überprüft werden, um Man-in-the-Middle-Angriffe zu verhindern.
- Sperrzertifikate: Unmittelbar nach der Schlüsselerstellung sollte ein Sperrzertifikat generiert werden. Wird ein privater Schlüssel kompromittiert, wird dieses Zertifikat verteilt, um andere Nutzer darüber zu informieren, dass der Schlüssel nicht mehr gültig ist.
Einblicke in die Implementierung
Was ist der grundlegende Unterschied zwischen dem öffentlichen und dem privaten Schlüssel in GPG?
Der öffentliche Schlüssel dient ausschließlich zur Verschlüsselung und zur Überprüfung von Signaturen. Er kann an jeden weitergegeben werden. Der private Schlüssel dient ausschließlich zur Entschlüsselung und zum Erstellen von Signaturen; er muss vertraulich behandelt werden. Mit einem öffentlichen Schlüssel verschlüsselte Daten können nur mit dem dazugehörigen privaten Schlüssel entschlüsselt werden.
Wie geht GPG mit Dateien um, die für mehrere Empfänger verschlüsselt sind?
Wenn mehrere -r-Flags verwendet werden, verschlüsselt GPG die eigentlichen Daten mit einem zufälligen Sitzungsschlüssel. Anschließend verschlüsselt es diesen Sitzungsschlüssel mehrfach – jeweils einmal mit dem öffentlichen Schlüssel jedes Empfängers. So kann jeder der angegebenen Empfänger seinen privaten Schlüssel verwenden, um den Sitzungsschlüssel zu entsperren und anschließend die Daten zu entschlüsseln.
Was passiert, wenn die Passphrase für den privaten Schlüssel verloren geht?
Es gibt keinen Mechanismus zur Wiederherstellung einer verlorenen GPG-Passphrase. Da der private Schlüssel mit dieser Passphrase verschlüsselt ist, kann der Schlüssel ohne sie nicht verwendet werden. Alle Dateien, die mit diesem spezifischen öffentlichen Schlüssel verschlüsselt wurden, sind dauerhaft unzugänglich.
Warum ist es notwendig, Schlüssel-Fingerabdrücke zu überprüfen?
Ein Angreifer könnte möglicherweise einen gefälschten öffentlichen Schlüssel vorlegen und dabei vorgeben, der beabsichtigte Empfänger zu sein. Durch die Überprüfung des Fingerabdrucks (einem eindeutigen Hash des öffentlichen Schlüssels) über einen separaten, vertrauenswürdigen Kanal stellt der Absender sicher, dass er den authentischen Schlüssel des Empfängers verwendet.
Was ist der Zweck eines Widerrufszertifikats?
Ein Widerrufszertifikat ist eine signierte Erklärung, dass der Schlüssel nicht mehr gültig ist. Wenn ein privater Schlüssel gestohlen oder kompromittiert wurde, veröffentlicht der Besitzer dieses Zertifikat auf öffentlichen Schlüsselservern. Dies warnt andere Nutzer davor, den kompromittierten öffentlichen Schlüssel weiterhin zur Verschlüsselung zu verwenden.
