Symmetric_4_Modes_of_operation.pdf
Summary
# Modi van bewerking voor blokcijfers
Dit onderwerp introduceert de verschillende modi van bewerking die worden gebruikt om blokcijfers aan te passen voor diverse toepassingen, met een focus op hun kenmerken en beveiligingsoverwegingen [1](#page=1).
### 1.1 Inleiding tot modi van bewerking
Een blokcijfer neemt een blok tekst van vaste lengte ($b$ bits) en een sleutel als input en produceert een blok cijfertekst van $b$ bits. Wanneer meerdere blokken platte tekst worden versleuteld met dezelfde sleutel, kunnen er beveiligingsproblemen ontstaan. Modi van bewerking zijn technieken om een cryptografisch algoritme te verbeteren of aan te passen voor een toepassing, zoals het toepassen van een blokcijfer op een reeks datablokken of een datastroom. NIST (SP 800-38A) heeft vijf modi van bewerking gedefinieerd voor gebruik met elk symmetrisch blokcijfer, waaronder triple DES en AES. Andere termen voor modus van bewerking zijn "chaining mode" [1](#page=1).
> **Tip:** Modi van bewerking zijn specifiek voor blokcijfers omdat stroomcijfers ontworpen zijn voor oneindige platte tekststromen en geen kunstmatige opsplitsing in blokken nodig hebben. Publieke sleutel (asymmetrische) cijfers worden meestal gebruikt om symmetrische sleutels te versleutelen, waarna de rest symmetrisch wordt versleuteld met behulp van deze modi [2](#page=2).
### 1.2 ECB (Electronic Codebook) modus
ECB is de meest eenvoudige modus waarbij elk platte tekstblok afzonderlijk wordt versleuteld met dezelfde sleutel [2](#page=2) [3](#page=3).
#### 1.2.1 Definitie en werking
Voor een bericht langer dan $b$ bits, wordt de boodschap opgesplitst in blokken van $b$ bits, waarbij het laatste blok indien nodig wordt aangevuld (padding). De formules voor ECB-versleuteling en -ontsleuteling zijn [3](#page=3):
$$C_j = E(K, P_j) \quad \text{voor } j = 1, \dots, N$$
$$P_j = D(K, C_j) \quad \text{voor } j = 1, \dots, N$$
waarbij $P_j$ het $j$-de platte tekstblok is, $C_j$ het $j$-de cijfertekstblok is, $E$ de versleutelingsfunctie is, $D$ de ontsleutelingsfunctie is, $K$ de sleutel is, en $N$ het totale aantal blokken is [3](#page=3).
#### 1.2.2 Kenmerken en beveiligingsoverwegingen
* **Unieke ciphertext voor elke plaintext:** Voor een gegeven sleutel is er een unieke cijfertekst voor elk $b$-bit blok platte tekst, wat doet denken aan een codeboek [3](#page=3).
* **Herhalende patronen:** De meest significante eigenschap is dat als hetzelfde $b$-bit blok platte tekst meer dan eens voorkomt, het altijd dezelfde cijfertekst oplevert. Dit maakt het onveilig voor lange, gestructureerde of voorspelbare berichten, omdat herhalende elementen in de cijfertekst zichtbaar blijven [4](#page=4).
* **Geschiktheid:** ECB is ideaal voor korte hoeveelheden data, zoals het versleutelen van een enkele versleutelingssleutel [3](#page=3).
* **Padding:** ECB vereist een methode voor het omgaan met padding van het laatste blok, wat risico's op informatielekken met zich mee kan brengen [3](#page=3) [4](#page=4).
#### 1.2.3 Criteria voor superioriteit
* **Overhead:** Extra operaties vergeleken met ECB [4](#page=4).
* **Foutcorrectie:** Hoe een fout in een cijfertekstblok de platte tekst beïnvloedt [4](#page=4).
* **Foutpropagatie:** Hoe een fout in een cijfertekstblok wordt doorgegeven aan volgende platte tekstblokken [4](#page=4).
* **Diffusie:** Hoe statistieken van de platte tekst worden gereflecteerd in de cijfertekst; lage entropie in platte tekst mag niet zichtbaar zijn in de cijfertekst [4](#page=4).
* **Beveiliging:** Lekt de cijfertekst informatie over de platte tekst [4](#page=4)?
> **Tip:** In sommige cryptografische bibliotheken, met name voor educatieve doeleinden, is ECB de standaardmodus [4](#page=4).
### 1.3 CBC (Cipher Block Chaining) modus
CBC is een modus die de beveiligingsdeficiënties van ECB overwint door ervoor te zorgen dat hetzelfde platte tekstblok, indien herhaald, verschillende cijfertekstblokken oplevert [5](#page=5).
#### 1.3.1 Definitie en werking
Bij CBC wordt het input voor de versleuteling gevormd door de XOR van het huidige platte tekstblok en het voorgaande cijfertekstblok. Dezelfde sleutel wordt gebruikt voor elk blok. De formules zijn [5](#page=5):
$$C_j = E(K, P_j \oplus C_{j-1}) \quad \text{voor } j = 1, \dots, N$$
$$P_j = D(K, C_j) \oplus C_{j-1} \quad \text{voor } j = 1, \dots, N$$
Voor het eerste blok geldt $C_0 = IV$ (initialization vector) [5](#page=5).
* **Initialisatievector (IV):** Om het eerste blok cijfertekst te produceren, wordt een IV XORed met het eerste blok platte tekst. De IV is een datablok van dezelfde grootte als het cijferblok. De IV hoeft niet geheim te zijn, maar moet wel onvoorspelbaar zijn voor derden en beschermd worden tegen ongeautoriseerde wijzigingen [5](#page=5).
* **Methoden voor IV-generatie:**
1. Versleuteling van een nonce (uniek voor elke encryptie-uitvoering) onder dezelfde sleutel [6](#page=6).
2. Genereren van een willekeurig datablok met een willekeurige nummergenerator [6](#page=6).
#### 1.3.2 Kenmerken en beveiligingsoverwegingen
* **Vermijdt herhalende patronen:** Door de kettingreactie produceert herhalende patronen in platte tekst geen herhalende patronen in cijfertekst [5](#page=5).
* **Geschiktheid:** Geschikt voor het versleutelen van berichten langer dan $b$ bits [6](#page=6).
* **Foutpropagatie:** Een bitfout in een cijfertekstblok $C_i$ beïnvloedt de ontcijfering van $P_i$ en alle volgende platte tekstblokken [4](#page=4).
* **Padding:** Vereist padding voor het laatste blok [5](#page=5).
* **Authenticatie:** Naast vertrouwelijkheid kan CBC ook gebruikt worden voor authenticatie [6](#page=6).
> **Tip:** Onvoorspelbaarheid van de IV is cruciaal. Als een tegenstander de ontvanger kan misleiden om een andere IV te gebruiken, kunnen geselecteerde bits in het eerste platte tekstblok worden geïnverteerd [5](#page=5).
### 1.4 CFB (s-bit Cipher Feedback) modus
CFB is een modus die een blokcijfer omzet in een stroomcijfer, waardoor het niet nodig is om berichten aan te vullen tot een geheel aantal blokken [7](#page=7).
#### 1.4.1 Definitie en werking
CFB werkt met segmenten van $s$ bits, in plaats van volledige blokken van $b$ bits. Een veelvoorkomende waarde voor $s$ is 8 bits [7](#page=7).
* **Versleuteling:** Een $b$-bit verschuifregister wordt geïnitialiseerd met een IV. De meest significante $s$ bits van de output van de versleutelingsfunctie worden XORed met het eerste platte tekstsegment $P_1$ om $C_1$ te produceren. De inhoud van het verschuifregister wordt met $s$ bits naar links verschoven, en $C_1$ wordt in de minst significante $s$ bits geplaatst [8](#page=8).
$$C_j = P_j \oplus \text{leftmost}_s(E(K, \text{ShiftRegister}_j)) \quad \text{voor } j = 1, \dots, N$$
waarbij $\text{ShiftRegister}_j$ de inhoud van het verschuifregister is vóór de versleuteling van blok $j$.
* **Ontsleuteling:** Dezelfde procedure wordt gebruikt, waarbij de ontvangen cijfertekst $C_j$ wordt XORed met de output van de versleutelingsfunctie om het platte tekstsegment $P_j$ te verkrijgen. Cruciaal is dat de *versleutelingsfunctie* wordt gebruikt voor zowel versleuteling als ontsleuteling [8](#page=8).
$$P_j = C_j \oplus \text{leftmost}_s(E(K, \text{ShiftRegister}_j))$$
#### 1.4.2 Kenmerken en beveiligingsoverwegingen
* **Stream cipher-achtig:** Gedraagt zich als een stroomcijfer, maar de bitstroom die met de platte tekst wordt XORed, hangt af van de platte tekst zelf [8](#page=8).
* **Parallelisatie:** Versleuteling kan niet parallel worden uitgevoerd vanwege de afhankelijkheid van eerdere blokken. Ontsleuteling kan wel parallel, mits de inputblokken eerst serieel worden geconstrueerd [8](#page=8).
* **Foutpropagatie:** Een bitfout in $C_i$ beïnvloedt $P_i$ en kan verdere corruptie veroorzaken in volgende blokken omdat $C_i$ als input dient voor het verschuifregister [9](#page=9).
* **Gebruik van encryptie:** Gebruikt de encryptiefunctie in plaats van de decryptiefunctie [8](#page=8).
> **Tip:** De reden waarom de encryptiefunctie wordt gebruikt in de decryptiefase bij CFB, OFB en CTR is deels te danken aan ontwerpaspecten van bepaalde cijfers zoals AES, waar encryptie mogelijk efficiënter is [10](#page=10) [12](#page=12) [8](#page=8).
### 1.5 OFB (Output Feedback) modus
OFB is vergelijkbaar met CFB, maar de output van de versleutelingsfunctie wordt rechtstreeks teruggevoerd als input voor de volgende encryptie [9](#page=9).
#### 1.5.1 Definitie en werking
OFB werkt met volledige blokken van platte tekst en cijfertekst [9](#page=9).
* **Versleuteling:** De output van de versleutelingsfunctie ($O_i$) wordt teruggevoerd als input voor de encryptie van het volgende blok. De stream van bits die met de platte tekst wordt XORed, is onafhankelijk van de platte tekst zelf [10](#page=10) [9](#page=9).
$$O_j = E(K, O_{j-1}) \quad \text{voor } j > 1, O_0 = IV$$
$$C_j = P_j \oplus O_j \quad \text{voor } j = 1, \dots, N$$
* **Ontsleuteling:** De procedure is identiek aan versleuteling, waarbij de gegenereerde bitstroom $O_j$ wordt XORed met de cijfertekstblokken om de platte tekst te reconstrueren [10](#page=10).
$$P_j = C_j \oplus O_j$$
#### 1.5.2 Kenmerken en beveiligingsoverwegingen
* **IV als nonce:** De IV moet een nonce zijn (uniek voor elke encryptie-uitvoering) omdat de sequentie van outputblokken ($O_j$) alleen afhangt van de sleutel en de IV [9](#page=9).
* **Geen foutpropagatie:** Bitfouten in transmissie propageren niet. Een fout in $C_1$ beïnvloedt alleen de ontcijferde $P_1$ [9](#page=9).
* **Vulnerability to modification:** Kwetsbaarder voor berichtstream-modificatie aanvallen dan CFB. Het complementeren van een bit in de cijfertekst complementeert de corresponderende bit in de gereconstrueerde platte tekst [9](#page=9).
* **Stream cipher structuur:** Heeft de structuur van een typisch stroomcijfer, met een stream die onafhankelijk is van de platte tekst [10](#page=10).
* **Gebruik van encryptie:** Gebruikt de encryptiefunctie voor zowel versleuteling als ontsleuteling [10](#page=10).
### 1.6 CTR (Counter) modus
CTR modus gebruikt een teller die gelijk is aan de platte tekstblokgrootte en biedt aanzienlijke voordelen op het gebied van efficiëntie en flexibiliteit [11](#page=11).
#### 1.6.1 Definitie en werking
Een teller wordt geïnitialiseerd tot een waarde en vervolgens met 1 verhoogd voor elk volgend blok (modulo $2^b$) [11](#page=11).
* **Versleuteling:** De teller wordt versleuteld en vervolgens XORed met het platte tekstblok om het cijfertekstblok te produceren. Er is geen kettingreactie [11](#page=11).
$$C_j = P_j \oplus E(K, \text{Counter}_j) \quad \text{voor } j = 1, \dots, N$$
* **Ontsleuteling:** Dezelfde sequentie van tellenwaarden wordt gebruikt, waarbij elk versleuteld tellenblok wordt XORed met een cijfertekstblok om het overeenkomstige platte tekstblok te herstellen [11](#page=11).
$$P_j = C_j \oplus E(K, \text{Counter}_j)$$
#### 1.6.2 Kenmerken en beveiligingsoverwegingen
* **Teller uniciteit:** De tellerwaarde moet verschillend zijn voor elk platte tekstblok dat wordt versleuteld. Het hergebruik van een tellenwaarde kan de vertrouwelijkheid van platte tekstblokken compromitteren [11](#page=11).
* **Hardware-efficiëntie:** Versleuteling/ontsleuteling kan parallel worden uitgevoerd op meerdere blokken, wat de doorvoer verhoogt [12](#page=12).
* **Software-efficiëntie:** Maakt effectief gebruik van processors met parallelle functies [12](#page=12).
* **Preprocessing:** De output van de versleutelingsalgoritmen kan vooraf worden bereid, waardoor de enige resterende bewerkingen XORs zijn [12](#page=12).
* **Willekeurige toegang:** Blokken kunnen in willekeurige volgorde worden verwerkt, wat nuttig is voor toepassingen die specifieke blokken uit een opgeslagen cijfertekst willen ontsleutelen [12](#page=12).
* **Bewijsbare beveiliging:** Aantoonbaar minstens zo veilig als andere besproken modi [12](#page=12).
* **Eenvoud:** Vereist alleen de implementatie van de versleutelingsfunctie, niet de ontsleutelingsfunctie [12](#page=12).
> **Tip:** Een methode om uniciteit van tellenwaarden te garanderen is om de tellerwaarde over berichten heen te laten doorlopen, waarbij de eerste tellenwaarde van een nieuw bericht één meer is dan de laatste tellenwaarde van het voorgaande bericht [11](#page=11).
---
# ECB (Electronic Codebook) modus
De ECB-modus is de meest eenvoudige manier om blokcijfers te gebruiken, waarbij elk blok platte tekst onafhankelijk van andere blokken wordt versleuteld met dezelfde sleutel [2](#page=2) [3](#page=3).
### 2.1 Werking van de ECB-modus
In de ECB-modus wordt de platte tekst opgesplitst in blokken van een specifieke grootte, meestal aangeduid als $b$ bits. Elk van deze blokken wordt vervolgens afzonderlijk versleuteld met dezelfde geheime sleutel ($K$). Dit proces kan wiskundig worden weergegeven als [3](#page=3):
$C_j = E(K, P_j)$ voor $j = 1, \dots, N$
waarbij $P_j$ het $j$-de blok platte tekst is, $C_j$ het $j$-de blok cijfertekst is, $E$ de versleutelingsfunctie is, en $K$ de sleutel [3](#page=3).
De ontsleuteling gebeurt op een vergelijkbare manier, waarbij elk cijfertekstblok wordt ontsleuteld met dezelfde sleutel:
$P_j = D(K, C_j)$ voor $j = 1, \dots, N$
waarbij $D$ de ontsleutelingsfunctie is [3](#page=3).
#### 2.1.1 Padding
Omdat de laatste blok platte tekst mogelijk niet de volledige $b$ bits beslaat, is er een methode voor padding nodig om het laatste blok aan te vullen tot de vereiste grootte. Het nadeel van padding is dat het, indien voorspelbaar, informatie kan lekken over de originele platte tekst [3](#page=3) [4](#page=4).
> **Tip:** Zorg ervoor dat de padding-methode robuust is en niet gemakkelijk te misbruiken is door een aanvaller.
### 2.2 Voordelen van ECB
De ECB-modus is ideaal voor het versleutelen van korte hoeveelheden gegevens. Dit omvat situaties zoals het veilig verzenden van een encryptiesleutel zelf, omdat een sleutel doorgaans slechts één blok groot is [3](#page=3).
> **Voorbeeld:** Het versleutelen van een 128-bits AES-sleutel met een AES-blokcijfer in ECB-modus, waarbij de sleutel zelf als het enige platte tekstblok fungeert.
### 2.3 Beveiligingsproblemen van ECB
Het meest significante beveiligingsprobleem van ECB is dat identieke blokken platte tekst altijd leiden tot identieke blokken cijfertekst, zolang dezelfde sleutel wordt gebruikt. Dit principe geldt zelfs als de platte tekst niet willekeurig is, zoals witte ruimtes in afbeeldingen, waardoor patronen zichtbaar blijven in de cijfertekst [2](#page=2) [4](#page=4).
> **Voorbeeld:** Een afbeelding die met ECB-modus is versleuteld, zal nog steeds de contouren en patronen van de originele afbeelding vertonen, zij het in een versleutelde vorm. Dit komt doordat identieke kleurblokken in de platte tekst zullen resulteren in identieke cijfertekstblokken.
Voor langere, gestructureerde, of voorspelbare berichten is de ECB-modus daarom niet veilig. Een cryptanalist kan patronen en herhalingen in de cijfertekst exploiteren om informatie over de originele platte tekst te achterhalen of zelfs blokken te substitueren of te herschikken. In realistische scenario's moet men er bijna altijd van uitgaan dat platte teksten enige mate van voorspelbaarheid vertonen, waardoor ECB ongeschikt is [4](#page=4).
#### 2.3.1 Kenmerken die ECB ongeschikt maken
* **Gelijksoortige platte teksten produceren gelijksoortige cijferteksten:** Dit leidt tot het lekken van informatie over de structuur van de platte tekst [4](#page=4).
* **Weerkaatsing van statistieken:** Diffusie is laag; lage entropie (voorspelbare) platte tekstblokken worden direct weerspiegeld in de cijfertekst [4](#page=4).
> **Tip:** Hoewel ECB in sommige educatieve crypto-bibliotheken de standaard is, moet het in de praktijk voor de meeste toepassingen worden vermeden. Gebruik in plaats daarvan veiligere modi zoals CBC of GCM.
ECB kan worden gezien als een "codeboek" waarin voor elke mogelijke $b$-bit blok van platte tekst een unieke cijfertekst bestaat voor een gegeven sleutel. Dit verklaart de naam "Electronic Codebook" [3](#page=3).
---
# CBC (Cipher Block Chaining) modus
CBC (Cipher Block Chaining) modus is een methode van blokcijferoperatie die is ontworpen om de beveiligingszwaktes van de ECB-modus (Electronic Code Book) te overwinnen. In tegenstelling tot ECB, waarbij elke plaintextblok afzonderlijk wordt versleuteld, creëert CBC een afhankelijkheid tussen opeenvolgende blokken door middel van een initialisatievector (IV) en een 'chaining'-techniek. Dit zorgt ervoor dat zelfs herhaalde plaintextblokken leiden tot verschillende ciphertextblokken, waardoor patronen in de versleutelde data worden gemaskeerd [5](#page=5).
### 3.1 Problemen met ECB en de oplossing via CBC
De ECB-modus heeft een fundamentele tekortkoming: omdat elk plaintextblok onafhankelijk wordt versleuteld met dezelfde sleutel, zal een herhaald plaintextblok altijd resulteren in hetzelfde ciphertextblok. Dit leidt ertoe dat herhalende patronen in de oorspronkelijke plaintext zichtbaar blijven in de versleutelde data, wat de beveiliging ondermijnt, vooral bij data met veel niet-willekeurige elementen zoals afbeeldingen [2](#page=2).
CBC-modus lost dit op door een XOR-operatie te introduceren tussen het huidige plaintextblok en het voorgaande ciphertextblok voordat het wordt versleuteld. De sleutel blijft hetzelfde voor elk blok, maar de input voor het encryptie-algoritme voor elk blok is daardoor uniek en niet langer direct gerelateerd aan het plaintextblok zelf. Hierdoor worden herhalende patronen van $b$ bits niet blootgelegd [5](#page=5).
> **Tip:** CBC-modus is dus een geschikte methode voor het versleutelen van berichten die langer zijn dan de blokgrootte ($b$ bits) [6](#page=6).
### 3.2 De initialisatievector (IV)
Om het eerste ciphertextblok te genereren, wordt een initialisatievector (IV) gebruikt. De IV wordt XORed met het eerste plaintextblok voordat dit wordt versleuteld. Bij het ontsleutelen wordt de IV XORed met de output van het decryptie-algoritme om het eerste plaintextblok te herstellen [5](#page=5).
#### 3.2.1 Eigenschappen van de IV
De IV is een datablok van dezelfde grootte als het cijferblok. Het belangrijkste kenmerk van de IV is dat deze **onvoorspelbaar** moet zijn door een derde partij. Hoewel de IV bekend moet zijn bij zowel de zender als de ontvanger, mag deze niet van tevoren voorspeld kunnen worden. De IV hoeft niet geheim te zijn en kan daarom in klare tekst worden meegestuurd met de ciphertext [5](#page=5) [6](#page=6).
#### 3.2.2 Belang van IV-bescherming
De IV moet beschermd worden tegen ongeautoriseerde wijzigingen. Als een tegenstander erin slaagt de ontvanger een andere IV te laten gebruiken, kan deze specifieke bits in het eerste plaintextblok omkeren [5](#page=5) [6](#page=6).
#### 3.2.3 Methodes voor IV-generatie
SP800-38A beveelt twee methodes aan voor het genereren van een geschikte IV:
1. **Gebruik van een nonce:** Pas de encryptiefunctie toe, onder dezelfde sleutel als voor de encryptie van de plaintext, op een 'nonce'. Een nonce is een datablok dat uniek is voor elke uitvoer van de encryptieoperatie, zoals een teller, een tijdstempel of een berichtnummer [6](#page=6).
2. **Willekeurige datablokken:** Genereer een willekeurig datablok met behulp van een random number generator [6](#page=6).
> **Tip:** Zolang de IV onvoorspelbaar is, is de specifieke keuze van de IV van minder belang [6](#page=6).
### 3.3 Versleuteling en Ontsleuteling in CBC
#### 3.3.1 Versleutelingsproces
Voor de versleuteling van een bericht $P$ in $n$ blokken ($P_1, P_2, \dots, P_n$) met een sleutel $K$ en een IV, verloopt het proces als volgt [5](#page=5):
1. Het eerste plaintextblok $P_1$ wordt XORed met de IV: $P_1 \oplus \text{IV}$.
2. Het resultaat wordt versleuteld met de sleutel $K$: $C_1 = E_K(P_1 \oplus \text{IV})$.
3. Voor de volgende blokken ($i > 1$), wordt het $i$-de plaintextblok $P_i$ XORed met het voorgaande ciphertextblok $C_{i-1}$: $P_i \oplus C_{i-1}$.
4. Het resultaat wordt versleuteld met de sleutel $K$: $C_i = E_K(P_i \oplus C_{i-1})$.
Het laatste blok moet mogelijk worden opgevuld (padded) tot een volledige blokgrootte van $b$ bits [5](#page=5).
#### 3.3.2 Ontsleutelingsproces
Voor de ontsleuteling van ciphertext $C$ in $n$ blokken ($C_1, C_2, \dots, C_n$) met sleutel $K$ en IV, verloopt het proces als volgt [5](#page=5):
1. Het eerste ciphertextblok $C_1$ wordt gedecrypteerd met de sleutel $K$: $E^{-1}_K(C_1)$.
2. Het resultaat wordt XORed met de IV om het eerste plaintextblok te verkrijgen: $P_1 = E^{-1}_K(C_1) \oplus \text{IV}$.
3. Voor de volgende blokken ($i > 1$), wordt het $i$-de ciphertextblok $C_i$ gedecrypteerd met de sleutel $K$: $E^{-1}_K(C_i)$.
4. Het resultaat wordt XORed met het voorgaande ciphertextblok $C_{i-1}$ om het $i$-de plaintextblok te verkrijgen: $P_i = E^{-1}_K(C_i) \oplus C_{i-1}$.
### 3.4 Toepassingen van CBC
Naast het waarborgen van vertrouwelijkheid, kan CBC-modus ook worden gebruikt voor authenticatie [6](#page=6).
---
# Stream-gebaseerde modi (CFB, OFB, CTR)
Deze modi transformeren blokcijfers in streamcijfers, wat real-time verwerking en het elimineren van padding vereenvoudigt. Een wenselijke eigenschap van een streamcijfer is dat de cijfertekst dezelfde lengte heeft als de platte tekst [7](#page=7).
### 4.1 Cipher Feedback (CFB) modus
CFB-modus (Cipher Feedback) is een methode om een blokcijfer om te zetten in een streamcijfer, waarbij de platte tekst wordt opgedeeld in segmenten van $s$ bits, in plaats van volledige blokken van $b$ bits [7](#page=7).
#### 4.1.1 Werking van CFB encryptie
Voor encryptie wordt een $b$-bit verschuifregister gebruikt, dat initieel wordt gevuld met een initialisatievector (IV). De meest significante $s$ bits van de uitvoer van de encryptiefunctie worden XORed met het eerste plaintextsegment ($P_1$) om het eerste ciphertextsegment ($C_1$) te produceren, dat vervolgens wordt verzonden. Vervolgens worden de inhoud van het verschuifregister met $s$ bits naar links geschoven, en $C_1$ wordt in de minst significante $s$ bits van het verschuifregister geplaatst. Dit proces wordt herhaald voor alle plaintextsegmenten [8](#page=8).
#### 4.1.2 Werking van CFB decryptie
Voor decryptie wordt exact hetzelfde proces gevolgd als bij encryptie. Het ontvangen ciphertextsegment ($C_1$) wordt XORed met de uitvoer van de encryptiefunctie om het plaintextsegment ($P_1$) te herstellen. Het is cruciaal op te merken dat de encryptiefunctie van het blokcijfer wordt gebruikt voor zowel encryptie als decryptie, niet de decryptiefunctie [8](#page=8).
> **Tip:** CFB wordt beschouwd als een streamcijfer, maar wijkt af van de typische constructie doordat de gegenereerde bitstroom ook afhankelijk is van de platte tekst [8](#page=8).
#### 4.1.3 Voordelen en Nadelen van CFB
* **Parallelle verwerking:** Net als bij CBC-encryptie, is de invoer voor de encryptiefunctie van elke volgende stap afhankelijk van het resultaat van de vorige stap, wat parallelle verwerking van meerdere blokken uitsluit. Echter, bij decryptie kunnen de benodigde encryptieoperaties parallel worden uitgevoerd indien de invoerblokken eerst serieel worden opgebouwd uit de IV en de cijfertekst [8](#page=8).
* **Bitfouten:** In tegenstelling tot OFB, kunnen bitfouten in de transmissie zich voortplanten door de keten [9](#page=9).
### 4.2 Output Feedback (OFB) modus
OFB-modus (Output Feedback) is structureel vergelijkbaar met CFB, maar de uitvoer van de encryptiefunctie wordt teruggevoerd als invoer voor het genereren van de volgende blokken. Een belangrijk verschil is dat OFB werkt met volledige blokken van platte tekst en cijfertekst, terwijl CFB met $s$-bit segmenten werkt [9](#page=9).
#### 4.2.1 Vereisten voor OFB
OFB vereist, net als CBC en CFB, een initialisatievector (IV). Deze IV moet een **nonce** zijn, wat betekent dat deze uniek moet zijn voor elke encryptieoperatie met dezelfde sleutel. De reeks van uitvoerblokken ($O_i$) is namelijk uitsluitend afhankelijk van de sleutel en de IV, en niet van de platte tekst. Als twee verschillende berichten identieke plaintextblokken op dezelfde positie hebben, kan dit leiden tot kwetsbaarheden voor een aanvaller [9](#page=9).
#### 4.2.2 Werking van OFB
De werking van OFB is als volgt: een initialisatievector (IV) wordt met een sleutel geëncrypteerd om de eerste uitvoer ($O_1$) te genereren. Deze uitvoer ($O_1$) wordt vervolgens XORed met het eerste plaintextblok ($P_1$) om het eerste ciphertextblok ($C_1$) te produceren. De uitvoer van de encryptiefunctie ($O_i$) wordt teruggevoerd als invoer voor de encryptie van het volgende blok, om de volgende uitvoer ($O_{i+1}$) te genereren [9](#page=9).
#### 4.2.3 Voordelen en Nadelen van OFB
* **Bitfouten:** Een groot voordeel van OFB is dat bitfouten tijdens de transmissie zich niet voortplanten. Als een bitfout optreedt in $C_1$, heeft dit alleen invloed op de herstelde $P_1$; volgende plaintextblokken blijven onaangetast [9](#page=9).
* **Kwetsbaarheid voor modificatie:** OFB is kwetsbaarder voor berichtenstroommodificatie-aanvallen dan CFB. Het complementeren van een bit in de cijfertekst complementeert ook de corresponderende bit in de herstelde platte tekst. Dit kan een aanvaller in staat stellen om de cijfertekst zodanig te wijzigen dat deze niet wordt gedetecteerd door foutcorrigerende codes, door zowel het datagedeelte als de checksum aan te passen [10](#page=10) [9](#page=9).
* **Structuur van streamcijfer:** OFB volgt de structuur van een typisch streamcijfer, waarbij een bitstroom wordt gegenereerd op basis van een startwaarde en een sleutel, die vervolgens wordt XORed met de platte tekst [10](#page=10).
* **Encryptiefunctie:** Net als bij CFB, wordt de encryptiefunctie gebruikt voor zowel encryptie als decryptie [10](#page=10).
### 4.3 Counter (CTR) modus
CTR-modus (Counter) maakt gebruik van een teller die gelijk is aan de blokgrootte van de platte tekst [11](#page=11).
#### 4.3.1 Werking van CTR
Voor encryptie wordt de teller geëncrypteerd, en het resultaat wordt vervolgens XORed met het plaintextblok om het ciphertextblok te produceren. Er is geen sprake van chaining tussen blokken. Voor decryptie wordt dezelfde reeks tellerwaarden gebruikt; elke geëncrypteerde teller wordt XORed met een ciphertextblok om het corresponderende plaintextblok te herstellen. De initiële telwaarde moet dus beschikbaar zijn voor decryptie. Ook hier wordt de encryptiefunctie gebruikt voor beide processen [11](#page=11).
#### 4.3.2 Vereisten voor CTR
Net als bij OFB, moet de initiële telwaarde een **nonce** zijn; dat wil zeggen, de telwaarde moet verschillend zijn voor elke plaintextblok dat wordt geëncrypteerd. Verder moeten alle telwaarden over alle berichten uniek zijn. Als een telwaarde meerdere keren wordt gebruikt, kan de vertrouwelijkheid van de bijbehorende plaintextblokken in gevaar komen [11](#page=11).
> **Tip:** Een effectieve methode om de uniciteit van telwaarden te waarborgen, is door de tellerwaarde doorlopend met 1 te verhogen, ook over berichtgrenzen heen. De eerste telwaarde van elk nieuw bericht is dan één meer dan de laatste telwaarde van het voorgaande bericht [12](#page=12).
#### 4.3.3 Voordelen van CTR modus
CTR-modus biedt diverse significante voordelen:
* **Hardware-efficiëntie:** In tegenstelling tot de drie chaining-modi (zoals CBC, CFB), kan encryptie (of decryptie) in CTR-modus parallel op meerdere blokken van platte tekst of cijfertekst plaatsvinden. Dit beperkt de maximale doorvoer niet tot de omgekeerde tijd van één blokencryptie, maar tot de mate van parallelisme die wordt bereikt [12](#page=12).
* **Software-efficiëntie:** Door de mogelijkheden voor parallelle uitvoering kan CTR-modus effectief gebruikmaken van processors met parallelle functies, zoals agressieve pipelining en SIMD-instructies [12](#page=12).
* **Voorbereiding (Preprocessing):** De uitvoering van de onderliggende encryptie-algoritme is onafhankelijk van de invoer van de platte of cijfertekst. Mits voldoende geheugen beschikbaar is en veiligheid gewaarborgd blijft, kan dit worden gebruikt om de uitvoer van de encryptieboxen voor te bereiden. De enige benodigde berekening bij het aanbieden van de platte of cijfertekst is dan een reeks XOR-operaties, wat de doorvoer aanzienlijk verhoogt [12](#page=12).
* **Willekeurige toegang (Random Access):** Het $i$-de blok van platte of cijfertekst kan willekeurig worden verwerkt. Met chaining-modi kan blok $C_i$ pas worden berekend nadat de $i-1$ voorgaande blokken zijn verwerkt. Dit maakt CTR aantrekkelijk voor toepassingen waar een cijfertekst is opgeslagen en slechts één blok gedecodeerd hoeft te worden [12](#page=12).
* **Bewijsbare veiligheid:** Het is aangetoond dat CTR-modus minstens even veilig is als de andere besproken modi [12](#page=12).
* **Eenvoud:** In vergelijking met modi zoals ECB en CBC vereist CTR-modus alleen de implementatie van de encryptie-algoritme, niet de decryptie-algoritme. Dit is met name belangrijk wanneer de decryptie-algoritme substantieel verschilt van de encryptie-algoritme, zoals bij AES het geval is. Bovendien hoeft de decryptiesleutelplanning niet geïmplementeerd te worden [12](#page=12).
---
# XTS-AES modus
XTS-AES is een specifieke modus van AES, ontworpen voor de encryptie van gegevens op sectorgebaseerde opslagapparaten, rekening houdend met mogelijke toegang tot opgeslagen gegevens door een aanvaller.
### 5.1 Introductie en doel
De XTS-AES (XEX-based Tweaked Codebook Mode with Ciphertext Stealing) modus werd in 2010 goedgekeurd door NIST en is ook een IEEE-standaard. Het is een specifieke modus van operatie voor blokgeoriënteerde opslagapparaten, zoals versleutelde schijven van laptops en mobiele apparaten. Het doel is het beveiligen van data op dergelijke apparaten, waarbij het dreigingsmodel rekening houdt met mogelijke toegang tot opgeslagen gegevens door een aanvaller. Deze modus is niet gerelateerd aan andere, algemenere AES-modi [13](#page=13).
### 5.2 Werkingsprincipe
#### 5.2.1 Basisstructuur
XTS-AES is ontworpen voor blokgeoriënteerde opslagapparaten. Data-eenheden, zoals sectoren, worden georganiseerd in blokken van 128 bits. Deze blokken worden gelabeld als $P_0, P_1, \ldots, P_m$, waarbij het laatste blok mogelijk kleiner is dan 128 bits. De werking van XTS-AES is gebaseerd op machten van $x$ in $GF(2^{128})$ [13](#page=13) [14](#page=14).
#### 5.2.2 Tweesleutel AES en Tweak
De encryptie en decryptie binnen XTS-AES maken gebruik van twee instanties van het AES-algoritme met twee verschillende sleutels. Dit tweesleutelmechanisme is essentieel voor de beveiliging van de modus [13](#page=13).
Binnen elk blok wordt een zogenaamde 'tweak' waarde toegevoegd. Deze tweak zorgt ervoor dat identieke data-blokken op verschillende locaties op de schijf, of zelfs op verschillende momenten, anders worden versleuteld. De tweak-waarde is een niet-negatieve integer en wordt gebruikt om de sectornummers (aangeduid met $i$) aan te passen, waardoor het kopiëren van opslag naar een andere locatie minder triviaal wordt. De input voor de encryptie/decryptie omvat zowel het bloknummer ($j$) als de aangepaste sectorinformatie (met tweak) [13](#page=13).
De encryptie van een blok omvat de volgende stappen [13](#page=13):
1. Encryptie van de tweak-waarde (met sectorinformatie $i$ en bloknummer $j$).
2. Vermenigvuldiging van het resultaat met $\alpha^j$, waarbij $\alpha$ de $x$-polynoom in $GF(2^{128})$ vertegenwoordigt.
3. XORing van dit resultaat met het originele blok ($P_k$).
4. Toepassen van AES-encryptie op het verkregen resultaat.
De formule voor het versleutelen van een blok $P_k$ kan conceptueel worden weergegeven als:
$$ E_{K_2}(P_k \oplus E_{K_1}(i \cdot \alpha^j)) $$
waarbij $K_1$ en $K_2$ de twee AES-sleutels zijn, $E$ de AES-encryptiefunctie voorstelt, $i$ de sectorinformatie (mogelijk getweakt) is, en $j$ het bloknummer [13](#page=13).
#### 5.2.3 Parallelle verwerking en Ciphertext Stealing
Net als de CTR-modus is XTS-AES geschikt voor parallelle verwerking. Omdat er geen ketening tussen de blokken is, kunnen meerdere blokken gelijktijdig versleuteld of ontsleuteld worden [14](#page=14).
Een uitzondering op de onafhankelijke blokverwerking treedt op wanneer het laatste blok minder dan 128 bits bevat. In dit geval wordt 'ciphertext stealing' toegepast in plaats van padding. Een deel van het voorlaatste ciphertextblok wordt 'gestolen' om het laatste, onvolledige plaintextblok op te vullen. Dit zorgt ervoor dat de output altijd een veelvoud van 128 bits is, zonder de noodzaak van expliciete padding op de plaintext [14](#page=14).
### 5.3 Kenmerken en voordelen
* **Doelgericht:** Ontworpen voor de specifieke behoefte van schijfencryptie [13](#page=13).
* **Parallelle verwerking:** Maakt hoge doorvoersnelheden mogelijk door gelijktijdige verwerking van blokken [14](#page=14).
* **Tweesleutel AES:** Verhoogt de veiligheid door het gebruik van twee onafhankelijke AES-sleutels [13](#page=13).
* **Tweak:** Voorkomt dat identieke blokken altijd hetzelfde versleutelde resultaat produceren, wat de beveiliging tegen bepaalde aanvallen verhoogt [13](#page=13).
* **Ciphertext Stealing:** Efficiënte afhandeling van partiële blokken zonder de noodzaak van padding, wat de efficiëntie ten goede komt [14](#page=14).
* **Industriële adoptie:** Heeft brede ondersteuning in de industrie gekregen [13](#page=13).
### 5.4 Vergelijking met CTR-modus
Hoewel XTS-AES, net als CTR-modus, parallel kan worden verwerkt onderscheidt het zich door het gebruik van een nonce (aangeduid als $i$) in combinatie met een teller ($j$), wat meer robuustheid biedt voor opslagmedia. De tweesleutelstructuur en het ciphertext stealing mechanisme zijn ook specifieke kenmerken van XTS-AES die niet standaard in CTR-modus aanwezig zijn [14](#page=14).
> **Tip:** Onthoud dat de 'tweak' essentieel is voor de beveiliging van XTS-AES op opslagapparaten, omdat het ervoor zorgt dat dezelfde data op verschillende plaatsen op de schijf een ander ciphertext oplevert. Dit bemoeilijkt aanvallen die gebaseerd zijn op het herkennen van patronen in versleutelde data.
---
## 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 |
|------|------------|
| Modus van bewerking | Een techniek om het effect van een cryptografisch algoritme te verbeteren of het algoritme aan te passen voor een specifieke toepassing, zoals het toepassen van een blokcijfer op een reeks datablokken of een datastroom. |
| Blokcijfer | Een cryptografisch algoritme dat een vast blok tekst van een bepaalde lengte (b bits) en een sleutel als invoer neemt en een blok cijfertekst van dezelfde lengte produceert. |
| Cijfertekst | De versleutelde vorm van de oorspronkelijke gegevens, die onleesbaar is zonder de juiste sleutel. |
| Sleutel | Een stuk geheime informatie dat wordt gebruikt door een cryptografisch algoritme om gegevens te versleutelen of te ontsleutelen. |
| Plaintext (platte tekst) | De oorspronkelijke, onversleutelde gegevens die worden verwerkt door een cryptografisch algoritme. |
| ECB (Electronic Codebook) | Een eenvoudige modus van bewerking waarbij elk blok plaintext afzonderlijk wordt versleuteld met dezelfde sleutel, wat kan leiden tot patronen in de cijfertekst. |
| CBC (Cipher Block Chaining) | Een modus van bewerking waarbij elk blok plaintext wordt XORed met het voorgaande blok cijfertekst voordat het wordt versleuteld, wat de beveiliging verbetert door het verdwijnen van patronen. |
| Initialisatievector (IV) | Een willekeurig of vooraf bepaald blok gegevens dat wordt gebruikt om de eerste stap van de versleuteling in modi zoals CBC en CFB te initialiseren, waardoor de consistentie bij herhaalde plaintextblokken wordt doorbroken. |
| CFB (Cipher Feedback) | Een modus van bewerking die een blokcijfer omzet in een streamcijfer door een deel van de uitvoer van het blokcijfer terug te voeden als invoer voor de volgende encryptie. |
| OFB (Output Feedback) | Een modus van bewerking die een blokcijfer omzet in een streamcijfer door de uitvoer van de encryptiefunctie als invoer te gebruiken voor de volgende encryptie, wat resulteert in een vooraf gegenereerde keystream. |
| CTR (Counter) | Een modus van bewerking die een blokcijfer omzet in een streamcijfer door een teller te versleutelen en het resultaat te XORen met de plaintext, wat parallelle verwerking mogelijk maakt. |
| XOR (Exclusive OR) | Een binaire logische bewerking die twee invoerbits vergelijkt en een uitvoerbit produceert; de uitvoer is 1 als de invoerbits verschillend zijn, en 0 als ze gelijk zijn. |
| GF(2^128) | Galoissche veld met $2^{128}$ elementen, gebruikt in de XTS-AES modus voor polynomiale bewerkingen. |
| Tweak | Een extra dataparameter, vaak een niet-negatief geheel getal, dat wordt gebruikt in de XTS-AES modus om elk blok op een unieke manier te bewerken, zelfs als het dezelfde plaintext bevat. |