Kriptografijoje Feistelio šifras yra simetrinė struktūra, naudojama blokiniams šiframs kurti, pavadinta vokiečių IBM kriptografo Horsto Feistelio vardu; jis taip pat paprastai vadinamas Feistelio tinklu. Šią schemą naudoja daug blokinių šifrų, įskaitant duomenų šifravimo standartą.

Feistelio struktūros privalumas tas, kad šifravimo ir dešifravimo operacijos yra labai panašios, o kai kuriais atvejais net identiškos, todėl reikia tik pakeisti rakto tvarkaraštį. Todėl tokiam šifrui įgyvendinti reikalingo kodo ar grandinės dydis sumažėja beveik perpus.

Feistelio konstrukcija yra iteracinio pobūdžio, todėl kriptosistemą lengviau įgyvendinti aparatinėje įrangoje.

Feistelio tinklai ir panašios konstrukcijos yra produktų šifrai, todėl jie sujungia kelis pasikartojančių operacijų raundus, pvz:

  • Bitų perstumdymas (dažnai vadinamas permutacijų dėžutėmis arba P-dėžutėmis)
  • Paprastos netiesinės funkcijos (dažnai vadinamos pakaitų dėžutėmis arba S-dėžutėmis)
  • Linijinis maišymas (modulinės algebros prasme) naudojant XOR, kad būtų sukurta funkcija su dideliu kiekiu to, ką Claude'as Shannonas apibūdino kaip "painiavą ir difuziją".

Bitų permaišymas sukuria sklaidos efektą, o pakeitimu sukuriama painiava.

Feistelio tinklo pagrindinė struktūra

Feistelio šifre blokas padalijamas į dvi lygias dalis: kairę (L) ir dešinę (R). Kiekviename raunde taikoma funkcija F, kuri naudoja raundo raktą Ki ir vieną bloko pusę, o rezultatas kombinuojamas su kita puse per XOR operaciją. Standartinė vieno raundo transformacija (i-tas raundas) yra:

Li = R{i-1} Ri = L{i-1} XOR F(R{i-1}, Ki)

Tokia konstrukcija užtikrina, kad visas tinklas yra invertuojamas net jei pati funkcija F nėra invertuojama — invertavimui tereikia taikyti raundus atvirkštine tvarka su atitinkamais raktais.

Šifravimo ir dešifravimo žingsniai

Tipinis Feistelio šifravimo algoritmas:

  1. Padalinti į bloką L0 || R0.
  2. Uždaryti N raundų: kiekviename raunde atnaujinti Li ir Ri pagal aukščiau pateiktą formulę.
  3. Gauti išeigos bloką LN || RN (kai kuriose implementacijose gale atliekama papildoma permutacija arba swap).

Dešifravimas atliekamas ta pačia schema, tačiau raktų tvarka atvirkštinė (K_N, K_{N-1}, ..., K_1). Dėl Feistelio savybių nereikia invertuoti funkcijos F — pakanka taikyti raundus atvirkščiai.

Pavyzdžiai ir variacijos

  • DES (Data Encryption Standard) — klasikinis 64 bitų bloko, 56 bitų rakto, 16 raundų Feistelio šifras.
  • Blowfish — Feistelio tipo šifras su kintamu raundų skaičiumi ir sudėtingu rakto planu.
  • Twofish — naudoja Feistelio principus kartu su pažangesnėmis S-dėžutėmis ir maišymo etapais.
  • Yra variantų: balanced (lygios pusės), unbalanced (skirtingo dydžio pusės) ir Generalized Feistel Network (GFN), kur bloko dalys gali būti daugiau nei dvi.

Funkcijos F, S-dėžutės ir P-dėžutės

Raundo funkcija F dažnai susideda iš kelių žingsnių: rakto sumaišymo, S-dėžutės (pakaitos) taikymo netiesinumio suteikimui ir P-dėžutės (permutacijos) sklaidai. Gerai suprojektuotos S-dėžutės turi mažą struktūrinį ryšį su įvestimi, kad būtų atsparios diferencinei ir linijinei kriptanalizei.

Saugumo aspektai

Feistelio tinklo saugumas priklauso nuo:

  • rau ndo funkcijų F dizaino (netiesiškumo, S-dėžučių savybių),
  • raundų skaičiaus — per mažai raundų leidžia kriptanalizei išnaudoti struktūrinius modelius,
  • rakto tvarkaraščio (key schedule) — silpnas rakto generavimas gali sukelti rakto atskleidimą ar reikšmingas simetrijas.

Matematiniai rezultatai, pvz., Luby–Rackoff teorema, rodo, kad su idealiais atsitiktiniais raundo funkcijų pasirinkimais ribinis raundų skaičius (pvz., 3 ar 4) gali užtikrinti tam tikras pseudorandom permutacijų savybes. Praktikoje dizaineriai dažnai naudoja daug raundų (pvz., 16), kad suteiktų atsparumą realioms atakoms (diferencinei, linijinei ir kitoms modernioms atakoms).

Privalumai ir trūkumai

Privalumai:

  • Šifravimo ir dešifravimo logika labai panaši — paprasta implementacija ir mažesnis kodas/aparatinė grandinė.
  • Funkcija F gali būti sudėtinga arba net invertuotina nereikalaujanti, todėl įmanoma plačiai keisti dizainą be dešifravimo sudėtingumo padidėjimo.
  • Lengva pritaikyti variantus (GFN, nevienalyčiai blokai) ir optimizuoti aparatūrai.

Trūkumai:

  • Feistelio saugumas stipriai priklauso nuo F ir rakto plano — netinkamai suprojektuotos S-dėžutės ar per mažai raundų gali lemti pažeidžiamumą.
  • Kai kurie modernūs konstrukcijų tipai (pvz., SPN — substitution–permutation network) leidžia kitokias optimizacijas ir kartais geresnį paralelizavimą.

Trumpa santrauka

Feistelio šifras yra patikima ir lanksčią architektūrą turinti blokinių šifrų paradigma: ji suteikia efektyvų būdą sukurti invertuojimą be būtinybės, kad raundo funkcija būtų invertuojama. Daug žinomų šifrų, įskaitant DES ir kitus, naudoja Feistelio principus, o tinkamas raundų funkcijų, S-dėžučių ir rakto planavimo projektavimas yra esminis saugai užtikrinti.