Symmetrische Verschlüsselung ist das Arbeitstier der modernen Kryptografie – schnell, effizient, für große Datenmengen geeignet. Ihr begegnet ihr in jedem HTTPS-Request, jeder VPN-Verbindung und jeder verschlüsselten Festplatte. Das Schlüsseltauschproblem, das dabei entsteht, löst Block 03.
Nach diesem Block könnt ihr:
- das Grundprinzip symmetrischer Verschlüsselung erklären (ein Schlüssel für Ver- und Entschlüsselung)
- Blockchiffre und Stromchiffre unterscheiden
- erklären, warum ECB unsicher ist und GCM empfohlen wird
- AES, ChaCha20, DES und 3DES einordnen (sicher / veraltet / gebrochen)
- eine Datei mit OpenSSL symmetrisch ver- und entschlüsseln
- erklären, warum ein Passwort kein Schlüssel ist und was eine KDF tut
Grundprinzip
Bei symmetrischer Verschlüsselung gibt es einen einzigen Schlüssel, der sowohl zum Verschlüsseln als auch zum Entschlüsseln verwendet wird. Sender und Empfänger müssen denselben Schlüssel kennen.
Sender Empfänger
│ │
│ Klartext + Schlüssel K │
│ ↓ │
│ Verschlüsseln → Geheimtext ───────►│
│ │ Geheimtext + Schlüssel K
│ │ ↓
│ │ Entschlüsseln → Klartext
Stärken:
- Sehr schnell – auch für große Datenmengen geeignet
- Geringer Rechenaufwand
- Einfaches Konzept
Schwächen:
- Das Schlüsseltauschproblem: Wie bekommt der Empfänger den Schlüssel, ohne dass ein Angreifer ihn abfängt? Wenn der Kanal unsicher ist (und das ist er meistens), kann man den Schlüssel nicht einfach verschicken.
- Skalierungsproblem: Bei n Kommunikationspartnern braucht jeder mit jedem einen eigenen Schlüssel → n*(n-1)/2 Schlüssel. Bei 1000 Partnern: fast 500.000 Schlüssel.
Das Schlüsseltauschproblem ist das fundamentale Dilemma der symmetrischen Verschlüsselung. Es klingt unlösbar – und war es lange. Block 03 löst es.
Blockchiffren vs. Stromchiffren
Symmetrische Verfahren teilen sich grundlegend in zwei Typen:
Blockchiffre: Verschlüsselt Daten in festen Blöcken (z.B. immer 128 Bit auf einmal). AES ist eine Blockchiffre.
Stromchiffre: Verschlüsselt byteweise oder bitweise, kontinuierlich. Schneller für Streams. ChaCha20 ist eine moderne Stromchiffre.
XOR – die Grundoperation der Verschlüsselung
Bevor es um Betriebsmodi geht, muss man eine Operation kennen, die in fast jedem Verschlüsselungsverfahren steckt: XOR (Exklusiv-Oder).
XOR vergleicht zwei Bits und gibt 1 zurück, wenn die Bits unterschiedlich sind:
A XOR B
0 1 1
1 0 1
─────
1 1 0
Das Entscheidende: XOR ist seine eigene Umkehrung. Wenn man denselben Schlüssel zweimal anwendet, bekommt man den Klartext zurück:
Klartext: 01001000 ("H")
Schlüssel: 11010010
────────── XOR
Geheimtext: 10011010
Geheimtext: 10011010
Schlüssel: 11010010
────────── XOR
Klartext: 01001000 ("H") ← Original wiederhergestellt
Dieses Prinzip steckt in jeder symmetrischen Verschlüsselung. XOR allein mit einem kurzen Schlüssel ist unsicher (das wäre nur eine einfache XOR-Chiffre). Aber AES, ChaCha20 und alle modernen Verfahren verwenden XOR als einen Baustein innerhalb komplexer Rundenfunktionen, die den Schlüssel über viele Schritte mit den Daten verknüpfen.
Warum ist das relevant? Weil der Betriebsmodus CBC (gleich unten) genau auf XOR aufbaut: Jeder Block wird vor der Verschlüsselung mit dem vorherigen Geheimtextblock XOR-verknüpft. Ohne das Verständnis von XOR bleibt CBC ein Blackbox-Konzept.
Betriebsmodi von Blockchiffren
Eine Blockchiffre wie AES verschlüsselt immer genau einen Block. Für längere Daten braucht man einen Betriebsmodus, der festlegt wie die Blöcke miteinander verknüpft werden:
ECB (Electronic Codebook) – niemals verwenden: Jeder Block wird unabhängig verschlüsselt. Gleiche Klartextblöcke erzeugen gleiche Geheimtextblöcke. Muster im Klartext bleiben im Geheimtext erkennbar.
Block1 → Encrypt → CipherBlock1
Block2 → Encrypt → CipherBlock2 ← Wenn Block1 == Block2, dann CipherBlock1 == CipherBlock2
Das „AES-ECB Pinguin”-Problem: Ein Bild des Linux-Maskottchens Tux, mit ECB verschlüsselt, ist immer noch als Pinguin erkennbar – weil gleiche Pixelblöcke gleiche Geheimtextblöcke erzeugen. ECB ist kein schwaches Verfahren – es ist kaputt by design. Wer ECB produktiv einsetzt, hat den Betriebsmodus nicht verstanden.
CBC (Cipher Block Chaining) – weit verbreitet: Jeder Block wird vor der Verschlüsselung mit dem vorherigen Geheimtextblock XOR-verknüpft. Gleiche Klartextblöcke erzeugen unterschiedliche Geheimtextblöcke. Braucht einen zufälligen Initialisierungsvektor (IV) für den ersten Block.
Initialisierungsvektor (IV): Da CBC jeden Block mit dem vorherigen verknüpft, braucht der erste Block eine Art „vorherigen Block” als Startwert. Das ist der IV – eine zufällig generierte Zahl, die zusammen mit dem Geheimtext übertragen wird (sie muss kein Geheimnis sein, aber muss für jede Verschlüsselung neu und zufällig sein). Wird derselbe IV mit demselben Schlüssel zweimal verwendet, entstehen identische Geheimtextanfänge – ein Angreifer kann Muster erkennen.
Klartext-Block 1 XOR IV → AES → Geheimtext-Block 1
Klartext-Block 2 XOR Geheimtext-Block 1 → AES → Geheimtext-Block 2
...
GCM (Galois/Counter Mode) – modern, empfohlen: Kombiniert Verschlüsselung mit Authentifizierung (AEAD – Authenticated Encryption with Associated Data). Stellt sicher, dass Daten nicht nur geheim, sondern auch unverändert sind. Wird in TLS 1.3 verwendet.
Wichtige symmetrische Algorithmen
Nicht alle Algorithmen sind gleich sicher oder gleich geeignet. Hier die Verfahren, auf die ihr in der Praxis treffen werdet – und die ihr einordnen können müsst.
AES (Advanced Encryption Standard) Der aktuelle Standard für symmetrische Verschlüsselung, seit 2001 vom NIST standardisiert. Blockgröße 128 Bit, Schlüssellängen 128, 192 oder 256 Bit. Hardwarebeschleunigung in modernen CPUs (AES-NI). Wird verwendet in: TLS, VPNs, Festplattenverschlüsselung, WLAN (WPA2/3).
ChaCha20-Poly1305 Moderne Stromchiffre, entwickelt von Daniel J. Bernstein. Besonders schnell auf Geräten ohne AES-Hardwarebeschleunigung (Mobile, IoT). In TLS 1.3 als Alternative zu AES-GCM. Poly1305 ist der zugehörige Authentifizierungscode.
3DES (Triple DES) – veraltet Dreifache Anwendung des alten DES-Algorithmus. Langsam, Blockgröße nur 64 Bit (anfällig für SWEET32-Angriff). Nicht mehr verwenden.
DES (Data Encryption Standard) – gebrochen 56-Bit-Schlüssel, 1999 in unter 24 Stunden geknackt. Nur noch historisch relevant.
Schlüsselableitung – KDF und PBKDF2
Ein Verschlüsselungsalgorithmus wie AES erwartet einen Schlüssel mit exakt der richtigen Länge (z.B. 256 Bit). Ein vom Nutzer eingegebenes Passwort ist aber kein Schlüssel – es ist zu kurz, zu vorhersehbar und hat nicht die richtige Länge.
Eine Key Derivation Function (KDF) wandelt ein Passwort in einen kryptografisch geeigneten Schlüssel um:
Passwort + Salt → KDF → Schlüssel mit gewünschter Länge
"MeinPasswort" + Salt → PBKDF2 → 256-Bit-AES-Schlüssel
PBKDF2 (Password-Based Key Derivation Function 2): Wendet eine Hash-Funktion (z.B. HMAC-SHA256) viele tausend Male auf das Passwort an. Das macht die Ableitung absichtlich langsam und erschwert Brute-Force-Angriffe. Der -pbkdf2-Flag bei OpenSSL aktiviert genau das.
Ohne PBKDF2: Passwort → direkt als Schlüssel verwendet → unsicher
Mit PBKDF2: Passwort → 600.000 Iterationen HMAC-SHA256 → sicherer Schlüssel
Merke: Immer
-pbkdf2bei OpenSSLencverwenden. Ohne diesen Flag wird ein veraltetes, unsicheres Verfahren genutzt. Und:3DESundDESignoriert ihr – die tauchen höchstens in Fragen zur Geschichte der Kryptografie auf.
Typischer Denkfehler
„Mein Passwort ist der Schlüssel.” – Nein. Ein Passwort wie
MeinHund2024hat weder die richtige Länge noch genügend Entropie für einen AES-Schlüssel. Ein AES-256-Schlüssel besteht aus 256 zufälligen Bits. Deshalb braucht man eine KDF (siehe oben), die aus dem Passwort einen kryptografisch geeigneten Schlüssel ableitet. Wenn ihropenssl encohne-pbkdf2nutzt, wird das Passwort unsicher direkt als Schlüssel verwendet – ein häufiger Fehler in der Praxis.
Symmetrische Verschlüsselung mit OpenSSL
# OpenSSL ist auf den meisten Linux-Systemen vorinstalliert
openssl version
# Datei symmetrisch verschlüsseln mit AES-256-CBC
openssl enc -aes-256-cbc -in klartext.txt -out geheimtext.enc -pbkdf2
# -aes-256-cbc: Algorithmus und Modus
# -in: Eingabedatei
# -out: Ausgabedatei
# -pbkdf2: Schlüsselableitung (sicherer als Standard)
# → Passwort wird interaktiv abgefragt
# Datei entschlüsseln
openssl enc -d -aes-256-cbc -in geheimtext.enc -out klartext_neu.txt -pbkdf2
# -d: decrypt
# Mit explizitem Passwort (nur für Tests, im Produktivbetrieb unsicher!)
openssl enc -aes-256-cbc -in klartext.txt -out geheimtext.enc -pbkdf2 -pass pass:MeinPasswort123
# Base64-Ausgabe statt Binärdatei (z.B. für E-Mail)
openssl enc -aes-256-cbc -in klartext.txt -out geheimtext.b64 -pbkdf2 -a
# -a: ASCII/Base64-Ausgabe
# Verfügbare Algorithmen anzeigen
openssl enc -list
# Hashing mit OpenSSL
openssl dgst -sha256 datei.txt # SHA-256 Hash einer Datei
openssl dgst -sha512 datei.txt # SHA-512
openssl dgst -md5 datei.txt # MD5 (nur für Checksums, nicht sicherheitskritisch)
# Hash direkt von Text
echo -n "Hallo Welt" | openssl dgst -sha256
# Prüfen ob zwei Dateien identisch sind
openssl dgst -sha256 datei1.txt datei2.txt
# Gleiche Hashes → identische Inhalte
Probiert es selbst:
- Erstellt eine Textdatei:
echo "Geheime Nachricht" > nachricht.txt- Verschlüsselt sie:
openssl enc -aes-256-cbc -in nachricht.txt -out nachricht.enc -pbkdf2- Versucht, die verschlüsselte Datei zu lesen:
cat nachricht.enc– was seht ihr?- Entschlüsselt sie:
openssl enc -d -aes-256-cbc -in nachricht.enc -out nachricht_neu.txt -pbkdf2- Vergleicht Original und Ergebnis:
diff nachricht.txt nachricht_neu.txt– keine Ausgabe = identisch- Berechnet den SHA-256-Hash beider Dateien und vergleicht – stimmen sie überein?
Zusammenfassung
- Symmetrische Verschlüsselung nutzt einen gemeinsamen Schlüssel für Ver- und Entschlüsselung – schnell, aber mit Schlüsseltauschproblem
- AES-256-GCM ist der empfohlene Standard; ECB ist unsicher, CBC akzeptabel, GCM modern
- ChaCha20-Poly1305 ist die Alternative für Geräte ohne AES-Hardwarebeschleunigung
- DES und 3DES sind veraltet/gebrochen – nie produktiv einsetzen
- Ein Passwort ist kein Schlüssel – eine KDF (PBKDF2) leitet aus dem Passwort einen sicheren Schlüssel ab
Selbsttest
- Erklärt in einem Satz, warum ECB unsicher ist, obwohl es AES verwendet.
- Was ist der Unterschied zwischen einer Blockchiffre und einer Stromchiffre? Nennt je ein Beispiel.
- Warum braucht CBC einen Initialisierungsvektor (IV), und was passiert, wenn derselbe IV zweimal verwendet wird?
Wie geht es weiter?
Symmetrische Verschlüsselung ist schnell und sicher – aber wie bekommt der Empfänger den Schlüssel, ohne dass ein Angreifer mithört? Dieses fundamentale Dilemma löst Block 03 mit asymmetrischer Kryptografie: Schlüsselpaaren, bei denen der öffentliche Teil frei verteilt werden kann.