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.