Blowfish

Blowfish is een symmetrische block cipher ontworpen door Bruce Schneier in 1993.

Blowfish gebruikt een blokgrootte van 64 bits en een sleutel van variabele lengte kan variëren van 32 om 448 bits. Het is gebaseerd op het idee dat een goede beveiliging tegen aanvallen cryptanalyse kan worden bereikt met zeer grote pseudo-willekeurige sleutels.

Blowfish heeft een goede snelheid van uitvoering, behalve tijdens een belangrijke verandering, is het ongeveer 5 keer sneller dan Triple DES en twee keer sneller dan IDEA. Ondanks zijn leeftijd, hij is nog steeds sterk cryptografische standpunt met relatief weinig effectieve aanvallen op de versies met minder bochten. De volledige versie met 16 torens is volledig betrouwbaar to-date en uitgebreid onderzoek is de enige manier om het aan te vallen.

Hij werd geplaatst in het publieke domein door de maker; het wordt beschermd door een octrooi, en het gebruik ervan is niet onderworpen aan een vergunning. Dit verklaart deels het succes, want het was een van de eerste encryptie-algoritmen, waarvan het gebruik is gratis. Het wordt gebruikt in veel proprietary open software.

Algoritme

Blowfish gebruikt een blokgrootte van 64 bits en de sleutel van variabele lengte kan variëren van 32 om 448 bits. Blowfish is gebaseerd op een Feistel regeling met 16 bochten en maakt gebruik van grote S-boxen die afhankelijk zijn van de sleutel. Het ziet eruit als gegoten-128, die is aangenomen, ondertussen, S-Boxen naar inhoud vooraf vastgesteld.

De afbeelding links toont de belangrijkste structuur van Blowfish. Elke lijn vertegenwoordigt 32 bits. Het algoritme onderhoudt twee sets van de sleutels: 18 P tafel inzendingen en de vier S-boxen 256 elementen elk. S-Boxes accepteren een 8-bits woord op de input en output produceren van 32 bits. Een vermelding in de tabel P wordt gebruikt bij elke beurt. Aangekomen bij de laatste ronde, de helft van het datablok ondergaat een XOF de twee resterende elementen in de matrix P.

De tweede grafiek toont de F-functie Blowfish. Het scheidt een 32-bits invoer in vier stukken van 8 bits en wordt gebruikt als input toegang tot S-Boxen. De uitgangen opgeteld bij de som modulo 2 en het algoritme voert een XOF tussen beide subtotalen voor de uiteindelijke uitvoer van 32 bits te produceren. Als Feistel schema, kan Blowfish eenvoudig worden omgekeerd door toepassing van een XOR elementen 17 en 18 van tabel P op het versleutelde blok. Moet dan gebruik maken van de tabel inzendingen P in de omgekeerde volgorde.

De bereiding van de structuur van de sleutel begint met het initialiseren van de matrix P en S-Dozen met waarden die zijn getrokken uit het getal Pi uitgedrukt in hexadecimale. Dan werkt een XOF tussen de geheime sleutel en de matrix P ingangen voor de nieuwe gegevens in tabel P. A 64-bit blokken, alle nul, wordt dan gecodeerd met de tijdelijke versie van Blowfish. De versleutelde resultaat vervangt dan de eerste en de tweede array-element P. Hij herhaalt de encryptie operatie met deze nieuwe versie en deze op het vorige resultaat. Dit geeft de derde en vierde element van P. Het algoritme blijft aldus het geheel vervangen van P en S-Boxes elementen. Tenslotte, deze gegevens worden gegenereerd voor de tafel P en S-Box data, totaal en Blowfish 521 voert iteraties te bereiken.

Vanwege deze beperkingen, Blowfish is traag als afzonderlijk key, maar zeer snel voor de codering te wijzigen.

De initialisatie principe van het uitvoeren van een XOF tussen de tafel 576 langs de sleutelbit en P bit cyclisch uitgebreid tot 576 bits, vele implementaties maken het gebruik van sleutels van een grootte tot 576 bits verhogen security. Hoewel dit heel goed mogelijk is, is de limiet van 448-bits is ingesteld zodat elk beetje elke array waarde P en S-Boxen, hangt af van elke bit van de sleutel, de laatste vier waarden van de tabel P niet op alle bits van het versleutelde blok.

Hiermee moet rekening worden gehouden met de maximale sleutellengte van een implementatie van het algoritme van een verschillend aantal windingen bepalen, want zelfs als de uitbreiding van de sleutelgrootte biedt een betere beveiliging tegen Search uitputtend, het beïnvloedt de veiligheid gewaarborgd door het algoritme. Want afgezien van de duidelijke voordelen bood een sleutel tot toegenomen omvang, heeft geen enkele studie tot nu toe de impact op de veiligheid van niet-naleving van deze regel, die veel software bedrijven leidt tot heeft onderzocht respect. Inderdaad, gezien de lange en complexe initialisatie Blowfish elke toets veranderen, het heeft een natuurlijke bescherming tegen uitputtende zoektocht omdat de rekentijd wordt daardoor sterk vergroot. Dus op dit moment, de resulterende winst niet echt het gebruik van een meer dan 448-bits sleutel grootte, die is veel verder dan de rekencapaciteit door uitputtend onderzoek te rechtvaardigen, en vele algoritmen beschouwd als veilig.

Cryptanalysis

In 1996, Serge Vaudenay bleek dat de permutaties in Blowfish afgeweken nagenoeg volledig willekeurige permutaties van 14 ronden. De aanval hij vervalste vereist twee bekende platte tekst, met r het aantal windingen. Verder werd onthuld genaamd zwakke sleutels die S-boxen met botsingen genereren. Deze toetsen zijn detecteerbaar en breekbaar met dezelfde aanval in slechts twee bekende plaintext. De aanval kan niet worden uitgebreid tot de volledige 16 ronden met Blowfish. Vincent Rijmen een aanval over vier rondes in 1997 gepubliceerd, is het gebaseerd op een differentiële cryptoanalyse tweede graad. Het uitputtend onderzoek is de enige manier om een ​​volledige Blowfish tot nu verslaan.

Voorbeelden

In GNU Privacy Guard Blowfish en Twofish worden uitgevoerd en ze kunnen worden geactiveerd. Andere Windows-software met Blowfish en Twofish Blowfish Geavanceerd CS is Engels.