GPG (GNU Privacy Guard, Befehl gpg) ist die freie Implementierung des OpenPGP-Standards. Damit erzeugt man Schlüsselpaare, ver- und entschlüsselt Dateien und E-Mails und signiert Software — etwa die Paketlisten von Debian- und Ubuntu-Repositorien oder Git-Commits.

Schlüssel erzeugen und verwalten

gpg --quick-gen-key "Max Mustermann <Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.>"
gpg --list-keys
gpg --list-secret-keys
gpg --edit-key Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.

Der schnelle Weg nutzt seit GnuPG 2.1 die modernen Elliptic-Curve-Algorithmen Ed25519 (Signieren) und Curve25519 (Verschlüsseln). Das alte RSA-Primärschlüssel-Menü erreicht man mit gpg --full-gen-key. Seit GnuPG 2.2 läuft die Passphrasen-Abfrage über den gpg-agent, der Schlüssel nach einer Weile wegcacht.

Exportieren und importieren

gpg --armor --export Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.
gpg --export-secret-keys --armor Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.
gpg --import schluessel.asc
gpg --keyserver keys.openpgp.org --send-keys FUZZY0LANGEFINGERPRINT

--armor erzeugt den ASCII-Text (Block beginnt mit -----BEGIN PGP PUBLIC KEY BLOCK-----), der sich gut per E-Mail verschicken lässt. Öffentliche Schlüssel dürfen überall hin; der private Schlüssel gehört ausschließlich auf den eigenen Rechner, am besten mit Passphrase geschützt.

Verschlüsseln, entschlüsseln, signieren

gpg --encrypt --recipient Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein. datei.txt
gpg --decrypt datei.txt.gpg
gpg --sign datei.txt
gpg --verify datei.txt.gpg

GPG kombiniert dabei asymmetrische und symmetrische Verschlüsselung (hybrides Verfahren): Ein zufälliger Sitzungsschlüssel verschlüsselt die Daten, der öffentliche Schlüssel des Empfängers verschlüsselt den Sitzungsschlüssel. Wer den eigenen Schlüssel nicht verlieren will, erzeugt sofort nach der Schlüsselerstellung ein Widerrufszertifikat: gpg --gen-revoke Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein. und verwahrt es offline.

Fingerabdruck prüfen

gpg --fingerprint Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.

Der Fingerabdruck ist der belastbare Identitätsnachweis eines Schlüssels — vor der ersten Nutzung vergleicht man ihn über einen zweiten Kanal (Webseite, Telefon), dann signiert man den fremden Schlüssel (gpg --sign-key) und baut so das Web of Trust auf. Während GPG mit dezentralen OpenPGP-Schlüsselbunden arbeitet, verwaltet das Java-Ökosystem Zertifikate zentral in Keystores — dort ist das passende Werkzeug keytool.

Verwandte Grundlagen: OpenSSL-Befehle, GPG (Konzept), OpenPGP, Ende-zu-Ende-Verschlüsselung.