Feistels netværk , eller Feistels design ( Eng. Feistel netværk, Feistel cipher ), er en af metoderne til at konstruere blokcifre . Netværket består af celler kaldet Feistel-celler . Indtastningen af hver celle modtager data og en nøgle. Ved udgangen af hver celle modtages de ændrede data og den ændrede nøgle. Alle celler er af samme type, og de siger, at netværket er en bestemt gentagne gange gentaget ( itereret ) struktur. Nøglen vælges afhængigt af krypterings-/dekrypteringsalgoritmen og ændres ved flytning fra en celle til en anden. Kryptering og dekryptering udfører de samme operationer; kun rækkefølgen er anderledesnøgler . På grund af betjeningens enkelhed er Feistel-netværket nemt at implementere både i software og hardware. En række blokcifre ( DES , RC2 , RC5 , RC6 , Blowfish , FEAL , CAST-128 , TEA , XTEA , XXTEA osv.) bruger Feistel-netværket som grundlag. Et alternativ til Feistel-netværket er permutation-permutation-netværket ( AES , etc.).
I 1971 patenterede Horst Feistel to enheder, der implementerede forskellige krypteringsalgoritmer , senere kaldet " Lucifer " ( eng. Lucifer ). En af disse enheder brugte et design, der senere blev kaldt "Feistel-netværket" ( engelsk Feistel-chiffer , Feistel-netværk ). Derefter arbejdede Feistel på skabelsen af nye kryptosystemer inden for IBMs mure sammen med Don Coppersmith . Lucifer-projektet var ret eksperimentelt, men blev grundlaget for DES-algoritmen ( eng. d ata e ncryption s tandard ). I 1973 offentliggjorde magasinet Scientific American Feistels artikel "Cryptography and computer security" ( Eng. Cryptography and computer privacy ) [1] , som afslørede nogle vigtige aspekter af kryptering og beskrev den første version af Lucifer- projektet. Den første version af Project Lucifer brugte ikke Feistel-netværket.
Baseret på Feistel-netværket blev DES-algoritmen designet. I 1977 vedtog de amerikanske myndigheder FIPS 46-3 standarden , der anerkendte DES som standardmetoden til datakryptering. DES har været meget brugt i kryptografiske systemer i nogen tid. Algoritmens iterative struktur gjorde det muligt at skabe simple software- og hardwareimplementeringer.
Ifølge nogle data [2] udviklede KGB allerede i 1970'erne i USSR en blokchiffer , der brugte Feistel-netværket, og sandsynligvis var det denne ciffer , der blev vedtaget i 1990 som GOST 28147-89 .
I 1987 blev FEAL- og RC2 - algoritmerne udviklet . Feistel-netværk blev udbredt i 1990'erne - i årene med fremkomsten af sådanne algoritmer som Blowfish (1993), TEA (1994), RC5 (1994), CAST-128 (1996), XTEA (1997), XXTEA (1998), RC6 (1998) og andre.
Den 2. januar 1997 annoncerede NIST Institute en konkurrence om at skabe en ny datakrypteringsalgoritme til at erstatte DES . Den nye blokchiffer fik navnet AES ( en avanceret krypteringsstandard ) og blev godkendt den 26. maj 2002 . AES bruger et substitutions-permutationsnetværk i stedet for et Feistel-netværk .
Lad det være påkrævet at kryptere nogle oplysninger , der præsenteres i binær form (i form af en sekvens af nuller og enere ) og placeret i hukommelsen på en computer eller anden enhed (for eksempel i en fil ).
krypteringsalgoritme.
Yderligere vil vi overveje operationer, der kun forekommer med én blok, da de samme operationer udføres med andre blokke under krypteringsprocessen.
De anførte operationer udføres N-1 gange, hvor N er antallet af runder i den valgte krypteringsalgoritme. I dette tilfælde, mellem overgangene fra en runde (stadie) til en anden, ændres nøglerne: den erstattes af , - af , osv.).
DekrypteringDekryptering af information sker på samme måde som kryptering, med den eneste undtagelse, at nøglerne følger i omvendt rækkefølge, det vil sige ikke fra den første til den Nte , men fra den N. til den første.
Resultatet af runderne er . I den N - te runde udføres permutationen og ikke, så det er muligt at bruge den samme procedure til dekryptering, blot ved at invertere rækkefølgen af at bruge nøglerne ( i stedet for ):
Med en lille ændring er det muligt at opnå fuldstændig identitet af krypterings- og dekrypteringsprocedurerne.
Fordele:
Overvej et eksempel. Lade:
Anvendelse af transformationen A én gang på inputblokken X vil resultere i outputblokken Y :
Når du anvender transformation A på resultatet af den tidligere transformation - Y , får du:
Lad inputblokken X bestå af to underblokke L og R af samme længde:
Vi definerer to transformationer:
Lad os introducere notationen:
Lad os bevise involutiviteten af den dobbelte transformation G ( ).
Det er let at se, at transformationen G kun ændrer den venstre underblok L , og efterlader den højre R uændret:
Derfor vil vi i det følgende kun betragte underblokken L . Efter at have anvendt transformationen G til L to gange, får vi:
På denne måde:
følgelig
og G er en involution .
Lad os bevise involutiviteten af den dobbelte transformation T ( ).
Overvej krypteringsprocessen. Lade:
Derefter kan transformationen udført på i+1 -te runde skrives som:
.Transformation udført i 1. runde:
Derfor vil outputværdien efter m krypteringsrunder være:
Det kan ses, at det på sidste trin ikke er nødvendigt at udføre en permutation af T .
Dekryptering udføres ved at anvende alle transformationerne i omvendt rækkefølge. På grund af involutiviteten af hver af transformationerne giver den omvendte rækkefølge det oprindelige resultat:
I sit værk "Cryptography and Computer Security" [1] beskriver Horst Feistel to blokke af transformationer (funktioner ):
Det kan vises, at enhver binær transformation over en datablok med fast længde kan implementeres som en s-boks . På grund af kompleksiteten af strukturen af N -bit s-blokken for store N , anvendes enklere konstruktioner i praksis.
Udtrykket "blok" i den originale artikel [1] bruges i stedet for udtrykket "funktion" på grund af det faktum, at vi taler om en blokchiffer, og det blev antaget, at s- og p-blokke ville være digitale mikrokredsløb (digitale). blokke).
S-blokSubstitutionsblokken (s-box, eng. s-box ) består af følgende dele:
Analyse af en n -bit S-blok for stor n er ekstremt vanskelig, men det er meget vanskeligt at implementere en sådan blok i praksis, da antallet af mulige forbindelser er ekstremt stort ( ). I praksis bruges substitutionsblokken som en del af mere komplekse systemer.
I det generelle tilfælde kan en s-blok have et forskelligt antal indgange/udgange; i dette tilfælde kan der i koblingssystemet ikke strengt taget én forbindelse gå fra hver udgang på dekoderen, men 2 eller flere, eller ikke gå kl. alle. Det samme gælder for encoder-indgangene.
I elektronik kan diagrammet til højre anvendes direkte. Ved programmering genereres erstatningstabeller. Begge disse tilgange er ækvivalente, dvs. en fil krypteret på en computer kan dekrypteres på en elektronisk enhed og omvendt.
Kombinationsnr. | 0 | en | 2 | 3 | fire | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
Indgang | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
Afslut | 011 | 000 | 001 | 100 | 110 | 111 | 010 | 101 |
Permutationsblokken (p-blok, eng. p-boks ) ændrer blot positionen af tallene og er en lineær enhed. Denne blok kan have et meget stort antal input og output, men på grund af lineariteten kan systemet ikke betragtes som krypto-resistent.
Krypteringsanalyse af en nøgle for en n -bit p-blok udføres ved at levere n-1 forskellige meddelelser til input, som hver består af n-1 nuller ("0") og 1 enere ("1") (eller omvendt, fra etaller og nul).
Cyklisk skiftDet kan påvises, at det cykliske skift er et specialtilfælde af p-blokken.
I det enkleste tilfælde (skift med 1 bit) spaltes den ekstreme bit og flyttes til den anden ende af registeret eller bussen. Afhængigt af hvilken bit der tages, højre eller venstre, kaldes skiftet højre eller venstre. Forskydninger med flere bit kan opfattes som at anvende et skift med 1 flere gange.
Skift retning | Bitrækkefølge før skift | Bitrækkefølge efter skift |
---|---|---|
Venstre | ||
ret |
Operationen " addition modulo n " betegnes som
( A + B ) mod nog er resten af at dividere summen A + B med n , hvor A og B er tal.
Det kan vises, at tilføjelsen af to tal modulo n er repræsenteret i det binære system som en s-blok, hvor tallet A føres til input , og et cyklisk skift til venstre med B bit bruges som omskiftning s-blokkens system.
I computerteknologi og elektronik er additionsoperationen som regel implementeret som modulo addition , hvor m er et heltal (normalt er m lig med maskinens kapacitet). For at komme i binær
A + B moddet er nok at tilføje tallene og derefter kassere cifrene fra m - th og ældre.
Multiplikation modulo nMultiplikation modulo n betegnes som
( A * B ) mod nog er resten af at dividere produktet A * B med n , hvor A og B er tal.
I personlige computere på x86 -platformen opnås et tal med en kapacitet på 2 * m , når to m -bit tal multipliceres . For at få resten efter at have divideret med , skal du kassere de m mest signifikante bits.
Generel visning af krypteringsalgoritmen ved hjælp af Feistel-netværket:
/* En funktion, der udfører transformationen af en underblok under hensyntagen til nøglens værdi (efter nøgle). Implementeringen afhænger af den valgte blokchifferalgoritme. */ int f ( int underblok , /* underblok for at konvertere */ int- tast /*-tast */ ); /* returværdi - konverteret blok */ /* Funktion, der udfører almindelig tekstkryptering */ ugyldig krypt ( int * venstre , /* venstre input underblok */ int * højre , /* højre input underblok */ int runder , /* antal runder */ int * nøgle /* række af nøgler (en nøgle pr. runde) */ ) { int i , temp ; for ( i = 0 ; i < runder ; i ++ ) { temp = * højre ^ f ( * venstre , tast [ i ] ); * højre = * venstre ; * venstre = temp ; } } /* Funktion, der udfører tekstdekryptering */ void dekrypter ( int * venstre , /* venstre krypteret underblok */ int * højre , /* højrekrypteret underblok */ int runder , /* antal runder */ int * nøgle /* række af nøgler (en nøgle pr. runde) */ ) { int i , temp ; for ( i = runder - 1 ; i >= 0 ; i - ) { temp = * venstre ^ f ( * højre , tast [ i ] ); * venstre = * højre ; * højre = temp ; } }Fordele:
Fejl:
Feistel-netværk er blevet bredt undersøgt af kryptografer på grund af deres udbredte brug. I 1988 foretog Michael Louby og Charles Rakoff forskning på Feistel-netværket og beviste, at hvis rundfunktionen er kryptografisk stærk pseudo-tilfældig, og de anvendte nøgler er uafhængige i hver runde, så vil 3 runder være nok for at blokchifferet er pseudo-tilfældig permutation, mens fire runder vil være nok til at lave en stærk pseudo-tilfældig permutation.
En " pseudo- tilfældig permutation " af Lubi og Rakoff er en, der er modstandsdygtig over for et adaptivt klartekstvalgsangreb, og en " stærk pseudo-tilfældig permutation " er en pseudo-tilfældig permutation, der er modstandsdygtig over for et valgt chiffertekstangreb.
Nogle gange i vestlig litteratur kaldes Feistel-netværket "Luby-Rackoff blokchifferet" til ære for Luby og Rackoff, som har lavet en stor mængde teoretisk forskning på dette område.
Senere, i 1997, foreslog Moni Naor og Omer Reingold en forenklet version af Lubi-Rakoff-konstruktionen, bestående af fire runder. Denne variant bruger to parvise uafhængige permutationer som første og sidste runde . De to midterste runder af Naor-Reingold-konstruktionen er identiske med runderne i Lubi-Rakoff-konstruktionen [6] .
Det meste af forskningen er afsat til studiet af specifikke algoritmer. Nogle sårbarheder er fundet i mange blokcifre baseret på Feistel-netværket, men i nogle tilfælde er disse sårbarheder rent teoretiske, og med den nuværende ydeevne på computere er det umuligt at bruge dem i praksis til cracking.
Med en stor størrelse af krypteringsblokke (128 bit eller mere), kan implementeringen af et sådant Feistel-design på 32-bit arkitekturer forårsage vanskeligheder, så modificerede versioner af dette design bruges. Netværk med fire grene er almindeligt anvendt. Figuren viser de mest almindelige modifikationer. Der er også ordninger, hvor længderne af halvdelene og ikke matcher. Sådanne netværk kaldes ubalancerede .
Kilde [7] :
Skema med én iteration af den fulde runde af IDEA- algoritmen |
---|
IDEA - algoritmen bruger et dybt modificeret Feistel-netværk. I den er 64-bit input-datablokke (betegnet med ) opdelt i 4 underblokke 16 bit lange . Hvert trin bruger 6 16-bit nøgler. I alt anvendes 8 hovedtrin og 1 forkortet.
Formler til beregning af værdien af underblokke i den i -te runde (for runde 1 til 8):
hvor er den j -te nøgle på den i -te runde.
Formel til beregning af 9. runde:
Funktionens output vil være
Det ses, at s- og p-blokke ikke anvendes i deres rene form. De vigtigste operationer er:
Historisk set var den første algoritme, der brugte Feistel-netværket, " Lucifer "-algoritmen, under det arbejde, hvor Feistel faktisk udviklede strukturen, som senere blev kendt som "Feistel-netværket". I juni 1971 modtog Feistel et amerikansk patent nr. 3798359 [8] .
Den første version af " Lucifer " brugte 48-bit blokke og nøgler og brugte ikke "Feistel-netværket"-designet. En efterfølgende modifikation af algoritmen blev patenteret i John L. Smiths navn i november 1971 (US Patent 3.796.830; Nov 1971) [ 9 ] , og patentet indeholder både en beskrivelse af selve Feistel-netværket og en specifik krypteringsfunktion. Den brugte 64-bit nøgler og 32-bit blokke. Og endelig blev den seneste version foreslået i 1973 og drevet med 128-bit blokke og nøgler. Den mest komplette beskrivelse af "Lucifer"-algoritmen blev givet i artiklen af Arthur Sorkin ( eng. Arthur Sorkin ) "Lucifer. Cryptographic Algorithm" ("Lucifer, A Cryptographic Algorithm") i tidsskriftet "Cryptology" ("Cryptologia") for januar 1984 [10] .
Selvom den oprindelige modifikation af "Lucifer" klarede sig uden "Feistel-cellerne", demonstrerer den godt, hvordan kun brugen af s- og p-bokse i høj grad kan fordreje den originale tekst. Strukturen af "Lucifer"-algoritmen i prøven fra juni 1971 er en "sandwich" af to typer lag, der bruges på skift - de såkaldte SP-netværk (eller substitutions-permutationsnetværk). Den første type lag er en 128-bit p-blok, efterfulgt af et andet lag, som er 32 moduler, som hver består af to fire-bit s-blokke , hvis tilsvarende indgange er kortsluttede og den samme værdi føres til dem fra outputtet af det forrige lag. Men selve substitutionsblokkene er forskellige (de adskiller sig i substitutionstabeller). Udgangen af modulet modtager værdier fra kun én af s-boksene, hvilken en specifikt er bestemt af en af bits i nøglen, hvis nummer svarede til nummeret på s-boksen i strukturen. Et forenklet diagram over algoritmen med en mindre bitdybde og et ufuldstændigt antal runder er vist i figuren. Den bruger 16 s-boks-vælgere (til i alt 32 s-bokse), så denne ordning bruger en 16-bit nøgle.
Lad os nu overveje, hvordan chifferteksten vil ændre sig i ovenstående algoritme, når kun en bit ændres. For nemheds skyld tager vi tabeller over s-blok- erstatninger , således at hvis alle nuller føres til input af en s-blok, så vil alle nuller også blive outputtet. I kraft af vores valg af s-blokke, hvis alle nuller føres til indgangen på krypteringsenheden, så vil udgangen af enheden være alle nuller. I rigtige systemer bruges sådanne substitutionstabeller ikke, da de i høj grad forenkler arbejdet for en kryptoanalytiker, men i vores eksempel illustrerer de tydeligt det stærke inter-karakter-forhold, når man ændrer en bit af den krypterede meddelelse. Det kan ses, at på grund af den første p-blok, flytter den eneste enhed til midten af blokken, derefter "multiplicerer" den næste ikke-lineære s-blok den, og allerede to enheder ændrer deres position på grund af den næste p -blok osv. I slutningen af krypteringsenheden, på grund af den stærke inter-symbol kobling, blev udgangsbittene en kompleks funktion af inputtet og den anvendte nøgle. I gennemsnit vil halvdelen af bits være "0" og halvdelen "1" i outputtet.
I sin kerne er Feistel-netværket et alternativ til komplekse SP-netværk og bruges meget mere udbredt. Fra et teoretisk synspunkt kan den runde krypteringsfunktion reduceres til et SP-netværk, men Feistel-netværket er mere praktisk, da kryptering og dekryptering kan udføres af samme enhed, men i omvendt rækkefølge af de anvendte nøgler. Den anden og tredje version af algoritmen (ved hjælp af Feistel-netværket) fungerede på 32-bit blokke med en 64-bit nøgle og 128-bit blokke med 128-bit nøgler. I den seneste (tredje) version var den runde krypteringsfunktion arrangeret meget enkelt - først blev den krypterede underblok sendt gennem et lag af 4-bit s-blokke (svarende til lag i SP-netværk, kun s-blokken er konstant og afhænger ikke af tonearten), så til den modulo 2 blev der tilføjet en rund nøgle, hvorefter resultatet blev ført gennem p-blokken.
Funktion (hvor:
i DES-algoritmen består af følgende operationer:
Det samlede antal runder i DES-algoritmen er 16.
Funktionen (hvor og er 32-bit tal) beregnes som følger:
Antallet af runder i GOST 28147-89-algoritmen er 32.
Følgende blokcifre bruger det klassiske eller modificerede Feistel-netværk som grundlag.
Algoritme | År | Antal runder | Nøglens længde | Blokstørrelse | Antal underblokke |
---|---|---|---|---|---|
blæsefisk | 1993 | 16 | fra 32 til 448 | 64 | 2 |
Camellia | 2000 | 18/24 | 128/192/256 | 128 | 2 |
CAST-128 | 1996 | 16/12 | 40-128 | 64 | 2 |
CAST-256 | 1998 | 12×4=48 | 128/192/256 | 128 | 2 |
CIFERUNIKORN-A | 2000 | 16 | 128/192/256 | 128 | 2 |
CIFERUNIKORN-E | 1998 | 16 | 128 | 64 | 2 |
CLEFIA | 2007 | 16 | 128/192/256 | 128 | 16 |
DEL | 1998 | 6 (8) | (128/192) 256 | 128 | 2 |
DES | 1977 | 16 | 56 | 64 | 2 |
DFC | 1998 | otte | 128/192/256 | 128 | ? |
FEAL | 1987 | 4-32 | 64 | 64 | 2 |
GOST 28147-89 | 1989 [2] | 32/16 | 256 | 64 | 2 |
IDE | 1991 | 8+1 | 128 | 64 | fire |
KASUMI | 1999 | otte | 128 | 64 | 2 |
Khufu | 1990 | 16-32/64 | 512 | 64 | 2 |
LOKI97 | 1997 | 16 | 128/192/256 | 128 | 2 |
Lucifer | 1971 | 16 | 48/64/128 | 48/32/128 | 2 |
MacGuffin | 1994 | 32 | 128 | 64 | fire |
MAGENTA | 1998 | 6/8 | 128/192/256 | 128 | 2 |
MARS | 1998 | 32 | 128-1248 | 128 | 2 |
Barmhjertighed | 2000 | 6 | 128 | 4096 | ? |
MISTY1 | 1995 | 4×n(8) | 128 | 64 | fire |
Raiden | 2006 | 16 | 128 | 64 | 2 |
RC2 | 1987 | 16+2 | 8-128 | 64 | fire |
RC5 | 1994 | 1-255(12) | 0-2040(128) | 32/64/128 | 2 |
RC6 | 1998 | tyve | 128/192/256 | 128 | fire |
RTEA | 2007 | 48/64 | 128/256 | 64 | 2 |
FRØ | 1998 | 16 | 128 | 128 | 2 |
Sinople | 2003 | 64 | 128 | 128 | fire |
skipjack | 1998 | 32 | 80 | 64 | fire |
TE | 1994 | 64 | 128 | 64 | 2 |
Triple DES | 1978 | 32/48 | 112/168 | 64 | 2 |
To fisk | 1998 | 16 | 128/192/256 | 128 | fire |
XTEA | 1997 | 64 | 128 | 64 | 2 |
XTEA-3 | 1999 | 64 | 256 | 128 | fire |
XXTEA | 1998 | 12-64 | 128 | 64 | 2 |
Symmetriske kryptosystemer | |
---|---|
Stream-cifre | |
Feistel netværk | |
SP netværk | |
Andet |