Krüptograafias on Feistel-krüptograafia sümmeetriline struktuur, mida kasutatakse plokk-krüptograafide ehitamisel ja mis on nimetatud Saksa IBM-i krüptograafi Horst Feisteli järgi; seda tuntakse ka Feistel-võrguna. Suur hulk plokkšifreid kasutavad seda skeemi, sealhulgas Data Encryption Standard ning mitmed teised tuntud algoritmid (nt Blowfish, CAST-pered ja mitmed vanemad šifrid).
Konstruktsioon — põhimõtteline skeem
Feistel-võrk töötleb fikseeritud pikkusega plokke, mis jagatakse kaheks poolmaks — vasakuks (L) ja paremaks (R). Iga ümberkäigu (round) jooksul rakendatakse paremale poolele nn ümarfunktsiooni F koos rundivõtmega Ki ning seejärel kombineeritakse tulemus vasaku poolega tavaliselt XOR-operatsiooniga. Üldine kordusreegel ühe ümberkäigu kohta on:
- Li = R(i−1)
- Ri = L(i−1) XOR F(R(i−1), Ki)
Pärast mitut ümberkäiku võib lõpuks olla veel vasak- ja parempoolte vahetus, sõltuvalt konkreetse šifri disainist. Tähtis omadus on see, et funktsioon F ei pea olema pööratav — tänu Feisteli skeemile on kogu permutatsioon ikkagi pööratav ning seetõttu dekrüpteerimine on võimalik.
Dekrüpteerimine ja võtme ajakava
Feistel-struktuuri peamine praktiline eelis on see, et dekodeerimisoperatsioon on väga sarnane krüpteerimisele: sama ümberkäikude mehhanismi saab kasutada, kuid rundivõtmete järjekord pööratakse ümber (või vajadusel rakendatakse võtme ajakava vastupidises suunas). Seetõttu on rakenduse kood või riistvaraline loogika lihtne ja kompaktne — sama ploki ümberkäigufunktsioon F ja samad operatsioonid toimivad mõlemas suunas.
Rundifunktsioon F ja võtme ajakava
Rundifunktsioon F on tavaliselt kombinatsioonist:
- permutatsioonikastidest (P-kastid) — bitide ümberpaigutus (lineaarne samm)
- asenduskastidest (S-kastid) — mittelineaarsed asendustabelid, mis annavad segaduse (confusion)
- võtme segamisest (XOR, lisamine või muu lineaarne/mitteilineaarne kombineerimine) — võti on funktsiooni F parameeter
Lisaks kasutatakse sageli modulaaralgebra tähenduses lineaarseid operatsioone (nt XOR, rotatsioonid, liitmine), et saavutada soovitud hajutatuse (diffusion) ja segaduse (confusion) omadused. Nagu tekstis mainitud, on selle eesmärk tekitada süsteemis seda, mida Claude Shannon nimetas "segaduseks ja hajutamiseks".
Difusioon ja segadus
Bittide segamine (permutatsioonid ja lineaaroperatsioonid) tekitab difusiooni efekti — ühe sisendbiti mõju levib kiirelt üle kogu ploki. Asenduskastid (S-kastid) annavad mittelineaarsuse ehk segaduse, mis muudab suhet võtme ja väljundi vahel keerukaks. Mõlema tüüpi operatsioonide kordamine paljude ümberkäikude jooksul tagab tugevama turvalisuse.
Variatsioonid ja teoreetiline turvalisus
On olemas mitmeid Feistel-põhiseid variante:
- Tasakaalustatud Feistel (balanced) — kahe poole pikkus on võrdne.
- Ebatasakaalustatud (unbalanced) Feistel — pooled on erineva pikkusega, kasutatakse mõnes spetsiifilises konstruktsioonis.
- Generaliseeritud Feistel — mitu alamplokki ja keerukamad ümberjaotused ümarfunktsiooni sisendis/väljundis.
Teoreetiliselt on Luby–Rackoffi tulemused näidanud, et Feistel-konstruktsioon võib, kui kasutatakse piisavalt hästi valitud (pseudojuhuslikke) rindefunktsioone, tuua kaasa pseudojuhusliku permutatsiooni; konkreetsemalt annavad Luby ja Rackoff tingimused, mille alusel mõne ümberkäiguarvu korral saab tõestada turvalisuseomadusi (näiteks mitu ümberkäiku on vajalik, et saavutada teatud indistinguishability omadused).
Eelised ja puudused
- Eelised: lihtne pööratavus (F ei pea olema pööratav), vähene eraldi loogika dekrüpteerimiseks, hea sobivus riist- ja tarkvaralise implementatsiooni jaoks, modulaarne disain (S-kastid, P-kastid, võtme ajakava).
- Puudused: turvalisus sõltub tugevalt rundifunktsioonide ja võtme ajakava korralikkusest; nõuetekohase S-kastide ja võtmeajaskema kujundus on kriitiline. Samuti võib suure arvuga ümberkäike kaasa tuua jõudlusmõjusid.
Kasutusnäited
Praktilised Feistel-põhised šifrid hõlmavad lisaks DES-ile ka selliseid algoritme nagu Blowfish, CAST-pered ja mitmed muud plokkšifrid, kus on kasutatud Feistel-ideed ümberkäikude (rounds) ja S-/P-kastide kombinatsioonist.
Feistel-võrk on tänu oma lihtsusele, pööratavusele ja modulaarsele loogikale olnud üks võtmetehnikaid plokkšifrite konstruktsioonis. Õigesti kujundatud rundifunktsioonide ja võtme ajakava korral annab see tugeva aluse krüptograafiliselt turvalistele šifritele.

