Inden for kryptografi er en Feistel-chiffer en symmetrisk struktur, der anvendes til konstruktion af blokchiffer, opkaldt efter den tyske IBM-kryptograf Horst Feistel; den er også almindeligvis kendt som et Feistel-netværk. En lang række blokchiffrer anvender dette skema, herunder Data Encryption Standard
Feistel-strukturen har den fordel, at krypterings- og dekrypteringsoperationer er meget ens, i nogle tilfælde endog identiske, og at det kun kræver en omvendt nøgleplanlægning. Derfor er størrelsen af den kode eller det kredsløb, der kræves for at implementere en sådan kryptering, næsten halveret.
Feistel-konstruktionen er iterativ i sin natur, hvilket gør det lettere at implementere kryptosystemet i hardware.
Feistel-netværk og lignende konstruktioner er produktchiffrer og kombinerer derfor flere runder af gentagne operationer, f.eks:
- Bit-shuffling (ofte kaldet permutationsbokse eller P-bokse)
- Simple ikke-lineære funktioner (ofte kaldet substitutionsbokse eller S-bokse)
- Lineær blanding (i modulalgebraens forstand) ved hjælp af XOR for at frembringe en funktion med store mængder af det, som Claude Shannon beskrev som "forvirring og spredning".
Bit shuffling skaber diffusionseffekten, mens substitution bruges til at skabe forvirring.
Hvordan en Feistel-runde virker
I et klassisk, afbalanceret Feistel-netværk opdeles et blokdata-stykke i to lige store halvdele, kaldet venstre (L) og højre (R). En enkel runde beskrives ofte som:
L_{i+1} = R_i og R_{i+1} = L_i XOR F(R_i, K_i)
Her er F en (typisk ikke-inverterbar) runde-funktion, og K_i er rundens nøgle (fra nøgleplanlægningen). Efter flere runder byttes halvdelenes roller gentagne gange. Fordi L_{i+1} kun er en kopi af R_i, og R_{i+1} kombinerer L_i og en funktion af R_i, behøver F ikke at være invertibel for at hele cifren kan dekrypteres — dekryptering udføres blot ved at køre samme konstruktionstrin i omvendt rækkefølge med rundefunktionerne anvendt i reverse nøglerækkefølge.
Varianter
- Afbalanceret Feistel: Halvdelene er lige store (mest almindeligt).
- Uafbalanceret Feistel: Halvdelene kan have forskellig størrelse; anvendt i nogle specialiserede cifre for at håndtere inputstørrelser, der ikke er lige.
- Generaliserede Feistel-netværk: Flere end to blokke (f.eks. 4-vejs Feistel), hvor runderoterende kombinationer bruges mellem flere ord.
Sikkerhed og teoretiske resultater
Feistel-netværkets sikkerhed afhænger af rundefunktionernes kvalitet, antallet af runder og nøgleplanlægningen. Et vigtigt teoretisk resultat er Luby–Rackoff-teoremet, som viser, at under antagelsen af uafhængige tilfældige rundefunktioner kan et lille antal runder give stærke sikkerhedsegenskaber:
- Med tre uafhængige tilfældige rundefunktioner får man en pseudotilfældig permutation (PRP) — dvs. opfører sig som et tilfældigt bijektivt kortlægning for en angriber uden ubegrænsede ressourcer.
- Med fire runder opnås ofte stærkere sikkerhedsegenskaber (såkaldt strong PRP) mod bredere angrebstyper.
I praksis kræver sikre, konkrete design typisk flere runder end det teoretiske minimum, og man skal være opmærksom på kendte svagheder i selve rundefunktionen og i nøgleplanlægningen.
Anvendelser
Feistel-konstruktionen er brugt i mange kendte blokchifre. Den mest berømte anvendelse er Data Encryption Standard, som bruger 16 runder og en bestemt type rundefunktion baseret på S-bokse og permutationer. Andre eksempler (uden links i denne artikel) inkluderer Blowfish, CAST og 3DES (som bruger DES-kerner i en itereret struktur).
Fordele og ulemper
- Fordele:
- Enkel dekryptering: samme struktur som kryptering, blot omvendt nøgleordre.
- Rundefunktionen behøver ikke at være inverterbar, hvilket giver designfrihed.
- Let at implementere effektivt både i hardware og software.
- Ulemper:
- Kræver ofte mange runder for at opnå ønsket sikkerhed, hvilket kan påvirke ydeevnen.
- Fejl i rundefunktionen eller nøgleplanlægningen kan svække hele cifren.
Implementeringsnoter
Når man implementerer et Feistel-baseret chiffer, er følgende praktiske forhold vigtige:
- Nøgleplanlægning: En sikker og effektiv udledning af rundekeyes er afgørende. Enkel ombytning af nøgler kan gøre dekryptering trivialt, men en dårlig nøgleplanlægning kan lække information om nøglen.
- Rundefunktionens design: F bør indeholde både ikke-lineariteter (S-bokse) og spredning (permutationer / P-bokse) for at undgå statistiske svagheder.
- Antal runder: Vælg et passende antal runder baseret på både teoretiske analyser og praktisk erfaring i forhold til ønsket sikkerhedsniveau.
- Sidekanalangreb: Implementationsmodståelsesmekanismer (time-masking, konstante-tidsoperationer osv.) er vigtige for virkelige systemer.
Sammenfatning
Et Feistel-netværk er en fleksibel og velafprøvet metode til at bygge blokchifre. Dets hovedfordele er enkel implementering, symmetri mellem kryptering og dekryptering og muligheden for at anvende ikke-inverterbare rundefunktioner. Sikkerhed afhænger dog stærkt af rundefunktionens kvalitet, nøgleplanlægningen og antallet af runder — og derfor testes og analyseres konkrete Feistel-baserede cifre nøje før brug i kritiske systemer.

