Blowfish: sümmeetriline plokkšiffer (Bruce Schneier, 1993)
Krüptograafias on Blowfish võtmega sümmeetriline plokkšiffer, mille töötas välja Bruce Schneier 1993. aastal ja mis on alates selle avaldamisest kasutusse võetud paljudes krüpteerimistoodetes. Blowfish on tarkvaras väga kiire ning kuni 2008. aastani ei olnud avalikult leitud selle täisringi kohta tõsist krüptoanalüütilist rünnemudelit. Samas on viimastel aastatel rohkem tähelepanu pööratud AES plokksüsteemidele ja nende kasutamisele uutes rakendustes.
Taust ja eesmärk
Schneier kavandas Blowfishi üldotstarbeliseks algoritmiks, et pakkuda turvalist ja kiiret asendust tol ajal levinud, kuid piiratud võimalustega DES-ile ning lahendada teiste tollaste krüptosüsteemide puudused. Avaldamise ajal olid paljud teised krüpteerimisalgoritmid patenteeritud või hoidnud oma täpseid detaile saladuses. Schneier rõhutas, et "Blowfish on patenteerimata ja jääb selleks kõikides riikides. Algoritm on käesolevaga avalikustatud ja seda võib igaüks vabalt kasutada." See vabanemine patentidest ja tasuta kättesaadavus aitas Blowfishil laialdaselt levida.
Peamised omadused ja ehitus
Blowfish kasutab 64-bitist plokisuurust ja muutuva võtmepikkusega 0 kuni 448 bitti. See on 16-vooruline Feistel-struktuur, mille olulised komponendid on võtmetest sõltuvad S-kastid ja keerukas võtme ajakava. Konstruktsioon meenutab ülesehituselt mõningal määral CAST-128i, kuid Blowfish kasutab võtmetest lähtuvaid S-kaste, mitte fikseeritud.
Rakenduslikud tehnilised detailid:
- Algoritmi sees on 18 32-bitist P-alaelemendi (P-array) alamvõtit ja neli 32-bitist S-kasti, igaühes 256 elementi.
- Võtme töötlemine (initialization) genereerib need P-elemendid ja S-kastid võtme põhjal, kasutades korduvat plokkide krüpteerimist – see on põhjus, miks uue võtme võtmepõhine eeltöötlus võtab suhteliselt palju aega.
Tõhusus ja piirangud
Blowfish on tavapäraselt väga kiire, kui räägime andmete krüpteerimisest juba eeltöödelduse järel. Kuid iga uus võtme loomine nõuab eeltöötlust, mis võib võtta aega, mis on ligikaudu võrdne ~4 kilobaidi teksti krüpteerimisega; see muudab võtmete sagedase muutmise kalliks. See omadus muudab Blowfishi vähem sobivaks ressurssivaestes seadmetes (näiteks varasemate kiipkaartide tasemel), kus arvutusressursid on piiratud. Teisalt on aeglane võtme ajakava kasulik paroolide töötlemisel: OpenBSD-s kasutatav paroolide peitmise meetod kasutab Blowfishist tuletatud algoritmi, mis tekitab teadliku arvutusliku takistuse ründajale (nt sõnastikurünnakute vastu). See tehnika on tuntud ka kui võtme tugevdamine; Vt võtme tugevdamine.
Turvalisus ja krüptoanalüüs
Kuigi Blowfishile ei ole leitud praktilist rünnet kogu 16-voorulise skeemi purustamiseks, on selle kohta avaldatud mitmeid teoreetilisi tulemusi ja nõrkuste analüüse:
- 1996. aastal leidis Serge Vaudenay teoreetilise teada‑tuntud teksti rünnaku ja tuvastas ka teatud nõrkade võtmete klassi. Need rünnakud nõuavad väga suurt hulka teadaolevaid tekste ning eeldavad võtmetest sõltuvate S-kastide sisemist struktuuri, mistõttu nende praktiline kasutatavus tavalise Blowfishi vastu on piiratud.
- Vincent Rijmen töödes demonstreeriti teise astme diferentsiaalrünnak, mis suudab purustada kuni neli vooru, kuid see ei laiene kogu 16-voorulisele versioonile.
- 1996. aastal avastati avalikus C-koodis järeleandetest tulenenud märkide laiendamise viga (sign-extension bug), mis oli rakendusevea, mitte krüptosüsteemi algpõhjus.
Kuni 2008. aastani ei olnud avalikult teada ühtegi praktilist ja usaldusväärset krüptoanalüüsi Blowfishi täisringi kohta. Siiski märkis Bruce Schneier 2007. aastal, et kuigi Blowfish on endiselt kasutuses, soovitab ta uuemate vajaduste puhul pigem kasutada tema teist algoritmi Twofish, mis lahendab osa Blowfishi piirangutest (nt suurem paindlikkus ja kaasaegsem disain).
Kaasaegne kasutus ja soovitused
Blowfish jääb kasulikuks mitmetes, eriti vanemates või piiratud-liiklusega süsteemides, kuid tänapäevaste nõudmistega tuleb arvesse võtta mõningaid piiranguid:
- 64-bitine plokk tähendab, et suure hulga andmete krüpteerimisel ilmneb küllastumine (birthday attack) kiiremini kui 128-bitise plokiga algoritmide puhul — see teeb Blowfishi vähem sobivaks suuremahuliste andmevoogude jaoks.
- Kui alustavate võtmete sagedane uuendamine on vajalik, võib Blowfishi eeltöötluse aeg olla rakendusele liigne koormus.
- Paroolide hoiustamisel ja auditeeritud rakendustes kasutatakse Blowfishist tuletatud meetodeid (näiteks bcrypt), sest aeglane võtme ajakava annab lisaohutuse murdekatsete vastu.
Kokkuvõttes on Blowfish olnud oluline samm mitmete tasuta ja laialtlevinud krüptosüsteemide kujunemisel: tema patenteerimatus ja head jõudlusomadused on teinud ta populaarseks, kuid tänapäeva soovituste kohaselt peaks uute süsteemide puhul eelistama sageli AESi või muid kaasaegseid plokksifreid või vähemalt arvestama Blowfishi piirangutega (eriti 64-bitise plokisuuruse tõttu).
Seotud leheküljed
- Täiustatud krüpteerimisstandard
- eSTREAM - ELi poolt läbiviidav uute voogkoodide hindamine.
- Twofish
- MacGuffin
Küsimused ja vastused
K: Mis on Blowfish?
V: Blowfish on 1993. aastal Bruce Schneieri poolt loodud sümmeetriline plokkšiffer. Sellest ajast alates on see lisatud paljudesse krüpteerimistoodetesse.
K: Milleks on Blowfish loodud?
V: Blowfish tehti üldotstarbelise algoritmina, et asendada vana DES-algoritm ning kõrvaldada teiste krüpteerimisalgoritmide probleemid ja raskused.
K: Kui pikk võib Blowfishi võtme pikkus olla?
V: Blowfishi võtme pikkus võib olla vahemikus 0 kuni 448 bitti.
K: Millised on Blowfishi konstruktsiooni mõned omadused?
V: Mõnede konstruktsiooni omaduste hulka kuuluvad võtmest sõltuvad S-kastid ja väga keerukas võtme ajakava.
K: Kas Blowfishi täisringi versiooni kohta on teadaolevalt tehtud krüptoanalüüs?
V: 2008. aasta seisuga ei ole teadaolevalt võimalik murda täielikku 16 vooru, välja arvatud toorest otsingut.
K: Millist tüüpi rünnakut leidis Serge Vaudenay Blowfishi vastu?
V: Serge Vaudenay leidis teadaoleva tekstiga rünnaku, mille murdmiseks on vaja 28r + 1 teadaolevat puhasteksti, kus r on voorude arv. Ta leidis ka nõrkade võtmete klassi, mida on võimalik avastada ja murda sama rünnaku abil ainult 24r + 1 teadaoleva algtekstiga.
K: Kas Bruce Schneier soovitab nüüd Blowfishi asemel kasutada Twofishi?
V: Jah, Bruce Schneier soovitab nüüd Blowfishi asemel kasutada Twofishi, kuna selle turvameetmed on paremad kui vanemate algoritmide, näiteks DESi või isegi uuemate, näiteks AESi puhul.