rechts|439x439px In de cryptografie is de Feistelcijfer (ook bekend als Luby-Rackoff-blokcijfer) een symmetrisch encryptie algoritme die wordt gebruikt bij de constructie van blokvercijfering . Het is vernoemd naar de in Duitsland geboren natuurkundige en cryptograaf Horst Feistel, die baanbrekend onderzoek deed toen hij werkte voor IBM. Het staat ook wel bekend als een Feistel-netwerk . Een groot aantal blokvercijferingen maakt gebruik van dit schema, waaronder de Amerikaanse Data Encryption Standard, de Sovjet-/Russische GOST en de recentere Blowfish- en Twofish- encryptie algoritmes. Bij een Feistelcijfer zijn encryptie en decryptie zeer vergelijkbare handelingen. Beide bestaan uit het iteratief uitvoeren van een functie, een zogenaamde " ronde-functie ", een vast aantal keren.
Geschiedenis Veel moderne symmetrische blokcijfers zijn gebaseerd op Feistel-netwerken. Feistel-netwerken werden voor het eerst commercieel gezien in het Lucifer -algortime van IBM, ontworpen door Horst Feistel en Don Coppersmith in 1973. Feistel-netwerken kregen aanzien toen de Amerikaanse federale overheid in 1976 de DES (een encryptie algoritme gebaseerd op Lucifer, met wijzigingen door de NSA ) invoerde. Net als andere componenten van de DES zorgt het iteratieve karakter van de Feistelconstructie ervoor dat het algoritme eenvoudiger in hardware kan worden geïmplementeerd (met name op de hardware die beschikbaar was toen DES werd ontworpen). Tot op de dag toe worden Feistel-netwerken nog gebruikt. Een paar voorbeelden hiervan zijn: Camellia, Cast-128, Twofish, Blowfish
Ontwerp Een Feistel-netwerk gebruikt een ronde functie, een functie die twee inputs heeft – een datablok en een subsleutel – en retourneert één uitvoer van dezelfde grootte als het datablok. De rondefunctie wordt ook wel de F-functie genoemd. In elke ronde wordt de rondefunctie uitgevoerd op de helft van de te versleutelen gegevens, en wordt de uitvoer ervan geXOR'ed met de andere helft van de gegevens. Dit wordt een vast aantal keren herhaald en het eindresultaat zijn de geëncrypteerde gegevens. Een belangrijk voordeel van Feistel-netwerken ten opzichte van andere algoritmes, zoals substitutie-permutatienetwerken, is dat de gehele bewerking gegarandeerd omkeerbaar is (dat wil zeggen dat geëncrypteerde gegevens kunnen worden gedecrypt), zelfs als de rondefunctie zelf niet omkeerbaar is. De ronde functie kan willekeurig ingewikkeld worden gemaakt, omdat deze niet ontworpen hoeft te worden omkeerbaar te zijn. De omvang van de code of de hardware nodig is om een dergelijke code te implementeren, wordt daardoor bijna gehalveerd.
Theoretisch werk De structuur en eigenschappen van Feistelcijfers zijn uitgebreid geanalyseerd door cryptografen.
Michael Luby en Charles Rackoff hebben de constructie van de Feistel-cijfer geanalyseerd en bewezen dat als de rondefunctie een cryptografisch veilige pseudowillekeurige functie is, met Ki als "seed", dan zijn drie ronden voldoende om het blokcijfer tot een pseudowillekeurige permutatie te maken, terwijl vier ronden voldoende zijn om het tot een "sterke" pseudowillekeurige permutatie te maken (wat betekent dat het pseudowillekeurig blijft, zelfs voor een tegenstander die orakeltoegang krijgt tot de inverse permutatie).. Vanwege dit zeer belangrijke resultaat van Luby en Rackoff worden Feistelcijfers ook soms Luby-Rackoff-blokcijfers genoemd. Verder ligt hoe sterk het encryptie algoritme wat een feistel netwerk gebruikt ook aan hoe sterk de rondefunctie is. Als de rondefunctie niet meer Niet-lineair zou zijn dan zou hij aangevallen kunnen worden met differentiële en lineaire cryptoanalyse.
Verder theoretisch onderzoek heeft de constructie enigszins veralgemeend en preciezere grenzen voor de veiligheid gegeven.
Bouwdetails Laat de rondefunctie zijn en laat de rondesleutels (subsleutels) voor de rondes zijn.
De basiswerking is dan als volgt:
Splits de klare tekst in twee gelijke delen. Wij zullen nu als voorbeeld DES nemen die 2 helften van 32 bits met een totale blokgrootte van 64 bits gebruikt. We hebben nu een linker en rechter blok: ( , ).
Voor elke ronde , zullen we de staat van de blokken berekenen.
De betekent XOR . De cijfertekst voor de volgende ronde is .
Een versimpeld voorbeeld hiervan. We gaan ervan uit dat dit de eerste ronde is (). De rechterhelft () wordt de linkerhelft van de volgende ronde (). De rechterhelft () wordt ook in de F-functie gedaan met de rondesleutel ( in dit geval). Wat er dan uit de F-functie komt, wordt geXOR'd met de linkerhelft van de huidige ronde () om de nieuwe rechterhelft te maken (). Zo hebben we twee nieuwe helften en één ronde uitgevoerd.
Decryptie van een cijfertekst wordt bereikt door te berekenen voor
Dan is weer de klare tekst.
Het diagram illustreert zowel encryptie als decryptie. Let op de omkering van de rondesleutel volgorde bij het ontsleutelen. Dit is het enige verschil tussen encryptie en decryptie. Een goed voorbeeld hiervan om dit te illustreren is dat de rondesleutel voor de laatste ronde in het encryptieproces () wordt gebruikt als eerste rondesleutel () in het decryptieproces. Je draait dus eigenlijk voor decryptie alleen maar de rondesleutels om. Dit zorgt er ook mede voor dat de F-functie onomkeerbaar mag zijn zoals een hashfunctie.
Categorie:Cryptografie