Skip to main content

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.