Cover
Jetzt kostenlos starten Symmetric_4_Modes_of_operation.pdf
Summary
# Modi van werking voor blokversleuteling
Hier is een gedetailleerde samenvatting over de modi van werking voor blokversleuteling, opgesteld als een examenklare studiegids.
## 1. Modi van werking voor blokversleuteling
Dit deel behandelt de diverse modi van werking die gebruikt worden om blokversleutelingsalgoritmes aan te passen voor verschillende toepassingen, zoals het verwerken van datablokken of datastromen, en om beveiligingsproblemen bij het versleutelen van meerdere blokken met dezelfde sleutel aan te pakken [1](#page=1).
### 1.1 Algemene beginselen
Een blokversleutelaar neemt een blok tekst van vaste lengte ($b$ bits) en een sleutel als invoer en produceert een $b$-bits blok cijfertekst. Als de hoeveelheid platte tekst groter is dan $b$ bits, wordt de platte tekst opgedeeld in blokken van $b$ bits. Modi van werking zijn technieken om het effect van een cryptografisch algoritme te versterken of het algoritme aan te passen voor een specifieke toepassing, zoals het toepassen van een blokversleutelaar op een reeks datablokken of een datastroom. Deze modi zijn bedoeld voor gebruik met elke symmetrische blokversleutelaar, waaronder triple DES en AES. Een andere term voor mode of operation is 'chaining mode' [1](#page=1).
> **Tip:** Houd er rekening mee dat deze sectie niet alle relevante modi van werking opsomt; geauthenticeerde encryptiemodi worden later besproken [1](#page=1).
### 1.2 Probleemstelling: de noodzaak van modi van werking
Het direct versleutelen van meerdere blokken platte tekst met dezelfde sleutel kan tot beveiligingsproblemen leiden. Als de platte tekst niet willekeurig is (bijvoorbeeld door herhalende patronen of witruimte), kan deze niet-willekeurigheid zichtbaar blijven in de versleutelde informatie. Bij modi die elk blok afzonderlijk versleutelen, zoals ECB, zal elk identiek platte tekstblok resulteren in identieke cijfertekstblokken. Dit kan patronen in de oorspronkelijke platte tekst onthullen. Streamcijfers hebben geen modi van werking nodig omdat ze zijn ontworpen voor oneindige platte tekst. Publieke-sleutelcijfers worden doorgaans gebruikt om symmetrische sleutels te versleutelen, waarna symmetrische versleuteling met modi van werking wordt toegepast [2](#page=2) [4](#page=4).
### 1.3 ECB (Electronic Codebook) mode
ECB is de meest eenvoudige mode van werking. Hierbij wordt elk platte tekstblok afzonderlijk versleuteld met dezelfde sleutel. Voor een gegeven sleutel is er een unieke cijfertekst voor elk $b$-bits blok platte tekst, wat doet denken aan een codeboek. Voor een bericht langer dan $b$ bits wordt het bericht opgedeeld in blokken van $b$ bits, waarbij het laatste blok indien nodig wordt opgevuld (padding) [3](#page=3).
De formules voor ECB zijn:
$$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, $E$ de encryptiefunctie, $D$ de decryptiefunctie en $K$ de sleutel [3](#page=3).
ECB is ideaal voor korte datablokken, zoals een encryptiesleutel. Het vereist echter een methode voor padding, wat risico's met zich meebrengt voor het blootleggen van informatie [3](#page=3) [4](#page=4).
**Kenmerken en nadelen van ECB:**
* **Identieke plaintext blokken leiden tot identieke ciphertext blokken:** Dit is de meest significante eigenschap en een groot beveiligingsrisico [4](#page=4).
* **Niet veilig voor lange berichten:** Gestructureerde of voorspelbare berichten kunnen worden geanalyseerd door cryptanalisten. Herhalende elementen met een periode die een veelvoud is van $b$ bits kunnen worden geïdentificeerd [4](#page=4).
* **Toont overeenkomsten tussen platte teksten in de cijfertekst:** Dit is ongewenst omdat platte teksten vaak enige mate van voorspelbaarheid vertonen [4](#page=4).
* Sommige cryptografische bibliotheken gebruiken ECB als standaard, met name voor educatieve doeleinden [4](#page=4).
**Criteria voor betere modi:**
* **Overhead:** De extra bewerkingen ten opzichte van ECB [4](#page=4).
* **Error recovery:** Hoe snel een fout in een cijfertekstblok wordt hersteld in de platte tekst [4](#page=4).
* **Error propagation:** Hoe een fout in een cijfertekstblok de daaropvolgende platte tekstblokken beïnvloedt [4](#page=4).
* **Diffusion:** Hoe statistische eigenschappen van de platte tekst worden weerspiegeld in de cijfertekst; lage entropie in platte tekst mag niet zichtbaar zijn in de cijfertekst [4](#page=4).
* **Security:** Of cijfertekstblokken informatie lekken over platte tekstblokken [4](#page=4).
### 1.4 CBC (Cipher Block Chaining) mode
CBC lost de beveiligingsproblemen van ECB op door ervoor te zorgen dat dezelfde platte tekstblokken verschillende cijfertekstblokken opleveren. De invoer voor de encryptiefunctie is de XOR van het huidige platte tekstblok en het voorgaande cijfertekstblok, met dezelfde sleutel voor elk blok. Dit creëert een ketting van verwerking, waardoor herhalende patronen niet zichtbaar zijn. Net als bij ECB is padding van het laatste blok nodig als dit onvolledig is [5](#page=5).
Voor decryptie wordt elk cijfertekstblok door de decryptiefunctie gevoerd, en het resultaat wordt XORed met het voorgaande cijfertekstblok om het platte tekstblok te verkrijgen [5](#page=5).
Voor het eerste cijfertekstblok wordt een initialisatievector (IV) XORed met het eerste platte tekstblok. De IV is een datablok van dezelfde grootte als het cijferblok en moet bekend zijn bij zender en ontvanger, maar onvoorspelbaar voor derden. De IV hoeft niet geheim te zijn en kan in klare tekst worden verzonden. Als een tegenstander de ontvanger ertoe kan brengen een andere IV te gebruiken, kan hij selecteerde bits in het eerste platte tekstblok inverteren [5](#page=5) [6](#page=6).
**Methoden voor het genereren van een IV:**
1. Toepassen van de encryptiefunctie (met dezelfde sleutel) op een 'nonce' (een uniek datablok voor elke encryptie, zoals een teller of tijdstempel) [6](#page=6).
2. Genereren van een willekeurig datablok met een random number generator [6](#page=6).
CBC is geschikt voor het versleutelen van berichten langer dan $b$ bits en kan ook voor authenticatie worden gebruikt [6](#page=6).
> **Tip:** Omdat de invoer van elk blok (behalve het eerste) afhankelijk is van het vorige blok, kan CBC-encryptie niet parallel worden uitgevoerd. CBC-decryptie kan echter wel parallel worden uitgevoerd als de invoerblokken eerst in serie worden opgebouwd uit de IV en de cijfertekst [8](#page=8).
### 1.5 CFB (s-bit Cipher Feedback) mode
CFB-mode kan een blokversleutelaar omzetten in een streamcijfer, waardoor padding overbodig wordt en realtime-operaties mogelijk zijn. De eenheid van transmissie ($s$ bits) is typisch 8 bits. Plattekstsegmenten worden aan elkaar gekoppeld, zodat de cijfertekst van elk segment afhankelijk is van alle voorgaande platte teksten [7](#page=7).
**Encryptie:**
De invoer voor de encryptiefunctie is een $b$-bits schuifregister, aanvankelijk ingesteld op een IV. De meest significante $s$ bits van de uitvoer van de encryptiefunctie worden XORed met het eerste platte tekstsegment ($P_1$) om het eerste cijfertekstsegment ($C_1$) te produceren. Vervolgens wordt het schuifregister met $s$ bits naar links verschoven en wordt $C_1$ aan de minst significante $s$ bits toegevoegd [8](#page=8).
**Decryptie:**
Het proces is vergelijkbaar, waarbij het ontvangen cijfertekstsegment wordt XORed met de uitvoer van de encryptiefunctie om het platte tekstsegment te verkrijgen. Het is cruciaal dat de **encryptiefunctie** wordt gebruikt voor zowel encryptie als decryptie in CFB-mode, niet de decryptiefunctie [8](#page=8).
CFB-mode deelt met CBC dat de invoer voor de meeste encryptie-operaties afhankelijk is van het vorige resultaat, wat parallelle uitvoering van encryptie belemmert. Voor decryptie kunnen de benodigde encryptie-operaties parallel worden uitgevoerd nadat de invoerblokken serieel zijn geconstrueerd [8](#page=8).
> **Tip:** CFB is geen typische streamcijferconstructie omdat de gegenereerde bitstroom ook afhankelijk is van de platte tekst [8](#page=8).
### 1.6 OFB (Output Feedback) mode
OFB-mode is structureel vergelijkbaar met CFB. De uitvoer van de encryptiefunctie wordt teruggevoerd als invoer voor de volgende encryptie. In tegenstelling tot CFB, werkt OFB met volledige blokken ($b$ bits) in plaats van $s$-bits subsets. Een IV is vereist, die een nonce moet zijn (uniek voor elke encryptie-uitvoering). Dit komt doordat de reeks uitvoerblokken ($O_i$) alleen afhankelijk is van de sleutel en de IV, niet van de platte tekst. Hierdoor is de bitstroom die met de platte tekst wordt XORed vast voor een gegeven sleutel en IV [9](#page=9).
**Voordelen van OFB:**
* **Foutendetectie en -propagatie:** Bitfouten in de transmissie propageren niet. Een fout in $C_1$ beïnvloedt alleen de herstelde $P_1$; volgende platte teksteenheden worden niet gecorrumpeerd. Dit in tegenstelling tot CFB, waar $C_1$ ook de schuifregisterinvoer beïnvloedt [9](#page=9).
**Nadelen van OFB:**
* **Kwetsbaarheid voor berichtenwijzigingsaanvallen:** Het complementeren van een bit in de cijfertekst complementeert de corresponderende bit in de herstelde platte tekst. Dit kan leiden tot ongeautoriseerde wijzigingen die niet door foutcorrectiecodes worden gedetecteerd [10](#page=10) [9](#page=9).
OFB heeft de structuur van een typisch streamcijfer, waarbij een bitstroom wordt gegenereerd die onafhankelijk is van de platte tekst. Net als bij CFB wordt voor decryptie de **encryptiefunctie** gebruikt [10](#page=10).
### 1.7 CTR (Counter) mode
CTR-mode gebruikt een teller die gelijk is aan de platte tekstblokgrootte ($b$ bits). De tellerwaarde moet verschillend zijn voor elk platte tekstblok dat wordt versleuteld. Typisch wordt de teller geïnitialiseerd en vervolgens met 1 verhoogd voor elk opeenvolgend blok (modulo $2^b$) [11](#page=11).
**Encryptie:**
De teller wordt versleuteld en vervolgens XORed met het platte tekstblok om het cijfertekstblok te produceren. Er is geen kettingmechanisme [11](#page=11).
**Decryptie:**
Dezelfde reeks tellerswaarden wordt gebruikt, waarbij elke versleutelde teller XORed wordt met een cijfertekstblok om het corresponderende platte tekstblok te herstellen. De initiële tellerswaarde moet beschikbaar zijn voor decryptie. De **encryptiefunctie** wordt gebruikt voor zowel encryptie als decryptie [11](#page=11).
De initiële tellerswaarde moet een nonce zijn; alle $T_i$ waarden over alle berichten heen moeten uniek zijn. Als een tellerswaarde meerdere keren wordt gebruikt, kan de vertrouwelijkheid van alle platte tekstblokken die met die tellerswaarde zijn versleuteld, in gevaar komen. Als een platte tekstblok met een bepaalde tellerswaarde bekend is, kan de uitvoer van de encryptiefunctie eenvoudig worden bepaald, waardoor andere platte tekstblokken met dezelfde tellerswaarde gemakkelijk kunnen worden hersteld [11](#page=11).
Een manier om de uniciteit van tellerswaarden te waarborgen, is door de teller continu met 1 te blijven verhogen, ook over berichten heen [12](#page=12).
**Voordelen van CTR mode:**
* **Hardware-efficiëntie:** Encryptie/decryptie kan parallel op meerdere blokken worden uitgevoerd, wat de doorvoer verhoogt [12](#page=12).
* **Software-efficiëntie:** Maakt effectief gebruik van parallelle processorfuncties [12](#page=12).
* **Voorverwerking:** De encryptie-uitvoer kan, mits voldoende geheugen en veiligheid, worden voorbereid, zodat alleen XOR-bewerkingen nodig zijn bij ontvangst van de platte tekst [12](#page=12).
* **Random access:** Het $i$-de blok kan onafhankelijk van andere blokken worden verwerkt [12](#page=12).
* **Bewijsbare beveiliging:** Minimaal zo veilig als andere besproken modi [12](#page=12).
* **Eenvoud:** Vereist alleen de encryptiefunctie, niet de decryptiefunctie, wat vooral nuttig is als de decryptiefunctie significant verschilt van de encryptiefunctie (zoals bij AES) [12](#page=12).
### 1.8 XTS-AES mode
In 2010 werd XTS-AES (XEX-based Tweaked Codebook mode with Ciphertext Stealing) goedgekeurd door NIST als een extra blokversleutelingsmodus. Deze modus is specifiek ontworpen voor data die is opgeslagen op sectorgebaseerde apparaten, waarbij het dreigingsmodel rekening houdt met mogelijke toegang tot opgeslagen data door een aanvaller. XTS-AES wordt dagelijks gebruikt in versleutelde schijfopslag van laptops en mobiele apparaten [13](#page=13).
XTS-AES werkt op blokgeoriënteerde opslagapparaten. Blokken worden gelabeld met sequentiële nummers (j) en binnen elk blok zijn er sectornummers (i), die zijn aangepast met een 'tweak'-waarde. De operatie maakt gebruik van twee instanties van het AES-algoritme met twee sleutels. De blok- en sectornummers worden als invoer gebruikt voor encryptie/decryptie. De bewerking is gebaseerd op machten van $x$ in $GF(2^{128})$ [13](#page=13).
De platte tekst van een sector of data-eenheid is georganiseerd in blokken van 128 bits, gelabeld $P_0, P_1, \dots, P_m$. Het laatste blok kan leeg zijn of 1 tot 127 bits bevatten. XTS-AES is, net als CTR-mode, geschikt voor parallelle operaties omdat er geen kettingmechanisme is. In tegenstelling tot CTR-mode bevat XTS-AES een nonce (parameter $i$) en een teller (parameter $j$) [14](#page=14).
Elk blok wordt onafhankelijk versleuteld of ontsleuteld, met uitzondering van het laatste blok als dit minder dan 128 bits bevat. In dat geval worden de laatste twee blokken versleuteld/ontsleuteld met behulp van 'ciphertext stealing' in plaats van padding. Een deel van het op één na laatste cijfertekstblok wordt "gestolen" om het laatste platte tekstblok op te vullen [14](#page=14).
---
# Elektronisch codeboek (ECB) modus
De Elektronisch Codeboek (ECB) modus is de meest eenvoudige methode voor het toepassen van blokcijfers op meerdere datablokken, waarbij elk platte tekstblok onafhankelijk wordt versleuteld met dezelfde sleutel [1](#page=1) [3](#page=3).
### 2.1 Beschrijving van de ECB-modus
De ECB-modus is de meest elementaire manier om een blokcijfer te gebruiken voor gegevens die langer zijn dan één blok. Het proces omvat het opsplitsen van de platte tekst in blokken van een vaste grootte $b$ bits. Elk van deze blokken wordt vervolgens afzonderlijk versleuteld met behulp van dezelfde geheime sleutel $K$ . De algemene formules voor de versleuteling en ontsleuteling in ECB-modus zijn [1](#page=1) [2](#page=2) [3](#page=3):
$$C_j = E(K, P_j) \quad j = 1, \dots, N$$
$$P_j = D(K, C_j) \quad 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 geheime sleutel is en $N$ het totale aantal blokken is [3](#page=3).
### 2.2 Het "codeboek"-concept
De naam "codeboek" (Electronic Code Book) komt voort uit het feit dat er voor elke mogelijke invoer van $b$ bits aan platte tekst een unieke uitvoer van $b$ bits aan cijfertekst bestaat, voor een gegeven sleutel. Dit impliceert dat men een hypothetisch, gigantisch codeboek zou kunnen voorstellen dat alle mogelijke platte tekstpatronen met hun corresponderende cijfertekstvermeldingen bevat [3](#page=3).
### 2.3 Toepassingen en beperkingen
De ECB-modus is ideaal voor het versleutelen van kleine hoeveelheden gegevens, zoals een versleutelingssleutel zelf, omdat deze slechts één blok betreffen. Voor langere berichten is de ECB-modus echter niet veilig [3](#page=3) [4](#page=4).
**Problemen met ECB-modus:**
* **Zichtbaarheid van patronen:** Omdat elk blok onafhankelijk wordt versleuteld, zullen identieke platte tekstblokken altijd resulteren in identieke cijfertekstblokken. Dit betekent dat herhalende patronen in de platte tekst, zoals lege ruimte in afbeeldingen of gestructureerde gegevensvelden, zichtbaar blijven in de cijfertekst. Dit kan leiden tot beveiligingsproblemen, aangezien een cryptanalist deze regelmatigheden kan uitbuiten [2](#page=2) [4](#page=4).
* **Voorspelbaarheid:** Als de platte tekst zeer gestructureerd of voorspelbaar is, kan een cryptanalist dit voordeel halen. Herhalende elementen in de boodschap, met een periode die een veelvoud is van $b$ bits, kunnen door een analist worden geïdentificeerd, wat kan leiden tot het uitwisselen of herschikken van blokken [4](#page=4).
* **Beperkte diffusie:** ECB vertoont weinig diffusie, wat betekent dat de statistische eigenschappen van de platte tekst (zoals voorspelbaarheid) nog steeds zichtbaar zijn in de cijfertekst. Laag-entropische, voorspelbare platte tekstblokken mogen niet direct worden weerspiegeld in de cijfertekstblokken [4](#page=4).
### 2.4 Padding
Bij het gebruik van de ECB-modus (en andere blokcijfermodi) moet er een methode zijn om het laatste blok van de platte tekst op te vullen (padding) als dit niet exact de vereiste $b$ bits heeft. Deze padding-methode kan echter ook het risico met zich meebrengen informatie bloot te geven [3](#page=3) [4](#page=4).
> **Tip:** Hoewel de ECB-modus conceptueel eenvoudig is, moet deze in de praktijk met grote voorzichtigheid worden gebruikt vanwege de inherente beveiligingsrisico's bij het versleutelen van meer dan één blok.
### 2.5 Vergelijking met andere modi
Om de tekortkomingen van de ECB-modus te overwinnen, zijn er complexere modi van operatie gedefinieerd, zoals CBC (Cipher Block Chaining) . Deze modi zijn ontworpen om de beveiliging te verbeteren door de versleuteling van elk blok te koppelen aan de vorige of door andere mechanismen die de statistische eigenschappen van de platte tekst verbergen. Criteria om modi van operatie te evalueren en te construeren die superieur zijn aan ECB omvatten overhead, foutherstel, foutpropagatie en diffusie [2](#page=2) [4](#page=4).
### 2.6 Context van modi van operatie
Modi van operatie zijn technieken die de effectiviteit van een cryptografisch algoritme verbeteren of het algoritme aanpassen voor specifieke toepassingen, zoals het toepassen van een blokcijfer op een reeks datablokken of een datastroom. Ze worden gebruikt met symmetrische blokcijfers zoals AES. Er zijn geen modi van operatie nodig voor stroomcijfers omdat deze ontworpen zijn voor oneindig lange platte tekst. Publieke sleutel (asymmetrische) cijfers gebruiken doorgaans asymmetrische cryptografie om een symmetrische sleutel te versleutelen, waarna de rest van de gegevens symmetrisch wordt versleuteld met behulp van een geschikte modus [1](#page=1) [2](#page=2).
> **Tip:** In sommige cryptografische bibliotheken, met name voor educatieve doeleinden, kan de ECB-modus de standaardinstelling zijn. Wees hiervan bewust en kies bewust voor veiligere modi voor kritieke toepassingen [4](#page=4).
---
# Cipher Block Chaining (CBC) modus
Hieronder volgt een studiehandleiding voor de Cipher Block Chaining (CBC) modus, gebaseerd op de verstrekte documentatie.
## 3. Cipher block chaining (CBC) modus
De Cipher Block Chaining (CBC) modus is een methode voor blokversleuteling die de beveiliging verbetert ten opzichte van de Electronic Code Book (ECB) modus door een kettingmechanisme te introduceren dat herhalende patronen in de platte tekst verbergt in de cijfertekst [5](#page=5).
### 3.1 Introductie en probleemstelling
De ECB-modus, hoewel eenvoudig, heeft een belangrijke tekortkoming: het versleutelt elk platte tekstblok onafhankelijk van de andere blokken. Dit betekent dat identieke platte tekstblokken resulteren in identieke cijfertekstblokken. Als de platte tekst niet willekeurig is (bijvoorbeeld witte ruimtes in afbeeldingen), kunnen herhalende patronen zichtbaar blijven in de versleutelde gegevens. Deze zichtbare patronen vormen een beveiligingsrisico, aangezien ze informatie kunnen prijsgeven over de structuur van de originele gegevens [2](#page=2).
### 3.2 Werkingsprincipe van CBC
Om de beveiligingsgebreken van ECB te overwinnen, maakt CBC gebruik van een techniek waarbij elk platte tekstblok wordt gecombineerd met het voorgaande cijfertekstblok alvorens het te versleutelen. Dit creëert een afhankelijkheid tussen de opeenvolgende blokken, waardoor herhalende patronen in de platte tekst niet langer zichtbaar zijn in de cijfertekst [5](#page=5).
#### 3.2.1 Encryptieproces
Het encryptieproces in CBC verloopt als volgt [5](#page=5):
1. **Initialisatie Vector (IV):** Voor het eerste platte tekstblok wordt een *initialisatie vector* (IV) gebruikt. De IV wordt ge-XORd met het eerste platte tekstblok. De IV is een datablok van dezelfde grootte als een cijferblok [5](#page=5).
2. **Chaining:** Voor elk volgend platte tekstblok wordt dit blok ge-XORd met het *voorgaande cijfertekstblok*.
3. **Encryptie:** Het resultaat van de XOR-bewerking wordt vervolgens versleuteld met de gebruikte sleutel. Dezelfde sleutel wordt voor elk blok gebruikt [5](#page=5).
De invoer voor het encryptie-algoritme is dus de XOR van het huidige platte tekstblok en het voorafgaande cijfertekstblok. Hierdoor draagt de invoer voor de encryptiefunctie geen vaste relatie met het platte tekstblok zelf, waardoor herhalende patronen van $b$ bits niet worden blootgelegd. Net als bij ECB moet het laatste blok worden aangevuld (padded) tot een volledige $b$ bits als het een gedeeltelijk blok is [5](#page=5).
Het wiskundige model voor encryptie in CBC kan als volgt worden weergegeven, waarbij $P_i$ het $i$-de platte tekstblok is, $C_i$ het $i$-de cijfertekstblok, $K$ de encryptiesleutel en $E$ de encryptiefunctie is:
$$C_1 = E_K(P_1 \oplus IV)$$
$$C_i = E_K(P_i \oplus C_{i-1}) \quad \text{voor } i > 1$$
#### 3.2.2 Decryptieproces
Het decryptieproces in CBC is de omgekeerde operatie van encryptie:
1. **Decryptie:** Elk cijfertekstblok wordt door het decryptie-algoritme gehaald.
2. **Chaining (reverse):** Het resultaat van de decryptie wordt ge-XORd met het *voorgaande cijfertekstblok* om het originele platte tekstblok te verkrijgen.
3. **IV voor eerste blok:** Voor het eerste blok wordt het resultaat van de decryptie ge-XORd met de IV om het eerste platte tekstblok te herstellen [5](#page=5).
Het wiskundige model voor decryptie in CBC kan als volgt worden weergegeven, waarbij $D_K$ de decryptiefunctie is:
$$P_1 = D_K(C_1) \oplus IV$$
$$P_i = D_K(C_i) \oplus C_{i-1} \quad \text{voor } i > 1$$
### 3.3 De Initialisatie Vector (IV)
De IV is een cruciaal onderdeel van CBC. Het is een datablok van dezelfde grootte als een cijferblok en wordt gebruikt om de eerste encryptiecyclus te starten [5](#page=5).
#### 3.3.1 Eigenschappen van de IV
* **Bekendheid:** De IV moet bekend zijn bij zowel de verzender als de ontvanger [5](#page=5).
* **Onvoorspelbaarheid:** De IV mag niet voorspelbaar zijn voor een derde partij. Het moet onmogelijk zijn om de IV die bij een bepaalde platte tekst hoort, van tevoren te voorspellen [5](#page=5).
* **Bescherming:** Voor maximale veiligheid moet de IV beschermd zijn tegen ongeautoriseerde wijzigingen. Als een tegenstander de ontvanger kan verleiden tot het gebruik van een verkeerde IV, kan deze specifieke bits in het eerste platte tekstblok inverteren [5](#page=5) [6](#page=6).
* **Niet geheim:** De IV hoeft niet geheim te zijn en kan in platte tekst naar de ontvanger worden gestuurd, zichtbaar voor een tegenstander. Zolang deze maar onvoorspelbaar is, is de specifieke keuze van de IV van belang [6](#page=6).
#### 3.3.2 Methoden voor IV-generatie
SP800-38A beveelt twee mogelijke methoden aan voor het genereren van een IV [6](#page=6):
1. **Gebruik van een Nonce:** Pas de encryptiefunctie toe, onder dezelfde sleutel die voor de encryptie van de platte tekst wordt gebruikt, op een *nonce*. Een nonce moet een datablok zijn dat uniek is voor elke encryptie-uitvoering. Voorbeelden van nonces zijn een teller, een tijdstempel of een berichtnummer [6](#page=6).
2. **Willekeurige datablok:** Genereer een willekeurig datablok met behulp van een random number generator [6](#page=6).
> **Tip:** Hoewel de IV niet geheim hoeft te zijn, is het essentieel dat deze uniek en onvoorspelbaar is. Dit kan bijvoorbeeld door het genereren van een cryptografisch veilige willekeurige waarde voor elke encryptie.
### 3.4 Voordelen en toepassingen van CBC
Vanwege het kettingmechanisme is CBC een geschikte modus voor het versleutelen van berichten langer dan de blokgrootte $b$. Naast het bereiken van vertrouwelijkheid kan CBC ook worden gebruikt voor authenticatie. Dit maakt CBC een robuustere en veiligere keuze dan ECB voor de meeste toepassingen waar blokversleuteling vereist is [6](#page=6).
> **Voorbeeld:** Stel we hebben platte tekstblokken $P_1, P_2, P_3$ en een IV. Met een sleutel $K$ en encryptiefunctie $E$, wordt de cijfertekst als volgt gegenereerd:
>
> 1. $C_1 = E_K(P_1 \oplus IV)$
> 2. $C_2 = E_K(P_2 \oplus C_1)$
> 3. $C_3 = E_K(P_3 \oplus C_2)$
>
> Zoals te zien is, is $C_2$ afhankelijk van $C_1$, en $C_3$ is afhankelijk van $C_2$, wat de kettingwerking illustreert.
---
# Stroomgebaseerde modi: CFB, OFB en CTR
Stroomgebaseerde modi: CFB, OFB en CTR
Deze modi zetten een blokversleutelaar om in een stroomversleutelaar, waardoor het opvullen van blokken overbodig wordt en realtime verwerking mogelijk is. CFB, OFB en CTR hebben elk hun eigen methoden voor het genereren van de stroom.
## 4. Stroomgebaseerde modi: CFB, OFB en CTR
Stroomgebaseerde modi zetten een blokversleutelaar om in een stroomversleutelaar. Dit heeft als voordelen dat het opvullen van blokken overbodig wordt en realtime verwerking mogelijk is. Een stroomversleutelaar elimineert de noodzaak om een bericht aan te vullen tot een integraal aantal blokken. Bovendien is het wenselijk dat de ciphertext van dezelfde lengte is als de plaintext, wat zorgt voor efficiënt gebruik van de transmissiecapaciteit [7](#page=7).
### 4.1 CFB (Cipher Feedback) modus
CFB-modus is een methode om een blokversleutelaar om te zetten in een stroomversleutelaar die werkt met segmenten van $s$ bits. Een veelvoorkomende waarde voor $s$ is 8. Net als bij CBC-modus worden de plaintext-segmenten aan elkaar gekoppeld, zodat de ciphertext van een segment afhangt van alle voorgaande plaintext-segmenten [7](#page=7).
#### 4.1.1 CFB encryptie
Bij encryptie wordt een $b$-bits verschuifregister gevuld met een initialisatievector (IV). De $s$ meest significante bits van de uitvoer van de encryptiefunctie worden ge-XORd met het eerste plaintext-segment ($P_1$) om de eerste ciphertext-eenheid ($C_1$) te produceren. Vervolgens wordt het verschuifregister $s$ bits naar links verschoven en wordt $C_1$ in de $s$ minst significante bits van het verschuifregister geplaatst. Dit proces wordt herhaald voor alle plaintext-segmenten [8](#page=8).
> **Tip:** In CFB-modus wordt de encryptiefunctie van de blokversleutelaar gebruikt om de pseudo-willekeurige stroom te genereren, zelfs voor decryptie [8](#page=8).
#### 4.1.2 CFB decryptie
Voor decryptie wordt hetzelfde schema gebruikt, waarbij de ontvangen ciphertext-eenheid wordt ge-XORd met de uitvoer van de encryptiefunctie om het plaintext-segment te verkrijgen [8](#page=8).
#### 4.1.3 Kenmerken en beperkingen van CFB
CFB-modus wordt weliswaar beschouwd als een stroomversleutelaar, maar wijkt af van de typische constructie waarbij een sleutel en een initiële waarde een bitstroom genereren die met de plaintext wordt ge-XORd. In CFB hangt de stroom ook af van de plaintext [8](#page=8).
Omdat de invoer voor de encryptiefunctie (behalve de eerste) afhankelijk is van het resultaat van de vorige encryptie, kunnen bij CFB-encryptie meerdere bewerkingen niet parallel worden uitgevoerd. Bij CFB-decryptie kunnen de benodigde encryptiebewerkingen wel parallel worden uitgevoerd nadat de invoerblokken uit de IV en ciphertext zijn geconstrueerd [8](#page=8).
### 4.2 OFB (Output Feedback) modus
OFB-modus is structureel vergelijkbaar met CFB-modus. Het verschil is dat bij OFB de uitvoer van de encryptiefunctie wordt teruggekoppeld als invoer voor het versleutelen van het volgende blok, terwijl bij CFB de uitvoer van de XOR-eenheid wordt teruggekoppeld. Een ander verschil is dat OFB werkt met volledige plaintext- en ciphertextblokken, terwijl CFB werkt met $s$-bits subseten [9](#page=9).
#### 4.2.1 Vereisten voor OFB
OFB-modus vereist een initialisatievector (IV) die uniek moet zijn voor elke encryptie-uitvoering (een nonce). De reden hiervoor is dat de reeks uitvoerblokken ($O_i$) alleen afhankelijk is van de sleutel en de IV, en niet van de plaintext. Als twee verschillende berichten identieke plaintextblokken op identieke posities zouden hebben, zou dit een aanvaller in staat stellen dat deel van de $O_i$-reeks te achterhalen [9](#page=9).
#### 4.2.2 Voordelen en nadelen van OFB
Een voordeel van OFB is dat bitfouten tijdens transmissie niet propageren. Als er een bitfout optreedt in $C_1$, wordt alleen de herstelde $P_1$ beïnvloed; volgende plaintext-eenheden worden niet gecorrumpeerd. Bij CFB beïnvloedt $C_1$ ook het verschuifregister, wat leidt tot verdere corruptie [9](#page=9).
Een nadeel van OFB is dat het kwetsbaarder is voor berichtenstroommodificatieaanvallen dan CFB. Het inverteren van een bit in de ciphertext inverteren de corresponderende bit in de herstelde plaintext. Dit kan het mogelijk maken om de ciphertext zodanig te wijzigen dat deze niet wordt gedetecteerd door foutcorrectiecodes [10](#page=10) [9](#page=9).
OFB heeft de structuur van een typische stroomversleutelaar: de versleutelaar genereert een bitstroom op basis van een initiële waarde en een sleutel, en deze stroom wordt met de plaintext ge-XORd. De gegenereerde stroom is onafhankelijk van de plaintext [10](#page=10).
> **Tip:** Net als bij CFB wordt ook bij OFB de encryptiefunctie gebruikt voor decryptie [10](#page=10).
### 4.3 CTR (Counter) modus
CTR-modus gebruikt een teller die gelijk is aan de grootte van het plaintextblok. De tellerwaarde moet verschillend zijn voor elk te versleutelen plaintextblok. Meestal wordt de teller geïnitialiseerd tot een waarde en vervolgens met 1 verhoogd voor elk volgend blok (modulo $2^b$, waarbij $b$ de blokgrootte is) [11](#page=11).
#### 4.3.1 CTR encryptie en decryptie
Voor encryptie wordt de teller versleuteld en vervolgens ge-XORd met het plaintextblok om het ciphertextblok te produceren. Er is geen kettingkoppeling (chaining). Voor decryptie wordt dezelfde reeks tellers gebruikt; de versleutelde teller wordt ge-XORd met een ciphertextblok om het corresponderende plaintextblok te herstellen. De initiële tellenwaarde moet dus beschikbaar zijn voor decryptie [11](#page=11).
> **Tip:** De encryptiefunctie wordt ook in CTR-modus gebruikt voor decryptie [11](#page=11).
#### 4.3.2 Vereisten voor CTR
De initiële tellenwaarde moet een nonce zijn, wat betekent dat deze verschillend moet zijn voor alle berichten die met dezelfde sleutel worden versleuteld. Verder moeten alle $T_i$ waarden (tellerwaarden) over alle berichten uniek zijn. Als een tellenwaarde meer dan eens wordt gebruikt, kan de vertrouwelijkheid van de bijbehorende plaintextblokken in gevaar komen [11](#page=11).
Een manier om de uniciteit van tellenwaarden te garanderen, is door de tellerwaarde over berichten heen te blijven verhogen. De eerste tellenwaarde van elk bericht is dan één meer dan de laatste tellenwaarde van het voorgaande bericht [12](#page=12).
#### 4.3.3 Voordelen van CTR-modus
CTR-modus biedt diverse voordelen:
* **Hardware-efficiëntie:** In tegenstelling tot de drie kettingmodi kan versleuteling (of ontsleuteling) in CTR-modus parallel op meerdere blokken plaintext of ciphertext worden uitgevoerd. Dit beperkt de doorvoer tot de tijd voor één uitvoering van blokversleuteling of ontsleuteling [12](#page=12).
* **Software-efficiëntie:** Vanwege de mogelijkheden voor parallelle uitvoering kunnen processors met parallelle functies effectief worden benut [12](#page=12).
* **Voorverwerking (Preprocessing):** De uitvoering van de onderliggende encryptie-algoritme is onafhankelijk van de plaintext of ciphertext invoer. Dit maakt voorverwerking mogelijk om de uitvoer van de encryptiedozen voor te bereiden, wat de doorvoer aanzienlijk verhoogt [12](#page=12).
* **Willekeurige toegang (Random access):** Elk $i$-de blok plaintext of ciphertext kan willekeurig worden verwerkt. Dit is handig in toepassingen waar een ciphertext wordt opgeslagen en slechts één blok ontsleuteld hoeft te worden [12](#page=12).
* **Bewijsbare veiligheid:** CTR-modus is minstens zo veilig als de andere besproken modi [12](#page=12).
* **Eenvoud:** CTR-modus vereist alleen de implementatie van de encryptie-algoritme, niet de decryptie-algoritme. Dit is vooral belangrijk als het decryptie-algoritme significant verschilt van het encryptie-algoritme. Bovendien hoeft de decryptiesleutelplanning niet te worden geïmplementeerd [12](#page=12).
---
# XTS-AES modus
XTS-AES is een specifieke modus van blokciffrering, ontworpen voor sectorgebaseerde opslagapparaten, die beveiliging biedt tegen ongeautoriseerde toegang tot opgeslagen gegevens [13](#page=13).
### 5.1 Achtergrond en doel
De XTS-AES modus werd in 2010 goedgekeurd door NIST en is ook een IEEE-standaard. Het hoofddoel is het beveiligen van gegevens op opslagapparaten, zoals versleutelde harde schijven, waarbij het dreigingsmodel rekening houdt met mogelijke toegang tot de opgeslagen gegevens door een tegenstander. Deze modus wordt veelvuldig ondersteund in de industrie en wordt dagelijks gebruikt in versleutelde schijfopslag van laptops en mobiele apparaten. Het is een gespecialiseerde modus voor een specifiek doel en is niet gerelateerd aan andere algemene modi van blokciffrering [13](#page=13).
### 5.2 Werking van XTS-AES
De XTS-AES modus is bedoeld voor blokgeoriënteerde opslagapparaten. Gegevens worden georganiseerd in blokken van 128 bits [13](#page=13) [14](#page=14).
#### 5.2.1 Concept van blokken en sectors
Binnen deze apparaten hebben blokken sequentiële nummers, aangeduid als '$j$' in de context van de modus. Binnen een blok zijn er sectoren, aangeduid als '$i$'. De daadwerkelijke sectornummering is echter aangepast door de toevoeging van een zogenaamde 'tweak value' (een niet-negatieve gehele waarde) [13](#page=13).
#### 5.2.2 Versleutelings- en ontsleutelingsproces
Het operationele proces van XTS-AES is gebaseerd op machten van '$x$' in het eindige lichaam $GF(2^{128})$. Voor zowel versleuteling als ontsleuteling worden twee instanties van het AES-algoritme met twee verschillende sleutels gebruikt [13](#page=13).
Het proces voor een enkel blok omvat de volgende stappen:
1. Het sectornummer '$i$' wordt versleuteld [13](#page=13).
2. Het resultaat wordt vermenigvuldigd met $\alpha^j$, waarbij $\alpha$ de x-polynoom in $GF(2^{128})$ vertegenwoordigt (een bitpatroon van 00000000000…00010) [13](#page=13).
3. Dit resultaat wordt vervolgens ge-XOR'd met zowel de invoer als de uitvoer van de AES-versleuteling [13](#page=13).
De input voor de versleuteling/ontsleuteling bestaat uit het bloknummer ($j$) en het sequentiële nummer binnen het blok ($i$). Dit maakt het kopiëren van opgeslagen gegevens naar een andere locatie bemoeilijkt [13](#page=13).
> **Tip:** De input voor XTS-AES is een combinatie van een nonce (parameter $i$) en een teller (parameter $j$). Dit onderscheidt het van CTR-modus, dat enkel een teller gebruikt [14](#page=14).
#### 5.2.3 Parallelle verwerking en ciphertext stealing
Net als CTR-modus is XTS-AES geschikt voor parallelle verwerking. Omdat er geen kettingkoppeling tussen blokken is, kunnen meerdere blokken gelijktijdig worden versleuteld of ontsleuteld [14](#page=14).
De plaintext van een sector of data-eenheid wordt georganiseerd in blokken van 128 bits, aangeduid als $P_0, P_1, \dots, P_m$. Het laatste blok kan een deelblok zijn, met 1 tot 127 bits, of zelfs leeg zijn [14](#page=14).
Een uitzondering op de onafhankelijke behandeling van blokken treedt op wanneer het laatste blok minder dan 128 bits bevat. In dit scenario worden de laatste twee blokken versleuteld/ontsleuteld met behulp van een techniek genaamd 'ciphertext stealing' in plaats van padding. Hierbij wordt een deel van het ciphertext van het voorlaatste blok "gestolen" om het laatste plaintext blok op te vullen [14](#page=14).
> **Voorbeeld:** Stel dat we een laatste blok hebben dat slechts 64 bits bevat. In plaats van dit blok te padden tot 128 bits, gebruikt XTS-AES ciphertext stealing. Een deel van het laatst versleutelde blok (voorlaatste blok) wordt gebruikt om de resterende 64 bits van het huidige blok te creëren, waardoor de lengte van de cyphertext gelijk blijft aan die van de plaintext.
---
## 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 |
|------|------------|
| Blokversleutelaar | Een cryptografisch algoritme dat een vast blok platte tekst van een bepaalde lengte, samen met een sleutel, omzet in een blok cijfertekst van dezelfde lengte. Dit gebeurt vaak met behulp van een reeks permutaties en substituties. |
| Modus van werking | Een techniek die wordt gebruikt om het gedrag van een cryptografisch algoritme te beïnvloeden en het geschikt te maken voor specifieke toepassingen. Modi van werking passen de toepassing van een blokversleutelaar op meerdere datablokken of een datastroom aan. |
| Elektronisch codeboek (ECB) | De meest eenvoudige modus van werking waarbij elk blok platte tekst onafhankelijk van de andere blokken wordt versleuteld met dezelfde sleutel. Herhalende platte tekstblokken resulteren in identieke cijfertekstblokken, wat een beveiligingsrisico vormt. |
| Cipher Block Chaining (CBC) | Een modus van werking waarbij elk platte tekstblok eerst wordt gecombineerd met het voorgaande cijfertekstblok via een XOR-operatie, voordat het wordt versleuteld. Dit zorgt voor afhankelijkheid tussen de blokken en verbergt herhalende patronen. |
| Initialisatievector (IV) | Een willekeurig of pseudo-willekeurig datapakket dat wordt gebruikt om de eerste stap in bepaalde modi van werking, zoals CBC, te initialiseren. De IV hoeft niet geheim te zijn, maar moet wel uniek en onvoorspelbaar zijn voor een bepaalde platte tekst. |
| Stroomversleutelaar | Een cryptografisch algoritme dat een eindeloze stroom willekeurige bits genereert, die vervolgens wordt ge-XORd met de platte tekst om de cijfertekst te produceren. Dit elimineert de noodzaak om platte tekst op te delen in blokken en maakt realtime verwerking mogelijk. |
| Cipher Feedback (CFB) modus | Een modus die een blokversleutelaar omzet in een stroomversleutelaar door de uitvoer van de encryptiefunctie als invoer voor het volgende blok te gebruiken. Het opereert op segmenten van de bloklengte, die wordt aangeduid met 's'. |
| Output Feedback (OFB) modus | Een modus die de uitvoer van de encryptiefunctie terugvoert als invoer voor de volgende encryptieoperatie, vergelijkbaar met CFB, maar werkt met volledige blokken. De gegenereerde stroom is onafhankelijk van de platte tekst, wat resulteert in niet-voortplantende bitfouten. |
| Counter (CTR) modus | Een modus waarbij een teller wordt versleuteld en het resultaat wordt ge-XORd met het platte tekstblok. Deze modus maakt parallelle verwerking mogelijk, wat leidt tot efficiëntie in zowel hardware als software, en biedt ook random access mogelijkheden. |
| XTS-AES modus | Een specifieke modus ontworpen voor de encryptie van gegevens op sectorgebaseerde opslagapparaten. Het gebruikt twee instanties van het AES-algoritme met twee sleutels en is afhankelijk van zowel het bloknummer als een "tweak"-waarde voor verbeterde beveiliging. |
| Tweak waarde | Een extra dataparameter, vaak een niet-negatief geheel getal, die wordt gebruikt in bepaalde modi van werking, zoals XTS-AES. Het wordt gebruikt om de invoer voor de encryptie te beïnvloeden en draagt bij aan de uniciteit en beveiliging van de versleutelde gegevens. |
| GF(2^128) | Galoisfield van grootte $2^{128}$, waarin bewerkingen worden uitgevoerd met behulp van polynomen. Dit veld wordt gebruikt in cryptografische algoritmen zoals AES en de XTS-AES modus, waarbij optelling overeenkomt met XOR en vermenigvuldiging met polynoomvermenigvuldiging. |