Cover
Empieza ahora gratis Symmetric_1_Des_Feistel.pdf
Summary
# Inleiding tot symmetrische encryptie
Dit deel introduceert de basisprincipes van symmetrische encryptie, inclusief het onderscheid tussen plaintext, ciphertext en de rol van geheime sleutels.
### 1.1 Wat is encryptie?
Encryptie is het proces van het omzetten van data naar een vorm die onbegrijpelijk is voor onbedoelde of ongeautoriseerde partijen. De oorspronkelijke data noemen we **plaintext**, en de onbegrijpelijke data **ciphertext**. Een geautoriseerde partij kan dit proces omkeren; zij kunnen de ciphertext **decrypten** om de plaintext te onthullen. Encryptie beschermt de vertrouwelijkheid van data, omdat alleen de geautoriseerde partij met de juiste **geheime sleutel** de data kan lezen [2](#page=2).
### 1.2 Symmetrische versus asymmetrische cryptografie
Er zijn twee hoofdcategorieën cryptografie: symmetrische en asymmetrische [2](#page=2).
#### 1.2.1 Symmetrische encryptie
Symmetrische encryptie gebruikt **dezelfde sleutel** voor zowel encryptie als decryptie [2](#page=2).
* **Encryptieproces:** Het encryptiealgoritme neemt de plaintext en de sleutel als input en produceert de ciphertext [2](#page=2).
* **Decryptieproces:** Het decryptiealgoritme keert het encryptieproces om, waardoor de oorspronkelijke plaintext wordt gereproduceerd uit de sleutel en de ciphertext [2](#page=2).
Symmetrische cryptografie wordt ook wel **secret-key cryptografie** genoemd, in tegenstelling tot asymmetrische cryptografie, die ook wel **public-key cryptografie** wordt genoemd [2](#page=2).
> **Tip:** Het sleutelconcept is cruciaal in symmetrische encryptie. De beveiliging hangt volledig af van het geheimhouden van deze ene sleutel.
---
# Typen symmetrische ciphers: stream en block ciphers
Dit gedeelte bespreekt de twee hoofdtypes van symmetrische ciphers: stream ciphers en block ciphers, hun werkingsprincipes, praktische overwegingen en verschillen [3](#page=3) [4](#page=4).
### 2.1 Stream ciphers
Een stream cipher is een type symmetrische cipher dat digitale gegevens stroom voor stroom versleutelt, één bit of één byte tegelijk [3](#page=3).
* **Werking:**
* De basis van een stream cipher is een pseudorandom sleutelstroom (keystream).
* Deze keystream wordt typisch gegenereerd door een algoritme dat sleutelgestuurd is [3](#page=3).
* De XOR-operatie wordt vaak gebruikt om de plaintext met de keystream te combineren voor encryptie en om de ciphertext te ontsleutelen [3](#page=3).
* Als de keystream werkelijk willekeurig en eenmalig gebruikt zou zijn (one-time pad), zou de cipher onbreekbaar zijn. Echter, dit introduceert logistieke problemen voor grote hoeveelheden data omdat de keystream net zo lang moet zijn als het bericht en vooraf veilig uitgewisseld moet worden [3](#page=3).
* Daarom wordt de keystream praktisch gegenereerd door een algoritme, waardoor deze pseudo-willekeurig is [3](#page=3).
* **Cryptografische sterkte:**
* De bit-stroomgenerator moet cryptografisch sterk zijn. Dit betekent dat het computationeel onhaalbaar moet zijn om toekomstige delen van de bitstroom te voorspellen op basis van reeds bekende delen [3](#page=3).
* Beide partijen hoeven alleen de genererende sleutel te delen om de keystream te produceren [3](#page=3).
* **Initialisatievector (IV):**
* Stream ciphers kunnen een Initialisatievector (IV) gebruiken [3](#page=3) [4](#page=4).
* Een IV zorgt ervoor dat identieke plaintext op verschillende momenten niet resulteert in dezelfde ciphertext [3](#page=3).
* De IV is niet geheim en wordt vóór de ciphertext verzonden [3](#page=3).
* De IV moet samen met de versleutelde boodschap worden verzonden [4](#page=4).
> **Tip:** Het gebruik van een IV is cruciaal voor moderne stream ciphers om herhalingen te voorkomen en de veiligheid te verhogen [3](#page=3) [4](#page=4).
### 2.2 Block ciphers
Een block cipher is een type symmetrische cipher waarbij een blok plaintext als geheel wordt behandeld om een ciphertextblok van gelijke lengte te produceren [4](#page=4).
* **Werking:**
* Typisch worden blokgroottes van 64 of 128 bits gebruikt [4](#page=4).
* Net als bij stream ciphers delen de twee communicerende partijen dezelfde encryptiesleutel [4](#page=4).
* Met behulp van verschillende bedrijfsmodi (modes of operation) kan een block cipher worden gebruikt om plaintext van willekeurige lengte te versleutelen, vergelijkbaar met het effect van een stream cipher [4](#page=4).
* Een block cipher kan in algemene zin worden voorgesteld als een tabel die plaintext-invoer koppelt aan ciphertext-uitvoer. Een voorbeeld toont een 4-bits invoer die naar een van de 16 mogelijke staten wordt gemapt, welke vervolgens door substitutie wordt omgezet in een unieke 4-bits ciphertext-uitvoer [4](#page=4).
* Deze tabel moet omkeerbaar zijn (geen dubbele outputs) om decryptie mogelijk te maken. Een dergelijke cipher wordt een willekeurige block cipher genoemd. Ideaal is een block cipher waarbij één sleutel de tabel kan afleiden [4](#page=4).
* **Analyses en toepassingen:**
* Er is aanzienlijk meer onderzoek gedaan naar de analyse van block ciphers [4](#page=4).
* Block ciphers lijken over het algemeen toepasbaar op een breder scala aan toepassingen dan stream ciphers [4](#page=4).
* De overgrote meerderheid van netwerkgebaseerde symmetrische cryptografische toepassingen maakt gebruik van block ciphers [4](#page=4).
* Ondanks de dominantie van block ciphers, krijgen stream ciphers opnieuw meer aandacht [4](#page=4).
* **Beperkingen en aanvullingen:**
* Block ciphers zijn beperkt tot het versleutelen van één blok tegelijk [4](#page=4).
* De volledige functionaliteit voor willekeurige plaintextlengtes wordt bereikt door bedrijfsmodi, waarbij vaak ook een IV wordt gebruikt [4](#page=4).
* **Gedeelde kenmerken:**
* Zowel block ciphers als stream ciphers hebben doorgaans dezelfde lengte voor plaintext en ciphertext. Dit geldt niet volledig door padding en de noodzaak om de IV in platte tekst te verzenden [4](#page=4).
* Beide typen ciphers zijn symmetrisch en vereisen dezelfde sleutel aan zowel de verzender- als de ontvangerzijde [3](#page=3) [4](#page=4).
* **Sleuteluitwisseling:**
* Het "kip-en-ei"-probleem (hoe de symmetrische sleutel veilig te verzenden) is typerend voor symmetrische block ciphers [4](#page=4).
* De symmetrische sleutel moet via een ander, betrouwbaar kanaal worden verzonden [4](#page=4).
### 2.3 Vergelijking en overwegingen
| Kenmerk | Stream Cipher | Block Cipher |
| :------------------ | :----------------------------------------------- | :----------------------------------------------- |
| Bewerkingseenheid | Bit of byte | Blok (bv. 64 of 128 bits) |
| Keystream | Pseudorandom, gegenereerd door algoritme | Afgeleid via sleutel en bedrijfsmodus |
| Implementatie | Algoritmische procedure | Tabel gebaseerd (of afgeleid) |
| Logistiek | Potentieel complex voor lange berichten (one-time pad) | Vereist veilige sleuteluitwisseling |
| IV | Vaak gebruikt, niet geheim | Vaak gebruikt in bedrijfsmodi, niet geheim |
| Toepassingen | Specifieke toepassingen, hernieuwde aandacht | Breed toepasbaar, dominant in netwerkbeveiliging |
| Sleuteldeling | Vereist dezelfde sleutel | Vereist dezelfde sleutel |
| Plaintext/Ciphertext Lengte | Doorgaans gelijk (met uitzondering IV) | Doorgaans gelijk (met uitzondering IV en padding) |
> **Tip:** De keuze tussen een stream cipher en een block cipher hangt af van de specifieke toepassing, de beschikbare middelen en de gewenste beveiligingskenmerken. Block ciphers worden vaker gebruikt in moderne netwerkprotocollen, maar stream ciphers hebben specifieke voordelen in bepaalde scenario's [4](#page=4).
---
# Fundamenten van moderne block cipher ontwerp: diffusie en confusie
Dit deel verkent de concepten van diffusie en confusie, geïntroduceerd door Claude Shannon, als essentiële bouwstenen voor moderne block ciphers, waarbij de rol van substitutie en permutatie wordt toegelicht [5](#page=5).
### 3.1 De concepten van diffusie en confusie
Claude Shannon introduceerde diffusie en confusie als de twee fundamentele bouwstenen voor elk cryptografisch systeem, met als doel cryptanalyse op basis van statistische analyse te dwarsbomen. Het doel van een sterk ideale cipher is dat alle statistieken van de cijfertekst onafhankelijk zijn van de gebruikte sleutel [6](#page=6).
#### 3.1.1 Diffusie
Diffusie zorgt ervoor dat de statistische structuur van de platte tekst wordt verspreid over de statistieken van de cijfertekst op lange termijn. Dit wordt bereikt doordat elke bit van de platte tekst de waarde van vele bits in de cijfertekst beïnvloedt, en omgekeerd, elke bit van de cijfertekst wordt beïnvloed door vele bits van de platte tekst. Het mechanisme van diffusie poogt de statistische relatie tussen de platte tekst en de cijfertekst zo complex mogelijk te maken om pogingen om de sleutel af te leiden te dwarsbomen. Diffusie wordt verkregen door permutatie [7](#page=7).
> **Tip:** Een slechte diffusie maakt het gemakkelijker voor een aanvaller om statistische patronen te herkennen, wat kan leiden tot het achterhalen van de sleutel.
#### 3.1.2 Confusie
Confusie beoogt de relatie tussen de statistieken van de cijfertekst en de waarde van de encryptiesleutel zo complex mogelijk te maken, eveneens om pogingen om de sleutel te ontdekken te dwarsbomen. Zelfs als een aanvaller enige grip krijgt op de statistieken van de cijfertekst, maakt de complexiteit van de relatie met de gebruikte sleutel het moeilijk om die sleutel af te leiden. Dit wordt bereikt door middel van een complex substitutie-algoritme. Een simpele lineaire substitutiefunctie zou weinig confusie toevoegen. Confusie wordt verkregen door substitutie [7](#page=7).
> **Tip:** Confusie is cruciaal om de relatie tussen de sleutel en de cijfertekst te verbergen, waardoor het afleiden van de sleutel uit de cijfertekst extreem moeilijk wordt.
### 3.2 Rol van substitutie en permutatie
Shannon stelde de combinatie van substitutie en permutatie voor als basis voor zijn Substitution-Permutation Networks (SPN) om zo ideale block ciphers te benaderen [5](#page=5).
#### 3.2.1 Substitutie
* **Definitie:** Elk platte tekst element of groep van elementen wordt uniek vervangen door een corresponderend cijfertekst element of groep van elementen [5](#page=5).
* **Bijdrage:** Substitutie draagt bij aan confusie. Het zorgt ervoor dat de statistieken van de cijfertekst op een te ingewikkelde manier afhankelijk zijn van de statistieken van de platte tekst om te exploiteren [6](#page=6).
#### 3.2.2 Permutatie
* **Definitie:** Een reeks platte tekst elementen wordt vervangen door een permutatie van die reeks. Dit betekent dat er geen elementen worden toegevoegd of verwijderd, maar dat de volgorde van de elementen wordt veranderd. Synoniemen zijn relocatie of transpositie [6](#page=6).
* **Bijdrage:** Permutatie draagt bij aan diffusie. Het zorgt ervoor dat elke bit van de platte tekst invloed heeft op vele bits van de cijfertekst en elke bit van de sleutel invloed heeft op vele bits van de cijfertekst [6](#page=6).
> **Voorbeeld:** Een simpele Caesar-substitutie is een voorbeeld van een substitutie die weinig diffusie biedt, omdat statistische relaties in de platte tekst behouden blijven in de cijfertekst [7](#page=7).
### 3.3 Product ciphers en de Feistel-structuur
Feistel stelde een concrete benadering voor, de Feistel-cipher, die het concept van een product cipher gebruikt. Een product cipher is de opeenvolgende uitvoering van twee of meer simpele ciphers, zodanig dat het eindresultaat cryptografisch sterker is dan elk van de afzonderlijke component ciphers. Het principe is om een block cipher te ontwikkelen met een sleutellengte van $k$ bits en een bloklengte van $n$ bits, wat resulteert in $2^k$ mogelijke transformaties in plaats van de $2^n!$ transformaties die een ideale block cipher zou bieden [5](#page=5).
De Feistel-cipher is een praktische toepassing van Shannon's voorstel om een product cipher te ontwikkelen die diffusie en confusie functies afwisselt. De Feistel-cipher structuur, gebaseerd op Shannon's voorstel uit 1945, vormt de basis voor veel belangrijke symmetrische block ciphers die momenteel in gebruik zijn [6](#page=6).
> **Tip:** De kracht van moderne block ciphers ligt in de slimme combinatie van diffusie en confusie, vaak geïmplementeerd met behulp van structuren zoals de Feistel-cipher.
---
# Feistel cipher structuur en ontwerpoverwegingen
De Feistel cipher structuur vormt de basis voor veel symmetrische blokversleutelingsalgoritmen, waarbij een datablok iteratief wordt verwerkt in rondes om veiligheid te garanderen.
### 4.1 De Feistel structuur
De Feistel cipher is een specifieke vorm van een substitutie-permutatie netwerk (SPN). De algemene structuur van een Feistel cipher, zoals voorgesteld door Feistel, werkt als volgt [8](#page=8):
* **Invoer:** Een plaintext blok van $2w$ bits en een master key $K$ [8](#page=8).
* **Splitsing:** Het plaintext blok wordt opgesplitst in twee helften, $L_0$ en $R_0$, elk van $w$ bits [8](#page=8).
* **Rondes:** De twee helften doorlopen $n$ rondes van verwerking [8](#page=8).
* **Subkeys:** Elke ronde $i$ gebruikt een subkey $K_i$, afgeleid van de master key $K$ via een sleutelgeneratiealgoritme (key schedule algorithm). Deze subkeys zijn doorgaans verschillend van elkaar en van de master key [8](#page=8) [9](#page=9).
* **Rondefunctie F:** De kern van elke ronde is de rondefunctie $F$. Deze functie neemt de rechterhelft van het datablok ($R_{i-1}$) en de subkey $K_i$ als input en produceert een output van $w$ bits. De output van $F(R_{i-1}, K_i)$ wordt vervolgens via een exclusieve-OR (XOR) bewerking gecombineerd met de linkerhelft ($L_{i-1}$) om de nieuwe linkerhelft ($L_i$) te vormen [14](#page=14) [8](#page=8).
* **Permutatie:** Na de substitutie worden de twee helften van het datablok verwisseld om de input te vormen voor de volgende ronde [8](#page=8).
De relatie tussen de data in opeenvolgende rondes kan als volgt worden uitgedrukt:
$L_i = R_{i-1}$ [8](#page=8).
$R_i = L_{i-1} \oplus F(R_{i-1}, K_i)$ [8](#page=8).
* **Ontsleuteling:** Het ontgrendelen met een Feistel cipher is in essentie hetzelfde proces als versleutelen. Het ciphertext wordt gebruikt als invoer, maar de subkeys $K_i$ worden in omgekeerde volgorde toegepast: $K_n$ in de eerste ronde, $K_{n-1}$ in de tweede, enzovoort, tot $K_1$ in de laatste ronde. Dit betekent dat er geen afzonderlijk algoritme voor ontgrendeling nodig is [10](#page=10) [11](#page=11).
### 4.2 Belangrijke ontwerpoverwegingen
Het ontwerp van een Feistel cipher omvat de keuze van diverse parameters en ontwerpkenmerken die de veiligheid en prestaties beïnvloeden [9](#page=9).
#### 4.2.1 Blokgrootte (Block size)
* **Definitie:** De lengte van de datablokken die door het algoritme worden verwerkt [9](#page=9).
* **Impact op veiligheid:** Grotere blokgroottes bieden over het algemeen een grotere veiligheid, met name door grotere diffusie, wat betekent dat een verandering in een deel van de plaintext een grotere impact heeft op de ciphertext [9](#page=9).
* **Impact op snelheid:** Grotere blokgroottes kunnen leiden tot een lagere encryptie/decryptie snelheid voor een gegeven algoritme [9](#page=9).
* **Traditioneel en modern:** Traditioneel werd een blokgrootte van 64 bits als een redelijk compromis beschouwd en was dit bijna universeel in blokcijferontwerpen. De Advanced Encryption Standard (AES) gebruikt echter een blokgrootte van 128 bits [9](#page=9).
#### 4.2.2 Sleutelgrootte (Key size)
* **Definitie:** De lengte van de encryptiesleutel $K$ [9](#page=9).
* **Impact op veiligheid:** Een grotere sleutelgrootte vergroot de veiligheid door de weerstand tegen brute-force aanvallen te verhogen en een grotere confusie te bieden [9](#page=9).
* **Impact op snelheid:** Grotere sleutelgroottes kunnen de encryptie/decryptie snelheid verminderen [9](#page=9).
* **Adequaatheid:** Sleutelgroottes van 64 bits of minder worden tegenwoordig als ontoereikend beschouwd, en 128 bits is een veelvoorkomende grootte geworden [9](#page=9).
* **DES voorbeeld:** De originele DES gebruikte een 64-bits sleutel, waarvan 56 bits effectief werden gebruikt voor encryptie. Een schatting uit 1975 suggereerde dat een machine van 20 miljoen dollars alle mogelijke sleutels kon proberen. Het toevoegen van slechts acht extra bits aan de sleutel zou de moeilijkheid met een factor 256 verhogen, waardoor een sleutelzoekactie vrijwel onmogelijk wordt [10](#page=10) [9](#page=9).
#### 4.2.3 Aantal rondes (Number of rounds)
* **Rol:** De essentie van de Feistel cipher is dat een enkele ronde onvoldoende beveiliging biedt, terwijl meerdere rondes toenemende beveiliging bieden [9](#page=9).
* **Veiligheidseis:** Het aantal rondes moet zodanig worden gekozen dat bekende cryptanalytische inspanningen grotere inspanningen vereisen dan een simpele brute-force sleutelzoekaanval. Dit criterium werd zeker gebruikt bij het ontwerp van DES [14](#page=14).
* **Voorbeeld DES:** Voor 16 rondes DES vereist een differentiële cryptanalytische aanval (die destijds niet officieel bekend was) iets minder inspanning dan brute force ($2^{55.1}$ bewerkingen versus $2^{55}$ voor brute force). Als DES 15 of minder rondes zou hebben gehad, zou differentiële cryptanalyse minder inspanning vereisen dan een brute-force sleutelzoekopdracht [14](#page=14).
* **Typische grootte:** Een typisch aantal rondes is 16 [9](#page=9).
#### 4.2.4 Sleutelgeneratiealgoritme (Subkey generation algorithm / Key schedule algorithm)
* **Rol:** Genereert de subkeys ($K_i$) uit de master key ($K$) [9](#page=9).
* **Impact op veiligheid:** Grotere complexiteit in dit algoritme zou de cryptanalyse moeilijker moeten maken. Een zwak sleutelgeneratiealgoritme kan ertoe leiden dat één subkey informatie onthult over andere subkeys, wat een aanval op de master key kan vergemakkelijken [14](#page=14) [9](#page=9).
* **DES voorbeeld:** Het sleutelgeneratiealgoritme van DES is extreem eenvoudig en bestaat uit een concatenatie van zogenaamde P-boxes (permutatieboxen). Elke subkey is een permutatie van de bits van de originele master key [16](#page=16).
* **AES voorbeeld:** In AES is de grootte van de subkey gelijk aan de blokgrootte, en het aantal rondes is niet direct gelijk aan het aantal benodigde subkeys vanwege een "ronde 0" [16](#page=16).
#### 4.2.5 Rondefunctie F (Round function F)
* **Rol:** De ronde functie $F$ levert het element van confusie in een Feistel cipher. Het moet moeilijk zijn om de door $F$ uitgevoerde substitutie te "ontrafelen" [14](#page=14).
* **Non-lineariteit:** Een belangrijk criterium is dat $F$ niet-lineair moet zijn. Hoe niet-lineairder $F$, hoe moeilijker elke vorm van cryptanalyse zal zijn. Moeilijkheid om $F$ te benaderen met een set lineaire vergelijkingen is een maat voor de niet-lineariteit [14](#page=14).
* **Avalanche-eigenschappen:** Het algoritme moet goede avalanche-eigenschappen hebben, wat betekent dat een verandering in één bit van de invoer een verandering in veel bits van de uitvoer moet produceren [15](#page=15).
* **Strict Avalanche Criterion (SAC):** Een strengere versie hiervan stelt dat elke uitvoerbit $j$ van een S-box met waarschijnlijkheid 1/2 moet veranderen wanneer een enkele invoerbit $i$ wordt geïnverteerd, voor alle $i, j$ [15](#page=15).
* **Bit Independence Criterion (BIC):** Stelt dat uitvoerbits $j$ en $k$ onafhankelijk moeten veranderen wanneer een enkele invoerbit $i$ wordt geïnverteerd, voor alle $i, j, k$. SAC en BIC versterken de effectiviteit van de confusiefunctie [15](#page=15).
* **Opmerking:** SAC en BIC worden niet benadrukt in de bron, wat impliceert dat er waarschijnlijk geen examenvragen over deze specifieke onderwerpen zullen zijn [15](#page=15).
#### 4.2.6 Overige overwegingen
* **Snelle software-encryptie/decryptie:** In veel gevallen is hardware-implementatie niet mogelijk, dus de snelheid van uitvoering in software is van belang [9](#page=9).
* **Gemak van analyse:** Hoewel het algoritme moeilijk te kraken moet zijn, is het ook voordelig om het algoritme eenvoudig te analyseren. Een duidelijke uitleg vergemakkelijkt de analyse op cryptanalytische kwetsbaarheden. DES heeft bijvoorbeeld geen eenvoudig te analyseren functionaliteit [9](#page=9).
### 4.3 Tabel met DES vs AES parameters
| Algoritme | Blokgrootte | Sleutelgrootte gebruikt | Ronde key grootte | Aantal rondes |
| :--------------------- | :---------- | :---------------------- | :---------------- | :------------ |
| DES | 64 | 56 | 48 | 16 |
| Triple Des (3 keys) | 64 | 168 | 48 | 48 |
| AES-128 | 128 | 128 | 128 | 10 |
| AES-192 | 128 | 192 | 128 | 12 |
| AES-256 | 128 | 256 | 128 | 14 |
---
# Data Encryption Standard (DES) en brute-force aanvallen
Dit deel behandelt de historische context en technische aspecten van de Data Encryption Standard (DES), inclusief de controverses rond de sleutelgrootte en de kwetsbaarheid voor brute-force aanvallen, evenals de berekeningen die de efficiëntie van dergelijke aanvallen illustreren.
### 5.1 De ontwikkeling van DES
De Data Encryption Standard (DES) is een symmetrische versleutelingsalgoritme dat oorspronkelijk is ontwikkeld door IBM en gebaseerd is op de revolutionaire benadering van Horst Feistel. Het algoritme, ook wel de Data Encryption Algorithm (DEA) genoemd, werd oorspronkelijk voorgesteld met een sleutel van 128 bits (waarbij 112 bits werden gebruikt) onder de naam Lucifer, en later, na aanpassingen, als DES met een 64-bits sleutel (waarvan 56 bits daadwerkelijk werden gebruikt). De reductie van de sleutelgrootte was controversieel; critici, waaronder Martin Hellman en Whitfield Diffie, schatten dat de Amerikaanse overheid met een investering van 20 miljoen dollars een machine kon bouwen die alle mogelijke sleutels kon proberen. Een toevoeging van slechts acht bits aan de sleutel zou de moeilijkheidsgraad met een factor 256 verhogen, waardoor een sleutelonderzoek praktisch onmogelijk zou worden. Er werd gesuggereerd dat de sleutelgrootte zodanig was ontworpen dat DES-versleutelde berichten door de Amerikaanse overheid konden worden gekraakt, maar niet door Amerikaanse bedrijven. De noodzaak van het pariteitscontroleschema, waardoor slechts 56 van de 64 bits werden gebruikt, werd eveneens ter discussie gesteld. Het proces van ontsleuteling met een Feistel-cipher is in essentie hetzelfde als het versleutelingsproces, met het verschil dat de sub-sleutels in omgekeerde volgorde worden gebruikt [10](#page=10).
#### 5.1.1 DES en cryptografische eigenschappen
Een wenselijke eigenschap van elk versleutelingsalgoritme is dat een kleine wijziging in de platte tekst of de sleutel een aanzienlijke verandering in de cijfertekst teweegbrengt, bekend als het lawine-effect. Dit effect zorgt ervoor dat een verandering in één bit van de platte tekst of één bit van de sleutel veel bits van de cijfertekst beïnvloedt. Tests met DES lieten zien dat na slechts drie rondes een verschil in één bit van de platte tekst al resulteerde in 18 verschillende bits, en de uiteindelijke cijferteksten verschilden in 32 bitposities. Vergelijkbare tests met twee sleutels die slechts in één bit verschilden, toonden aan dat ongeveer de helft van de bits in de cijfertekst afweek, wat wijst op een sterk lawine-effect. Dit illustreert de diffusie en confusie in het algoritme [12](#page=12) [13](#page=13).
#### 5.1.2 Kriteriën voor blokcijferontwerp
Het aantal rondes in een blokcijfer is cruciaal voor de cryptografische sterkte. Meer rondes maken cryptanalyse moeilijker. Het criterium is dat het benodigde rekenkundige vermogen voor bekende cryptanalytische aanvallen groter moet zijn dan dat voor een simpele brute-force sleutelzoekaanval. Bij DES met 16 rondes is een differentiële cryptanalytische aanval, die destijds niet officieel bekend was, iets minder efficiënt dan brute force. Differentiële cryptanalyse vereist $2^{55.1}$ operaties, terwijl brute force $2^{56}$ vereist. Als DES 15 rondes of minder had gehad, zou differentiële cryptanalyse minder moeite hebben gekost dan een brute-force sleutelzoektocht. Andere belangrijke factoren in het ontwerp van een blokcijfer zijn de rondefunctie (F), de lengte van de hoofdsleutel, het sleutelplanningsalgoritme en de blokgrootte [14](#page=14).
De rondefunctie F, het hart van een Feistel-blokcijfer, is verantwoordelijk voor de confusie en moet moeilijk te "ontcijferen" zijn. Een belangrijke eis is dat F niet-lineair moet zijn; hoe niet-lineairder F, hoe moeilijker cryptanalyse. Een zwak sleutelplanningsalgoritme kan ertoe leiden dat één sub-sleutel informatie over andere sub-sleutels prijsgeeft, wat een aanval op een 128-bits hoofdsleutel kan reduceren tot het vinden van bijvoorbeeld 12 64-bits sub-sleutels [14](#page=14).
### 5.2 Brute-force aanvallen en sleutelgroottes
Brute-force aanvallen houden in dat men systematisch alle mogelijke sleutels probeert totdat de juiste sleutel is gevonden. De efficiëntie van een brute-force aanval hangt direct af van de sleutelgrootte van het algoritme [10](#page=10).
#### 5.2.1 Berekeningen van benodigde tijd
De volgende tabel illustreert de tijd die nodig is voor een brute-force aanval met verschillende rekenkrachtniveaus en sleutelgroottes, inclusief een vergelijking met equivalente sleutelgroottes voor RSA en elliptische curve cryptografie [17](#page=17).
| Algoritme / Hash | Sleutelgrootte | Tijd nodig met $10^9$/s | Tijd nodig met $10^{13}$/s | Tijd nodig met $10^{20}$/s | Gecorrigeerd met Moore's law ($10^{20}$/s) | RSA equivalent sleutelgrootte | Elliptische curve equivalent sleutelgrootte |
| :---------------- | :------------ | :------------------------ | :-------------------------- | :-------------------------- | :------------------------------------------ | :--------------------------- | :------------------------------------------ |
| DES | 56 | 72.057.594.037.927.936 jaar | 1 uur | 0,3 milliseconde | 0,3 milliseconde | - | - |
| SHA-1 | 160 | $10^{7}$ jaar | 1000 jaar | 1,6 uur | 1,6 uur | 1024 | 160 |
| SHA-224 | 112 | $10^{16}$ jaar | $10^{12}$ jaar | $10^{6}$ jaar | 30 jaar | 2048 | 224 |
| AES-128 / SHA-256 | 128 | $10^{21}$ jaar | $10^{17}$ jaar | $10^{10}$ jaar | 53 jaar | 3072 | 256 |
| AES-192 / SHA-384 | 192 | $10^{40}$ jaar | $10^{37}$ jaar | $10^{30}$ jaar | 150 jaar | 7680 | 384 |
| AES-256 / SHA-512 | 256 | $10^{60}$ jaar | $10^{56}$ jaar | $10^{49}$ jaar | 245 jaar | 15360 | 512 |
> **Tip:** De berekeningen in de tabel tonen de exponentiële toename van de benodigde tijd met een toenemende sleutelgrootte. Dit benadrukt waarom moderne versleutelingsalgoritmen, zoals AES, aanzienlijk langere sleutels gebruiken dan DES [17](#page=17).
#### 5.2.2 Hedendaagse rekenkracht en brute-force mogelijkheden
De rekenkracht die vandaag de dag beschikbaar is, is aanzienlijk. Standaard hardware kan circa $10^9$ instructies per seconde uitvoeren. High-end CPU's kunnen ongeveer $10^{13}$ instructies per seconde halen, en meerdere CPU-systemen kunnen tot $2.5 \times 10^{14}$ instructies per seconde bereiken [17](#page=17) [18](#page=18).
Supercomputers hebben de exaflop-grens doorbroken ($10^{18}$ operaties per seconde). De Cray-gebaseerde Frontier bereikte 1.2 ExaFlops in 2022. GPU-systemen, cruciaal voor brute-force aanvallen en AI, bieden ook indrukwekkende prestaties: de Apple M3 GPU haalt $3.55 \times 10^{12}$ FLOPS, en een NVIDIA DGX SuperPOD met 256 H100 GPU's levert 1 exaflop. Het Bitcoin-netwerk had in september 2024 een hashrate van $6 \times 10^{20}$ per seconde [18](#page=18).
> **Tip:** De genoemde cijfers, met uitzondering van de Bitcoin-hashrate, zijn enigszins overdreven omdat ze uitgaan van 1 instructie = 1 decryptering of 1 hash-berekening [18](#page=18).
Hoewel Moore's Law voorspelt dat de capaciteit elke 18 maanden verdubbelt, toont de tabel aan dat zelfs met correcties gebaseerd op deze wet, de benodigde tijd voor het kraken van langere sleutels aanzienlijk blijft. Dit wet is echter aan het vertragen en er zijn al nieuwe voorspellingen, zoals Huang's Law, die de snelheid van GPU's betreffen. Het is belangrijk op te merken dat deze analyses geen rekening houden met de potentiële impact van kwantumcomputing [17](#page=17) [18](#page=18).
#### 5.2.3 Parametervergelijking: DES vs. AES
De volgende tabel vergelijkt de parameters van DES en AES [16](#page=16):
| Algoritme | Blokgrootte | Gebruikte sleutellengte | Ronde sleutelgrootte | Aantal rondes |
| :-------------------- | :---------- | :---------------------- | :------------------- | :------------ |
| DES | 64 | 56 | 48 | 16 |
| Triple DES (met 3 sleutels) | 64 | 168 | 48 | 48 |
| AES-128 | 128 | 128 | 128 | 10 |
| AES-192 | 128 | 192 | 128 | 12 |
| AES-256 | 128 | 256 | 128 | 14 |
De sleutellengte van DES is 64 bits, maar de veiligheidsniveau, of nettosleutellengte, is 56 bits. Voor Triple DES met 3 sleutels is dit $3 \times 56 = 168$ bits. Bij AES is de rondesleutelgrootte gelijk aan de blokgrootte. De sleutelplanning van DES is eenvoudig en maakt gebruik van P-boxes om elke rondesleutel te genereren als een permutatie van de bits van de oorspronkelijke hoofdsleutel [16](#page=16).
> **Tip:** DES heeft een relatief korte effectieve sleutellengte van 56 bits, wat het kwetsbaar maakt voor brute-force aanvallen in de huidige computationele omgeving. Moderne algoritmen zoals AES bieden sleutellengtes van 128, 192 of 256 bits, wat een exponentieel grotere beveiliging biedt.
---
## Veelgemaakte fouten om te vermijden
- Bestudeer alle onderwerpen grondig voor examens
- Let op formules en belangrijke definities
- Oefen met de voorbeelden in elke sectie
- Memoriseer niet zonder de onderliggende concepten te begrijpen
Glossary
| Term | Definition |
|------|------------|
| Symmetrische encryptie | Een vorm van cryptografie waarbij dezelfde geheime sleutel wordt gebruikt voor zowel het versleutelen als het ontsleutelen van gegevens. Dit type cryptografie staat ook bekend als geheime-sleutel cryptografie. |
| Plaintext | De oorspronkelijke, onversleutelde gegevens die bedoeld zijn om versleuteld te worden. Dit is de leesbare vorm van informatie voordat deze door een cryptografisch algoritme wordt verwerkt. |
| Ciphertext | De versleutelde, onleesbare vorm van gegevens. Ciphertext wordt geproduceerd door een cryptografisch algoritme toe te passen op plaintext, en kan alleen worden teruggebracht naar plaintext met de juiste sleutel. |
| Geheime sleutel | Een cryptografische sleutel die wordt gebruikt in symmetrische encryptie. Deze sleutel moet veilig worden gedeeld tussen de zender en de ontvanger om succesvolle encryptie en decryptie mogelijk te maken. |
| Stream cipher | Een type symmetrisch cipher dat gegevens stroom per bit of byte versleutelt. Het genereert een sleutelstroom die wordt gecombineerd met de plaintext, vaak met behulp van een XOR-operatie, om de ciphertext te vormen. |
| Block cipher | Een type symmetrisch cipher dat gegevens verwerkt in vaste blokken van bits. Een blok plaintext wordt omgezet in een blok ciphertext van gelijke lengte, waarbij de transformatie afhankelijk is van de gebruikte geheime sleutel. |
| Initialisatievector (IV) | Een niet-geheim willekeurig stuk data dat wordt gebruikt om de encryptie van stream ciphers en block ciphers in bepaalde modi te variëren. Een IV zorgt ervoor dat identieke plaintexts verschillende ciphertexts opleveren, wat de veiligheid verhoogt. |
| Substitutie | Een cryptografische operatie waarbij elementen (zoals bits of karakters) in de plaintext worden vervangen door corresponderende elementen in de ciphertext. Dit draagt bij aan de confusie in een cryptografisch systeem. |
| Permutatie | Een cryptografische operatie die de volgorde van elementen in een plaintext verandert zonder de elementen zelf te wijzigen. Dit proces, ook wel transpositie genoemd, draagt bij aan de diffusie in een cryptografisch systeem. |
| Confusie | Een principe in cryptografie dat de relatie tussen de sleutel en de ciphertext zo complex mogelijk maakt. Confusie wordt doorgaans bereikt met behulp van substitutie. |
| Diffusie | Een principe in cryptografie dat de statistische eigenschappen van de plaintext verspreidt over de ciphertext. Diffusie wordt meestal bereikt met behulp van permutatie, waardoor veranderingen in de plaintext of sleutel invloed hebben op veel delen van de ciphertext. |
| Feistel cipher | Een architectuur voor block ciphers die is ontworpen door Horst Feistel. Het maakt gebruik van een iteratief proces van substitutie en permutatie over meerdere rondes, waarbij de linker- en rechterhelft van de data worden verwerkt. |
| Rondefunctie F | Het kernonderdeel van een Feistel cipher dat de verwarring (confusie) verzorgt. De rondefunctie F neemt een deel van de data en een subkey als invoer en produceert een uitvoer die wordt gebruikt om de andere helft van de data te transformeren. |
| Subkey | Een kleinere sleutel die wordt afgeleid van de hoofdsleutel en die wordt gebruikt in elke individuele ronde van een Feistel cipher. De subkeys zijn meestal verschillend van elkaar. |
| Brute-force aanval | Een aanvalsmethode waarbij een aanvaller systematisch alle mogelijke sleutels probeert totdat de juiste sleutel is gevonden die de ciphertext kan ontsleutelen. De effectiviteit hangt af van de sleutelgrootte en de beschikbare rekenkracht. |
| Avalanche effect | Een eigenschap van cryptografische algoritmen waarbij een kleine verandering in de plaintext of de sleutel resulteert in een significante verandering in de ciphertext. Dit bemoeilijkt cryptanalyse doordat het de correlatie tussen invoer en uitvoer vermindert. |
| Data Encryption Standard (DES) | Een symmetrische block cipher die in 1977 door het National Bureau of Standards (NBS) werd gepubliceerd. Het gebruikt een 56-bits sleutel en een blokgrootte van 64 bits. Hoewel vroeger wijdverbreid, wordt het tegenwoordig als onveilig beschouwd vanwege de kleine sleutelgrootte. |
| Advanced Encryption Standard (AES) | Een cryptografische standaard die is aangenomen als opvolger van DES. AES is een symmetrische block cipher die blokken van 128 bits versleutelt en ondersteunt sleutelgroottes van 128, 192 en 256 bits, waardoor het een veel hogere mate van beveiliging biedt. |