Blowfish (šifras) – apibrėžimas, struktūra ir saugumas

Blowfish šifras – išsamus apibrėžimas, struktūros ir saugumo analizė: greitis, raktų tvarkaraštis, 64 bitų blokas, pritaikymas ir palyginimas su AES.

Autorius: Leandro Alegsa

Kriptografijoje "Blowfish" yra simetrinis blokinis šifras su raktu, kurį 1993 m. sukūrė Bruce'as Schneier ir kuris nuo 1993 m. buvo įtrauktas į daugelį šifravimo produktų. Programinėje įrangoje Blowfish pasižymi gera šifravimo sparta ir ilgą laiką (iki maždaug 2008 m.) nebuvo rastas praktinis, visus 16 raundų palaužiantis kriptoanalitinis metodas. Dėl naujesnių standartų ir didesnio bloko dydžio poreikio dabar daugelyje naujų taikymų pirmenybė teikiama AES blokinio šifro algoritmui.

Istorija ir paskirtis

Bruce'as Schneier sukūrė Blowfish kaip bendros paskirties algoritmą, skirtą pakeisti senąjį DES ir spręsti kitų šifravimo algoritmų problemas bei teisines apribojimų problemas. Tuo metu daugelis alternatyvų buvo patentuotos arba laikomos uždaru kodu; Schneieris aiškiai nurodė, kad „Blowfish yra nepatentuotas ir toks liks visose šalyse. Algoritmas skelbiamas viešai prieinamu ir gali būti laisvai naudojamas bet kurio asmens“ — tai leido laisvai jį įtraukti į atviro kodo programinę įrangą ir produktus.

Struktūra ir techninės savybės

Blowfish yra 16 raundų Feistelio konstrukcijos šifras su 64 bitų bloko dydžiu ir kintamu rakto ilgiu nuo 0 iki 448 bitų. Pagrindinės konstrukcijos ypatybės yra dideli, nuo rakto priklausantys S formos dėžutės (S-box'ai) ir sudėtingas raktų tvarkaraštis (key schedule).

  • Pagrindinės Blowfish komponentės: P-masyvas (18 32 bitų subraktų) ir keturios S-dėžutės po 256 32 bitų įrašų.
  • Pradiniai P ir S laukai inicijuojami su konstanta seka — dažniausiai naudojami heksadecimalūs π skaitmenys — o vėliau jie modifikuojami naudojant rakto baitus ir iteratyvų užšifravimą.
  • Raktų paruošimo (key schedule) procesas: P-masyvas yra XOR'inamas su rakto baitais, po to dviejų 32 bitų nulių blokas iteratyviai užšifruojamas, o gauti rezultatai panaudojami atnaujinti P ir S reikšmes. Dėl šio proceso kiekvieną kartą keičiant raktą reikia atlikti daug skaičiavimo — tai užtrunka maždaug tiek laiko, kiek užšifruoti apie 4 KB teksto.

Dėl sudėtingo raktų inicijavimo Blowfish yra labai greitas šifruojant ar dešifruojant duomenis, kai raktas nekinta, bet lėtas, kai dažnai keičiami raktai. Todėl jis mažai tinkamas labai ribotus resursus turinčioms įterptinėms sistemoms (pvz., ankstyvosios išmaniosios kortelės), tačiau daugelyje programų tai nėra problema.

Raktų stiprinimas ir bcrypt

Vienas iš tų praktinių pritaikymų, kur lėtas rakto apdorojimas yra privalumas, – slaptažodžių saugojimas. OpenBSD ir kiti naudoja iš Blowfish kilusią konstrukciją, žinomą kaip slaptažodžių šifravimo arba bcrypt (EksBlowfish) metodą, kuriame specialiai ketinama pailginti rakto apdorojimą, kad apsaugotų nuo žodyno atakų ir brutalių bandymų. Idėja tokia — papildomos skaičiavimo sąnaudos apsunkina masinį spėjimą, todėl paskyros ir slaptažodžių duomenų bazių vagystės tampa mažiau naudingos užpuolikams. Žr. rakto stiprinimą.

Saugumas ir kriptoanalizė

Per metus Blowfish buvo intensyviai analizuojamas. Daug svarbių rezultatų:

  • 1996 m. Serge'as Vaudenay atrado teorinį žinomo teksto (known-plaintext) požiūrį, kuris leidžia aptikti tam tikras silpnų raktų klases ir kurio reikalingų žinomų atvirų tekstų skaičius labai auga su raundų skaičiumi; praktiniu požiūriu šios atakos nėra taikomos prieš įprastą 16 raundų Blowfish, nes jos reikalauja žinoti nuo rakto priklausančias S-dėžutes arba didžiulės kiekio atvirų tekstų.
  • Vincentas Rijmenas savo daktaro disertacijoje pristatė antros eilės diferencinę ataką, kuri gali sulaužyti iki keturių raundų, bet neapima visų 16 raundų.
  • Buvo aptiktos tam tikros silpnų raktų klasės, kurias galima identifikuoti su modifikuotomis atakomis, tačiau jos nėra praktiškai exploituojamos standartinėje Blowfish diegimo konfigūracijoje.
  • 1996 m. viename iš paskelbtų C kodų buvo rasta ženklo pratęsimo (sign extension) klaida — tai implementacijos klaida, o ne algoritmo silpnumas; tokios klaidos gali lemti pažeidžiamumą, todėl būtina atidžiai tikrinti realizacijas.

Taip pat verta paminėti, kad 64 bitų bloko dydis yra mažesnis už šiuolaikinius standartus (pvz., AES naudoja 128 bitų bloką). Praktinėje praktikoje tai reiškia, kad dirbant su dideliais duomenų kiekiais padidėja rizika dėl „birthday“ reiškinio (blokų pasikartojimo) ir tam tikrų režimų saugumas gali susilpnėti. Dėl šių priežasčių Blowfish nebepriskiriamas prie pirmojo pasirinkimo naujiems projektams, kuriuose tvarkomi dideli duomenų kiekiai ar reikalingas ilgaamžis saugumas.

Iki maždaug 2008 m. viešai nebuvo žinoma gera pilnos 16 raundų Blowfish kriptoanalizė, kuri būtų praktiškai įvykdoma. Vis dėlto 2007 m. pats Bruce'as Schneieras pažymėjo, kad nors Blowfish vis dar naudojamas, jis rekomendavo vietoj jo naudoti naujesnį ir saugesnį šeimos variantą — "Twofish" — arba kitus modernius, prižiūrimus standartus (pvz., AES).

Praktiniai patarimai

  • Jei kuriate naują sistemą, ypač kai reikalingas didelis bloko dydis ar ilgaamžis saugumas, geriau rinktis AES arba kitą plačiai prižiūrimą šifrą.
  • Jei reikalingas algoritmas be patentų apribojimų arba norite naudoti variacijas, skirtas slaptažodžių maišams (bcrypt), Blowfish šeimos sprendimai gali būti prasmingi.
  • Visada naudokite gerai apžiūrėtus, atnaujintus ir saugius įgyvendinimus; atminties valdymo ir bitų interpretavimo klaidos (pvz., sign extension) gali padaryti net teoriškai saugų algoritmą pažeidžiamu.

Santrauka: Blowfish buvo svarbus ir plačiai naudojamas blokinis šifras, pasižymintis greitu šifravimu po rakto paruošimo ir viešu prieinamumu be patentinių apribojimų. Tačiau lėtas rakto inicijavimo procesas, 64 bitų bloko dydis ir naujesni, geriau analizuoti algoritmai (pvz., AES, Twofish) reiškia, kad šiandien Blowfish retai renkamas kaip pirminis sprendimas naujiems projektams, nors jis tebėra reikšmingas istorijoje ir tam tikruose specializuotuose taikymuose (pvz., bcrypt).

Susiję puslapiai

Klausimai ir atsakymai

K: Kas yra "Blowfish"?


A: "Blowfish" yra simetrinis blokinis šifras, kurį 1993 m. sukūrė Bruce'as Schneieras. Nuo to laiko jis įtrauktas į daugelį šifravimo produktų.

K: Kam buvo sukurtas "Blowfish"?


A: "Blowfish" buvo sukurtas kaip bendros paskirties algoritmas, kad pakeistų senąjį DES algoritmą ir pašalintų kitų šifravimo algoritmų problemas ir sunkumus.

K: Kokio ilgio gali būti "Blowfish" rakto ilgis?


A: "Blowfish" rakto ilgis gali būti nuo 0 iki 448 bitų.

K: Kokios yra kai kurios "Blowfish" konstrukcijos ypatybės?


A: Kai kurios konstrukcijos ypatybės yra nuo rakto priklausantys S-laukai ir labai sudėtingas rakto tvarkaraštis.

K: Ar yra žinoma kokia nors kriptoanalizė, skirta "Blowfish" pilnojo raundo versijai?


A.: Nuo 2008 m. nėra žinomo būdo nulaužti visus 16 raundų, išskyrus paiešką brutalia jėga.

K: Kokio tipo ataką prieš "Blowfish" rado Serge'as Vaudenay?


A: Serge Vaudenay nustatė žinomo teksto ataką, kuriai įveikti reikia 28r + 1 žinomo teksto, kur r yra raundų skaičius. Jis taip pat rado silpnų raktų klasę, kurią galima aptikti ir sulaužyti ta pačia ataka, naudojant tik 24r + 1 žinomą atvirą tekstą.

Klausimas: Ar Bruce'as Schneieris rekomenduoja dabar naudoti "Twofish", o ne "Blowfish"?


A: Taip, Bruce'as Schneieras rekomenduoja dabar naudoti "Twofish", o ne "Blowfish", nes, palyginti su senesniais algoritmais, tokiais kaip DES, ar net naujesniais, tokiais kaip AES, šis algoritmas pasižymi geresnėmis saugumo priemonėmis.


Ieškoti
AlegsaOnline.com - 2020 / 2025 - License CC3