GPG - Sicheren Schlüssel erstellen und Ordner verschlüsseln
GPG maximal hart: Schlüssel erstellen & kompletten Ordner sicher verschlüsseln
Warum diese Variante? Wir setzen auf ECC/Curve25519 (Ed25519/X25519), bevorzugen AES-256 und SHA-512, nutzen – wo möglich – AEAD/OCB (authentifizierte Verschlüsselung) und verstecken Dateinamen via Archivierung. So minimierst du Angriffsfläche und Metadaten-Leaks.
0) Vorbereitungen & Umgebung härten
# Moderne GnuPG-Version sicherstellen (2.2+ gut, 2.4+/2.5+ besser):
gpg --version
# Terminal-Integration, damit die Passphrase-Abfrage sauber ist:
export GPG_TTY=$(tty)
# Schreibrechte streng:
umask 077
mkdir -p ~/.gnupg && chmod 700 ~/.gnupg
Side Fact: umask 077 sorgt dafür, dass neu erzeugte Dateien/Backups standardmäßig nur für dich lesbar sind.
1) Sehr starken OpenPGP-Schlüssel erzeugen (ECC/Curve25519)
Nun musst du folgenden Befehl eingeben:
gpg --expert --full-generate-key
→ im Dialog „ECC und ECC“ wählen und dann Curve25519. Ergebnis: Ed25519-Signierschlüssel + X25519-(cv25519)-Verschlüsselungs-Subkey – kompakt, schnell, sehr stark.gpg --expert --full-generate-key
# Im Dialog:
# Typ: (9) ECC und ECC → Kurve: Curve25519
# Ablaufdatum: z.B. 2y (später verlängerbar)
# Name/E-Mail setzen
# lange, zufällige Passphrase vergeben
Side Fact: Diese Wahl ist Best-Practice und breit unterstützt.
1.1) Fingerprint notieren & Widerruf vorbereiten
gpg --list-keys
gpg --fingerprint "Dein Name"
# Widerrufszertifikat (offline aufbewahren!):
gpg --output revoke.asc --gen-revoke "Dein Name"
Side Fact: Das Widerrufszertifikat ist deine Notbremse bei Verlust/Kompromittierung.
2) GPG-Konfiguration hart setzen (Algorithmen & Leaks minimieren)
Jetzt trägst du starke Defaults ein – sinngemäß unser „--verysecure“ (den Schalter gibt es nicht); wir kombinieren geprüfte Optionen für maximale Sicherheit.
# ~/.gnupg/gpg.conf
personal-cipher-preferences AES256 AES192 AES
personal-digest-preferences SHA512 SHA384 SHA256
cert-digest-algo SHA512
no-emit-version
no-comments
# Optional: Empfänger-IDs verbergen (Anonymisierung):
throw-keyids
# Optional: AEAD/OCB erzwingen (moderne, authentifizierte Verschlüsselung):
# via CLI: --force-ocb (Alias --force-aead, aber --force-ocb ist aktuell bevorzugt)
Side Fact: throw-keyids/--hidden-recipient versteckt die Ziel-Key-IDs; no-emit-version spart triviale Fingerprinting-Infos ein.
2.1) Agent-Caching abstellen (streng, aber sicher)
# ~/.gnupg/gpg-agent.conf
no-allow-external-cache
default-cache-ttl 0
max-cache-ttl 0
pinentry-timeout 0
# Agent neu laden:
gpgconf --reload gpg-agent
Hinweis: Ohne Cache ist es lästiger, aber jede Nutzung erfordert die Passphrase.
3) Ordner verschlüsseln & Dateinamen verbergen (deterministisches Tar → GPG)
Nun musst du folgenden Befehl eingeben: Wir packen deterministisch, glätten Metadaten und verschlüsseln den Datenstrom direkt – Ergebnis:
.tar.gpg
.# Variablen
ORDNER="mein_geheimer_ordner"
EMPFAENGER="Dein Name <you@example.com>" # oder: 40-stelliger Fingerprint
OUT="mein_geheimer_ordner.tar.gpg"
# Maximale Härte (mit AEAD/OCB, GnuPG 2.4+/2.5+):
tar --sort=name \
--mtime='UTC 1970-01-01' \
--owner=0 --group=0 --numeric-owner \
-C "$(dirname "$ORDNER")" -cf - "$(basename "$ORDNER")" \
| gpg --encrypt \
--recipient "$EMPFAENGER" \
--cipher-algo AES256 \
--force-ocb \
--output "$OUT"
# Kompatibilitätsmodus (falls AEAD/OCB bei Gegenstellen Probleme macht):
# identisch, nur ohne --force-ocb
Side Fact: tar → gpg schützt Struktur & Dateinamen; --force-ocb aktiviert moderne AEAD-Sicherung der Integrität.
3.1) Optional: Empfänger verschleiern & Banner weglassen
# Anonymisierte Empfänger:
# ... | gpg --encrypt -R "$EMPFAENGER" --cipher-algo AES256 --force-ocb -o "$OUT"
# oder global via gpg.conf (throw-keyids/no-emit-version)
3.2) Erfolg prüfen (ohne zu entschlüsseln)
gpg --list-packets "$OUT" | sed -n '1,30p'
3.3) Klartext beseitigen (mit Bedacht auf SSD)
# HDD:
shred -vzun 3 -r -- "$ORDNER"
# SSD/CoW-FS (btrfs,zfs): shred unzuverlässig → Vollverschlüsselung (LUKS) nutzen.
Wichtig: Auf SSDs sichert Voll-Disk-Verschlüsselung die Persistenz-Reste besser als Datei-Shredding.
4) Entschlüsseln & auspacken
gpg --output ordner.tar --decrypt mein_geheimer_ordner.tar.gpg
tar -xf ordner.tar
Side Fact: Hybrid: Zufalls-Session-Key (AES-256) verschlüsselt die Daten; dieser wird für deinen Public Key verpackt.
5) Alternative: gpgtar
(Archivieren + Verschlüsseln in einem)
Nun musst du folgenden Befehl eingeben:
gpgtar
erledigt beides in einem Schritt.# Direkt verschlüsseltes Archiv (Dateinamen verborgen):
gpgtar --encrypt --recipient "$EMPFAENGER" --output geheim.gpg "$ORDNER"
# Entschlüsseln & auspacken:
gpgtar --decrypt --output entpackt "$PWD/geheim.gpg"
6) Zusätzliche Härtung (wenn „maximal“ wirklich maximal sein soll)
- Hardware-Token (YubiKey/Smartcard): Private Keys aufs Token; Schlüsselmaterial verlässt nie den Rechner.
- Primärschlüssel offline: Mit Subkeys arbeiten; Primärschlüssel nur offline sichern.
- Passphrase-Qualität: 6–8+ Diceware-Wörter oder 20–30+ zufällige Zeichen aus einem Passwort-Manager.
- Key-Rotation & Ablauf: Ablauf setzen (1–2 Jahre) und regelmäßig verlängern/rotieren; Widerrufszertifikat testen.
- ASCII-Armor nur bei Bedarf: Für Binär-Workflows Armor weglassen.
7) Schnellreferenz (kopieren, anpassen, fertig)
# Schlüssel erstellen (interaktiv, Curve25519):
gpg --expert --full-generate-key
# Ordner → deterministisches Tar → GPG (mit AEAD/OCB):
tar --sort=name --mtime='UTC 1970-01-01' --owner=0 --group=0 --numeric-owner \
-C "$(dirname "$ORDNER")" -cf - "$(basename "$ORDNER")" \
| gpg --encrypt --recipient "$EMPFAENGER" --cipher-algo AES256 --force-ocb -o "$OUT"
# Entschlüsseln:
gpg -o ordner.tar -d "$OUT" && tar -xf ordner.tar
# gpgtar-Variante:
gpgtar --encrypt -r "$EMPFAENGER" -o geheim.gpg "$ORDNER"
gpgtar --decrypt -o entpackt geheim.gpg
Kompatibilitätsnotiz: Wenn eine Gegenstelle sehr alt ist, --force-ocb
weglassen (klassisches MDC statt AEAD). Für lokale Backups bleib bei OCB.