www.wikidata.de-de.nina.az
Blowfish deutsch Kugelfisch ist ein symmetrischer Blockverschlusselungsalgorithmus der 1993 von Bruce Schneier entworfen und erstmals im April 1994 in Dr Dobb s Journal publiziert wurde Er wurde gemeinfrei veroffentlicht und nicht patentiert 1 BlowfishBlowfishFeistelnetzwerk von BlowfishEntwickler Bruce SchneierVeroffentlicht 1993Schlussellange 32 448 Bit Standard 128 Bit Blockgrosse 64 BitStruktur FeistelchiffreRunden 16Beste bekannte Kryptoanalysevier Runden von Blowfish sind anfallig fur eine Differentielle Kryptoanalyse 14 Runden sind fur eine Klasse von schwachen Schlusseln anfallig fur eine Pseudozufalls PermutationBlowfish hat eine feste Blocklange von 64 Bit basiert auf einem Feistelnetzwerk und besitzt schlusselabhangige S Boxen Die Schlussellange kann 32 Bit bis 448 Bit betragen Aus diesen Schlusselbits werden vor Beginn der Ver oder Entschlusselung die so genannten Rundenschlussel P1 bis P18 und die Eintrage in den S Boxen erzeugt insgesamt 4168 Byte Inhaltsverzeichnis 1 Funktionsweise 1 1 Schlusseleinteilung 2 Kryptoanalyse und Sicherheit 3 Beispiele 4 Siehe auch 5 Literatur 6 Weblinks 7 EinzelnachweiseFunktionsweise BearbeitenDie Abbildung zeigt den internen Aufbau von Blowfish Der 64 Bit breite Klartextblock wird in zwei Halften L 1 displaystyle L 1 nbsp und R 1 displaystyle R 1 nbsp geteilt In jeder sogenannten Runde von denen insgesamt 16 durchlaufen werden wird die linke Halfte des Datenblocks mit einem vorab berechneten 32 Bit breiten Rundenschlussel P1 bis P16 XOR verknupft dann das Ergebnis in die Rundenfunktion F eingegeben und deren Ausgabe mit der rechten Halfte XOR verknupft und die Halften anschliessend vertauscht Am Ende werden noch die beiden Halften mit den Rundenschlusseln P17 und P18 XOR verknupft R i 1 L i P i displaystyle R i 1 L i oplus P i nbsp L i 1 R i F R i 1 i von 1 bis 16 displaystyle L i 1 R i oplus F R i 1 quad i text von 1 text bis 16 nbsp R 18 L 17 P 17 L 18 R 17 P 18 displaystyle R 18 L 17 oplus P 17 L 18 R 17 oplus P 18 nbsp L 18 displaystyle L 18 nbsp und R 18 displaystyle R 18 nbsp bilden dann den Schlusseltextblock Die Entschlusselung lauft exakt gleich ab nur werden dabei alle Rundenschlussel P1 bis P18 in umgekehrter Reihenfolge verwendet Das beruht auf der Vertauschbarkeit der XOR Verknupfungen XOR ist sowohl kommutativ als auch assoziativ Es ist gleich ob man eine Halfte des Datenblocks erst mit einem Rundenschlussel und dann mit der Ausgabe der Funktion F verknupft oder umgekehrt In der Funktion F kommen die schlusselabhangigen S Boxen zum Einsatz Der Eingabewert wird in vier Byte geteilt mit denen jeweils ein Wert aus einer von vier 8 32 Bit S Boxen ausgelesen wird Diese Werte werden mittels XOR und Addition modulo 2 32 displaystyle 2 32 nbsp verknupft F x S 1 x 24 31 S 2 x 16 23 S 3 x 8 15 S 4 x 0 7 displaystyle F x lbrace lbrack S 1 x 24 31 S 2 x 16 23 rbrack oplus S 3 x 8 15 rbrace S 4 x 0 7 nbsp Dabei steht x a b displaystyle x a b nbsp fur die Bits an den Positionen a bis b aus der Binardarstellung des Wertes x Schlusseleinteilung Bearbeiten Blowfish verwendet 18 Rundenschlussel P 1 displaystyle P 1 nbsp bis P 18 displaystyle P 18 nbsp mit je 32 Bit und vier S Boxen mit je 256 28 Eintragen von je 32 Bit Die Initialisierung der P i displaystyle P i nbsp und der S Boxen erfolgt mit einer fixen Zahlenfolge die aus der Binardarstellung der Kreiszahl p abgeleitet wird um die Anforderungen an eine unverdachtige Konstante zu erfullen Die Nachkommastellen von p sind pseudozufallig und unabhangig vom restlichen Blowfish Algorithmus 2 Davon ausgehend werden sowohl die Rundenschlussel als auch die S Boxen S1 bis S4 schlusselabhangig verandert Dazu wird zuerst der Schlussel in 32 Bit Blocke aufgeteilt Danach wird jeder Rundenschlussel mit den 32 Bit Blocken des Schlussels XOR verknupft Dabei wechseln sich die Blocke des Schlussels nacheinander ab Danach wird ein Block mit 64 Nullbits verschlusselt unter Verwendung der aktuellen Rundenschlussel und der wie oben initialisierten S Boxen Die linke und rechte Halfte des entstandenen Schlusseltextes ersetzen dann den ersten und zweiten Rundenschlussel Dann wird der obige Schlusseltext mit den geanderten Rundenschlusseln nochmals verschlusselt und der dritte und vierte Rundenschlussel wird ersetzt usw Nachdem auf diese Weise alle Rundenschlussel ersetzt wurden kommen die Eintrage der S Boxen an die Reihe wobei auch wieder die jeweils nachste Verschlusselung mit dem aktuellen Stand der S Boxen gemacht wird Es werden also insgesamt 521 Verschlusselungen durchgefuhrt bis die 18 Rundenschlussel und die 1024 S Box Eintrage ersetzt sind Danach bleiben die Rundenschlussel und die Werte in den S Boxen so lange konstant bis ein neuer Schlussel gewahlt wird Als C Code uint32 t P 18 Rundenschlussel uint32 t S 4 0x100 S Boxen uint32 t f uint32 t x uint32 t h S 0 x gt gt 24 S 1 x gt gt 16 amp 0xff return h S 2 x gt gt 8 amp 0xff S 3 x amp 0xff void encrypt uint32 t amp L uint32 t amp R for int i 0 i lt 16 i 2 L P i R f L R P i 1 L f R L P 16 R P 17 swap L R void decrypt uint32 t amp L uint32 t amp R for int i 16 i gt 0 i 2 L P i 1 R f L R P i L f R L P 1 R P 0 swap L R void key schedule uint8 t key int keylen Initialisiere P und S mittels der Kreiszahl Pi hier ausgelassen Es ist zu beachten dass Pi in big endian Reihenfolge eingelesen wird int i int j 0 int k for i 0 i lt 18 i Der Schlussel wird byteweise gelesen und in big endian Reihenfolge mit P verrechnet uint32 t tmp 0 for k 0 k lt 4 k tmp tmp lt lt 8 key j if j gt keylen j 0 P i tmp uint32 t L 0 R 0 for i 0 i lt 18 i 2 encrypt L R P i L P i 1 R for i 0 i lt 4 i for j 0 j lt 0x100 j 2 encrypt L R S i j L S i j 1 R Kryptoanalyse und Sicherheit BearbeitenEs ist kein effizienter Angriff auf die Blowfish Verschlusselung mit voller Rundenzahl bekannt Ein so genannter Sign Extension Bug wurde in einer Veroffentlichung des C Codes gefunden 3 Serge Vaudenay fand 1996 einen Known Plaintext Angriff der zum Brechen der Verschlusselung 28r 1 bekannte Paare von Klartext und Schlusseltext benotigt Der Parameter r bezeichnet die Anzahl der Runden Zudem entdeckte er eine Klasse von schwachen Schlusseln die erkannt und mit nur 24r 1 Klartext Paaren gebrochen werden konnen Dieser Angriff kann jedoch nicht gegen regularen Blowfish eingesetzt werden da er die Kenntnis der schlusselabhangigen S Boxen voraussetzt Vincent Rijmen stellt in seiner Doktorarbeit einen differenziellen Angriff zweiter Ordnung vor der Blowfish mit hochstens 4 Runden brechen kann Ausser der Brute Force Methode ist kein Weg bekannt den Algorithmus mit 16 Runden zu brechen 4 Bruce Schneier merkt an dass er den neueren Twofish Algorithmus empfiehlt obwohl Blowfish noch in breiter Verwendung ist 5 Da Blowfish eine Blockgrosse von 64 Bit verwendet AES verwendet 128 Bit Blocke ist ein Geburtstagsangriff vor allem im HTTPS oder OpenVPN Kontext moglich Im Jahr 2016 zeigte der SWEET32 Angriff wie ein Geburtstagsangriff genutzt werden kann um den Klartext wiederherzustellen Der SWEET32 Angriff funktioniert bei Verschlusselungsverfahren wie Blowfish die mit einer Blockgrosse von 64 Bit arbeiten 6 Beispiele BearbeitenIm GNU Privacy Guard sind Blowfish und Twofish implementiert und konnen auf Wunsch aktiviert werden Das Cryptographic File System CFS ist ein auf NFS aufsetzendes verschlusseltes Dateisystem fur UNIX und unterstutzt ebenfalls Blowfish Ein quelloffenes Windows Programm zum Verschlusseln von Dateien mittels Blowfish Twofish und weiteren Algorithmen wie z B AES ist Blowfish Advanced CS Auch im OpenDocument Datenformat ist Blowfish als Verschlusselungsmethode aufgefuhrt Ab PHP 5 3 ist Blowfish Bestandteil der crypt Funktion Blowfish ist ebenfalls in der freien Krypto Bibliothek OpenSSL implementiert 7 Die VPN Software OpenVPN nutzt als symmetrische Komponente standardmassig ebenfalls Blowfish 8 OpenSSH hat in dem Ende 2016 veroffentlichten Release 7 4 die Blowfish Unterstutzung wie auch viele andere schwache Chiffren entfernt 9 Siehe auch BearbeitenTwofish Nachfolger von Blowfish Puffy the blowfish Maskottchen der OpenSSHLiteratur BearbeitenVincent Rijmen Cryptanalysis and design of iterated block ciphers doctoral dissertation Oktober 1997 Bruce Schneier Description of a New Variable Length Key 64 bit Block Cipher Blowfish Fast Software Encryption 1993 S 191 204 schneier com Bruce Schneier The Blowfish Encryption Algorithm One Year Later In Dr Dobb s Journal 20 9 S 137 September 1995 schneier com Serge Vaudenay On the weak keys of Blowfish In D Gollmann Ed Fast Software Encryption FSE 96 LNCS 1039 Springer Verlag 1996 S 27 32 Weblinks BearbeitenBruce Schneiers Beschreibung des Algorithmus incl etlicher Sourcecodes S Box und P Box Online Blowfish Verschlusselung PHP oder JavaScript Standard Cryptographic Algorithm Naming zu Blowfish Blowfish Advanced CS Memento vom 19 Februar 2013 im Internet Archive Einzelnachweise Bearbeiten Schneier on Security The Blowfish Encryption Algorithm Abgerufen am 23 Februar 2018 Bruce Schneier Description of a new variable length key 64 bit block cipher Blowfish In FSE 1993 Lecture Notes in Computer Science Band 809 Springer 1994 S 201 schneier com I chose the digits of pi as the initial subkey table for two reasons because it is a random sequence not related to the algorithm and because it could either be stored as part of the algorithm or derived when needed Ich habe die Ziffern von Pi als Initialisierung der Unterschlussel aus zwei Grunden gewahlt weil es eine zufallige Folge ohne Bezug zum Algorithmus ist und weil sie entweder als Teil des Algorithmus gespeichert oder bei Bedarf berechnet werden kann Mike Morgan Blowfish can be cracked Fix included Newsgroup sci crypt Serge Vaudenay On the Weak Keys of Blowfish PostScript 23 August 2006 archiviert vom Original am 4 November 2007 abgerufen am 31 Dezember 2007 englisch Dahna McConnachie Bruce Almighty Schneier preaches security to Linux faithful In Computerworld 27 Dezember 2007 S 3 archiviert vom Original am 5 Oktober 2008 abgerufen am 31 Dezember 2007 englisch At this point though I m amazed it s still being used If people ask I recommend Twofish instead Karthikeyan Bhargavan Gaetan Leurent On the Practical In Security of 64 bit Block Ciphers Collision Attacks on HTTP over TLS and OpenVPN ACM CCS 2016 August 2016 abgerufen im 1 Januar 1 englisch Offizielle OpenSSL Dokumentation Blowfish Memento vom 14 Februar 2014 im Internet Archive Offizielle OpenVPN Dokumentation Memento vom 9 Februar 2015 im Internet Archive OpenSSH 7 4 Release Notes Abgerufen von https de wikipedia org w index php title Blowfish amp oldid 235422360