GPG (GNU Privacy Guard) ist das Standard-Tool für Verschlüsselung und digitale Signaturen unter Linux. Es implementiert den OpenPGP-Standard für sichere Kommunikation.
Schlüsselverwaltung
Schlüsselpaar erstellen
# Interaktiv
gpg --full-generate-key
# Schnell (RSA 3072)
gpg --quick-generate-key "Name <email@example.de>"
# Empfohlene Optionen:
# - RSA oder ECC (Elliptic Curve)
# - 4096 Bit (RSA) oder Ed25519 (ECC)
# - Ablaufdatum setzen (1-2 Jahre)
Schlüssel auflisten
# Öffentliche Schlüssel
gpg --list-keys
gpg -k
# Private Schlüssel
gpg --list-secret-keys
gpg -K
# Mit Fingerprint
gpg --fingerprint email@example.de
Schlüssel exportieren
# Öffentlichen Schlüssel
gpg --export -a "email@example.de" > public.asc
gpg --armor --export email@example.de
# Privaten Schlüssel (Backup!)
gpg --export-secret-keys -a "email@example.de" > private.asc
Schlüssel importieren
# Öffentlichen Schlüssel
gpg --import public.asc
# Von Keyserver
gpg --keyserver keyserver.ubuntu.com --recv-keys KEYID
gpg --keyserver hkps://keys.openpgp.org --recv-keys KEYID
Schlüssel löschen
# Öffentlichen Schlüssel
gpg --delete-key "email@example.de"
# Privaten Schlüssel
gpg --delete-secret-key "email@example.de"
Schlüssel bearbeiten
gpg --edit-key "email@example.de"
# Befehle:
# passwd - Passwort ändern
# expire - Ablaufdatum ändern
# adduid - User-ID hinzufügen
# trust - Vertrauen setzen
# sign - Schlüssel signieren
# save - Speichern und beenden
Dateien verschlüsseln
Symmetrisch (mit Passwort)
# Verschlüsseln
gpg -c datei.txt
# Ergebnis: datei.txt.gpg
# Mit Algorithmus-Wahl
gpg -c --cipher-algo AES256 datei.txt
# Entschlüsseln
gpg -d datei.txt.gpg > datei.txt
gpg datei.txt.gpg
Asymmetrisch (mit Schlüssel)
# Für Empfänger verschlüsseln
gpg -e -r empfaenger@example.de datei.txt
# Für mehrere Empfänger
gpg -e -r user1@example.de -r user2@example.de datei.txt
# Auch für sich selbst lesbar
gpg -e -r empfaenger@example.de -r mich@example.de datei.txt
# Entschlüsseln
gpg -d datei.txt.gpg > datei.txt
ASCII-Ausgabe
# Für E-Mail-Versand
gpg -a -e -r empfaenger@example.de datei.txt
# Ergebnis: datei.txt.asc (Textdatei)
Signieren
Datei signieren
# Separate Signatur
gpg --sign datei.txt
# Ergebnis: datei.txt.gpg
# Klartext-Signatur
gpg --clearsign datei.txt
# Ergebnis: datei.txt.asc
# Detached Signatur
gpg --detach-sign datei.txt
# Ergebnis: datei.txt.sig
# Detached + ASCII
gpg -a --detach-sign datei.txt
# Ergebnis: datei.txt.asc
Signatur prüfen
# Integrierte Signatur
gpg --verify datei.txt.gpg
# Detached Signatur
gpg --verify datei.txt.sig datei.txt
Signieren und Verschlüsseln
gpg -s -e -r empfaenger@example.de datei.txt
Praktische Anwendungen
Backup verschlüsseln
#!/bin/bash
# backup-encrypt.sh
BACKUP_DIR="/backup"
DATE=$(date +%Y%m%d)
RECIPIENT="admin@example.de"
# Backup erstellen und verschlüsseln
tar -czf - /var/www | gpg -e -r $RECIPIENT > $BACKUP_DIR/www-$DATE.tar.gz.gpg
# Entschlüsseln
gpg -d $BACKUP_DIR/www-$DATE.tar.gz.gpg | tar -xzf -
Passwort-Manager (pass)
# Installation
apt install pass
# Initialisieren
pass init "email@example.de"
# Passwort speichern
pass insert website/example.de
# Passwort anzeigen
pass website/example.de
# In Zwischenablage (45 Sekunden)
pass -c website/example.de
Git-Commits signieren
# GPG-Key für Git
git config --global user.signingkey KEYID
git config --global commit.gpgsign true
# Commit signieren
git commit -S -m "Signierter Commit"
# Signaturen prüfen
git log --show-signature
APT-Repository signieren
# Key für APT
gpg --armor --export KEYID > /usr/share/keyrings/myrepo.asc
# In sources.list
deb [signed-by=/usr/share/keyrings/myrepo.asc] https://repo.example.de stable main
Keyserver
Schlüssel hochladen
gpg --keyserver keyserver.ubuntu.com --send-keys KEYID
gpg --keyserver hkps://keys.openpgp.org --send-keys KEYID
Schlüssel suchen
gpg --keyserver keyserver.ubuntu.com --search-keys email@example.de
Schlüssel aktualisieren
gpg --keyserver keyserver.ubuntu.com --refresh-keys
Vertrauen (Web of Trust)
Schlüssel signieren
# Nach Verifikation
gpg --sign-key email@example.de
# Lokal (nicht exportierbar)
gpg --lsign-key email@example.de
Vertrauensstufen
gpg --edit-key email@example.de
> trust
# 1 = Weiß nicht
# 2 = Vertraue nicht
# 3 = Marginales Vertrauen
# 4 = Volles Vertrauen
# 5 = Absolutes Vertrauen (eigene Keys)
gpg-agent
Konfiguration
# ~/.gnupg/gpg-agent.conf
default-cache-ttl 600
max-cache-ttl 7200
enable-ssh-support
Agent neustarten
gpgconf --kill gpg-agent
gpg-agent --daemon
SSH-Keys mit GPG
# Authentication-Subkey erstellen
gpg --edit-key KEYID
> addkey
# (A) Authentication wählen
# SSH-Key exportieren
gpg --export-ssh-key KEYID > ~/.ssh/gpg-auth.pub
Sicherheit
Best Practices
# Starkes Passwort verwenden
# Backup des privaten Schlüssels
# Ablaufdatum setzen
# Widerrufszertifikat erstellen
gpg --gen-revoke KEYID > revoke.asc
# Sicher aufbewahren!
Schlüssel widerrufen
# Widerrufszertifikat importieren
gpg --import revoke.asc
# Auf Keyserver hochladen
gpg --keyserver keyserver.ubuntu.com --send-keys KEYID
Zusammenfassung
| Befehl | Funktion |
|---|
| gpg --gen-key | Schlüssel erstellen |
| gpg -e -r | Verschlüsseln |
| gpg -d | Entschlüsseln |
| gpg -s | Signieren |
| gpg --verify | Signatur prüfen |
| gpg -k | Schlüssel auflisten |
| Option | Bedeutung |
|---|
| -a, --armor | ASCII-Ausgabe |
| -r | Empfänger |
| -c | Symmetrisch |
| -e | Verschlüsseln |
| -d | Entschlüsseln |
| -s | Signieren |
| Datei | Funktion |
|---|
| ~/.gnupg/pubring.kbx | Öffentliche Schlüssel |
| ~/.gnupg/private-keys-v1.d/ | Private Schlüssel |
| ~/.gnupg/gpg.conf | Konfiguration |
Fazit
GPG ist essentiell für sichere Kommunikation und Datenspeicherung. Asymmetrische Verschlüsselung ermöglicht sicheren Schlüsselaustausch. Digitale Signaturen verifizieren Authentizität. Regelmäßige Backups des privaten Schlüssels sind wichtig. Mit pass wird GPG zum praktischen Passwort-Manager.