Cover
Empieza ahora gratis Symmetric_7_stream+ciphers.pdf
Summary
# Inleiding tot stroomversleuteling
Dit onderwerp introduceert stroomversleuteling, vergelijkt deze met blokversleuteling en bespreekt hun respectievelijke voordelen en toepassingen.
## 1. Inleiding tot stroomversleuteling
Stroomversleuteling is een methode van symmetrische encryptie die plaintext-data sequentieel verwerkt, één bit of byte tegelijk. In tegenstelling tot blokversleuteling, dat data in vaste blokken verwerkt, werkt een stroomversleuteling continu [3](#page=3).
### 1.1 Vergelijking met blokversleuteling
De keuze tussen stroomversleuteling en blokversleuteling hangt af van de specifieke omstandigheden en de aard van de toepassing [1](#page=1).
#### 1.1.1 Voordelen en toepassingen van stroomversleuteling
* **Snelheid:** Stroomversleuteling is over het algemeen sneller dan blokversleuteling in hardwaretoepassingen. Ontwerpen die geen blokversleuteling als bouwsteen gebruiken, zijn doorgaans sneller en vereisen minder code. Zelfs met AES-hardwareondersteuning kan ChaCha soms betere prestaties bieden dan AES, met name op apparaten zonder specifieke AES-hardwareacceleratie [1](#page=1) [2](#page=2) [6](#page=6).
* **Geschikt voor apparaten met beperkte middelen:** Lichtgewicht cryptografie geeft vaak de voorkeur aan stroomversleuteling vanwege de efficiëntie op apparaten met beperkte bronnen [2](#page=2).
* **Malleabiliteit:** Stroomversleutelingen zijn altijd malleabeler dan blokversleutelingen. Dit betekent dat kleine wijzigingen in de cijfertekst kunnen leiden tot kleine, voorspelbare wijzigingen in de oorspronkelijke platte tekst [1](#page=1).
* **Omgaan met onbekende invoerlengte:** Wanneer de lengte van de invoer onbekend is en hoge prestaties vereist zijn (en malleabiliteit geen probleem is), zijn stroomversleutelingen een uitstekende keuze [1](#page=1).
* **Datastromen:** Stroomversleuteling is bijzonder geschikt voor toepassingen die encryptie/decryptie van een datastroom vereisen, zoals communicatiekanalen of webverbindingen [6](#page=6).
#### 1.1.2 Voordelen en toepassingen van blokversleuteling
* **Kracht en veelzijdigheid:** Blokversleutelingen worden inherent als krachtiger beschouwd in cryptografie. Met een blokversleuteling als bouwsteen kunnen veel andere cryptografische hulpmiddelen worden gecreëerd, waaronder een stroomversleuteling (zoals AES-CTR) of een hashfunctie. Het omgekeerde is niet waar: een willekeurige stroomversleuteling kan niet zomaar worden omgezet in een blokversleuteling [1](#page=1).
* **Datablokken:** Voor toepassingen die met datablokken werken, zoals bestandsoverdracht, e-mail en databases, kunnen blokversleutelingen geschikter zijn [6](#page=6).
* **Sleutelhergebruik:** Een voordeel van blokversleuteling is dat sleutels opnieuw kunnen worden gebruikt, wat bij stroomversleutelingen tot cryptanalytische zwakheden kan leiden [6](#page=6).
#### 1.1.3 Malleabiliteit en veiligheidsoverwegingen
Malleabiliteit, het vermogen om de cijfertekst aan te passen om de platte tekst te beïnvloeden, is een kenmerk dat stroomversleutelingen onderscheidt van blokversleutelingen. Hoewel blokversleutelingen als inherent krachtiger worden beschouwd vanwege hun constructieve capaciteiten, zijn stroomversleutelingen zeer effectief in specifieke scenario's [1](#page=1).
### 1.2 Hoe stroomversleutelingen werken
Een typische stroomversleuteling verwerkt de plaintext één byte tegelijk, hoewel het ook mogelijk is om op bitniveau of op grotere eenheden dan bytes te opereren. De kern van het proces is de combinatie van de plaintext met een gegenereerde *keystream* middels de bitwise exclusieve-OF (XOR) operatie [3](#page=3).
De structuur omvat doorgaans:
1. Een geheime sleutel ($K$) die wordt ingevoerd in een generator [3](#page=3).
2. Deze generator produceert een *pseudorandom keystream* ($k$) [3](#page=3).
3. De plaintext ($M$) wordt byte voor byte gecombineerd met de keystream ($k$) met behulp van de XOR-operatie om de cijfertekst ($C$) te vormen: $C = M \oplus k$ [3](#page=3).
4. Voor decryptie wordt de cijfertekst ($C$) opnieuw ge-XOR'd met dezelfde keystream ($k$) om de oorspronkelijke plaintext ($M$) te herstellen: $M = C \oplus k$ [3](#page=3).
> **Tip:** De XOR-operatie is zijn eigen inverse, wat zowel encryptie als decryptie vereenvoudigt met dezelfde keystream.
### 1.3 De One-Time Pad (OTP)
De one-time pad wordt beschouwd als de ultieme stroomversleuteling, die door definitie volledig veilig is [3](#page=3).
#### 1.3.1 Kenmerken van een One-Time Pad
* **Sleutellengte:** De sleutel moet minstens even lang zijn als de plaintext [3](#page=3).
* **Echte randomiteit:** De sleutel moet volledig willekeurig zijn, niet gegenereerd door een algoritme [3](#page=3).
* **Niet-hergebruik:** De sleutel mag nooit, geheel of gedeeltelijk, worden hergebruikt [3](#page=3).
* **Geheimhouding:** De sleutel moet volledig geheim blijven tussen de communicerende partijen [3](#page=3).
#### 1.3.2 Veiligheid van de One-Time Pad
Een one-time pad is bewezen volledig veilig, zelfs tegen een aanvaller met onbeperkte middelen, en is ook kwantumveilig. Alle andere encryptiesystemen zijn alleen veilig tegen aanvallers met beperkte middelen [3](#page=3).
#### 1.3.3 Praktische beperkingen van de One-Time Pad
Het grootste struikelblok voor de brede inzetbaarheid van de one-time pad is de veilige distributie van de lange, willekeurige sleutels. Historische pogingen om OTP-verkeer te breken, zoals het VENONA-project, waren succesvol door fouten bij het genereren en distribueren van sleutels, zoals het hergebruik van sleutelmaterialen. Het hergebruiken van een sleutel, zelfs voor een deel, maakt de encryptie zeer zwak [3](#page=3) [5](#page=5).
### 1.4 Ontwerpoverwegingen voor pseudorandom stroomversleutelingen
Stroomversleutelingen die geen one-time pad zijn, maken gebruik van pseudorandom keystreams. Om de veiligheid te waarborgen, moeten de volgende overwegingen in acht worden genomen:
* **Grote periode:** De pseudorandom getallengenerator moet een zeer lange periode hebben voordat de reeks zich herhaalt. Een langere herhalingsperiode bemoeilijkt cryptanalyse [5](#page=5).
* **Benadering van echte randomiteit:** De keystream moet de eigenschappen van een echte willekeurige getellenstroom zo goed mogelijk benaderen. Dit omvat een ongeveer gelijke verdeling van 1'en en 0'en, en bij byte-niveau, een gelijkmatige verspreiding van alle 256 mogelijke byte-waarden. Hoe willekeuriger de keystream lijkt, hoe meer de cijfertekst wordt gerandomiseerd en hoe moeilijker cryptanalyse wordt [5](#page=5).
* **Voldoende sleutel lengte:** Om brute-force aanvallen te weerstaan, is een voldoende lange sleutel nodig, vergelijkbaar met de vereisten voor blokversleutelingen. Met de huidige technologie is een sleutellengte van minimaal 128 bits wenselijk [5](#page=5).
#### 1.4.1 Veiligheid en prestaties
Met een correct ontworpen pseudorandom getallengenerator kan een stroomversleuteling net zo veilig zijn als een blokversleuteling met een vergelijkbare sleutellengte. Stroomversleutelingen die niet gebaseerd zijn op blokversleutelingen, zijn vaak sneller en vereisen minder code. De introductie van AES heeft dit voordeel echter verminderd, aangezien AES efficiënt is in software en hardware-acceleratie biedt [5](#page=5) [6](#page=6).
#### 1.4.2 Kwetsbaarheid bij sleutelhergebruik
Een significant nadeel van stroomversleutingen is de gevoeligheid voor sleutelhergebruik. Als twee plaintext-berichten met dezelfde sleutel worden versleuteld, kan cryptanalyse relatief eenvoudig zijn. Door de twee cijferteksten te XOR'en, ontstaat de XOR van de oorspronkelijke plaintexts. Als deze plaintexts eigenschappen hebben die bekend zijn (zoals tekst, creditcardnummers), kan dit leiden tot succesvolle cryptanalyse [6](#page=6).
> **Tip:** Gebruik nooit dezelfde sleutel voor twee verschillende berichten bij stroomversleuteling.
### 1.5 Toepassingsgebieden
* **Datastromen:** Ideaal voor continue datatransmissie over netwerken, zoals live videostreams of communicatieprotocollen [6](#page=6).
* **Apparaten met beperkte middelen:** Zeer geschikt voor IoT-apparaten, embedded systemen of mobiele telefoons waar rekenkracht en geheugen beperkt zijn [2](#page=2).
* **Real-time encryptie:** Waar lage latentie vereist is, presteren stroomversleutelingen vaak beter [1](#page=1).
Hoewel stroomversleutelingen specifieke voordelen bieden, kan in vrijwel elke toepassing zowel een stroom- als een blokversleuteling worden gebruikt, afhankelijk van de prioriteiten [6](#page=6).
---
# De eenmalige code (One-Time Pad)
De eenmalige code (One-Time Pad - OTP) is een cryptografisch systeem dat theoretisch perfecte beveiliging biedt, mits aan strikte vereisten wordt voldaan, hoewel de praktische implementatie ervan wordt bemoeilijkt door de uitdagingen rond sleuteldistributie.
### 2.1 Theoretische perfecte beveiliging en vereisten
De eenmalige code (OTP) biedt door zijn aard een onbreekbare beveiliging. Dit betekent dat een aanvaller met onbeperkte rekenkracht de versleutelde boodschap niet kan ontcijferen, zelfs niet als deze in het bezit is van een deel van de platte tekst. Dit staat in contrast met andere encryptiesystemen die slechts veilig zijn tegen aanvallers met beperkte middelen. Bovendien is de OTP quantum-safe [3](#page=3).
Om de theoretische perfecte beveiliging van de eenmalige code te garanderen, moeten aan de volgende vier voorwaarden strikt worden voldaan [3](#page=3):
* **Sleutellengte:** De sleutel moet minimaal even lang zijn als de platte tekst die versleuteld moet worden [3](#page=3).
* **Willekeurigheid:** De sleutel moet volledig willekeurig zijn en niet gegenereerd worden door een algoritme. Dit impliceert dat de sleutel niet voorspelbaar mag zijn [3](#page=3) [4](#page=4) [5](#page=5).
* **Niet-hergebruik:** De sleutel mag nooit, geheel of gedeeltelijk, opnieuw worden gebruikt. Het hergebruiken van een sleutel, zelfs voor een klein deel, maakt het systeem zeer zwak [3](#page=3) [5](#page=5).
* **Geheimhouding:** De sleutel moet volledig geheim blijven tussen de communicerende partijen [3](#page=3).
De kernoperatie bij de eenmalige code is het combineren van de platte tekst met de sleutel door middel van de bitwise exclusive-OR (XOR) operatie [3](#page=3).
> **Tip:** De XOR-operatie is zijn eigen inverse: $A \oplus A = 0$. Dit betekent dat dezelfde XOR-operatie kan worden gebruikt voor zowel encryptie als decryptie, zolang de sleutel maar hetzelfde is.
#### 2.1.1 Voorbeelden en historische toepassingen
Historisch gezien zijn er diverse toepassingen en varianten van de eenmalige code geweest:
* **Papieren pads en teleprinters:** Kleine eenmalige pads op papier werden gebruikt door spionnen. Digitale varianten van de eenmalige pad werden geïmplementeerd met teleprinters die werkten met geheime tapes (one-time tapes). Een bekend voorbeeld hiervan was de machine die werd gebruikt op de Washington-Moskou hotline, die na de Cuba-crisis in 1963 werd ingesteld [4](#page=4).
* **Manuele en fysieke methoden:** Er werden diverse fysieke methoden gebruikt om de pads te beveiligen. Dit omvatte het gebruik van speciale onzichtbare inkten, ontvlambare stoffen voor eenvoudige vernietiging, of het maken van zeer kleine pads die met een vergrootglas gelezen moesten worden om ze draagbaar te maken voor soldaten en agenten. Een voorbeeld van zo'n kleine pad, afkomstig uit Rusland, werd door de Britse inlichtingendienst onderschept. Tijdens de Tweede Wereldoorlog werden deze methoden ook gebruikt voor het coderen van berichten tussen het verzet en het Verenigd Koninkrijk die per duif werden verzonden [4](#page=4).
#### 2.1.2 Historische cryptanalyse en zwakheden
Ondanks de theoretische perfectie, zijn er historische gevallen bekend waarbij eenmalige codes succesvol werden gekraakt, voornamelijk door fouten in de implementatie en sleutelbeheer:
* **GEE-systeem (Duitse Buitenlandse Dienst):** In 1944-1945 wist de Amerikaanse legerdienst het door de Duitse buitenlandse dienst gebruikte eenmalige pad systeem, codenaam GEE, op te lossen. Dit was mogelijk omdat de pads niet willekeurig genoeg waren gegenereerd, wat leidde tot voorspelbare uitvoer [4](#page=4).
* **Canberra-Moskou berichten:** In 1945 ontdekte de VS dat berichten tussen Canberra en Moskou eerst met een codeboek en daarna met een eenmalige pad werden versleuteld. Het probleem was dat dezelfde eenmalige pad werd hergebruikt voor de berichten tussen Moskou en Washington D.C. In combinatie met bekende Britse overheidsdocumenten die in de Canberra-Moskou berichten voorkwamen, kon een deel van de versleutelde berichten worden gebroken [4](#page=4).
* **Sovjet spionage:** Sovjet-spionagebureaus gebruikten eenmalige pads voor geheime communicatie. Analyse toonde aan dat de pads werden gegenereerd door typisten met typewriters. Dit proces was niet strikt willekeurig, waardoor bepaalde reeksen vaker voorkwamen. Hoewel dit nog steeds enige mate van onvoorspelbaarheid bood door variatie tussen typisten, bood het, in combinatie met fouten in generatie of hergebruik van sleutels, een opening voor cryptanalyse. De cryptanalytische inspanningen, codenaam VENONA, die vanaf eind jaren '40 plaatsvonden, konden een deel van dit verkeer breken, vooral door fouten die gemaakt werden tijdens de generatie en distributie van de sleutels. Een mogelijke oorzaak was de haast door de aanwezigheid van Duitse troepen nabij Moskou in 1941-1942, wat leidde tot het produceren van meerdere kopieën van dezelfde sleutel. Desondanks werd slechts een klein percentage van de onderschepte berichten volledig of gedeeltelijk ontcijferd [4](#page=4) [5](#page=5).
* **Elektromechanische mixers en TEMPEST:** Systemen die elektromechanische mixers gebruikten om bits van de boodschap en de eenmalige tape te combineren, straalden aanzienlijke elektromagnetische energie uit. Deze energie kon op afstand worden opgevangen door een tegenstander, wat kon leiden tot de interceptie en herstel van de platte tekst. Dit fenomeen, bekend als TEMPEST, was een kwetsbaarheid [5](#page=5).
> **Definitie:** Een **keystream** is de reeks willekeurige bits of bytes die door een generator (bij een stream cipher) of door de eenmalige pad wordt geproduceerd en wordt gebruikt voor versleuteling [3](#page=3).
### 2.2 Praktische uitdagingen: Sleuteldistributie
Het grootste obstakel voor het brede gebruik van de eenmalige code is de praktische uitdaging van de veilige distributie van de lange sleutels. Omdat de sleutel minimaal de lengte van de boodschap moet hebben en volledig geheim moet blijven, vereist dit een veilige methode om de sleutel vooraf aan beide communicerende partijen te leveren [3](#page=3).
> **Tip:** Dit probleem van sleuteldistributie is de reden waarom eenmalige codes in de praktijk vaak onhaalbaar zijn voor alledaagse communicatie, en waarom men vaker terugvalt op stream ciphers of block ciphers die werken met kortere, algoritmisch gegenereerde sleutels.
### 2.3 Vergelijking met stream ciphers
De eenmalige code is nauw verwant aan stream ciphers. Het belangrijkste verschil is dat een eenmalige code een werkelijk willekeurige getallenstroom gebruikt, terwijl een stream cipher een pseudowillekeurige getallenstroom gebruikt die door een algoritme wordt gegenereerd. Met een correct ontworpen pseudowillekeurige getallengenerator kan een stream cipher echter net zo veilig zijn als een block cipher met een vergelijkbare sleutellengte. De fout die de Duitse operator maakte bij het verzenden van de Lorenz-cipher (een vorm van stream cipher) was in feite dezelfde fout die bij een eenmalige code voorkomen moet worden: het hergebruiken of introduceren van voorspelbaarheid in de sleutelstroom [5](#page=5).
---
# Historische stroomversleutelingen en computers
Dit onderwerp onderzoekt historische stroomversleutelingssystemen zoals Enigma en Lorenz en hun rol in de Tweede Wereldoorlog, evenals de ontwikkeling van vroege computers zoals Colossus en Bombe.
### 3.1 De Enigma en Lorenz-systemen
Enigma en Lorenz waren beide door de Duitsers gebruikte stroomversleutelingssystemen tijdens de Tweede Wereldoorlog. Lorenz werd gebruikt voor meer strategische informatie, zoals communicatie tussen Hitler en zijn generaals, en was aanzienlijk complexer dan Enigma. Enigma was daarentegen draagbaarder en kon aan boord van U-boten worden meegenomen [7](#page=7).
#### 3.1.1 Ontcijfering van Lorenz
Een cruciale doorbraak in het ontdekken van de werking van Lorenz kwam voort uit een fout van een operator in 1941. Deze operator gebruikte per abuis dezelfde bitstroom voor twee gelijkaardige, maar niet identieke, berichten. Dit gaf de geallieerden de mogelijkheid om de werking van het Lorenz-systeem te achterhalen [7](#page=7).
##### 3.1.1.1 Colossus: de eerste computer
Voor de cryptanalyse van Lorenz werd in 1944 de Colossus ingezet. Colossus wordt beschouwd als de eerste computer ooit gebouwd, twee jaar vóór de ENIAC, die officieel de "eerste" generieke computer wordt genoemd. Colossus was een elektronische digitale computer die leek op een klassieke computer, hoewel het een specifieke functie had en geen programma opgeslagen had dat gewijzigd kon worden. De ontwikkeling van Colossus was het resultaat van de inspanningen van Tommy Flowers, die onafhankelijk werkte omdat Max Newman binnen Bletchley Park wel in het concept geloofde maar twijfelde aan de haalbaarheid van een betrouwbare machine met elektronische kleppen. Newman gaf Flowers de opdracht om het op eigen houtje te proberen [7](#page=7) [8](#page=8).
> **Tip:** De sleutel tot de ontcijfering van Lorenz lag in de analyse van twee onderschepte berichten die door een technische fout van de zender tot stand kwamen.
#### 3.1.2 Ontcijfering van Enigma
Voor het breken van Enigma werd een specifiek apparaat gebruikt, de zogenaamde "Bombe" (ook wel de Turing-Welchman Bombe genoemd). De Bombe was een elektromechanische machine en leek niet op een klassieke computer. Het was een specifiek apparaat dat op relais werkte, wat voldoende was voor het ontcijferen van Enigma. De Britten beschikten over een operationele Enigma-machine die volledig geanalyseerd kon worden, in tegenstelling tot de Lorenz-machine waarvan geen informatie beschikbaar was [7](#page=7) [8](#page=8).
##### 3.1.2.1 Bill Tutte en de "Tunny"-machine
Bill Tutte speelde een sleutelrol bij het ontrafelen van de werking van Lorenz. Hij slaagde erin de werking van het systeem te deden door alleen de analyse van twee onderschepte berichten. De Britten noemden deze machine, die ze nooit hadden gezien, "Tunny" [7](#page=7) [8](#page=8).
### 3.2 Vroege computers en hun impact
Aan het einde van de oorlog beschikte Bletchley Park over 10 Colossus-machines en 200 Bombe-machines. Er waren ook aanvullende machines in de VS, met name 120 Bombes. Na de oorlog werd deze informatie topgeheim gehouden [8](#page=8).
#### 3.2.1 De nalatenschap van Colossus en de opkomst van de universele computer
Omdat de Colossus topgeheim bleef, beginnen veel "geschiedenissen van computers" nog steeds met de ENIAC-machine (december 1946), die dus na Colossus kwam. De ENIAC leek op Colossus en was eveneens een specifieke computer. Tussen 1945 en 1960 bleef GCHQ, de Britse inlichtingendienst, een operationele Colossus gebruiken om berichten te ontsleutelen. De Oost-Duitse Stasi gebruikte blijkbaar tot in de late jaren 1960 Enigma [9](#page=9).
Na de oorlog realiseerden Turing en Newman zich dat de Colossus-technologie de weg was naar het bouwen van een universele computer (ook wel universele Turingmachine genoemd). Zij creëerden een machine met een opgeslagen programma. Newman (in Manchester) won in 1948 de race om de eerste computer met een opgeslagen programma, vóór Turing [9](#page=9).
> **Tip:** De invloed van Alan Turing op de computerwetenschap is enorm, mede door zijn bijdragen aan het ontwerpen van machines en het concept van software.
#### 3.2.2 Turing's bijdragen en de invloed op de oorlog
Turing's ontwerpfilosofie was gericht op het minimaliseren van hardware (wat als het moeilijke technische probleem werd beschouwd) en het oplossen van problemen in software (wat als het makkelijke probleem werd gezien). Turing introduceerde ook de ponsband als invoerapparaat. Hij schreef ook een schaakprogramma, hoewel hij dit nooit op een computer invoerde aan het einde van zijn carrière. Zijn carrière eindigde met zijn veroordeling tot chemische castratie wegens homoseksualiteit, wat leidde tot zijn zelfmoord in 1954. De combinatie van de Bombe en Colossus wordt verondersteld de oorlog met minstens twee jaar te hebben verkort [9](#page=9).
#### 3.2.3 Geheimhouding en erkenning
De eerste informatie over Enigma lekte in 1973, terwijl informatie over Colossus pas in 2000 openbaar werd. Pas in 2013 ontving Alan Turing postuum een (Britse) koninklijke gratie [9](#page=9).
---
# Moderne stroomversleutelingen: RC4, ChaCha20 en anderen
Dit gedeelte bespreekt de details, sterktes, zwaktes en toepassingen van moderne stroomversleutelingen zoals RC4 en ChaCha20, evenals aanbevelingen voor cryptografisch gebruik.
### 4.1 RC4 stroomversleuteling
RC4 is een stroomversleuteling, ontworpen in 1987 door Ron Rivest voor RSA Security. Het is een stroomversleuteling met variabele sleutelgrootte die byte-georiënteerde operaties gebruikt en is gebaseerd op een willekeurige permutatie. De algoritme is eenvoudig en gemakkelijk te implementeren in software [10](#page=10).
#### 4.1.1 Werking van RC4
Het algoritme initialiseert een 256-byte statusvector $S$, die te allen tijde een permutatie van alle 8-bit getallen van 0 tot 255 bevat. De initialisatie gebeurt met een sleutel $K$ van variabele lengte (1 tot 256 bytes) [10](#page=10).
1. **Initialisatie van $S$ en $T$**: De elementen van $S$ worden geïnitialiseerd met waarden van 0 tot 255 in oplopende volgorde. Een tijdelijke vector $T$ wordt gecreëerd en gevuld met de sleutel $K$, herhaald indien nodig [10](#page=10).
2. **Initiële permutatie van $S$**: Met behulp van $T$ wordt $S$ gepermuteerd. Voor elke $i$ van 0 tot 255 wordt $S[i]$ verwisseld met $S[j]$, waarbij $j$ wordt berekend als $j = j + S[i + T[i]$ [10](#page=10).
3. **Streamgeneratie**: Na de initialisatie wordt de sleutel niet meer gebruikt. Voor het genereren van de keystream worden de elementen van $S$ doorlopen. Voor elke $S[i]$ wordt $S[i]$ verwisseld met $S[j]$ volgens $j = j + S[i]$. Vervolgens wordt een waarde $t = S[i + S[j]$ berekend, en $S[t]$ wordt geretourneerd als een willekeurige byte $k$. Dit proces herhaalt zich cyclisch over $S$ [11](#page=11).
Voor encryptie wordt $k$ XORed met de volgende plaintext byte, en voor decryptie met de volgende ciphertext byte [11](#page=11).
#### 4.1.2 Sterktes en Zwaktes van RC4
* **Sterktes**:
* Eenvoudig te implementeren in software [10](#page=10).
* Zeer snel, vereist acht tot zestien machine-operaties per output byte [10](#page=10).
* **Zwaktes**:
* **Onvoldoende keyschedule**: Dit is een belangrijke zwakte [11](#page=11).
* **Kwetsbaarheid voor bit-flipping attacks**: Kenmerkend voor alle stroomversleutelingen (malleabiliteit) [11](#page=11).
* **Statistische analyse van ciphertexts**: Vooral kwetsbaar in de eerste 256 bytes van de RC4 keystream [11](#page=11).
* **Kwetsbaarheden bij herhaaldelijk versturen van dezelfde plaintext**: Sommige protocollen met mechanismen om bijvoorbeeld wachtwoorden opnieuw te versturen, zijn kwetsbaar [11](#page=11).
* **Gebruik in TLS verboden**: Sinds 2015 is het gebruik van RC4 in TLS verboden [11](#page=11).
* **Snowden-documenten**: Suggereren een praktische aanval op RC4 [11](#page=11).
#### 4.1.3 Toepassingen en Aanbevelingen
RC4 werd gebruikt in SSL/TLS, WEP en WPA protocollen. Het wordt echter niet langer als veilig beschouwd en het gebruik ervan in TLS is sinds 2015 verboden [10](#page=10) [11](#page=11).
### 4.2 ChaCha20 stroomversleuteling
ChaCha20 is een moderne ARX-stroomversleuteling, bestaande uit optelling modulo $2^n$, rotatie (circulaire linksverschuiving, aangegeven met `<<<`), en XOR-operaties [12](#page=12).
#### 4.2.1 Werking van ChaCha20
ChaCha20 werkt met een blok van 512 bits, bestaande uit een 256-bit sleutel, een 64-bit blok-counter, een 64-bit nonce (initialisatievector), en vier 32-bit constante diagonalen [12](#page=12).
Het algoritme gebruikt 20 rondes, die elk bestaan uit 80 applicaties van een "quarter-round" [12](#page=12).
* **Quarter-round**: Dit is een puur ARX-toepassing die vier 32-bit getallen ($a, b, c, d$) "door elkaar schudt" volgens de volgende stappen [13](#page=13):
1. $a += b$; $d ^= a$; $d <<<= 16$;
2. $c += d$; $b ^= c$; $b <<<= 12$;
3. $a += b$; $d ^= a$; $d <<<= 8$;
4. $c += d$; $b ^= c$; $b <<<= 7$;
Deze kwart-rondes worden eerst parallel toegepast, kolom voor kolom, en daarna diagonaal. Dit proces wordt 10 keer herhaald, wat resulteert in 10 kolomrondes en 10 diagonaalrondes, dus 20 rondes in totaal [13](#page=13).
* **Diffusie**: De veranderingen beïnvloeden alle andere posities, wat zorgt voor goede diffusie [13](#page=13).
* **Preventie van inversie**: Om te voorkomen dat het algoritme omkeerbaar is na 20 rondes, wordt het oorspronkelijke blok opgeteld bij het verstoorde blok (woord-voor-woord) en dit wordt gebruikt als pseudo-willekeurig blok. Dit maakt het voor een aanvaller moeilijk om de berekening om te keren zonder de oorspronkelijke inhoud te kennen [13](#page=13).
* **Constante "expand 32-byte k"**: Deze constante wordt gebruikt om te voorkomen dat een aanvaller controle kan uitoefenen over een groot deel van de invoer, en zorgt ervoor dat een blok van nullen niet resulteert in nullen na de ARX-operaties [13](#page=13).
#### 4.2.2 Sterktes en Zwaktes van ChaCha20
* **Sterktes**:
* **Efficiëntie**: Vereist geen tabel-lookups, complexe vermenigvuldigingen of IF-statements. De uitvoeringstijd van elke operatie is identiek, waardoor timing-lekken relevant zijn [13](#page=13).
* **Geen hardwareondersteuning nodig**: In tegenstelling tot AES is ChaCha20 zo eenvoudig dat het geen speciale hardwareondersteuning nodig heeft [13](#page=13).
* **Snelheid**: De snelheid is vergelijkbaar met AES [13](#page=13).
* **Adoptie**: De adoptie werd versterkt door de Snowden-onthullingen in 2013 [13](#page=13).
* **Alternatief voor AES**: Wordt beschouwd als een praktisch alternatief voor AES in de meeste contexten [13](#page=13).
* **Gebruikt in moderne systemen**: Zoals Linux `/dev/random` en `/dev/urandom` en Wireguard VPN [23](#page=23) [25](#page=25).
* **Zwaktes**:
* Net als alle stroomversleutelingen is ChaCha20 kwetsbaar voor malleabiliteitsaanvallen, maar dit is niet altijd een probleem [25](#page=25).
#### 4.2.3 Toepassingen en Aanbevelingen
ChaCha20 is een verbeterde versie van Salsa20 en wordt aanbevolen. Het wordt samen met de Poly1305 authenticatietag gebruikt voor geauthenticeerde encryptie (ChaCha20-Poly1305). Het wordt gezien als een belangrijke opvolger van de verouderde RC4. Moderne stroomversleutelingen vereisen een initialisatievector (IV) of nonce voor elke nieuwe boodschap om ervoor te zorgen dat de sleutel varieert (#page=13, 26). Goede stroomversleutelingen gebruiken een sleutel, een nonce en een teller [13](#page=13) [15](#page=15) [23](#page=23) [24](#page=24) [26](#page=26).
### 4.3 Andere stroomversleutelingen en aanbevelingen
#### 4.3.1 Aanbevolen stroomversleutelingen
Naast ChaCha20 worden de volgende stroomversleutelingen aanbevolen [15](#page=15):
* HC-128, HC-256
* Salsa20 (ChaCha20 is een verbeterde versie)
* SOSEMANUK
* AES-GCM (gebruikt een blokversleuteling in GCM-modus)
* AES-CTR (gebruikt een blokversleuteling in CTR-modus)
* ChaCha20-Poly1305
#### 4.3.2 Stop te gebruiken stroomversleutelingen
De volgende algoritmen worden afgeraden voor gebruik [15](#page=15):
* A5/1, A5/2 (mobiele spraak)
* GEA-1, GEA-2 (mobiele GPRS data)
* GMR-1, GMR2 (satelliet-telefoons)
* E0 (Bluetooth)
* RC4
#### 4.3.3 Algemene principes voor stroomversleutelingen
* **Malleabiliteit**: Alle stroomversleutelingen zijn kwetsbaar voor malleabiliteitsaanvallen, wat betekent dat een aanvaller ciphertexts kan manipuleren om specifieke veranderingen in de plaintext te bewerkstelligen. Dit is echter niet altijd een praktisch probleem [25](#page=25).
* **Initialisatievectoren (IV's) / Nonce**: Moderne stroomversleutelingen vereisen een unieke IV of nonce voor elke nieuwe boodschap om ervoor te zorgen dat dezelfde plaintext niet dezelfde ciphertext produceert (#page=13, 26). Stroomversleutelingen die een sleutel, nonce en teller gebruiken, bieden extra veiligheid [13](#page=13) [26](#page=26).
* **Keystream generatie**: Stroomversleutelingen genereren doorgaans een keystream door cryptografische transformaties op initiële waarden toe te passen, die vervolgens wordt ge-XORed met de plaintext [26](#page=26).
* **One-way property (éénrichtingseigenschap)**: Een cruciale eis is dat het moeilijk moet zijn voor een aanvaller om de encryptiesleutel af te leiden uit de keystream via een inversieprocedure, om zo bekende plaintext-aanvallen te weerstaan. Zelfs LFSR's met niet-lineaire componenten kunnen onderworpen zijn aan dergelijke aanvallen [27](#page=27).
* **Distinguishing attacks**: Aanvallen die het mogelijk maken de output van een versleuteling te onderscheiden van een normale distributie, kunnen ook worden gebruikt om staats- of sleutelinformatie af te leiden [27](#page=27).
#### 4.3.4 Specifieke zwakke algoritmen
* **GEA-1**: Heeft een zwakte waarbij de interne LFSR-staat slechts 40 bits vereist, in plaats van de 64 bits van de sleutel. Dit kan een gevolg zijn van exportbeperkingen van die tijd [20](#page=20) [21](#page=21).
* **GMR-1 en GMR-2**: Zijn zo zwak dat ze in real-time ontcijferd kunnen worden. De 64-bit encryptiesleutel kan in 0.02 seconden worden afgeleid, waarbij de zoekruimte van de sleutel wordt gereduceerd van $2^{64}$ naar $2^{13.6}$ met slechts één frame keystream [22](#page=22).
* **SNOW family**: Heeft zwakheden, maar deze lijken tot nu toe alleen te gelden voor versies met gereduceerde rondes [23](#page=23).
---
## 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 |
|------|------------|
| Stroomversleuteling (Stream Cipher) | Een symmetrisch cryptografisch algoritme dat binaire gegevens versleutelt als een continue stroom van symbolen, meestal door een enkel bit of byte tegelijk te verwerken. Het gebruikt een sleutelstroom die wordt gegenereerd uit een geheime sleutel. |
| Blokversleuteling (Block Cipher) | Een symmetrisch cryptografisch algoritme dat gegevens in vaste blokken van een bepaald aantal bits versleutelt. Elk blok wordt onafhankelijk van andere blokken versleuteld, hoewel modi van bewerking kunnen worden gebruikt om afhankelijkheid tussen blokken te creëren. |
| Malleabiliteit (Malleability) | Een eigenschap van versleutelingsschema's waarbij een aanvaller kleine, voorspelbare wijzigingen kan aanbrengen in de cijfertekst, wat resulteert in corresponderende, voorspelbare wijzigingen in de klare tekst na ontsleuteling, zonder de sleutel te kennen. |
| Eenmalige code (One-Time Pad - OTP) | Een versleutelingsmethode die wordt beschouwd als onbreekbaar als deze correct wordt toegepast. Het vereist een geheime, willekeurige sleutel die minstens zo lang is als de klare tekst en nooit mag worden hergebruikt. |
| Keystream (Sleutelstroom) | Een reeks pseudo-willekeurige bits of bytes die wordt gegenereerd door een stroomversleutelaar, die vervolgens wordt gecombineerd (meestal via XOR) met de klare tekst om de cijfertekst te produceren. |
| Pseudo-willekeurige bitgenerator (Pseudorandom Bit Generator - PRBG) | Een algoritme dat een reeks getallen genereert die pseudo-willekeurig lijken. Deze getallen zijn deterministisch en worden gegenereerd op basis van een beginwaarde (zaadje of sleutel). |
| XOR (Exclusive OR) | Een logische bitwise operator. De uitvoer is 1 als de invoerbits verschillend zijn en 0 als ze gelijk zijn. Het wordt vaak gebruikt in cryptografie om sleutelstromen te combineren met klare tekst of cijfertekst. |
| ARX-cipher (Addition-Rotation-XOR) | Een klasse van cryptografische ciphers die alleen gebruikmaken van de bewerkingen optelling modulo, rotatie (circulaire linksverschuiving) en XOR. Deze bewerkingen zijn vaak efficiënt in hardware en software. |
| Ronding (Round) | Een iteratieve stap binnen een cryptografisch algoritme, zoals een blok- of stroomversleutelaar, waarbij een reeks wiskundige en logische bewerkingen wordt uitgevoerd op de gegevens. Meerdere ronden worden herhaald om de veiligheid te verhogen. |
| Initialisatievector (Initialization Vector - IV) | Een niet-geheime, willekeurige of pseudo-willekeurige waarde die samen met de sleutel wordt gebruikt om de encryptie te initialiseren. Dit zorgt ervoor dat zelfs met dezelfde sleutel, verschillende versleutelingen voor identieke klare teksten worden gegenereerd. |
| Nonce (Number used once) | Een waarde die bedoeld is om slechts één keer te worden gebruikt tijdens een cryptografische communicatie of sessie. Het is vergelijkbaar met een IV, maar de nadruk ligt op het unieke gebruik ervan om herhalingen te voorkomen en de veiligheid te verhogen. |
| Inversieaanval (Inversion Attack) | Een type cryptanalytische aanval waarbij een aanvaller probeert de invoergegevens (zoals de sleutel of de staat) van een cryptografisch algoritme te reconstrueren uit de uitvoer (zoals de sleutelstroom), door de bewerkingen van het algoritme om te keren. |
| Gecodeerde tekst (Ciphertext) | De versleutelde vorm van de klare tekst, die onleesbaar is voor iedereen die niet over de juiste sleutel beschikt. |
| Klare tekst (Plaintext) | De oorspronkelijke, onversleutelde gegevens die worden versleuteld. |
| Cryptanalyse (Cryptanalysis) | De studie van methoden om cryptografische systemen te breken, zoals het achterhalen van de sleutel of het ontcijferen van de boodschap zonder de sleutel. |
| LFSR (Linear Feedback Shift Register) | Een type register waarvan de ingang een lineaire functie is van de vorige toestanden. LFSR's worden vaak gebruikt om pseudo-willekeurige getallenreeksen te genereren, met name als onderdeel van stroomversleutelaars. |
| GMR-2 | Een versleutelingsalgoritme dat gebruikt wordt in satelliettelefoons. Dit algoritme is gebleken zwak te zijn en kan in realtime worden ontcijferd. |
| AES-CTR | AES (Advanced Encryption Standard) in Counter Mode. Dit is een blokcijfer dat als stroomcijfer wordt gebruikt door een teller te versleutelen en de uitvoer te XORen met de klare tekst. |
| AES-GCM | AES in Galois/Counter Mode. Dit is een geauthenticeerde versleutelingsmodus die zowel vertrouwelijkheid als integriteit en authenticiteit biedt. |
| ChaCha20-Poly1305 | Een moderne, efficiënte stroomversleutelaar en authenticatiemechanisme. ChaCha20 is een ARX-cipher, en Poly1305 biedt een snel en veilig authenticatiealgoritme. |