Blowfish – symmetrisk blokchiffer: definition, egenskaber og anvendelse
Blowfish - symmetrisk blokchiffer: klar definition, nøgleegenskaber, hastighed, sikkerhed og praktiske anvendelser. Lær fordele, begrænsninger og brugstilfælde.
Kryptografi-algoritmen Blowfish er et velkendt symmetrisk blokchiffer med en variabel nøgle, udviklet af Bruce Schneier i 1993. Den blev hurtigt populær og indgik i et stort antal krypteringsprodukter. Blowfish er designet til at være hurtigt i software, men har en relativt langsom nøgleopsætning (key schedule). Selvom der indtil i dag ikke er offentliggjort nogen praktisk kryptoanalytisk metode til at bryde den fulde 16-runds-version, betragtes Blowfish i moderne sammenhænge ofte som et legacy-chiffer på grund af sin 64-bit blokstørrelse.
Historie og licens
Bruce Schneier designede Blowfish som en åben og fri erstatning for den aldrende DES-algoritme. På udgivelsestidspunktet var mange alternative algoritmer proprietære eller hemmelige, og Schneier gjorde det klart, at "Blowfish er ikke patenteret og vil forblive det i alle lande. Algoritmen er hermed placeret i det offentlige domæne og kan frit anvendes af alle."
Design og parametre
- Struktur: Blowfish er en 16-runds Feistel-cipher.
- Blokstørrelse: 64 bit.
- Nøglelængde: Variabel fra 0 op til 448 bit.
- S-boxes og P-array: Implementationerne bruger store nøgleafhængige S-bokse og en P-array. Den typiske specifikation beskriver en P-array bestående af 18 32-bit ord og fire S-bokse med hver 256 32-bit ord. Disse tabeller er ikke faste, men udledes fra nøglen under nøgleopsætningen.
- Nøgleplan (key schedule): Nøglen ekspanderes til P-array og S-bokse ved en proces, der iterativt krypterer en 64-bit nulblok og erstatter indholdet af P- og S-tabellerne. Denne proces er beregningsmæssigt dyr: at indlæse en ny nøgle tager omtrent den tid, det kræver at kryptere ~4 kilobyte data, hvilket gør hyppigt nøgleskift relativt langsomt.
Ydeevne og anvendelser
Blowfish er typisk meget hurtigt ved selve krypteringen i software, hvilket gjorde det populært i mange applikationer i 1990'erne og 2000'erne. Den lange og tunge nøgleopsætning betyder dog, at Blowfish ikke er velegnet, når nøgler konstant skiftes eller i meget ressourcebegrænsede indlejrede systemer (fx tidlige smartcards).
En direkte afledning af Blowfish, kaldet Eksblowfish, bruges i password-hashfunktionen bcrypt, som udnytter den langsomme nøgleplan til at øge arbejdsomkostningen for brute-force- og ordbogsangreb (se nøgleforstærkning).
Sikkerhed og kryptoanalyse
Der er gennem årene foreslået flere angreb mod reducerede eller særligt konstruerede varianter af Blowfish:
- 1996 fandt Serge Vaudenay et kendt klartekst-angreb (på reducerede varianter eller under særlige forudsætninger), og han identificerede desuden en klasse af svage nøgler. Angrebet forudsætter kendskab til nøgleafhængige S-bokse og gælder ikke for den almindelige fuldrunde Blowfish uden yderligere antagelser.
- Vincent Rijmen beskrev i sin ph.d.-afhandling et differentialt angreb af anden orden, som kan bryde op til fire runder, men ikke de fulde 16 runder.
- Der blev også rapporteret en implementeringsfejl i en offentliggjort C-kode fra 1996, hvor en lille udvidelse med et tegn ændrede funktionaliteten — dette var et implementeringsproblem, ikke en matematisk svaghed i selve chiffret.
Generelt er der ingen offentlig, praktisk kryptoanalyse, der effektivt bryder den fulde 16-runds Blowfish; en brute-force-nøgleopsporing er fortsat den mest direkte måde at angribe selve nøglen på. Alligevel er der to vigtige sikkerhedsbegrænsninger at være opmærksom på:
- 64-bit blokstørrelse: Moderne krypteringsstandarder foretrækker 128-bit blokke (som i AES) for at undgå problemer med gentagelser (birthday-problemer) ved store datamængder. Med en 64-bit blokstørrelse kan der opstå blok-kollisioner efter omtrent 2^32 blokke, hvilket gør Blowfish mindre egnet til kryptering af meget store datamængder.
- Langsom nøgleopsætning: På grund af den dyre nøgleudvidelse er Blowfish mindre egnet i scenarier med hyppige nøgleskift eller i ekstremt begrænsede miljøer.
Nuværende status og anbefalinger
Selvom Blowfish stadig anvendes i visse eksisterende systemer og biblioteker, anbefaler mange eksperter i dag at vælge nyere algoritmer til nye systemer. AES (med 128-bit blok og 128/192/256-bit nøgler) er standarden for de fleste moderne anvendelser. Til strømme og højtydende softwarekryptering er også moderne alternativer som ChaCha20 populære.
Twofish — et andet design, som Schneier var med til — blev fremført som en kandidat til AES og er et mere moderne alternativ, men AES dominerer i praksis. Til password hashing og lagring af adgangskoder er bcrypt (baseret på Eksblowfish) fortsat relevant sammen med andre moderne KDFs (key-derivation functions) som Argon2.
Praktisk vejledning
- Undgå at bruge Blowfish til nye projekter, hvor store datamængder krypteres — brug i stedet chifre med 128-bit blokke (fx AES) eller moderne strømchifre (fx ChaCha20).
- Hvis du støder på Blowfish i eksisterende systemer, vurder om migration til en nyere algoritme er nødvendig, især hvis systemet håndterer store mængder data eller kræver høje sikkerhedsgarantier.
- Til password-hashing er det passende at bruge etablerede, tilpassede konstruktioner som bcrypt eller nyere algoritmer som Argon2.
Bemærk: Selvom Blowfish ingen offentlig kendt fuldbruddsmetode har haft i årene efter udgivelsen, gør den 64-bit blokstørrelse og den langsomme nøgleopsætning, at Blowfish primært betragtes som en historisk og legacy-løsning i moderne kryptografi. Schneier selv har i senere år anbefalet nyere designs som Twofish og fremhævet, at AES har fået mest udbredelse.
Relaterede sider
- Avanceret krypteringsstandard
- eSTREAM - En evaluering af nye stream ciphers, som EU er ved at gennemføre.
- Twofish
- MacGuffin
Spørgsmål og svar
Q: Hvad er Blowfish?
A: Blowfish er en symmetrisk blokchiffer med nøgle, der blev skabt i 1993 af Bruce Schneier. Det er siden da blevet inkluderet i mange krypteringsprodukter.
Q: Hvad blev Blowfish lavet til?
Svar: Blowfish blev udviklet som en algoritme til generelle formål for at erstatte den gamle DES-algoritme og for at fjerne problemerne og vanskelighederne ved andre krypteringsalgoritmer.
Spørgsmål: Hvor lang kan nøglelængden være for Blowfish?
A: Nøglelængden for Blowfish kan variere fra 0 op til 448 bit.
Spørgsmål: Hvad er nogle af de særlige kendetegn ved udformningen af Blowfish?
Svar: Nogle af designets kendetegn er nøgleafhængige S-bokse og en meget kompleks nøgleplan.
Spørgsmål: Er der nogen kendt kryptoanalyse af Blowfish i den fuldrunde version af Blowfish?
Svar: I 2008 er der ingen kendte metoder til at bryde de 16 runder ud over en brute-force-søgning.
Spørgsmål: Hvilken type angreb fandt Serge Vaudenay mod Blowfish?
Svar: Serge Vaudenay fandt et angreb med kendt klartekst, som kræver 28r + 1 kendt klartekst for at blive brudt, hvor r er antallet af runder. Han fandt også en klasse af svage nøgler, som kunne opdages og brydes ved samme angreb med kun 24r + 1 kendte klartekster.
Spørgsmål: Anbefaler Bruce Schneier, at man nu bruger Twofish i stedet for Blowfish?
Svar: Ja, Bruce Schneier anbefaler at bruge Twofish i stedet for Blowfish nu på grund af de forbedrede sikkerhedsforanstaltninger i forhold til ældre algoritmer som DES eller endda nyere algoritmer som AES.
Søge