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.

Forfatter: Leandro Alegsa

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

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
AlegsaOnline.com - 2020 / 2025 - License CC3