Blowfish kriptogrāfijā — definīcija, darbība un vēsture

Blowfish kriptogrāfijā: definīcija, darbība un vēsture — uzzini par algoritma principiem, S-kastēm, atslēgu garumu, drošību un pielietojumiem no 1993. gada līdz mūsdienām.

Autors: Leandro Alegsa

Blowfish kriptogrāfijā ir simetrisks bloka šifrs ar atslēgu, ko 1993. gadā izveidoja Brūss Šneiers (Bruce Schneier). Kopš izlaišanas tas ir iekļauts daudzos šifrēšanas produktos un bibliotēkās. Blowfish bija populārs, jo nodrošina ātru šifrēšanu programmatūrā un bija brīvi pieejams — Šneiers īpaši norādīja: "Blowfish nav patentēts, un tāds tas paliks visās valstīs. Ar šo algoritms tiek nodots atklātībā, un ikviens to var brīvi izmantot."

Galvenās īpašības un dizains

Blowfish ir 64 bitu bloka lielums un mainīgs atslēgas garums no 0 līdz 448 bitiem. Tas ir 16 apļu Feistela šifrs. Konstrukcijas centrā ir lielas, no atslēgas atkarīgas S-veida kastes (S-boxes) un sarežģīts atslēgas grafiks, kas kopā ar P-masīvu (P-array) un S-kastēm nosaka šifrēšanas darbības.

Tehniski svarīgākie punkti:

  • Blowfish izmanto P-masīvu ar 18 32 bitu subatslēgām un četras S-kastes, katra ar 256 32 bitu vērtībām.
  • S-kastes un P-masīvs sākotnēji tiek inicializēti ar konstantiem datiem (tradicionāli ņemti no pi burtiskuma), pēc tam tie tiek pārveidoti, izmantojot atslēgu (key expansion) — P-masīvs tiek XOR-ots ar atslēgas bitiem, un tad ar iteratīvu Blowfish šifrēšanu (šifrējot nulles blokus) tiek ģenerētas gala vērtības P-masīvam un S-kastēm.
  • Šī atslēgas iepriekšapstrāde (key setup) ir relatīvi lēna: katras jaunas atslēgas ieviešana prasa būtisku aprēķinu apjomu — tādēļ Blowfish nav optimāls situācijām, kur vajadzīgas biežas atslēgas maiņas vai ierobežoti resursi.

Veiktspēja un praktiskais pielietojums

Blowfish parasti ir ātrs, ja tas tiek lietots ar vienu un to pašu atslēgu ilgiem datu apjoma šifrēšanas uzdevumiem. Tomēr atslēgas inicializācijas (atslēgas grafika) laikietilpīgums nozīmē, ka katras jaunas atslēgas izmantošana ir dārga — iepriekš ir minēts, ka atslēgas apstrāde var prasīt tikpat daudz laika kā apmēram 4 kilobaitu teksta šifrēšana. Tas ierobežo Blowfish izmantošanu mazākās iegultajās sistēmās vai citur, kur resursi ir ierobežoti.

Tas arī padara Blowfish par piemērotu bāzi dažiem drošības rīkiem, kur lēna atslēgas apstrāde ir priekšrocība. Piemēram, OpenBSD izmantotajā paroles šifrēšanas metodē izmanto algoritmu, kas radies no Blowfish un kas izmanto lēnu atslēgu grafiku. Šāda pieeja (bekts) palielina nepieciešamo aprēķinu daudzumu un tādējādi grūtina vārdnīcu uzbrukumus un brutālas paroles atminēšanas mēģinājumus — skat. atslēgas nostiprināšanu.

Drošība, kriptoanalītiskie rezultāti un vājās vietas

Blowfish kopumā bija uzskatāms par drošu daudzu gadu garumā. Tomēr pastāv daži svarīgi aspekti un ierobežojumi:

  • 64 bitu bloka izmērs: tas mūsdienās tiek uzskatīts par trūkumu lielu datu apjomu aizsardzībā, jo ar 64 bitu bloku izmēru kolīzijas (birthday attacks) kļūst praktiski būtiskas apmēros pēc aptuveni 2^32 bloku šifrēšanas. Tāpēc Blowfish nav ieteicams lieliem datu apjomiem vai mūsdienu protokolos, kuros ilgstoši izmanto to pašu atslēgu.
  • Kriptoanalītiskie uzbrukumi: 1996. gadā Seržs Vaudenejs atklāja uzbrukumu ar zināmu tekstu, kurš nepieciešama 28r + 1 zināma atklātā teksta (r ir raundu skaits) un arī atrada vāju atslēgu klasi, kuru var atklāt ar 24r + 1 zināma atklātā teksta pieņēmumu, ja ir pieejamas no atslēgas atkarīgās S-kastes. Šis uzbrukums nav praktiski pielietojams pret parasto Blowfish bez šo S-kasšu atklāšanas.
  • Vincents Rijmens savos doktora darbos izstrādāja otrās kārtas diferenciālo uzbrukumu, kas var uzlauzt četras Blowfish kārtas, bet ne vairāk.
  • 1996. gadā publiskotā C koda versijā tika atklāta zīmes paplašināšanas (sign-extension) kļūda, kas bija implementācijas kļūda, nevis algortima vājums.

Vispārīgi runājot, vēl līdz 2008. gadam nebija publiski zināma pārliecinoša pilnas 16 raundu Blowfish (full-round) uzlaušanas metode, izņemot mechānismu ar brutālu spēku. Tomēr, ņemot vērā 64 bitu bloka ierobežojumu un jauno algoritmu pieejamību, Blowfish mūsdienu inženierijā tiek pakāpeniski aizstāts.

Vēsture un attīstība

Blowfish tika radīts kā atvērta alternatīva daudzām patentētām vai slepenajām metodēm, kas bija dominējušas līdz tam. Šneiers vēlējās nodrošināt ātru, drošu un bezmaksas risinājumu, kas būtu pieejams plašai lietošanai. Kopš izveidošanas ir radušies vairākas variācijas un uzlabojumi, tostarp eksperimentālās versijas un Blowfish atvasinājumi, kurus izmanto konkrētos uzdevumos (piem., paroles hashošanai).

Atvasinājumi un alternatīvas

Blowfish iedvesmoja vairākus vēlākus algoritmus un projektus:

  • Twofish — Brūsa Šneiera vēlāk izstrādāts bloka šifrs, ko viņš ieteica kā modernāku alternatīvu; tas piedāvā 128 bitu blokus un citus uzlabojumus.
  • bcrypt — paroles hashošanas funkcija, kas balstīta uz ekspensīvu atslēgas ieguves modi EksBlowfish (expensive key schedule variant). Tieši bcrypt un EksBlowfish izmanto lēnās atslēgas apstrādes iezīmes, lai palielinātu paroles glabāšanas drošību pret brute-force uzbrukumiem.
  • AES — mūsdienās plaši pieņemts standarts (jo īpaši protokolos), labi piemērots lieliem datu apjomiem un tiek uzskatīts par drošāku izvēli dažādu iemeslu dēļ (piem., 128 bitu bloka izmērs nav cieši ierobežots tāpat kā 64 bitu).
  • Citas mūsdienu alternatīvas ietver Twofish, Serpent vai strāvas šifrus kā ChaCha20 atkarībā no pielietojuma.

Praktiski ieteikumi

  • Ja veidojat jaunu sistēmu, kas prasa bloka šifrēšanu, ieteicams izvēlēties algoritmu ar 128 bitu bloka lielumu (piem., AES) — Blowfish ar 64 bitu bloku vairs nav optimāla izvēle lieliem datu apjomiem.
  • Ja nepieciešama paroles glabāšana ar aizsardzību pret brutālu spēku, izmantojiet bcrypt (kas balstās uz Blowfish idejām, bet izmanto papildu drošības mehānismus), Argon2 vai citas mūsdienīgas paroles hashošanas funkcijas.
  • Blowfish ir bez patentu ierobežojumiem un ir brīvi lietojams, tāpēc tas joprojām var būt piemērots dažiem iebūvētiem vai legacy risinājumiem, taču jāņem vērā iepriekš minētie ierobežojumi.
  • Pievērsiet uzmanību implementācijai — agrākajos publiskajos koda paraugos ir bijušas drošības kļūdas (piem., sign-extension kļūdas). Labāk lietot labi uzturētas, testētas kriptogrāfijas bibliotēkas.

Kopsavilkums

Blowfish bija nozīmīgs un praktisks algoritms savā laikā: tas ir ātrs programmatūrā, bez patentu ierobežojumiem un izmantots daudzos produktos. Taču tā 64 bitu bloka lielums un lēnā atslēgas inicializācija padara to mazāk piemērotu mūsdienu pielietojumiem, kuros priekšroka tiek dota 128 bitu bloka algoritmiem (piem., AES) vai specializētām metodēm paroles aizsardzībai (piem., bcrypt). Brūss Šneiers ir ieteicis izmantot Twofish kā modernāku alternatīvu, un kopumā nozarē notiek pāreja uz jaunākiem standarta risinājumiem.

Saistītās lapas

Jautājumi un atbildes

J: Kas ir Blowfish?


A: Blowfish ir simetrisks bloka šifrs ar atslēgu, ko 1993. gadā radīja Brūss Šneiers (Bruce Schneier). Kopš tā laika tas ir iekļauts daudzos šifrēšanas produktos.

J: Kādam nolūkam tika radīts Blowfish?


A: Blowfish tika izveidots kā vispārējas nozīmes algoritms, lai aizstātu veco DES algoritmu un novērstu citu šifrēšanas algoritmu problēmas un grūtības.

J: Cik garš var būt Blowfish atslēgas garums?


A: Blowfish atslēgas garums var būt no 0 līdz 448 bitiem.

J: Kādas ir dažas Blowfish konstrukcijas iezīmes?


A: Dažas no konstrukcijas iezīmēm ietver no atslēgas atkarīgas S-kastes un ļoti sarežģītu atslēgas grafiku.

J: Vai ir zināma Blowfish pilnas kārtas versijas kriptoanalīze?


A: Kopš 2008. gada nav zināms veids, kā uzlauzt pilnu 16 kārtu versiju, izņemot meklēšanu ar brutālu spēku.

J: Kāda veida uzbrukumu Serge Vaudenay atrada pret Blowfish?


A: Seržs Vudenajs atklāja uzbrukumu ar zināmu atklātu tekstu, kura uzlaušanai bija nepieciešams 28r + 1 zināms atklāts teksts, kur r ir kārtu skaits. Viņš arī atrada vāju atslēgu klasi, ko var atklāt un salauzt ar šo pašu uzbrukumu, izmantojot tikai 24r + 1 zināmu atklātu tekstu.

Jautājums: Vai Brūss Šneiers iesaka tagad Blowfish vietā izmantot Twofish?


A: Jā, Brūss Šneiers iesaka tagad Blowfish vietā izmantot Twofish, jo tā drošības pasākumi ir uzlaboti salīdzinājumā ar vecākiem algoritmiem, piemēram, DES, vai pat jaunākiem, piemēram, AES.


Meklēt
AlegsaOnline.com - 2020 / 2025 - License CC3