DES, 3DES, RC4 und Blowfish von Grund auf erklärt
In einem Satz: Diese vier Chiffren waren die Arbeitspferde der 1990er — DES und seine Dreifach-Verschlüsselung 3DES, die Stromchiffre RC4 und Blowfish — und jede von ihnen ist heute ausgemustert oder veraltet; sie leben nur noch in alten Dateien, alter Hardware und alten Protokollen weiter, die gelesen werden müssen.
DES: der Standard von 1977, mit dem alles begann
Was es ist. Der Data Encryption Standard (FIPS 46, 1977) ist eine Feistel-Chiffre mit 16 Runden auf 64-Bit-Blöcken und einem 56-Bit-Schlüssel (gespeichert in 8 Byte, weil ein Bit jedes Bytes eine Paritätsprüfung ist). Er wurde von IBM unter Mitwirkung der NSA entworfen, war zwei Jahrzehnte lang der US-Standard und wurde 1998 faktisch gebrochen, als die Maschine Deep Crack der EFF einen Schlüssel in 56 Stunden mit Hardware für 250.000 US-Dollar durchprobierte. Das NIST hat ihn 2005 für die Verschlüsselung zurückgezogen.
Warum das Paritätsbit die Schlüssellängen verwirrt. Jedes achte Bit eines DES-Schlüssels wird aus den übrigen sieben berechnet; ein 8-Byte-Schlüssel enthält also nur 56 unabhängige Bit — deshalb liest man für dieselbe Chiffre sowohl „64-Bit-Schlüssel“ als auch „56-Bit-Schlüssel“. 3DES erbt das: 24 Rohbyte = 168 Rohbit = 112 effektive Bit (Meet-in-the-Middle entfernt den Rest).
Wo man ihm heute noch begegnet. Bei Bank-PIN-Blöcken (ISO 9564), einigen Kerberos-v4-Bereichen, alten Backup-Archiven und Chipkarten. Verlangt ein System heute noch DES, arbeitet es entweder mit Hardware aus den 1990ern zusammen oder ist schlicht unsicher.
3DES: verschlüsseln, entschlüsseln, verschlüsseln
Der Trick. Triple-DES führt DES dreimal über jeden Block aus: EDE3 verwendet drei verschiedene Schlüssel (C = Ek3(Dk2(Ek1(P)))); der Entschlüsselungsschritt in der Mitte existiert, damit eine 3DES-Implementierung einfaches DES nachbilden kann, indem sie k1=k2 setzt. EDE2 verwendet nur zwei Schlüssel (k1=k3) und liefert 112 effektive Bit. Die Konstruktion war eine schnelle Notlösung, die die Sicherheit einer bereits angegriffenen Chiffre verdreifachte, ohne eine neue zu erfinden.
Warum es trotzdem starb. Zwei Probleme: Es ist langsam (drei volle DES-Durchläufe pro Block, etwa ein Zwanzigstel der Geschwindigkeit von AES), und es behielt den 64-Bit-Block. Bei 32 GiB Daten unter einem Schlüssel (die Geburtstagsgrenze von 232 Blöcken) werden Blockkollisionen wahrscheinlich genug, um Klartextstrukturen preiszugeben — der Sweet32-Angriff (2016) zeigte dies gegen TLS-3DES-Sitzungen. Das NIST hat die 3DES-Verschlüsselung nach 2023 untersagt (SP 800-131A r2); der PCI-DSS verlangt seine Abschaltung in Zahlungssystemen.
RC4 / ARCFOUR: die Stromchiffre des frühen Webs
Wie es funktioniert. RC4 (Ron's Code 4, 1987 entworfen, 1994 veröffentlicht) ist eine Stromchiffre: Der Schlüssel erzeugt eine 256-Byte-Permutation (KSA), dann gibt die Permutation einen pseudozufälligen Bytestrom aus (PRGA), der per XOR mit der Nachricht verknüpft wird. Keine Auffüllung, keine Blockgröße, beliebige Nachrichtenlänge, in Software äußerst schnell — deshalb dominierte es in den 1990ern SSL/TLS und WEP. „ARCFOUR“ ist der markenfreie Name, den die meisten Open-Source-Projekte verwenden.
Wie es gebrochen wurde. Fluhrer, Mantin und Shamir (2001) zeigten, dass die ersten Bytes des Schlüsselstroms verzerrt sind — fatal bei WEP, dessen Schlüsselkonstruktion pro Paket genau diese Bytes Angreifern zugänglich machte. Spätere Verzerrungsangriffe (2013, AlFardan et al.) stellten Klartexte aus RC4-geschützten TLS-Sitzungen mit Millionen Verbindungen wieder her. RFC 7465 (2015) verbietet RC4 in TLS vollständig.
Der klassische Vektor. Der Schlüssel „Key“ (3 Byte) und die Nachricht „Plaintext“ ergeben das Chiffrat bbf316e8d940af0ad3 — probieren Sie das RC4-Beispiel aus und vergleichen Sie. Der Selbsttest dieser Seite prüft außerdem den Schlüsselstrom aus RFC 6229 für den 40-Bit-Schlüssel 01 02 03 04 05: b2396305f03dc027ccc3524a0a1118a8.
Blowfish: ungebrochen, aber blockbegrenzt
Was es ist. Bruce Schneiers Feistel-Chiffre aus dem Jahr 1993: 64-Bit-Blöcke, Schlüssel von 32 bis 448 Bit (4 bis 56 Byte), 16 Runden und ein bekannter Schlüsselplan, der Blowfish selbst 521-mal ausführt, um seine Teilschlüssel zu erzeugen — das macht die Schlüsselinitialisierung langsam, Brute-Force-Versuche aber ebenfalls teuer. Keine praktische Kryptoanalyse bricht Blowfish mit voller Rundenzahl.
Warum es trotzdem auf dieser Seite steht. Der 64-Bit-Block ist das Problem, nicht der Algorithmus: Jenseits von etwa 32 GiB unter einem Schlüssel verraten Geburtstagskollisionen Daten (dieselbe Grenze wie bei 3DES, Sweet32-artig). Schneier selbst empfiehlt für alles Neue seinen Nachfolger Twofish (ein AES-Finalist) oder AES. Blowfish lebt in bcrypt weiter — der Schlüsselplan des Passwort-Hashs ist Blowfish — was in Ordnung ist, weil Hashing winzige Eingaben verarbeitet, keine Gigabytes.
Die klassischen Vektoren. Ein durchgehend nullen Schlüssel und Klartext ergeben verschlüsselt 4ef997456198dd78 (erster Block der Ausgabe des Beispiels); der Schlüssel „abcdefghijklmnopqrstuvwxyz“ auf „BLOWFISH“ ergibt 324ed0fef413a203. Beide stammen aus Schneiers veröffentlichter Vektordatei und werden vom Selbsttest geprüft.
Häufige Fehler
- Diese für neue Daten verwenden. Jede Chiffre auf dieser Seite ist veraltet, mit Ausnahme von Blowfish (das durch die Blockgröße begrenzt ist). Die richtige moderne Wahl ist AES-GCM — siehe AES verschlüsseln / entschlüsseln.
- DES-Schlüssel aus einem Passwort. Ein 8-Zeichen-Passwort sind nicht 56 zufällige Bit; es sind einige wenige Bit Entropie pro Zeichen. Alte Systeme taten genau das, und es ist der häufigste Grund, warum „DES-verschlüsselte“ Archive in Minuten einem Wörterbuchangriff zum Opfer fallen.
- IV in CBC wiederverwenden. Der erste Block verrät dann die Gleichheit von Klartexten über Nachrichten hinweg unter demselben Schlüssel. Die Schaltfläche Zufälliger IV existiert aus gutem Grund.
- Einen RC4-Schlüsselstrom wiederverwenden. RC4 XORt für denselben Schlüssel immer denselben Schlüsselstrom: Zwei Nachrichten mit einem Schlüssel zu verschlüsseln ist ein Zwei-Mal-Einmalblock — die Chiffrate per XOR verknüpft, und beide Klartexte fallen heraus. Der fatale Fehler von WEP bestand genau in einer Konstruktion mit wiederverwendetem Schlüsselstrom.
- Annehmen, „es entschlüsselt sich, also stimmt es“. ECB/CBC prüfen hier beim Entschlüsseln nur die Auffüllung — ein falscher Schlüssel ergibt meist Datenmüll, der sich trotzdem entpacken lässt. In keinem Altmodus gibt es eine Integritätsprüfung; wenn Sie eine brauchen, benötigen Sie AES-GCM, nicht diese Verfahren.
- 3DES als „168-Bit“ zählen. Der rohe Schlüssel hat 168 Bit, die effektive Stärke aber 112 — Meet-in-the-Middle reduziert die Dreifachverschlüsselung auf eine Doppelverschlüsselung plus Zusatz, genau wie bei den Vorläuferkonstruktionen von 3DES.
FAQ
Warum überhaupt ein Werkzeug für eine gebrochene Chiffre? Kompatibilität. Verschlüsselte Backups, exportierte Dateien im alten Format, mitgeschnittene Protokollabläufe, CTF-Aufgaben und Hardware, die sich nicht aktualisieren lässt, sprechen all diese Chiffren noch. Alte Daten zu lesen ist legitim; mit ihnen neue Daten zu verschlüsseln nicht.
Mein DES-Schlüssel hat ungerade Parität / Nicht-ASCII-Bytes. DES ignoriert das Paritätsbit jedes Schlüsselbytes, der wirksame Schlüssel sind also in jedem Fall die übrigen 56 Bit. Diese Seite akzeptiert beliebige 8 Byte und erzwingt keine gerade Parität.
Warum sieht entschlüsselter Text manchmal wie Datenmüll aus? Falscher Schlüssel, falscher Modus, falscher IV oder die Daten wurden nicht so verschlüsselt, wie Sie annehmen. Ohne Authentifizierungs-Tag gibt es keine saubere Fehlermeldung „falscher Schlüssel“ — die Auffüllprüfung ist der einzige Hinweis, und sie kann zufällig bestehen (in 1 von 256 Fällen).
Ist Blowfish für meine Dateien sicher? Bei kleinen Dateien ja, kryptografisch (es gibt keinen praktischen Bruch). Bei allem im Gigabyte-Bereich unter einem einzigen Schlüssel nein — die Geburtstagsgrenze des 64-Bit-Blocks betrifft die Datenmenge, nicht die Schlüsselstärke. Twofish oder AES umgehen das Problem.
Was ist mit den 72-Byte-Blowfish-Schlüsseln, die ich irgendwo gesehen habe? Manche Implementierungen akzeptieren bis zu 72 Byte, doch Schneiers Referenz verwendet 56, und darüber hinausgehende Bytes bringen im Standard-Schlüsselplan keine zusätzliche Diffusion. Diese Seite folgt der Referenz: 4 bis 56 Byte.