Skip to main content

GPG - Sicheren Schlüssel erstellen und Ordner verschlüsseln

GPG: Starker Schlüssel + kompletten Ordner sicher verschlüsseln

0) Voraussetzungen prüfen

gpg --version
# GnuPG 2.2+ oder 2.4+ empfohlen
# (Optional) Terminal-Setup:
export GPG_TTY=$(tty)
Side Fact: Moderne GnuPG-Versionen wählen bereits starke Defaults. GPG_TTY sorgt dafür, dass die Passphrase-Abfrage im Terminal sauber funktioniert.

1) Sehr starken Schlüssel erzeugen (ECC/Curve25519)

# Interaktiver Weg (empfohlen):
gpg --expert --full-generate-key
# Auswahl im Dialog:
#   (9) ECC und ECC
#   dann: Curve 25519
#   Gültigkeit: z.B. 2y (verlängerbar)
#   Name/E-Mail setzen
#   starke Passphrase vergeben (lang, zufällig)
Side Fact: Curve25519 erzeugt primär einen Ed25519-Signierschlüssel + einen X25519-(Cv25519)-Verschlüsselungs-Subkey. Das ist aktuell das Best-Practice-Setup: schnell, kurz, sehr sicher.

1.1) Key anzeigen & Fingerprint notieren

gpg --list-keys
gpg --fingerprint "Dein Name"  # 40-stelliger Fingerprint; den notieren
Side Fact: Beim Verschlüsseln mit --recipient ist es am sichersten, den Fingerprint oder die komplette E-Mail zu verwenden, damit garantiert dein Schlüssel trifft.

2) (Optional) Krypto-Preferences harten

# In ~/.gnupg/gpg.conf (falls Datei nicht existiert, neu anlegen)
# -- sichere, moderne Präferenzen:
personal-cipher-preferences AES256 AES192 AES
personal-digest-preferences SHA512 SHA384 SHA256
cert-digest-algo SHA512

# Agent neu laden:
gpgconf --reload gpg-agent
Side Fact: AES-256 ist ein sehr starker Blockcipher. Für Hashes ist SHA-1 veraltet; nutze SHA-512/256 (Familie SHA-2).

3) Einen kompletten Ordner inkl. Dateinamen verschlüsseln

# Variablen:
ORDNER="mein_geheimer_ordner"
EMPFAENGER="Dein Name <you@example.com>"   # oder der 40-stellige Fingerprint
OUT="mein_geheimer_ordner.tar.gpg"

# 3.1: Ordner als TAR in den Standard-Output schreiben (ohne Metadaten-Leaks) und an gpg pipen:
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 \
      --output "$OUT"
Side Fact: tar vor gpg schützt Dateinamen und Ordnerstruktur. --sort=name & --mtime reduzieren Metadaten-Leaks. --cipher-algo AES256 erzwingt sehr starke Verschlüsselung.

3.2) Erfolg prüfen (ohne zu entschlüsseln)

# Prüfen, dass die Datei wirklich für deinen Schlüssel bestimmt ist:
gpg --list-packets "$OUT" | sed -n '1,20p'  # zeigt Empfänger-IDs / Algorithmen

3.3) (Optional) Klartext sicher entfernen

# Nur wenn du ein klassisches HDD-Dateisystem nutzt:
shred -vzun 3 -r -- "$ORDNER"   # ACHTUNG: auf SSDs nicht zuverlässig!

# Besser auf SSD: vorab Full-Disk-Encryption nutzen oder das ganze Verzeichnis
# in ein bereits verschlüsseltes Volume legen (z.B. LUKS/cryptsetup).
Wichtig: shred ist auf SSDs und Copy-on-Write-Dateisystemen (btrfs, zfs) nicht zuverlässig. Für maximale Sicherheit: System/Partition mit LUKS verschlüsseln und sensible Daten dort ablegen.

4) Entschlüsseln & auspacken

# 4.1: Entschlüsseln (fragt nach deiner Passphrase):
gpg --output mein_geheimer_ordner.tar --decrypt mein_geheimer_ordner.tar.gpg

# 4.2: Auspacken:
tar -xf mein_geheimer_ordner.tar
Side Fact: GPG nutzt für jede Datei eine zufällige Sitzungsschlüssel-AES-Verschlüsselung und verschlüsselt diesen Session Key asymmetrisch für deinen Public Key.

5) Alternative: Jedes File im Ordner einzeln verschlüsseln

# Achtung: Dateinamen bleiben sichtbar. Nutze das nur, wenn du bewusst pro Datei .gpg willst.
ORDNER="mein_geheimer_ordner"
EMPFAENGER="Dein Name <you@example.com>"

find "$ORDNER" -type f -print0 | while IFS= read -r -d '' f; do
  gpg --yes --encrypt --recipient "$EMPFAENGER" --cipher-algo AES256 --output "$f.gpg" "$f"
  # (Optional) Originaldatei entfernen – s. Hinweise zu SSD/HDD oben:
  # shred -vzun 3 -- "$f"   # auf HDD ok, auf SSD unsicher
done

6) Schlüssel-Backup & Vertrauensstufe

# Public Key exportieren (zum Teilen):
gpg --armor --export "$EMPFAENGER" > publickey.asc

# Private Keys sichern (streng geheim, offline lagern!):
gpg --armor --export-secret-keys "$EMPFAENGER" > privatekey-backup.asc

# (Optional) Eigenen Key als "ultimativ" vertrauen:
gpg --edit-key "$EMPFAENGER"
gpg> trust
# Auswahl: 5 = ultimate
gpg> quit
Hinweis: privatekey-backup.ascStelle enthältsicher, deinendass geheimendu SchlüsselAdministratorrechte – niemals in Cloud/Versionierung ablegen. Am besten offline (USB im Safe) + sehr starke Passphrase.besitzt.

7) Extra-Härtung (optional, sehr empfehlenswert)

  • Smartcard/YubiKey: Private Keys auf Hardware-Token auslagern – Schlüsselmaterial verlässt nie das Gerät.
  • Passphrase-Qualität: Lange, zufällige Passphrase (z. B. Password-Manager, 6–8+ Diceware-Wörter oder 20–30+ Zeichen).
  • Key-Expiry: Keys mit Ablaufdatum (z. B. 1–2 Jahre) erstellen und rechtzeitig verlängern/rotieren.
  • Systemweit verschlüsseln: LUKS-Vollverschlüsselung für SSDs/HDDs, um Reste & Swap zu schützen.

8) Schnellreferenz

# Key erzeugen (interaktiv, Curve25519):
gpg --expert --full-generate-key

# Ordner als .tar.gpg (versteckt Dateinamen):
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 --output "$OUT"

# Entschlüsseln:
gpg -o ordner.tar -d ordner.tar.gpg && tar -xf ordner.tar
 Tipp für BookStack: Du kannst die <style>-Sektion oben weglassen, wenn euer Theme eigene Hinweisboxen hat.