Blowfish – Symmetrische Blockchiffre von Bruce Schneier (1993)

Blowfish (1993) von Bruce Schneier: schnelle, patentfreie symmetrische 64‑Bit‑Blockchiffre mit variablem Schlüssel bis 448 Bit – bewährt in Software, robust und weit verbreitet.

Autor: Leandro Alegsa

In der Kryptographie ist Blowfish eine verschlüsselte, symmetrische Blockchiffre, die 1993 von Bruce Schneier entwickelt wurde und seitdem in zahlreichen Verschlüsselungsprodukten eingesetzt wurde. Blowfish wurde als freier, nicht patentierter Allzweckalgorithmus entworfen und war besonders populär, weil viele damals verfügbare Algorithmen proprietär oder geheim waren. Schneier schrieb: „Blowfish ist nicht patentiert und wird es in allen Ländern bleiben. Der Algorithmus wird hiermit der Öffentlichkeit zugänglich gemacht und kann von jedermann frei verwendet werden.“

Design und Eigenschaften

Blowfish ist eine 16-Runden-Feistel-Chiffre (16-Runden-Feistel-Chiffre) mit einer Blockgröße von 64-Bit-Blockgröße. Die Schlüssellänge ist variabel; korrekt sind Schlüssel von 32 bis 448 Bit (4 bis 56 Byte) — frühere Darstellungen mit „0 bis 448 Bit“ sind irreführend. Zu den wichtigsten Entwurfsmerkmalen gehören schlüsselabhängige S-Boxen und ein komplexer Schlüsselplan.

Der Schlüsselplan erzeugt aus dem Benutzer-Schlüssel eine P-Array und vier S-Boxen: konkret besteht das P-Array aus 18 32-Bit-Wörtern, und die S-Boxen umfassen 4 × 256 32-Bit-Einträge. Die Initialisierung erfolgt, indem die Einträge des P-Arrays mit dem Schlüssel XOR-verknüpft werden und dann iterativ ein Nulllblock verschlüsselt wird, um alle Einträge von P-Array und S-Boxen zu ersetzen. Dieses aufwändige Vorgehen macht den Schlüsselwechsel bewusst rechenintensiv.

Die rundeninterne F-Funktion kombiniert Teile der S-Box-Ausgaben mit Additionen (modulo 2^32) und XOR-Operationen; die Kombination aus Schlüsselabhängigkeit der S-Boxen und einfachen arithmetischen Operationen macht die Implementierung in Software sehr schnell, während die Schlüsselvorbereitung vergleichsweise langsam ist.

Leistung und praktische Aspekte

  • Blowfish ist in Software meist sehr schnell bei der Verschlüsselung und Entschlüsselung großer Datenmengen.
  • Der Schlüsselplan ist jedoch zeitintensiv: Jeder neue Schlüssel muss vorverarbeitet werden, was in etwa der Zeit entspricht, die für die Verschlüsselung von ~4 Kilobyte Klartext benötigt wird. Das macht häufige Schlüsselwechsel teuer und schränkt den Einsatz in kleinen eingebetteten Systemen (z. B. frühen Smartcards) ein.
  • Gleichzeitig ist diese Eigenschaft in einigen Anwendungen erwünscht: Die von Blowfish abgeleitete und für OpenBSD verwendete Passwort-Hashing-Methode (bcrypt bzw. Eksblowfish) nutzt den langsamen Schlüsselplan zur Schlüsselverstärkung, um Wörterbuch- und Brute-Force-Angriffe zu erschweren.

Sicherheit und Kryptoanalyse

Bisher (Stand: viele Jahre nach Veröffentlichung) wurde keine praktische Kryptoanalyse veröffentlicht, die die volle 16-Runden-Version von Blowfish deutlich effizienter als Brute-Force angreift. Dennoch wurden mehrere Schwächen und reduzierte Angriffe gefunden:

  • 1996 zeigte Serge Vaudenay einen Angriff mit bekanntem Klartext, der bei Kenntnis der S-Boxen (also unter bestimmten Annahmen) und für reduzierte Fälle viele bekannte Klartexte benötigt (Formal: ca. 2^{28r+1} für r Runden — die genaue Exposition variiert je nach Darstellung). Er identifizierte außerdem eine Klasse von schwachen Schlüsseln, die den Angriff erleichtern.
  • Vincent Rijmen beschrieb in seiner Dissertation einen Differentialangriff zweiter Ordnung, der bis zu vier Runden effizient angreift, aber nicht die vollen 16 Runden durchbricht.
  • Praktische Probleme entstehen vor allem durch die relativ kleine Blockgröße von 64 Bit: Bei großem Volumen an verschlüsselten Daten führen die sogenannten Birthday-Kollisionen zu sich wiederholenden Blockmustern. Dies wurde später (z. B. in Angriffen wie Sweet32 gegen 64-Bit-Cipher in TLS) als ernstes Problem erkannt. Aus diesem Grund gelten 64-Bit-Blockchiffren heute als veraltet für viele Netzprotokolle und große Datenströme.
  • 1996 wurde außerdem in einer der veröffentlichten C-Codes eine Implementierungsfehler in der Zeichenerweiterung (Sign-Extension) entdeckt, der fehlerhafte Ergebnisse produzieren konnte. Das unterstreicht die Bedeutung korrekter Implementierungen und umfassender Tests.

Zusammenfassend: Es gibt keine allgemein anerkannte praktische Kryptoanalyse, die die gesamte 16-Runden-Version von Blowfish bricht; es existieren jedoch reduzierte Angriffe sowie praktische Bedenken wegen der 64-Bit-Blockgröße.

Verwendung, Varianten und Implementierungen

Blowfish wurde in vielen Bibliotheken und Produkten implementiert (z. B. OpenSSL, verschiedene Dateiverschlüsselungsprogramme, alte VPN- und Archivformate). Wichtige Punkte zur Verwendung:

  • bcrypt / Eksblowfish: Eine Blowfish-Variante mit bewusst teurer Schlüsselexpansion, die als Grundlage für das Passwort-Hashing-Verfahren bcrypt dient; in OpenBSD und zahlreichen weiteren Systemen weit verbreitet.
  • Kompatibilität: Da Blowfish frei verfügbar und nicht patentiert ist, existieren zahlreiche Implementierungen in C, Java, Python, und anderen Sprachen.
  • Limitierungen: Wegen der 64-Bit-Blockgröße wird Blowfish heute nicht mehr für neue TLS/HTTPS-Implementierungen oder andere Anwendungen empfohlen, die große Datenmengen oder lange Verbindungen verarbeiten.

Empfehlungen

Obwohl Blowfish historisch wichtig und in bestimmten Szenarien noch brauchbar ist, rät Bruce Schneier selbst dazu, modernere Algorithmen wie Twofish (den er später mitentwickelte) oder vor allem AES zu verwenden. Moderne Empfehlungen lauten:

  • Für Blockverschlüsselung und Protokolle: AES (128-Bit-Blockgröße und 128/192/256-Bit-Schlüssel) oder Algorithmen mit 128-Bit-Blockgröße.
  • Für Authenticated Encryption: AEAD-Verfahren wie AES-GCM oder ChaCha20-Poly1305.
  • Für Passwort-Hashing: bcrypt (auf Blowfish aufgebaut), scrypt oder Argon2 (je nach Anwendungsfall).

Kurz: Blowfish war ein wichtiger, frei verfügbarer Meilenstein der Kryptoentwicklung, eignet sich in einigen Bereichen weiterhin, ist aber aufgrund seiner 64-Bit-Blockgröße und modernerer Alternativen nicht mehr erste Wahl für neue Anwendungen. Bruce Schneier empfiehlt, bei neuen Projekten stattdessen neuere Algorithmen wie Twofish oder AES zu verwenden.

Verwandte Seiten

Fragen und Antworten

F: Was ist Blowfish?


A: Blowfish ist eine verschlüsselte, symmetrische Blockchiffre, die 1993 von Bruce Schneier entwickelt wurde. Seitdem ist sie in vielen Verschlüsselungsprodukten enthalten.

F: Wofür wurde Blowfish entwickelt?


A: Blowfish wurde als Allzweckalgorithmus entwickelt, um den alten DES-Algorithmus zu ersetzen und die Probleme und Schwierigkeiten anderer Verschlüsselungsalgorithmen zu beseitigen.

F: Wie lang kann die Schlüssellänge bei Blowfish sein?


A: Die Schlüssellänge für Blowfish kann zwischen 0 und 448 Bit liegen.

F: Was sind einige Merkmale des Designs von Blowfish?


A: Zu den Merkmalen des Designs gehören schlüsselabhängige S-Boxen und ein sehr komplexer Schlüsselplan.

F: Gibt es eine bekannte Kryptoanalyse für die Full-Round-Version von Blowfish?


A: Seit 2008 gibt es keine bekannte Möglichkeit, die vollen 16 Runden zu knacken, abgesehen von einer Brute-Force-Suche.

F: Welche Art von Angriff hat Serge Vaudenay gegen Blowfish gefunden?


A: Serge Vaudenay fand einen Angriff mit bekanntem Klartext, der 28r + 1 bekannte Klartexte benötigt, um ihn zu brechen, wobei r die Anzahl der Runden ist. Er fand auch eine Klasse von schwachen Schlüsseln, die durch denselben Angriff mit nur 24r + 1 bekannten Klartexten entdeckt und geknackt werden können.

F: Empfiehlt Bruce Schneier, jetzt Twofish statt Blowfish zu verwenden?


A: Ja, Bruce Schneier empfiehlt die Verwendung von Twofish anstelle von Blowfish aufgrund der verbesserten Sicherheitsmaßnahmen im Vergleich zu älteren Algorithmen wie DES oder sogar neueren Algorithmen wie AES.


Suche in der Enzyklopädie
AlegsaOnline.com - 2020 / 2025 - License CC3