Blowfish (Ziffer)

Blowfish ist eine verschlüsselte, symmetrische Block-Ziffer, entworfen 1993 von Bruce Schneier und eingeschlossen in eine Vielzahl von Ziffer-Gefolgen und Verschlüsselungsprodukten. Blowfish stellt eine gute Verschlüsselungsrate in der Software zur Verfügung, und kein wirksamer cryptanalysis davon ist bis heute gefunden worden. Jedoch erhält der Fortgeschrittene Verschlüsselungsstandard jetzt mehr Aufmerksamkeit.

Schneier hat Blowfish als ein Mehrzweckalgorithmus entworfen, der als eine Alternative zum alternden DES und frei von den Problemen und mit anderen Algorithmen vereinigten Einschränkungen beabsichtigt ist. Zurzeit wurde Blowfish veröffentlicht, viele andere Designs waren Eigentums-, durch Patente belastet oder waren kommerzielle/Regierung Geheimnisse. Schneier hat festgestellt, dass, "ist Blowfish nicht patentiert, und wird so in allen Ländern bleiben. Der Algorithmus wird hiermit ins öffentliche Gebiet gelegt, und kann von jedem frei verwendet werden."

Bemerkenswerte Eigenschaften des Designs schließen schlüsselabhängige S-Kästen und eine hoch komplizierte Schlüsselliste ein.

Der Algorithmus

Blowfish hat eine 64-Bit-Block-Größe und eine variable Schlüssellänge von 1 Bit bis zu 448 Bit. Es ist eine 16-Runden-Ziffer von Feistel und verwendet große schlüsselabhängige S-Kästen. In der Struktur ähnelt es WURF 128, der feste S-Kästen verwendet.

Das Diagramm zu den linken Shows die Handlung von Blowfish. Jede Linie vertritt 32 Bit. Der Algorithmus behält zwei Subschlüsselreihe: die 18-Zugänge-P-Reihe und vier 256-Zugänge-S-Kästen. Die S-Kästen akzeptieren 8-Bit-Eingang und erzeugen 32-Bit-Produktion. Ein Zugang der P-Reihe wird jede Runde, und nach der Endrunde verwendet, jede Hälfte des Datenblocks ist XORed mit einem der zwei restlichen unbenutzten P-Einträge.

Das Diagramm zum oberen Recht zeigt die F-Funktion von Blowfish. Die Funktion spaltet den 32-Bit-Eingang in vier Acht-Bit-Viertel, und verwendet die Viertel als Eingang zu den S-Kästen. Die Produktionen werden modulo 2 und XORed hinzugefügt, um die End-32-Bit-Produktion zu erzeugen.

Dekodierung ist genau dasselbe als Verschlüsselung, außer dass P1, P2..., P18 in der Rückordnung verwendet werden. Das ist nicht so offensichtlich, weil xor auswechselbar und assoziativ ist. Ein häufiger Irrtum soll umgekehrte Ordnung der Verschlüsselung als Dekodierungsalgorithmus (d. h. der erste XORing P17 und P18 zum Ciphertext-Block, dann mit den P-Einträgen in umgekehrter Reihenfolge) verwenden.

Die Schlüsselterminanfänge von Blowfish durch das Initialisieren der P-Reihe und S-Kästen mit Werten sind auf die hexadecimal Ziffern des Pis zurückzuführen gewesen, die kein offensichtliches Muster enthalten (sieh nichts meine Ärmel-Zahl). Der heimliche Schlüssel wiederholt dann byteweise den Schlüssel nötigenfalls, XORed mit allen P-Einträgen in der Ordnung periodisch. Ein 64-Bit-Vollnullblock ist dann encrypted mit dem Algorithmus, weil es steht. Das Endergebnis ciphertext ersetzt P und P. Derselbe ciphertext ist dann encrypted wieder mit den neuen Subschlüsseln, und der neue ciphertext ersetzt P und P. Das geht weiter, die komplette P-Reihe und alle S-Kasten-Einträge ersetzend. Insgesamt wird der Verschlüsselungsalgorithmus von Blowfish 521mal laufen, um alle Subschlüssel zu erzeugen - ungefähr 4 Kilobytes von Daten werden bearbeitet.

Weil die P-Reihe 576 Bit lang ist, und die Schlüsselbytes XORed durch alle diese 576 Bit während der Initialisierung sind, unterstützen viele Durchführungen Schlüsselgrößen bis zu 576 Bit. Während das sicher möglich ist, soll die 448-Bit-Grenze hier sicherstellen, dass jedes Bit jedes Subschlüssels von jedem Bit des Schlüssels abhängt, weil die letzten vier Werte der P-Reihe jedes Bit des ciphertext nicht betreffen. Dieser Punkt sollte in der Rücksicht für Durchführungen mit einer verschiedenen Zahl von Runden, als genommen werden, wenn auch es Sicherheit gegen einen erschöpfenden Angriff vergrößert, schwächt es die durch den Algorithmus versicherte Sicherheit. Und in Anbetracht der langsamen Initialisierung der Ziffer mit jeder Änderung des Schlüssels wird ihm ein natürlicher Schutz gegen Angriffe der rohen Gewalt gewährt, der Schlüsselgrößen nicht wirklich rechtfertigt, die länger sind als 448 Bit.

Cryptanalysis von Blowfish

Es gibt keinen wirksamen cryptanalysis auf der voll-runden Version von Blowfish bekannt öffentlich. Ein Zeichen-Erweiterungsprogrammfehler in einer Veröffentlichung des C-Codes ist identifiziert worden.

1996 hat Serge Vaudenay einen bekannten-plaintext Angriff gefunden, der 2 bekannte plaintexts verlangt zu brechen, wo r die Zahl von Runden ist. Außerdem hat er auch eine Klasse von schwachen Schlüsseln gefunden, die entdeckt und durch denselben Angriff mit nur 2 bekannten plaintexts gebrochen werden können. Dieser Angriff kann gegen regelmäßigen Blowfish nicht verwendet werden; es nimmt Kenntnisse der schlüsselabhängigen S-Kästen an. Vincent Rijmen, in seiner Doktorarbeit, hat einen Differenzialangriff der zweiten Ordnung eingeführt, der vier Runden und nicht mehr brechen kann. Dort bleibt keine bekannte Weise, die vollen 16 Runden abgesondert von einer Suche der rohen Gewalt zu brechen.

Bruce Schneier bemerkt, dass, während Blowfish noch im Gebrauch ist, er empfiehlt, den neueren Algorithmus von Twofish stattdessen zu verwenden.

Blowfish in der Praxis

Blowfish ist eine schnelle Block-Ziffer, außer, wenn das Ändern von Schlüsseln. Jeder neue Schlüssel verlangt Aufbereitung, die zu encrypting ungefähr 4 Kilobytes des Textes gleichwertig ist, der im Vergleich zu anderen Block-Ziffern sehr langsam ist. Das verhindert seinen Gebrauch in bestimmten Anwendungen, aber ist nicht ein Problem in anderen. In einer Anwendung ist es wirklich ein Vorteil: Die Methode des Kennwortes-hashing hat im Gebrauch von OpenBSD verwendet ein Algorithmus ist auf Blowfish zurückzuführen gewesen, der von der langsamen Schlüsselliste Gebrauch macht; die Idee besteht darin, dass die rechenbetonte erforderliche Extraanstrengung Schutz gegen Wörterbuch-Angriffe gibt. Sieh Schlüssel sich zu strecken.

Blowfish hat einen Speicherfußabdruck gerade mehr als 4 Kilobytes des RAM. Diese Einschränkung ist nicht ein Problem sogar für ältere Tisch- und Laptops, obwohl sie wirklich Gebrauch in den kleinsten eingebetteten Systemen wie früher smartcards verhindert.

Blowfish war eine der ersten sicheren Block-Ziffern nicht Thema irgendwelchen Patenten und deshalb frei verfügbar für jeden, um zu verwenden. Dieser Vorteil hat zu seiner Beliebtheit in der kryptografischen Software beigetragen.

Siehe auch

  • Threefish
  • MacGuffin

Zeichen und Verweisungen

  • Vincent Rijmen, "Cryptanalysis und Design von wiederholten Block-Ziffern", Doktorarbeit, Oktober 1997.
  • Bruce Schneier, Beschreibung eines Neuen Schlüssels der Variablen Länge, 64-Bit-Block-Ziffer (Blowfish). Schnelle Softwareverschlüsselung 1993: 191-204
http://www.schneier.com/paper-blowfish-fse.html.
  • Bruce Schneier, Der Blowfish Verschlüsselungsalgorithmus — Ein Jahr Später, die Zeitschrift von Dr Dobb, 20 (9), p. 137, September 1995
http://www.schneier.com/paper-blowfish-oneyear.html.
  • Serge Vaudenay, "Auf den schwachen Schlüsseln von Blowfish," Schnelle Softwareverschlüsselung (FSE '96), LNCS 1039, D. Gollmann, Ed, Springer-Verlag, 1996, Seiten 27-32.

Außenverbindungen


Bastille Tag / Bijektion
Impressum & Datenschutz