Blowfish — symmetriskt blockchiffer: algoritm, säkerhet och historia
Djupgående guide till Blowfish: symmetriskt blockchiffer — algoritm, säkerhet, historik, prestanda och praktiska användningsområden inom modern kryptering.
Inom kryptografin är Blowfish ett symmetriskt blockchiffer med nyckel som publicerades 1993 av Bruce Schneier. Sedan dess har det använts i ett stort antal krypteringsprodukter, främst på grund av god prestanda i programvara och enkel tillgång — Schneier gjorde algoritmen fritt tillgänglig. Blowfish är snabb i chiffrarelokering men har en kostsam nyckelinitiering; fram till åtminstone 2008 fanns det inga kända praktiskt genomförbara kryptoanalytiska angrepp mot hela 16-rundsvarianten.
Syfte och historia
Schneier utvecklade Blowfish som ett allmänt användbart alternativ till den gamla DES-algoritmen och för att undanröja problem i dåtida hemliga eller patentbelagda algoritmer. När Blowfish släpptes var många konkurrenter skyddade eller proprietära. Schneier uttryckte att Blowfish saknar patent och att algoritmen är avsedd att ligga i offentliga domänen och användas fritt av vem som helst. På grund av detta spreds implementationer snabbt i fri programvara och kommersiella produkter.
Design och grundegenskaper
Blowfish är ett Feistel-chiffer med 16 rundor. Det arbetar på en blockstorlek på 64 bitar och har en variabel nyckellängd från 0 upp till 448 bitar. Konstruktionen bygger på stora nyckelberoende S-boxar och ett relativt komplext nyckelschema. I struktur liknar det bland annat CAST-128, men till skillnad från CAST använder Blowfish S-boxar som beror på nyckeln istället för fasta tabeller.
Nyckelschema och S-boxar
En viktig egenskap är att S-boxarna och vissa interna tabeller initialiseras med hjälp av nyckeln. Denna initiering är avsiktligt kostsam: varje gång en ny nyckel används måste ett omfattande förbehandlingssteg köras, vilket Schneier uppskattade till ungefär samma tid som att kryptera cirka 4 kilobyte text. Det gör nyckelbyten relativt långsamma jämfört med andra blockchiffer, och begränsar därmed användningen i applikationer där nycklar byts ofta eller där resurser är mycket knappa (t.ex. tidiga inbyggda systemen och vissa smartkort).
Prestanda och vanliga tillämpningar
- Blowfish är ofta mycket snabb vid själva krypteringen när nyckeln är färdiginitialiserad, särskilt i mjukvaruimplementationer.
- Det långsamma nyckelschemat kan dock vara en fördel i vissa sammanhang: OpenBSDs lösenordshashning bygger på en variant av Blowfish (känd som bcrypt / EksBlowfish) som utnyttjar den dyra nyckelinitieringen för att göra brute-force- och ordboksattacker mindre effektiva.
- För nya system rekommenderas ofta ciphers med 128-bitars blockstorlek (t.ex. AES) eller moderna strömciffror (t.ex. ChaCha20) eftersom 64-bitars blockstorlek medför begränsningar vid höga datamängder.
Säkerhet och kryptoanalys
Blowfish har hittills visat god motståndskraft, men forskningen har identifierat vissa svagheter i reducerade rundor och teoretiska attackvektorer:
- 1996 presenterade Serge Vaudenay en attack med kända klartexter som kräver 28r + 1 kända klartexter för att riktas mot r rundor. Han identifierade även en klass av svaga nycklar som kan upptäckas och angripas med endast 24r + 1 kända klartexter. Dessa resultat förutsätter kännedom om de nyckelberoende S-boxarna och påverkar därför analysen av vissa varianter eller implementeringsfel.
- Vincent Rijmen visade i sin doktorsavhandling en differentiell attack av andra ordningen som bryter fyra rundor, men den skalar inte till fulla 16 rundor.
- Det finns rapporter om implementeringsproblem, bland annat ett fel med teckenförlängning i en offentlig C-kod-implementation som upptäcktes 1996, vilket understryker vikten av korrekt och säker implementering.
- Trots olika teoretiska attacker finns det inget känt praktiskt genomförbart sätt att bryta hela 16-rundsvarianten bättre än en brutal sökning (åtminstone fram till 2008), men de teoretiska resultaten har lett till rekommendationer att i nya system föredra algoritmer med större blockstorlek och modern säkerhetsanalys.
Begränsningar och rekommendationer
Den 64-bitars blockstorleken innebär en inneboende begränsning: vid stora mängder krypterad data ökar risken för kollisionsrelaterade attacker (birthday attacks). Därför är Blowfish mindre lämpligt för stora datamängder, disk‑ eller filkryptering i moderna system. Bruce Schneier själv rekommenderade senare den nyare algoritmen Twofish som ett bättre alternativ för nya tillämpningar. För befintliga system där Blowfish används och nyckelbyten är sällsynta kan det dock fortfarande vara acceptabelt, men dagens goda praxis är att välja algoritmer med 128‑bitars block (t.ex. AES) eller moderna alternativ beroende på användningsfall.
Implementeringstips
- Använd välgranskade och uppdaterade bibliotek snarare än egen kod; många bibliotek erbjuder säkra implementationer av Blowfish.
- Var medveten om endianess, padding och blockläge (t.ex. CBC, ECB) — ECB ska undvikas för att dölja mönster.
- Se upp för sidokanalsläckage och försök att använda implementationer som minimerar timing- och cachebaserade attacker.
- För lösenordshantering föredras algoritmer avsedda för hashing, såsom bcrypt (baserad på Blowfish), Argon2 eller scrypt, snarare än att använda ett blockchiffer direkt.
Sammanfattningsvis är Blowfish en historiskt viktig och i många fall praktisk algoritm med god prestanda i mjukvara och en fri licensstatus. På grund av dess 64‑bitars blockstorlek, dyra nyckelinitering och framväxten av nyare algoritmer rekommenderas dock ofta modernare alternativ för nya system. Se även diskussionen om nyckelförstärkning och praktiska användningsfall som OpenBSDs lösenordshashning.
Relaterade sidor
- Avancerad krypteringsstandard
- eSTREAM - En utvärdering av nya strömkrypter som genomförs av EU.
- Twofish
- MacGuffin
Frågor och svar
F: Vad är Blowfish?
S: Blowfish är ett symmetriskt blockchiffer med nyckel som skapades 1993 av Bruce Schneier. Det har ingått i många krypteringsprodukter sedan dess.
F: Vad skapades Blowfish för?
S: Blowfish skapades som en algoritm för allmänt bruk för att ersätta den gamla DES-algoritmen och för att undanröja problem och svårigheter med andra krypteringsalgoritmer.
F: Hur lång kan nyckellängden vara för Blowfish?
S: Nyckellängden för Blowfish kan variera från 0 upp till 448 bitar.
F: Vilka är några egenskaper i utformningen av Blowfish?
S: Några av konstruktionens särdrag är nyckelberoende S-boxar och ett mycket komplicerat nyckelschema.
F: Finns det någon känd kryptoanalys av den fullständiga versionen av Blowfish?
S: 2008 finns det inget känt sätt att bryta de 16 fullständiga rundorna förutom genom en brutal sökning.
Fråga: Vilken typ av angrepp hittade Serge Vaudenay mot Blowfish?
Svar: Serge Vaudenay hittade en attack med kända klartexter som kräver 28r + 1 kända klartexter för att brytas, där r är antalet rundor. Han fann också en klass av svaga nycklar som kunde upptäckas och brytas genom samma attack med endast 24r + 1 kända klartexter.
F: Rekommenderar Bruce Schneier att använda Twofish i stället för Blowfish nu?
S: Ja, Bruce Schneier rekommenderar att man använder Twofish i stället för Blowfish nu på grund av dess förbättrade säkerhetsåtgärder jämfört med äldre algoritmer som DES eller till och med nyare algoritmer som AES.
Sök