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.deSchlü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.ascSchlü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 KEYIDSchlü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 beendenDateien 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.gpgAsymmetrisch (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.txtASCII-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.ascSignatur prüfen
# Integrierte Signatur
gpg --verify datei.txt.gpg
# Detached Signatur
gpg --verify datei.txt.sig datei.txtSignieren und Verschlüsseln
gpg -s -e -r empfaenger@example.de datei.txtPraktische 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.deGit-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-signatureAPT-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 mainKeyserver
Schlüssel hochladen
gpg --keyserver keyserver.ubuntu.com --send-keys KEYID
gpg --keyserver hkps://keys.openpgp.org --send-keys KEYIDSchlüssel suchen
gpg --keyserver keyserver.ubuntu.com --search-keys email@example.deSchlüssel aktualisieren
gpg --keyserver keyserver.ubuntu.com --refresh-keysVertrauen (Web of Trust)
Schlüssel signieren
# Nach Verifikation
gpg --sign-key email@example.de
# Lokal (nicht exportierbar)
gpg --lsign-key email@example.deVertrauensstufen
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-supportAgent neustarten
gpgconf --kill gpg-agent
gpg-agent --daemonSSH-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.pubSicherheit
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 KEYIDZusammenfassung
| 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.