Feistelova síť neboli Feistelův návrh ( angl. Feistel network, Feistel cipher ), je jednou z metod konstrukce blokových šifer . Síť je tvořena buňkami nazývanými Feistelovy buňky . Vstup každé buňky přijímá data a klíč. Na výstupu každé buňky jsou přijata změněná data a změněný klíč. Všechny buňky jsou stejného typu a říkají, že síť je určitá opakovaně opakovaná ( iterovaná ) struktura. Klíč se vybírá v závislosti na šifrovacím / dešifrovacím algoritmu a mění se při přechodu z jedné buňky do druhé. Šifrování a dešifrování provádějí stejné operace; liší se pouze pořadí kláves . Díky jednoduchosti ovládání je síť Feistel snadno softwarově i hardwarově implementovatelná. Řada blokových šifer ( DES , RC2 , RC5 , RC6 , Blowfish , FEAL , CAST-128 , TEA , XTEA , XXTEA atd.) využívá jako základ síť Feistel. Alternativou k síti Feistel je permutačně-permutační síť ( AES atd.).
V roce 1971 si Horst Feistel patentoval dvě zařízení, která implementovala různé šifrovací algoritmy , později nazvané „ Lucifer “ ( eng. Lucifer ). Jedno z těchto zařízení používalo konstrukci později nazvanou „Feistelova síť“ ( anglicky Feistelova šifra , Feistelova síť ). Poté Feistel pracoval na vytvoření nových kryptosystémů ve zdech IBM spolu s Donem Coppersmithem . Projekt Lucifer byl spíše experimentální, ale stal se základem pro algoritmus DES ( angl. d ata e ncryption s standard ). V roce 1973 časopis Scientific American publikoval Feistelův článek „Cryptography and computer security“ ( Eng. Cryptography and computer privacy ) [1] , který odhalil některé důležité aspekty šifrování a popsal první verzi projektu Lucifer . První verze projektu Lucifer nepoužívala síť Feistel.
Na základě sítě Feistel byl navržen algoritmus DES. V roce 1977 americké úřady přijaly standard FIPS 46-3 , který uznal DES jako standardní metodu pro šifrování dat. DES je již nějakou dobu široce používán v kryptografických systémech. Iterativní struktura algoritmu umožnila vytvářet jednoduché softwarové i hardwarové implementace.
Podle některých údajů [2] v SSSR již v 70. letech KGB vyvinula blokovou šifru , která používala Feistelovu síť, a pravděpodobně to byla právě tato šifra , která byla v roce 1990 přijata jako GOST 28147-89 .
V roce 1987 byly vyvinuty algoritmy FEAL a RC2 . Sítě Feistel se rozšířily v 90. letech - během let vzniku takových algoritmů jako Blowfish (1993), TEA (1994), RC5 (1994), CAST-128 (1996), XTEA (1997), XXTEA (1998), RC6 (1998) a další.
2. ledna 1997 vyhlásil institut NIST soutěž na vytvoření nového algoritmu šifrování dat, který nahradí DES . Nová bloková šifra dostala název AES ( standard pokročilého šifrování ) a byla schválena 26. května 2002 . AES používá substituční permutační síť namísto Feistelovy sítě .
Nechť je požadováno šifrování některých informací prezentovaných v binární podobě (ve formě sekvence nul a jedniček ) a umístěných v paměti počítače nebo jiného zařízení (například v souboru ).
šifrovací algoritmus.
Dále budeme uvažovat operace, které se vyskytují pouze s jedním blokem, protože stejné operace se provádějí s jinými bloky během procesu šifrování.
Uvedené operace jsou provedeny N-1 krát, kde N je počet kol ve zvoleném šifrovacím algoritmu. V tomto případě se mezi přechody z jednoho kola (stage) do druhého mění klávesy: je nahrazeno , - , atd.).
DešifrováníDešifrování informací probíhá stejným způsobem jako šifrování, s jedinou výjimkou, že klíče následují v obráceném pořadí, tedy nikoli od prvního k N -tému , ale od N -tého k prvnímu.
Výsledek kol je . V N - tém kole se permutace a neprovádí, takže je možné použít stejný postup pro dešifrování, jednoduše obrácením pořadí použití klíčů ( místo ):
S malou změnou je možné dosáhnout úplné identity šifrovacích a dešifrovacích procedur.
výhody:
Zvažte příklad. Nechat:
Jednorázové použití transformace A na vstupní blok X bude mít za následek výstupní blok Y :
Když aplikujete transformaci A na výsledek předchozí transformace - Y , získáte:
Vstupní blok X nechť sestává ze dvou podbloků L a R stejné délky:
Definujeme dvě transformace:
Představme si notaci:
Dokažme involutivitu dvojí transformace G ( ).
Je snadné vidět, že transformace G změní pouze levý podblok L a pravý R ponechá beze změny:
Proto v následujícím budeme uvažovat pouze podblok L . Po dvojnásobném použití transformace G na L dostaneme:
Takto:
tudíž
a G je involuce .
Dokažme involutivitu dvojí transformace T ( ).
Zvažte proces šifrování. Nechat:
Pak lze transformaci provedenou v i+1 -tém kole zapsat jako:
.Transformace provedená v 1. kole:
Proto výstupní hodnota po m šifrovacích kolech bude:
Je vidět, že v poslední fázi není nutné provádět permutaci T .
Dešifrování se provádí aplikací všech transformací v opačném pořadí. Vzhledem k involutivity každé z transformací dává obrácené pořadí původní výsledek:
Horst Feistel ve své práci „Cryptography and Computer Security“ [1] popisuje dva bloky transformací (funkcí ):
Lze ukázat, že jakákoli binární transformace přes datový blok pevné délky může být implementována jako s-box . Vzhledem ke složitosti struktury N -bitového s-bloku pro velké N se v praxi používají jednodušší konstrukce.
Pojem "blok" v původním článku [1] je použit místo pojmu "funkce" z důvodu, že mluvíme o blokové šifře a předpokládalo se, že s- a p-bloky budou digitální mikroobvody (digitální bloky).
S-blokNáhradní blok (s-box, angl. s-box ) se skládá z následujících částí:
Analýza n -bitového S-bloku pro velké n je extrémně obtížná, ale je velmi obtížné implementovat takový blok v praxi, protože počet možných spojení je extrémně velký ( ). V praxi se substituční blok používá jako součást složitějších systémů.
V obecném případě může mít s-blok různý počet vstupů/výstupů; v tomto případě v přepínacím systému nemůže jít striktně jedno připojení z každého výstupu dekodéru, ale 2 nebo více, nebo nejde Všechno. Totéž platí pro vstupy kodéru.
V elektronice lze přímo použít schéma vpravo. Při programování se generují náhradní tabulky. Oba tyto přístupy jsou ekvivalentní, tj. soubor zašifrovaný na počítači lze dešifrovat na elektronickém zařízení a naopak.
Kombinace č. | 0 | jeden | 2 | 3 | čtyři | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|---|
Vchod | 000 | 001 | 010 | 011 | 100 | 101 | 110 | 111 |
Výstup | 011 | 000 | 001 | 100 | 110 | 111 | 010 | 101 |
Permutační blok (p-blok, angl. p-box ) pouze mění polohu čísel a je lineárním zařízením. Tento blok může mít velmi velké množství vstupů a výstupů, nicméně vzhledem k linearitě nelze systém považovat za kryptoodolný.
Kryptoanalýza klíče pro n -bitový p-blok se provádí dodáním n-1 různých zpráv na vstup, z nichž každá se skládá z n-1 nul ("0") a 1 jedniček ("1") (nebo naopak od jedniček a nuly).
Cyklický posunLze ukázat, že cyklický posun je speciální případ p-bloku.
V nejjednodušším případě (posun o 1 bit) se krajní bit oddělí a přesune na druhý konec registru nebo sběrnice. V závislosti na tom, který bit se bere, doprava nebo doleva, se posun nazývá doprava nebo doleva. Posuny o více bitů lze považovat za použití posunu o 1 vícekrát.
Směr posunu | Pořadí bitů před směnou | Pořadí bitů po směně |
---|---|---|
Vlevo, odjet | ||
že jo |
Operace " sčítání modulo n " je označena jako
( A + B ) mod na je zbytek po dělení součtu A + B n , kde A a B jsou čísla.
Lze ukázat, že sčítání dvou čísel modulo n je v binární soustavě reprezentováno jako s-blok, ve kterém je na vstup přivedeno číslo A a jako přepínání se používá cyklický posun doleva o B bitů. systém s-bloku.
Ve výpočetní technice a elektronice se operace sčítání zpravidla realizuje jako sčítání modulo , kde m je celé číslo (obvykle m je rovno kapacitě stroje). Chcete-li se dostat do binárního kódu
A + B modstačí sečíst čísla a pak číslice od m - té a starší vyhodit.
Násobení modulo nNásobení modulo n je označeno jako
( A * B ) mod na je zbytek po dělení součinu A * B n , kde A a B jsou čísla.
V osobních počítačích na platformě x86 se při vynásobení dvou m -bitových čísel získá číslo s kapacitou 2 * m . Chcete-li získat zbytek po dělení , musíte zahodit m nejvýznamnějších bitů.
Celkový pohled na šifrovací algoritmus pomocí sítě Feistel:
/* Funkce, která provádí transformaci podbloku s přihlédnutím k hodnotě klíče (podle klíče). Implementace závisí na zvoleném algoritmu blokové šifry. */ int f ( int podblok , /* podblok pro převod */ klíč int /* klíč */ ); /* návratová hodnota - převedený blok */ /* Funkce, která provádí šifrování prostého textu */ prázdná krypta ( int * left , /* left input subblok */ int * vpravo , /* pravý vstupní podblok */ int rounds , /* počet kol */ int * klíč /* pole klíčů (jeden klíč na kolo) */ ) { int i , teplota ; pro ( i = 0 ; i < zaokrouhlí ; i ++ ) { temp = * vpravo ^ f ( * vlevo , klávesa [ i ] ); * vpravo = * vlevo ; * vlevo = teplota ; } } /* Funkce, která provádí dešifrování textu */ void dešifrovat ( int * vlevo , /* vlevo zašifrovaný podblok */ int * right , /* right zašifrovaný podblok */ int rounds , /* počet kol */ int * klíč /* pole klíčů (jeden klíč na kolo) */ ) { int i , teplota ; pro ( i = kola - 1 ; i >= 0 ; i -- ) { temp = * left ^ f ( * right , key [ i ] ); * vlevo = * vpravo ; * vpravo = teplota ; } }výhody:
nedostatky:
Sítě Feistel byly široce studovány kryptografy kvůli jejich širokému použití. V roce 1988 provedli Michael Louby a Charles Rakoff výzkum na síti Feistel a dokázali, že pokud je kruhová funkce kryptograficky silná pseudonáhodná a použité klíče jsou v každém kole nezávislé, budou stačit 3 kola. aby bloková šifra byla pseudonáhodnou permutací, zatímco čtyři kola budou stačit k vytvoření silné pseudonáhodné permutace.
" Pseudonáhodná permutace " od Lubiho a Rakoffa je ta, která je odolná vůči adaptivnímu útoku s volbou otevřeného textu, a " silná pseudonáhodná permutace " je pseudonáhodná permutace, která je odolná vůči zvolenému útoku šifrovaného textu.
Někdy se v západní literatuře Feistelova síť nazývá „Luby-Rackoffova bloková šifra“ na počest Lubyho a Rackoffa, kteří v této oblasti provedli velké množství teoretických výzkumů.
Později, v roce 1997, Moni Naor a Omer Reingold navrhli zjednodušenou verzi konstrukce Lubi-Rakoff, sestávající ze čtyř nábojů. Tato varianta používá dvě párové nezávislé permutace jako první a poslední kolo . Dva střední náboje konstrukce Naor-Reingold jsou totožné s náboji v konstrukci Lubi-Rakoff [6] .
Většina výzkumu je věnována studiu konkrétních algoritmů. Některé zranitelnosti byly nalezeny v mnoha blokových šifrách založených na síti Feistel, ale v některých případech jsou tyto zranitelnosti čistě teoretické a při současném výkonu počítačů je prakticky nelze použít k prolomení.
Při velké velikosti šifrovacích bloků (128 bitů nebo více) může implementace takového návrhu Feistel na 32bitových architekturách způsobit potíže, proto se používají upravené verze tohoto návrhu. Běžně se používají sítě se čtyřmi větvemi. Obrázek ukazuje nejběžnější úpravy. Existují také schémata, ve kterých se délky polovin a neshodují. Takové sítě se nazývají nevyvážené .
Zdroj [7] :
Schéma jedné iterace celého kola algoritmu IDEA |
---|
Algoritmus IDEA využívá hluboce upravenou síť Feistel. V něm jsou 64bitové vstupní datové bloky (označené ) rozděleny do 4 podbloků o délce 16 bitů . Každá fáze používá 6 16bitových klíčů. Celkem je použito 8 hlavních stupňů a 1 zkrácený.
Vzorce pro výpočet hodnoty dílčích bloků v i -tém kole (pro kola 1 až 8):
kde je j -tá klávesa v i -tém kole.
Vzorec pro výpočet 9. kola:
Výstupem funkce bude
Je vidět, že s- a p-bloky se nepoužívají v čisté formě. Hlavní operace jsou:
Historicky prvním algoritmem využívajícím Feistelovu síť byl algoritmus „ Lucifer “, během práce na kterém Feistel skutečně vyvinul strukturu, která se později stala známou jako „Feistelova síť“. V červnu 1971 obdržel Feistel americký patent č. 3798359 [8] .
První verze „ Lucifer “ používala 48bitové bloky a klíče a nepoužívala design „Feistel network“. Následná modifikace algoritmu byla patentována jménem Johna L. Smithe v listopadu 1971 (US Patent 3 796 830; listopad 1971) [ 9 ] a patent obsahuje jak popis samotné sítě Feistel, tak specifické šifrovací funkce. Používal 64bitové klíče a 32bitové bloky. A konečně, poslední verze byla navržena v roce 1973 a fungovala se 128bitovými bloky a klíči. Nejúplnější popis algoritmu "Lucifer" byl uveden v článku Arthura Sorkina ( angl. Arthur Sorkin ) "Lucifer. Cryptographic Algorithm" ("Lucifer, A Cryptographic Algorithm") v časopise "Cryptology" ("Cryptologia") za leden 1984 [10] .
Původní modifikace „Lucifer“ se sice obešla bez „Feistelových buněk“, ale dobře demonstruje, jak pouze použití s- a p-boxů může značně zkreslit původní text. Struktura „Luciferova“ algoritmu vzorku z června 1971 je „sendvič“ dvou typů vrstev používaných postupně – tzv. SP-sítě (neboli substituční-permutační sítě). Prvním typem vrstvy je 128bitový p-blok, následovaný druhou vrstvou, což je 32 modulů, z nichž každý se skládá ze dvou čtyřbitových s-bloků , jejichž odpovídající vstupy jsou zkratovány a stejná hodnota je přiváděna do je z výstupu předchozí vrstvy . Samotné substituční bloky jsou ale jiné (liší se v substitučních tabulkách). Výstup modulu přijímá hodnoty pouze z jednoho s-boxu, který je konkrétně určen jedním z bitů v klíči, jehož počet odpovídal číslu s-boxu ve struktuře. Zjednodušené schéma algoritmu s menší bitovou hloubkou a neúplným počtem kol je na obrázku. Používá 16 selektorů s-box (celkem 32 s-boxů), takže toto schéma používá 16bitový klíč.
Uvažujme nyní, jak se změní šifrový text ve výše uvedeném algoritmu, když se změní pouze jeden bit. Pro jednoduchost vezmeme tabulky nahrazení s-bloku tak, že pokud jsou všechny nuly přivedeny na vstup s-bloku, pak všechny nuly budou také na výstupu. Na základě našeho výběru s-bloků, pokud jsou všechny nuly přiváděny na vstup šifrovacího zařízení, pak na výstupu zařízení budou samé nuly. V reálných systémech se takové substituční tabulky nepoužívají, protože značně zjednodušují práci kryptoanalytika, ale v našem příkladu jasně ilustrují silný vztah mezi znaky při změně jednoho bitu zašifrované zprávy. Je vidět, že díky prvnímu p-bloku se jediná jednotka přesune do středu kvádru, následně ji další nelineární s-blok „znásobí“ a již dvě jednotky změní svou polohu díky dalšímu p -blok atd. Na konci šifrovacího zařízení se díky silné mezisymbolové vazbě výstupní bity staly komplexní funkcí vstupu a použitého klíče. V průměru bude polovina bitů na výstupu „0“ a polovina „1“.
Síť Feistel je ve svém jádru alternativou ke komplexním sítím SP a je využívána mnohem šířeji. Z teoretického hlediska lze funkci kruhového šifrování redukovat na síť SP, ale praktičtější je síť Feistel, protože šifrování a dešifrování lze provádět stejným zařízením, ale s opačným pořadím použitých klíčů. Druhá a třetí verze algoritmu (s využitím sítě Feistel) pracovaly na 32bitových blocích s 64bitovým klíčem a 128bitových blocích se 128bitovými klíči. V nejnovější (třetí) verzi byla funkce kulatého šifrování uspořádána velmi jednoduše - nejprve se šifrovaný podblok prošel vrstvou 4bitových s-bloků (podobně jako vrstvy v sítích SP, pouze s-blok je konstantní a nezávisí na klíči), pak k němu modulo 2 byl přidán kulatý klíč, po kterém byl výsledek předán přes p-blok.
Funkce (kde:
v algoritmu DES se skládá z následujících operací:
Celkový počet kol v algoritmu DES je 16.
Funkce (kde a jsou 32bitová čísla) se vypočítá takto:
Počet nábojů v algoritmu GOST 28147-89 je 32.
Následující blokové šifry využívají jako základ klasickou nebo upravenou Feistelovu síť.
Algoritmus | Rok | Počet kol | Délka klíče | Velikost bloku | Počet dílčích bloků |
---|---|---|---|---|---|
blowfish | 1993 | 16 | od 32 do 448 | 64 | 2 |
Kamélie | 2000 | 18/24 | 128/192/256 | 128 | 2 |
CAST-128 | 1996 | 12/16 | 40-128 | 64 | 2 |
CAST-256 | 1998 | 12×4=48 | 128/192/256 | 128 | 2 |
CIPHERUNICORN-A | 2000 | 16 | 128/192/256 | 128 | 2 |
CIPHERUNICORN-E | 1998 | 16 | 128 | 64 | 2 |
CLEFIA | 2007 | 16 | 128/192/256 | 128 | 16 |
OBCHOD | 1998 | 6 (8) | (128/192) 256 | 128 | 2 |
DES | 1977 | 16 | 56 | 64 | 2 |
DFC | 1998 | osm | 128/192/256 | 128 | ? |
FEAL | 1987 | 4-32 | 64 | 64 | 2 |
GOST 28147-89 | 1989 [2] | 32/16 | 256 | 64 | 2 |
IDEA | 1991 | 8+1 | 128 | 64 | čtyři |
KASUMI | 1999 | osm | 128 | 64 | 2 |
Chufu | 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 | čtyři |
PURPUROVÁ | 1998 | 6/8 | 128/192/256 | 128 | 2 |
MARS | 1998 | 32 | 128-1248 | 128 | 2 |
Soucit | 2000 | 6 | 128 | 4096 | ? |
MISTY1 | 1995 | 4×n(8) | 128 | 64 | čtyři |
Raiden | 2006 | 16 | 128 | 64 | 2 |
RC2 | 1987 | 16+2 | 8-128 | 64 | čtyři |
RC5 | 1994 | 1-255(12) | 0-2040(128) | 32/64/128 | 2 |
RC6 | 1998 | dvacet | 128/192/256 | 128 | čtyři |
RTEA | 2007 | 48/64 | 128/256 | 64 | 2 |
SEMÍNKO | 1998 | 16 | 128 | 128 | 2 |
Sinople | 2003 | 64 | 128 | 128 | čtyři |
skipjack | 1998 | 32 | 80 | 64 | čtyři |
ČAJ | 1994 | 64 | 128 | 64 | 2 |
Trojitý DES | 1978 | 32/48 | 112/168 | 64 | 2 |
Dvě ryby | 1998 | 16 | 128/192/256 | 128 | čtyři |
XTEA | 1997 | 64 | 128 | 64 | 2 |
XTEA-3 | 1999 | 64 | 256 | 128 | čtyři |
XXTEA | 1998 | 12-64 | 128 | 64 | 2 |
Symetrické kryptosystémy | |
---|---|
Streamové šifry | |
Síť Feistel | |
Síť SP | |
jiný |