Cover
Aloita nyt ilmaiseksi Symmetric_2_AES.pdf
Summary
# Introductie tot AES en cryptografische fundamenten
Dit onderwerp introduceert de basisprincipes van het Advanced Encryption Standard (AES) en verklaart de noodzaak van eindige velden, zoals Galoisvelden (GF(2^n)), voor cryptografische operaties.
### 1.1 De Advanced Encryption Standard (AES)
De Advanced Encryption Standard (AES) is in 2001 gepubliceerd door het National Institute of Standards and Technology (NIST). AES is een symmetrische blokcijfer die ontworpen is als opvolger van DES voor een breed scala aan toepassingen. Het algoritme dat werd gekozen na een open competitie was het Rijndael-algoritme, ontworpen door Vincent Rijmen en Joan Daemen, en werd vervolgens benoemd tot AES. In vergelijking met publieke-sleutelversleutelingen zoals RSA, is de structuur van AES en de meeste symmetrische versleutelingen complex en moeilijker te beschrijven [1](#page=1).
### 1.2 Cryptografische fundamenten: velden met eindige elementen
Vrijwel alle encryptie-algoritmen, zowel conventioneel als publieke-sleutel, maken gebruik van rekenkundige operaties op gehele getallen. Indien een van de gebruikte operaties deling is, is het noodzakelijk om te werken in een rekenkunde die gedefinieerd is over een veld. Dit komt omdat deling vereist dat elk niet-nul element een multiplicatieve inverse heeft. Voor reken- en implementatie-efficiëntie werkt men bij voorkeur met gehele getallen die precies passen in een bepaald aantal bits, zonder verspilde bitpatronen. Dit betekent dat men wil werken met gehele getallen in het bereik van 0 tot $2^n - 1$, wat overeenkomt met een $n$-bit woord [2](#page=2).
#### 1.2.1 Beperkingen van modulaire rekenkunde op $Z_{2^n}$
De verzameling van gehele getallen in het bereik $0$ tot $2^n - 1$ met modulaire rekenkunde, aangeduid als $Z_{2^n}$, vormt geen veld. Een belangrijk voorbeeld hiervan is dat het getal 2 geen multiplicatieve inverse heeft in $Z_{2^n}$, wat betekent dat er geen geheel getal $b$ bestaat zodanig dat $2b \pmod{2^n} = 1$ [2](#page=2).
#### 1.2.2 Galoisvelden (GF(2^n))
Er bestaat een methode om een eindig veld met $2^n$ elementen te definiëren; dit veld wordt aangeduid als GF($2^n$). Deze velden zijn gebaseerd op polynomiale rekenkunde [2](#page=2).
**Eigenschappen van eindige velden:**
* **Elementen:** GF(p) of GF($p^n$) [2](#page=2).
* **Operaties:** Optelling (+) en vermenigvuldiging (*) [2](#page=2).
* **Kenmerkende criteria:**
* Commutativiteit van optelling: $a+b = b+a$ [2](#page=2).
* Nul-element voor optelling: $a+0 = a$ [2](#page=2).
* Commutativiteit van vermenigvuldiging: $a*b = b*a$ [2](#page=2).
* Eenheids-element voor vermenigvuldiging: $a*1 = a$ [2](#page=2).
* Associativiteit van optelling: $a+(b+c) = (a+b)+c$ [2](#page=2).
* Associativiteit van vermenigvuldiging: $a*(b*c) = (a*b)*c$ [2](#page=2).
* Distributiviteit: $a*(b+c) = (a*b) + (a*c)$ [2](#page=2).
* Annulatie van vermenigvuldiging: $a*b = a*c$ met $a, b, c \neq 0$, impliceert $b = c$ [2](#page=2).
* **Additieve inverse:** Voor elk element $a$ bestaat er een element (aangeduid als $-a$) zodanig dat $a + (-a) = 0$ [2](#page=2).
* **Multiplicatieve inverse:** Voor elk niet-nul element $a$ bestaat er een element (aangeduid als $a^{-1}$) zodanig dat $a * (a^{-1}) = 1$ [2](#page=2).
#### 1.2.3 Toepassing in AES
Binnen de Advanced Encryption Standard (AES) worden alle operaties uitgevoerd op 8-bit bytes. AES werkt in het eindige veld GF($2^8$). In dit veld is optelling equivalent aan XOR. Vermenigvuldiging is de vermenigvuldiging van polynomialen modulo $(x^8 + x^4 + x^3 + x + 1)$ met coëfficiënten in GF. Vermenigvuldiging met $x$ is computationeel efficiënt: dit gebeurt door een links-shift van 1 positie (met toevoeging van nullen) en indien de hoogste graadscoëfficiënt 1 is, wordt er een XOR uitgevoerd met een vaste constante $00011011$ (wat overeenkomt met de priem-polynomial) [2](#page=2).
> **Tip:** Het begrip eindige velden, en specifiek GF($2^n$), is cruciaal voor het begrijpen van de interne werking van veel moderne cryptografische algoritmen zoals AES. Zonder deze wiskundige basis blijven veel operaties abstract.
> **Voorbeeld:** In GF($2^8$), als we het element $x$ willen vermenigvuldigen met het polynoom $x^2 + 1$, doen we dit als volgt:
> $x * (x^2 + 1) = x^3 + x$ [2](#page=2).
> Als de polynoom $(x^8 + x^4 + x^3 + x + 1)$ wordt gebruikt als modulus, dan zijn er specifieke regels voor reductie die de resultaten binnen GF($2^8$) houden.
---
# Structuur en parameters van AES-encryptie
Dit onderwerp beschrijft de algemene structuur van AES-encryptie, inclusief blokgroottes, sleutellengtes en het aantal rondes dat daarvan afhangt.
### 2.1 Algemene structuur van AES
AES (Advanced Encryption Standard) is een symmetrisch blokcijfer dat werkt met een plaintext blokgrootte van 128 bits. Dit blok wordt weergegeven als een 4x4 matrix van bytes, die in het document de 'State' array wordt genoemd. Deze State array wordt tijdens elke fase van de encryptie of decryptie gemodificeerd. De sleutellengte kan variëren en bedraagt 16, 24 of 32 bytes, wat overeenkomt met 128, 192 of 256 bits. De naam van het algoritme reflecteert deze sleutellengte: AES-128, AES-192 of AES-256 [3](#page=3) [4](#page=4).
#### 2.1.1 Data structuren
Het input- en outputblok van AES-encryptie en -decryptie is een 128-bit blok, welke wordt geïnterpreteerd als een 4x4 matrix van bytes. Deze matrix wordt gekopieerd naar de State array. De sleutel wordt ook weergegeven als een matrix van bytes en wordt vervolgens uitgebreid tot een reeks 'key schedule words', waarbij elk woord vier bytes lang is. Voor een 128-bit sleutel resulteert dit in een totale key schedule van 44 woorden. Belangrijk is dat de byte-ordening binnen deze matrices per kolom geschiedt. De eerste vier bytes van een 128-bit plaintext input bezetten bijvoorbeeld de eerste kolom van de inputmatrix, enzovoort. Op dezelfde manier vormen de eerste vier bytes van de uitgebreide sleutel, die samen een woord vormen, de eerste kolom van de $w$ matrix [4](#page=4).
#### 2.1.2 Rondes en parameters
Het AES-cijfer bestaat uit $N$ rondes, waarbij het aantal rondes afhankelijk is van de sleutellengte [5](#page=5).
* Voor een sleutellengte van 16 bytes (128 bits) zijn er 10 rondes [5](#page=5).
* Voor een sleutellengte van 24 bytes (192 bits) zijn er 12 rondes [5](#page=5).
* Voor een sleutellengte van 32 bytes (256 bits) zijn er 14 rondes [5](#page=5).
Een 'woord' (word) staat gelijk aan 4 bytes, en 4 woorden (16 bytes) vormen 1 blok van 128 bits. Vanwege de structuur van het algoritme zijn er $N+1$ subkeys benodigd voor $N$ rondes. Dit verklaart waarom 10 rondes 11 subkeys vereisen, wat neerkomt op 11 subkeys van 128 bits (16 bytes) of 44 woorden van 32 bits (4 bytes) [5](#page=5).
#### 2.1.3 Transformaties per ronde
De eerste $N-1$ rondes bestaan uit vier verschillende transformatiefuncties: SubBytes, ShiftRows, MixColumns, en AddRoundKey. De laatste ronde bevat slechts drie van deze transformaties. Daarnaast is er een initiële transformatie (AddRoundKey) vóór de eerste ronde, die beschouwd kan worden als Ronde 0. Dit is wederom de reden waarom $N+1$ subkeys nodig zijn voor $N$ rondes. De sleuteluitbreidingsfunctie genereert $N+1$ ronde sleutels, elk in de vorm van een 4x4 matrix. Elke ronde sleutel fungeert als input voor de AddRoundKey transformatie in de betreffende ronde. Elke transformatie neemt een of meerdere 4x4 matrices als input en produceert een 4x4 matrix als output [6](#page=6).
> **Tip:** AES is geen Feistel-cijfer. In tegenstelling tot Feistel-structuren, waarbij de helft van het datablok wordt gebruikt om de andere helft te modificeren en de helften daarna worden verwisseld, verwerkt AES het gehele datablok als één matrix tijdens elke ronde via substituties en permutaties [7](#page=7).
#### 2.1.4 Componenten van de AES-ronde structuur
AES gebruikt vier verschillende stadia [7](#page=7):
* **Substitute bytes (SubBytes):** Gebruikt een S-box voor een byte-voor-byte substitutie van het blok [7](#page=7).
* **ShiftRows:** Een eenvoudige permutatie [7](#page=7).
* **MixColumns:** Een substitutie die gebruik maakt van rekenkunde over $\text{GF}(2^8)$ [7](#page=7).
* **AddRoundKey:** Een simpele bitwise XOR van het huidige blok met een deel van de uitgebreide sleutel [7](#page=7).
De structuur is relatief eenvoudig. Zowel voor encryptie als decryptie begint het cijfer met een AddRoundKey fase, gevolgd door negen rondes die elk alle vier de fasen bevatten. De tiende (laatste) ronde bestaat uit slechts drie fasen. Alleen de AddRoundKey fase maakt gebruik van de sleutel, daarom begint en eindigt het cijfer met deze fase. Elke andere fase, indien toegepast aan het begin of einde, is omkeerbaar zonder kennis van de sleutel. De volgorde van de sleuteluitbreiding voor decryptie is de inverse van de volgorde voor encryptie [6](#page=6) [7](#page=7).
---
# De transformatie-onderdelen van AES
Dit deel duikt dieper in de vier kerncomponenten van elke AES-ronde: SubBytes (S-box substitutie), ShiftRows (rijverschuiving), MixColumns (kolommenging) en AddRoundKey (sleutel toevoeging via XOR), inclusief hun constructie, werking en belang voor de beveiliging.
### 3.1 Overzicht van de AES-structuur
AES maakt gebruik van een structuur die verschilt van de klassieke Feistel-structuur; het verwerkt de volledige datablok als een matrix tijdens elke ronde, waarbij substitutie en permutatie worden toegepast. De invoersleutel wordt uitgebreid tot veertig 32-bit woorden, waarbij vier woorden (128 bits) dienstdoen als ronde sleutel per ronde. Elke ronde bestaat uit vier stadia: Substitute Bytes, ShiftRows, MixColumns en AddRoundKey. Het encryptieproces begint met een AddRoundKey, gevolgd door negen rondes met alle vier de stadia, en een tiende ronde met drie stadia. Alleen de AddRoundKey gebruikt de sleutel, wat de reden is dat het proces ermee begint en eindigt. De andere drie stadia zorgen voor verwarring, diffusie en niet-lineariteit zonder de sleutel te gebruiken. Elk stadium is omkeerbaar: voor Substitute Byte, ShiftRows en MixColumns wordt een inverse functie gebruikt tijdens decryptie, en voor AddRoundKey wordt de inverse bereikt door opnieuw XOR toe te passen met dezelfde ronde sleutel. De decryptie gebruikt de uitgebreide sleutel in omgekeerde volgorde, maar is niet identiek aan de encryptie door de specifieke structuur van AES. De laatste ronde van zowel encryptie als decryptie bestaat uit drie stadia om de omkeerbaarheid te garanderen [7](#page=7) [8](#page=8).
### 3.2 Substitute Bytes (S-box substitutie)
De Substitute Bytes transformatie gebruikt een 16x16 matrix, de S-box, die een permutatie van alle 256 mogelijke 8-bit waarden bevat. Elke byte van de 'State' wordt vervangen door een nieuwe byte, waarbij de linker vier bits van de invoerbyte de rij-index bepalen en de rechter vier bits de kolom-index. Deze indexen worden gebruikt om een unieke 8-bit outputwaarde uit de S-box te selecteren. Zo wordt bijvoorbeeld de hexadecimale waarde {95} gemapt naar {2A} [10](#page=10) [9](#page=9).
#### 3.2.1 Constructie van de S-box
De S-box wordt geconstrueerd door eerst de byte-waarden in oplopende volgorde rij-voor-rij te initialiseren, zodat de waarde op rij $y$, kolom $x$ gelijk is aan $\{yx\}$. Vervolgens wordt elke byte gemapt naar zijn multiplicatieve inverse in het eindige veld GF(2^8), waarbij {00} zichzelf blijft. Daarna volgt een lineaire transformatie, die neerkomt op een matrixvermenigvuldiging gevolgd door het optellen van een constante vector. De sommaties in deze transformatie zijn XOR-operaties, zoals gebruikelijk in GF(2^8). De S-box is ontworpen om weerstand te bieden aan cryptanalytische aanvallen door een lage correlatie tussen input- en outputbits te garanderen en te zorgen dat de output geen lineaire functie is van de input [11](#page=11).
> **Tip:** De niet-lineariteit van de S-box, voornamelijk verkregen door het gebruik van de multiplicatieve inverse, is cruciaal voor de beveiliging van AES.
De inverse S-box wordt ook berekend, waarbij de stappen omgekeerd worden toegepast [9](#page=9).
### 3.3 ShiftRows (rijverschuiving)
De ShiftRows transformatie is een simpele permutatie waarbij de rijen van de 'State' matrix worden verschoven. De eerste rij blijft onveranderd. De tweede rij ondergaat een circulaire linksverschuiving van 1 byte, de derde rij een van 2 bytes, en de vierde rij een van 3 bytes. Deze verschuivingen zijn cruciaal omdat de 'State' wordt behandeld als een array van vier 4-byte kolommen; een rijverschuiving verplaatst een byte naar een andere kolom, wat een lineaire afstand van een veelvoud van 4 bytes is. Hierdoor worden de bytes van een kolom verspreid over vier verschillende kolommen. De inverse ShiftRows transformatie voert de verschuivingen uit in de tegenovergestelde richting: een circulaire rechtsverschuiving van 1 byte voor de tweede rij, enzovoort [13](#page=13) [7](#page=7).
> **Tip:** De ShiftRows operatie, hoewel eenvoudig, draagt significant bij aan de diffusie door bytes van verschillende kolommen te mengen.
### 3.4 MixColumns (kolommenging)
De MixColumns transformatie opereert op elke kolom individueel. Elke byte in een kolom wordt getransformeerd tot een nieuwe waarde die een functie is van alle vier de bytes in die kolom. Deze transformatie wordt gedefinieerd door een matrixvermenigvuldiging. Voor een kolom met elementen $s_{00}, s_{10}, s_{20}, s_{30}$ worden de nieuwe kolom-elementen $s'_{00}, s'_{10}, s'_{20}, s'_{30}$ berekend met behulp van specifieke coëfficiënten, zoals $s'_{00} = \{02\} \cdot s_{00} + \{03\} \cdot s_{10} + \{01\} \cdot s_{20} + \{01\} \cdot s_{30}$. Alle optellingen en vermenigvuldigingen vinden plaats in GF(2^8). De naam 'MixColumns' komt voort uit het feit dat elke nieuwe kolom volledig wordt bepaald door de coëfficiënten van de oorspronkelijke kolom [14](#page=14) [7](#page=7).
De coëfficiënten van de matrix zijn gebaseerd op een lineaire code met een maximale afstand tussen code woords, wat zorgt voor een goede menging van de bytes binnen elke kolom. Samen met de ShiftRows transformatie garandeert MixColumns dat na enkele rondes alle outputbits afhankelijk zijn van alle inputbits. De keuze van de coëfficiënten ({01}, {02}, {03}) is beïnvloed door implementatieoverwegingen, omdat vermenigvuldigingen met deze waarden in GF(2^8) efficiënt kunnen worden geïmplementeerd met behulp van linksverschuivingen en XOR-operaties. De coëfficiënten voor de inverse MixColumns zijn complexer te implementeren [15](#page=15).
### 3.5 AddRoundKey (sleutel toevoeging via XOR)
De AddRoundKey transformatie is de eenvoudigste van de vier stadia en betrekt alle 128 bits van de 'State'. De 128 bits van de 'State' worden bit-voor-bit XORed met de 128 bits van de ronde sleutel. Deze operatie wordt beschouwd als een kolomgebaseerde operatie tussen de vier bytes van een 'State' kolom en één woord van de ronde sleutel. De complexiteit van de ronde sleutel expansie, in combinatie met de complexiteit van de andere AES stadia, draagt bij aan de algehele beveiliging [16](#page=16) [7](#page=7).
> **Tip:** De AddRoundKey transformatie is de enige stap die direct de geheime sleutel gebruikt. Dit maakt het een essentieel onderdeel voor het beveiligen van de data tegen ongeautoriseerde toegang.
### 3.6 De AES encryptie ronde structuur
Een volledige encryptie ronde in AES omvat alle vier de transformaties. Alle operaties zijn kolomgebaseerd, behalve ShiftRows, dat rijgebaseerd is, wat zorgt voor een goede menging binnen elke ronde. De ShiftRows operatie zorgt voor een permutatie door bytes te verplaatsen tussen kolommen, wat bijdraagt aan de diffusie van het algoritme. De gehele structuur van de rondes is ontworpen om zowel efficiënt als zeer veilig te zijn [17](#page=17) [7](#page=7) [8](#page=8).
---
# Sleuteluitbreiding en beveiligingseigenschappen van AES
Dit onderwerp beschrijft het algoritme voor AES-sleuteluitbreiding, de weerstand tegen cryptanalytische aanvallen, en de essentiële beveiligingseigenschappen zoals diffusie en het avalanche-effect, terwijl ook de decryptiestructuur kort wordt toegelicht.
### 4.1 Sleuteluitbreidingsalgoritme
Het AES-sleuteluitbreidingsalgoritme is ontworpen om uit een initiële sleutel van 16 bytes (vier woorden) een reeks van ronde sleutels te genereren die nodig zijn voor elke ronde van het AES-cijfer [18](#page=18).
#### 4.1.1 Generatieproces
* De initiële vier woorden van de sleutel worden gekopieerd naar het begin van de uitgebreide sleutelarray [18](#page=18).
* De resterende woorden worden in groepen van vier woorden gegenereerd [18](#page=18).
* Elk nieuw woord $w[i]$ is afhankelijk van het direct voorafgaande woord $w[i-1]$ en het woord vier posities terug, $w[i-4]$ [18](#page=18).
* In de meeste gevallen ($3$ van de $4$ gevallen) wordt een simpele XOR-operatie gebruikt om het nieuwe woord te berekenen [18](#page=18).
* Voor woorden waarvan de positie in de array een veelvoud van $4$ is, wordt een complexere functie gebruikt [18](#page=18).
#### 4.1.2 De complexe functie (g)
De complexe functie, gesymboliseerd door $g$, omvat de volgende stappen:
1. **Circulaire linksverschuiving van één byte:** De bytes in een woord worden een positie naar links verschoven, waarbij de meest significante byte naar de minst significante positie gaat [18](#page=18).
2. **S-box substitutie:** Elke byte wordt vervolgens vervangen door zijn corresponderende waarde uit de S-box, dezelfde S-box die ook in de SubBytes-transformatie wordt gebruikt [18](#page=18).
3. **Optellen van een ronde constante (RC[j]):** Tot slot wordt een ronde-specifieke constante, $RC[j]$, toegevoegd (XOR'ed) aan het resultaat [18](#page=18).
#### 4.1.3 Ronde constanten (RC)
De ronde constanten $RC[j]$ worden iteratief berekend, waarbij $RC[j = 2 \times RC[j-1]$ (Galoisvermenigvuldiging met 2) [18](#page=18).
* $2$ in binaire vorm is $ _2$, wat overeenkomt met $x$ in polynoomvorm [10](#page=10) [18](#page=18).
* Vermenigvuldigen met $x$ in Galoisveld $\text{GF}(2^8)$ is een linksverschuiving [15](#page=15) [18](#page=18).
* $RC $ is gelijk aan $10000000_2$ of $x^7$ [18](#page=18) [8](#page=8).
* $RC $ wordt berekend als $x^7 \times x = x^8 \pmod{x^8+x^4+x^3+x+1}$, wat resulteert in $x^4+x^3+x+1$ of $00011011_2$ ($1B_{16}$) [18](#page=18) [9](#page=9).
* $RC $ is weer een linksverschuiving: $00110110_2$ ($36_{16}$) [10](#page=10) [18](#page=18).
#### 4.1.4 Weerstand tegen cryptanalyse
Het sleuteluitbreidingsalgoritme is ontworpen om resistent te zijn tegen bekende cryptanalytische aanvallen. De specifieke ontwerpcriteria omvatten [19](#page=19):
* **Beperkte informatie:** Kennis van een deel van de sleutel mag niet leiden tot de berekening van veel andere sleutelbits [19](#page=19).
* **Inverteerbaarheid:** Kennis van een bepaald aantal opeenvolgende woorden van de uitgebreide sleutel moet het mogelijk maken de volledige sleutel te reconstrueren (voor een sleutel van $N_k$ woorden, $N_k$ woorden) [19](#page=19).
* **Snelheid:** Het algoritme moet efficiënt zijn op diverse processors [19](#page=19).
* **Gebruik van ronde constanten:** Deze elimineren symmetrieën in de sleutelgeneratie tussen verschillende rondes [18](#page=18) [19](#page=19).
* **Diffusie van sleutelverschillen:** Elke bit in de initiële sleutel moet invloed hebben op veel bits in de ronde sleutels [19](#page=19).
* **Niet-lineariteit:** Voldoende niet-lineariteit is cruciaal om te voorkomen dat verschillen in de initiële sleutel volledig worden bepaald door verschillen in de ronde sleutels [19](#page=19).
* **Eenvoud:** Een eenvoudige beschrijving en implementatie [19](#page=19).
> **Tip:** De complexiteit in de sleuteluitbreiding, met name de $g$-functie en de ronde constanten, is essentieel om de symmetrie tussen verschillende rondes te doorbreken en zo de veiligheid tegen bepaalde aanvallen te verhogen.
### 4.2 Beveiligingseigenschappen
AES vertoont sterke beveiligingseigenschappen, met name diffusie en het avalanche-effect, die ervoor zorgen dat kleine veranderingen in de invoer (plaintext of sleutel) leiden tot grote veranderingen in de uitvoer (ciphertext).
#### 4.2.1 Diffusie
Diffusie is het principe waarbij een kleine verandering in de plaintext of de sleutel resulteert in een grote verandering in de ciphertext. Dit principe wordt bereikt door de opeenvolging van transformaties (ShiftRows, MixColumns) in de verschillende rondes van AES. Het doel is om de relatie tussen de plaintext en de ciphertext zo complex mogelijk te maken [20](#page=20).
#### 4.2.2 Het avalanche-effect
Het avalanche-effect is een specifieke manifestatie van diffusie, waarbij een enkele bitverandering in de plaintext of sleutel een significante verandering teweegbrengt in de ciphertext, idealiter in ongeveer de helft van de bits van de ciphertext [20](#page=20) [21](#page=21).
##### 4.2.2.1 Avalanche-effect bij verandering in plaintext
Wanneer één bit van de plaintext wordt veranderd, leidt dit tot een snelle verspreiding van verschillen door de State-matrix door de rondes heen [20](#page=20).
* Na slechts één ronde kunnen al veel bits van de State-matrix verschillen [20](#page=20).
* Na twee rondes verschilt ongeveer de helft van de bits [20](#page=20).
* Dit patroon van verschilverspreiding zet zich voort in de resterende rondes, wat leidt tot een sterke diffusie [20](#page=20).
> **Voorbeeld:** Als de achtste bit van de plaintext verandert, kunnen na de eerste ronde al 20 bits van de State-matrix verschillen. Na de tweede ronde kan dit oplopen tot bijna de helft van de bits [20](#page=20).
##### 4.2.2.2 Avalanche-effect bij verandering in sleutel
Een vergelijkbaar effect treedt op wanneer één bit van de sleutel wordt veranderd, wat leidt tot aanzienlijke veranderingen in de State-matrix na elke ronde [21](#page=21).
* Een enkele bitverandering in de sleutel produceert na één ronde al een significante verandering in de State-matrix [21](#page=21).
* Ook hier verspreidt de omvang van de verandering zich door de rondes heen, resulterend in ongeveer de helft van de bits die verschillen [21](#page=21).
AES vertoont een sterker avalanche-effect dan DES, waarbij DES meer rondes nodig heeft om een vergelijkbaar niveau van bitverschil te bereiken bij een verandering in plaintext of sleutel [21](#page=21).
> **Tip:** Een sterk avalanche-effect is cruciaal voor de veiligheid, omdat het statistische aanvallen op basis van bekende plaintext (zoals differentiële cryptanalyse) bemoeilijkt.
### 4.3 De cryptanalytische weerstand van MixColumns en de Diffusie/Confusion eigenschappen
De MixColumns-transformatie speelt een sleutelrol in het creëren van diffusie. De gebruikte coëfficiënten in de matrix van MixColumns zijn gebaseerd op een lineaire code met maximale afstand tussen codewoorden. Dit zorgt voor een grondige menging van de bytes binnen elke kolom. In combinatie met de ShiftRows-transformatie garandeert dit dat na enkele rondes alle uitvoerbits afhankelijk zijn van alle invoerbits [15](#page=15).
De keuze van de coëfficiënten (alleen $\{01\}$, $\{02\}$, of $\{03\}$) is ook beïnvloed door implementatieoverwegingen. Deze coëfficiënten zijn gemakkelijk te implementeren via Galoisvermenigvuldigingen, wat neerkomt op een linksverschuiving gevolgd door een voorwaardelijke XOR-operatie met het primitieve polynoom. Dit maakt de encryptie efficiënt, zowel in software als hardware. De coëfficiënten voor de inverse MixColumns (nodig voor decryptie) zijn complexer te implementeren, wat een reden was waarom encryptie prioriteit kreeg boven decryptie voor bepaalde toepassingen zoals modi als CFB, OFB, CTR en voor het construeren van Message Authentication Codes (MACs) [15](#page=15).
### 4.4 Decryptiestructuur
De AES-decryptie is niet exact het omgekeerde van de encryptie qua volgorde van transformaties, hoewel de sleutelplanningsstructuur hetzelfde is. Dit vereist dat voor applicaties die zowel encryptie als decryptie nodig hebben, twee afzonderlijke software- of firmwaremodules nodig zijn [22](#page=22).
#### 4.4.1 Equivalente decryptie-structuur
Er bestaat echter een equivalente versie van het decryptie-algoritme die dezelfde structuur heeft als het encryptie-algoritme. Om deze equivalentie te bereiken, zijn aanpassingen in de sleutelplanning en de volgorde van transformaties nodig [22](#page=22).
De standaard encryptieronde heeft de structuur: SubBytes, ShiftRows, MixColumns, AddRoundKey [22](#page=22).
De standaard decryptieronde heeft de structuur: InvShiftRows, InvSubBytes, AddRoundKey, InvMixColumns [22](#page=22).
Om de decryptie-structuur te laten lijken op die van encryptie, worden twee belangrijke wijzigingen doorgevoerd:
1. De eerste twee stadia van de decryptieronde (InvShiftRows en InvSubBytes) worden omgewisseld. Dit is mogelijk omdat InvShiftRows niet afhankelijk is van de byte-inhoud en InvSubBytes niet afhankelijk is van de byte-volgorde, waardoor ze commutatief zijn [22](#page=22).
2. De laatste twee stadia van de decryptieronde (AddRoundKey en InvMixColumns) opereren op een manier die hun omwisseling toelaat. Zowel AddRoundKey als InvMixColumns beïnvloeden de State-matrix kolom per kolom en opereren lineair ten opzichte van de kolominput, wat hun omwisseling vergemakkelijkt wanneer de sleutel als een reeks woorden wordt gezien [23](#page=23).
Deze aanpassingen maken een equivalente structuur mogelijk, waarbij de volgorde van transformaties (met hun inversen) overeenkomt met die van encryptie, mits de sleutelplanning hierop wordt aangepast [22](#page=22).
---
## 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 |
|------|------------|
| Geavanceerde Versleutelingsstandaard (AES) | Een symmetrische blokcijfer dat door het National Institute of Standards and Technology (NIST) in 2001 is gepubliceerd als de opvolger van DES en gebruikt wordt voor een breed scala aan toepassingen. |
| Rijndael-algoritme | Het algoritme dat is gekozen en benoemd tot AES, ontworpen door de Belgische ontwerpers Vincent Rijmen en Joan Daemen. |
| Symmetrische encryptie | Een vorm van encryptie waarbij dezelfde geheime sleutel wordt gebruikt voor zowel het versleutelen als het ontsleutelen van gegevens, in tegenstelling tot asymmetrische encryptie. |
| Galoisveld GF(2^n) | Een eindig veld met $2^n$ elementen, gebruikt in cryptografie waar delingen en multiplicatieve inversen nodig zijn. In AES wordt GF(2^8) gebruikt. |
| Additieve inverse | Het element in een veld dat, wanneer opgeteld bij een gegeven element, nul oplevert. Voor een element $a$, is de additieve inverse $-a$. |
| Multiplicatieve inverse | Het element in een veld dat, wanneer vermenigvuldigd met een gegeven element, de multiplicatieve identiteit (één) oplevert. Voor een element $a \neq 0$, is de multiplicatieve inverse $a^{-1}$. |
| GF(2^8) | Een specifiek Galoisveld met $2^8 = 256$ elementen, waarin de bewerkingen van AES plaatsvinden. Optelling is XOR en vermenigvuldiging is polynomiale vermenigvuldiging modulo $x^8+x^4+x^3+x+1$. |
| S-box | Een substitutietabel die in AES wordt gebruikt om individuele bytes te vervangen door andere bytes, wat zorgt voor niet-lineariteit en cryptografische sterkte. |
| ShiftRows | Een transformatiefunctie in AES die de rijen van de State-matrix circulair verschuift om diffusie te bewerkstelligen. |
| MixColumns | Een transformatiefunctie in AES die de bytes binnen elke kolom van de State-matrix mengt door middel van polynomiale vermenigvuldiging in GF(2^8), wat zorgt voor diffusie. |
| AddRoundKey | Een transformatiefunctie in AES waarbij de State-matrix bitwise wordt ge-XOR'd met een rondesleutel, die afkomstig is uit de sleuteluitbreiding. |
| Sleuteluitbreiding | Het proces waarbij de initiële AES-sleutel wordt uitgebreid tot een reeks rondesleutels die in elke ronde van het encryptieproces worden gebruikt. |
| Avalanche effect | Een gewenst kenmerk van cryptografische algoritmen waarbij een kleine verandering in de invoer (plaintext of sleutel) resulteert in een grote verandering in de uitvoer (ciphertext). |
| Verwarring (Confusion) | Een cryptografisch principe waarbij de relatie tussen de sleutel en de ciphertext zo complex mogelijk wordt gemaakt. |
| Diffusie (Diffusion) | Een cryptografisch principe waarbij de relatie tussen de plaintext en de ciphertext zo verspreid mogelijk wordt gemaakt, zodat een verandering in de plaintext veel bits in de ciphertext beïnvloedt. |