# GnuPG (gpg) — Verschlüsseln, Signieren und Schlüssel verwalten

> Praxis-Guide zu GnuPG — Schlüssel erzeugen und verwalten, Dateien ver- und entschlüsseln, signieren und verifizieren sowie das Web of Trust nutzen.

Source: https://www.jpkc.com/db/cheatsheets/security/gpg/

<!-- PROSE:intro -->
GnuPG (kurz gpg) ist die freie OpenPGP-Implementierung und das Standardwerkzeug für Verschlüsselung und digitale Signaturen unter Linux, macOS und Windows. Mit einem einzigen Schlüsselpaar verschlüsselst du Dateien und E-Mails für bestimmte Empfänger, signierst Releases oder Git-Commits und prüfst die Echtheit fremder Daten über das Web of Trust. Dieser Guide führt dich von der Schlüsselerzeugung über Export, Import und Keyserver bis zum Ver- und Entschlüsseln im Alltag. Schütze deinen privaten Schlüssel dabei immer mit einer starken Passphrase — er ist der Generalschlüssel zu allem, was du verschlüsselst.
<!-- PROSE:intro:end -->

## Schlüsselerzeugung

`gpg --full-generate-key` — Erzeugt ein neues Schlüsselpaar mit allen Optionen; wähle hier ein modernes Verfahren wie ECC (Ed25519) oder RSA mit mindestens 3072 Bit.

```bash
gpg --full-generate-key
```

`gpg --generate-key` — Erzeugt ein Schlüsselpaar mit Standardwerten (schnell).

```bash
gpg --generate-key
```

`gpg --quick-generate-key '<uid>'` — Schnelle Schlüsselerzeugung mit einer User-ID.

```bash
gpg --quick-generate-key 'John Doe <john@example.com>'
```

## Schlüsselverwaltung

`gpg --list-keys` — Listet alle öffentlichen Schlüssel im Keyring auf.

```bash
gpg --list-keys
```

`gpg --list-secret-keys` — Listet alle privaten Schlüssel auf.

```bash
gpg --list-secret-keys --keyid-format long
```

`gpg --fingerprint <key-id>` — Zeigt den Fingerprint eines Schlüssels an.

```bash
gpg --fingerprint john@example.com
```

`gpg --delete-key <key-id>` — Löscht einen öffentlichen Schlüssel.

```bash
gpg --delete-key john@example.com
```

`gpg --delete-secret-key <key-id>` — Löscht einen privaten Schlüssel — unwiderruflich, lege vorher unbedingt ein Backup an.

```bash
gpg --delete-secret-key john@example.com
```

`gpg --edit-key <key-id>` — Bearbeitet Schlüssel-Eigenschaften (Trust, Ablaufdatum usw.).

```bash
gpg --edit-key john@example.com
```

## Export & Import

`gpg --export -a <key-id> > <file>` — Exportiert einen öffentlichen Schlüssel im ASCII-Armor-Format.

```bash
gpg --export -a john@example.com > john-public.asc
```

`gpg --export-secret-keys -a <key-id> > <file>` — Exportiert einen privaten Schlüssel (zum Backup) — niemals weitergeben und nur sicher bzw. verschlüsselt verwahren.

```bash
gpg --export-secret-keys -a john@example.com > john-private.asc
```

`gpg --import <file>` — Importiert einen Schlüssel aus einer Datei.

```bash
gpg --import colleague-public.asc
```

`gpg --keyserver <server> --send-keys <key-id>` — Lädt einen öffentlichen Schlüssel auf einen Keyserver hoch.

```bash
gpg --keyserver keys.openpgp.org --send-keys ABCD1234
```

`gpg --keyserver <server> --recv-keys <key-id>` — Lädt einen Schlüssel von einem Keyserver herunter.

```bash
gpg --keyserver keys.openpgp.org --recv-keys ABCD1234
```

`gpg --search-keys '<query>'` — Sucht Schlüssel auf einem Keyserver.

```bash
gpg --keyserver keys.openpgp.org --search-keys 'john@example.com'
```

## Ver- und Entschlüsseln

`gpg -e -r <recipient> <file>` — Verschlüsselt eine Datei für einen Empfänger.

```bash
gpg -e -r john@example.com secret.txt
```

`gpg -e -r <recipient> -a <file>` — Verschlüsselt mit ASCII-Armor-Ausgabe (textsicher).

```bash
gpg -e -r john@example.com -a secret.txt
```

`gpg -e -r <r1> -r <r2> <file>` — Verschlüsselt für mehrere Empfänger.

```bash
gpg -e -r john@example.com -r jane@example.com secret.txt
```

`gpg -d <file>` — Entschlüsselt eine Datei.

```bash
gpg -d secret.txt.gpg > secret.txt
```

`gpg -c <file>` — Symmetrische Verschlüsselung (passwortbasiert, ohne Schlüssel).

```bash
gpg -c backup.tar.gz
```

`gpg -d <file>.gpg` — Entschlüsselt eine symmetrisch verschlüsselte Datei.

```bash
gpg -d backup.tar.gz.gpg > backup.tar.gz
```

## Signieren & Verifizieren

`gpg -s <file>` — Erstellt eine signierte (binäre) Datei.

```bash
gpg -s document.pdf
```

`gpg --detach-sign <file>` — Erstellt eine separate Signaturdatei (detached).

```bash
gpg --detach-sign release.tar.gz
```

`gpg --clearsign <file>` — Erstellt eine Klartext-Signatur (lesbar + signiert).

```bash
gpg --clearsign message.txt
```

`gpg -se -r <recipient> <file>` — Signiert und verschlüsselt eine Datei.

```bash
gpg -se -r john@example.com secret.txt
```

`gpg --verify <signature> <file>` — Verifiziert eine separate (detached) Signatur.

```bash
gpg --verify release.tar.gz.sig release.tar.gz
```

`gpg --verify <file>` — Verifiziert eine signierte Datei.

```bash
gpg --verify message.txt.asc
```

## Häufige Muster

`echo '<text>' | gpg -e -r <recipient> -a` — Verschlüsselt Text von stdin.

```bash
echo 'secret password' | gpg -e -r john@example.com -a
```

`gpg --list-keys --keyid-format long` — Listet Schlüssel mit langen Key-IDs auf (für Git-Signierung).

```bash
gpg --list-keys --keyid-format long
```

`tar czf - <dir> | gpg -c -o <file>` — Erstellt ein verschlüsseltes Archiv.

```bash
tar czf - secrets/ | gpg -c -o secrets.tar.gz.gpg
```

`gpg -d <file>.gpg | tar xzf -` — Entschlüsselt und entpackt ein verschlüsseltes Archiv.

```bash
gpg -d secrets.tar.gz.gpg | tar xzf -
```

<!-- PROSE:outro -->
## Fazit

GnuPG ist seit Jahrzehnten das Rückgrat von OpenPGP und überall dort gesetzt, wo Vertraulichkeit und nachweisbare Echtheit zählen — von signierten Software-Releases bis zu verschlüsselten Backups. Der Einstieg über die Kommandozeile wirkt zunächst sperrig, doch die wenigen Kernbefehle für Erzeugen, Verschlüsseln und Signieren sitzen schnell. Sichere deinen privaten Schlüssel mit Backup und Widerrufszertifikat ab, dann begleitet dich dasselbe Schlüsselpaar über Jahre.

## Weiterführende Links

- [GnuPG — offizielle Dokumentation](https://www.gnupg.org/documentation/) — Handbücher und Howtos (englisch)
- [GNU Privacy Guard – Wikipedia](https://de.wikipedia.org/wiki/GNU_Privacy_Guard)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [age](https://www.jpkc.com/db/cheatsheets/security/age/) – moderne, einfache Datei-Verschlüsselung als GPG-Alternative
- [clamav](https://www.jpkc.com/db/cheatsheets/security/clamav/) – Open-Source-Virenscanner für Dateien und Mails
- [fail2ban](https://www.jpkc.com/db/cheatsheets/security/fail2ban/) – sperrt Angreifer nach fehlgeschlagenen Login-Versuchen

