Cover
Empieza ahora gratis Symmetric_7_stream ciphers.pdf
Summary
# Vergelijking van streamciphers en blockciphers
Dit onderwerp behandelt de eigenschappen, voordelen, nadelen en toepassingen van streamciphers en blockciphers, en benadrukt de inherente kracht van blockciphers.
### 1.1 Algemene principes van streamciphers en blockciphers
De keuze tussen een streamcipher en een blockcipher is afhankelijk van de specifieke omstandigheden en de aard van de toepassing. Streamciphers zijn ontworpen voor continue datastromen en zijn vaak sneller en efficiënter in hardware. Blockciphers daarentegen werken met vaste blokken data en worden beschouwd als inherent krachtiger, aangezien ze kunnen dienen als bouwsteen voor andere cryptografische tools [1](#page=1) [2](#page=2).
### 1.2 Eigenschappen en voordelen van streamciphers
Streamciphers werken met een oneindige lengte en vereisen daarom geen modus van operatie. Ze kunnen aanzienlijk sneller zijn dan blockciphers, soms wel tot vijf keer sneller, en zijn bijzonder geschikt voor apparaten met beperkte middelen en voor 'lightweight cryptography'. Zelfs met hardware-ondersteuning voor AES, kan een streamcipher zoals ChaCha betere prestaties leveren, vooral wanneer er geen specifieke AES-hardware aanwezig is. Een potentieel voordeel van streamciphers die geen blockciphers als bouwsteen gebruiken, is dat ze doorgaans sneller zijn en minder code vereisen dan blockciphers [2](#page=2) [6](#page=6).
Voor toepassingen die encryptie/decryptie van een datastroom vereisen, zoals over een datacommunicatiekanaal of een browser/webverbinding, kan een streamcipher de betere keuze zijn [6](#page=6).
> **Tip:** Streamciphers zijn flexibeler en malleabeler dan blockciphers, wat betekent dat kleine wijzigingen in de cijfertekst leiden tot voorspelbare kleine wijzigingen in de oorspronkelijke platte tekst [1](#page=1).
#### 1.2.1 Belangrijke ontwerpprincipes voor streamciphers
Voor een veilige streamcipher zijn de volgende ontwerpprincipes essentieel:
* **Grote periode van de encryptiesequentie:** De pseudorandom getallengenerator moet een lange periode hebben voordat de reeks bits zich herhaalt, om cryptanalyse te bemoeilijken [5](#page=5).
* **Benadering van een echte willekeurige getalstroom:** De keystream moet zoveel mogelijk de eigenschappen van een echte willekeurige getalstroom benaderen. Dit houdt in dat er een ongeveer gelijke verdeling van 1'en en 0'en moet zijn, en bij gebruik van bytes, moeten alle mogelijke byte-waarden ongeveer even vaak voorkomen. Hoe willekeuriger de keystream, hoe moeilijker de cryptanalyse [5](#page=5).
* **Voldoende sleutellengte:** Om brute-force aanvallen te weerstaan, is een sleutellengte van minimaal 128 bits wenselijk [5](#page=5).
Met een goed ontworpen pseudorandom getallengenerator kan een streamcipher net zo veilig zijn als een blockcipher met een vergelijkbare sleutellengte [5](#page=5).
#### 1.2.2 Nadelen van streamciphers
Een significant nadeel van streamciphers is dat ze vaak sleutelmateriaal niet kunnen hergebruiken. Als twee platte teksten met dezelfde sleutel worden versleuteld, kan cryptanalyse relatief eenvoudig worden. Door de twee cijfertekststromen met elkaar te XOR'en, ontstaat de XOR van de oorspronkelijke platte teksten, wat kan leiden tot ontcijfering als de platte teksten herkenbare eigenschappen hebben [6](#page=6).
### 1.3 Eigenschappen en voordelen van blockciphers
Blockciphers zijn inherent krachtiger dan streamciphers. Ze kunnen dienen als bouwsteen voor een breed scala aan andere cryptografische tools, waaronder streamciphers (zoals AES-CTR) en hashfuncties. Hoewel er mogelijk meer geschikte implementaties voor deze tools bestaan zonder blockciphers te gebruiken, onderstreept dit de inherente superioriteit van blockciphers in cryptografie. De omgekeerde stap, het omzetten van een willekeurige streamcipher in een blockcipher, is niet mogelijk [1](#page=1).
Voor toepassingen die werken met blokken data, zoals bestandsoverdracht, e-mail en databases, kunnen blockciphers geschikter zijn [6](#page=6).
#### 1.3.1 Voordelen van blockciphers
Een belangrijk voordeel van blockciphers is de mogelijkheid om sleutels te hergebruiken, in tegenstelling tot veel streamciphers [6](#page=6).
### 1.4 Vergelijking en toepasbaarheid
#### 1.4.1 Situaties waarin streamciphers de voorkeur hebben
* Wanneer de lengte van de invoer onbekend is [1](#page=1).
* Wanneer hoge prestaties vereist zijn en malleabiliteit geen probleem is [1](#page=1).
* Voor toepassingen die continue datastromen verwerken, zoals datacommunicatiekanalen of webverbindingen [6](#page=6).
* Voor apparaten met beperkte resources of in de context van lightweight cryptography [2](#page=2).
#### 1.4.2 Situaties waarin blockciphers de voorkeur hebben
* Voor toepassingen die met vaste blokken data werken, zoals bestandsoverdracht, e-mail en databases [6](#page=6).
* Als bouwsteen voor andere cryptografische primitieven [1](#page=1).
#### 1.4.3 Overlappende toepassingen
Ondanks de specifieke voordelen, kan in principe elk type cipher in vrijwel elke toepassing worden gebruikt [6](#page=6).
#### 1.4.4 Prestatie en efficiëntie
Hoewel streamciphers traditioneel sneller en kleiner waren in hardware heeft de introductie van AES de prestatiekloof in software verkleind. Bovendien zijn er nu hardware-acceleratietechnieken beschikbaar voor AES, zoals de Intel AES Instruction Set. Desondanks kunnen sommige moderne streamciphers, zoals ChaCha, nog steeds betere prestaties bieden dan AES, vooral zonder AES-hardwareondersteuning [2](#page=2) [6](#page=6).
### 1.5 Historische context en kwetsbaarheden
Streamciphers hebben een lange geschiedenis, waarbij de one-time pad (OTP) als een theoretisch zeer sterk cipher wordt beschouwd, mits correct geïmplementeerd met een echte willekeurige sleutelstroom die slechts eenmaal wordt gebruikt. Fouten in het genereren en distribueren van sleutelmateriaal, zoals bij de Lorenz-cipher tijdens WO II, kunnen echter leiden tot ernstige kwetsbaarheden en het kraken van versleutelde berichten. Ook kunnen de elektromagnetische straling van electromechanische mixers in vroege encryptiesystemen worden onderschept, wat leidt tot het herstel van de platte tekst (een kwetsbaarheid code-genaamd Tempest). Het hergebruik van een one-time pad (een 'two-times pad') maakt het cipher zeer zwak. Moderne streamciphers maken gebruik van pseudorandom getalstromen in plaats van echte willekeurige stromen [5](#page=5).
> **Voorbeeld:** Het kraken van Sovjet-verkeer door Amerikaanse en Britse inlichtingendiensten tijdens WO II was mogelijk doordat sleutelmateriaal meer dan eens werd gebruikt [5](#page=5).
---
# De eenmalige pad (one-time pad)
De eenmalige pad (OTP) is een encryptiemethode die theoretisch perfecte veiligheid biedt, mits aan strikte vereisten wordt voldaan, maar die in de praktijk wordt belemmerd door de uitdagingen van sleuteldistributie [3](#page=3).
### 2.1 Concept en werking
De eenmalige pad is een type stream cipher waarbij een geheime sleutel die volledig willekeurig is en slechts één keer wordt gebruikt, wordt gecombineerd met de platte tekst via de bitwise exclusive-OR (XOR) operatie [3](#page=3).
* **Proces:** De sleutel ($K$) en de platte tekst ($M$) worden byte voor byte of bit voor bit met elkaar gecombineerd om de cijfertekst ($C$) te vormen:
$C = M \oplus K$ [3](#page=3).
* **Ontsleuteling:** Om de oorspronkelijke platte tekst te herstellen, wordt de cijfertekst met dezelfde sleutel gecombineerd:
$M = C \oplus K$ [3](#page=3).
> **Tip:** Het sleutelstroom (keystream) dat door de generator wordt geproduceerd, moet zodanig worden gecombineerd met de platte tekst dat de resulterende cijfertekst willekeurig lijkt.
### 2.2 Vereisten voor perfecte veiligheid
Voor een eenmalige pad om als theoretisch perfect veilig te worden beschouwd, moeten aan de volgende vier voorwaarden worden voldaan [3](#page=3):
1. **Sleutellengte:** De sleutel moet minstens even lang zijn als de platte tekst.
2. **Willekeurigheid:** De sleutel moet echt willekeurig zijn en niet gegenereerd worden door een algoritme.
3. **Eenmalig gebruik:** De sleutel mag nooit, geheel of gedeeltelijk, worden hergebruikt.
4. **Geheimhouding:** De sleutel moet volledig geheim worden gehouden door de communicerende partijen.
Wanneer aan deze voorwaarden is voldaan, is de eenmalige pad veilig zelfs voor aanvallers met onbeperkte middelen en is deze ook kwantumveilig [3](#page=3).
### 2.3 Historische toepassingen en praktijk
Ondanks de theoretische perfectie, maakt de praktische implementatie van de eenmalige pad het een uitdaging. Fysieke vormen van eenmalige paden werden gebruikt door spionnen en in militaire communicatie.
* **Spionage en diplomatie:** Kleine papieren eenmalige paden werden gebruikt door spionnen. Teleprinters met een geheime tape (een digitale variant van de eenmalige pad) werden gebruikt voor de Washington-Moskou hotline, ingesteld na de Cuba-crisis [4](#page=4).
* **Fysieke kenmerken:** Veel fysieke methoden werden toegepast om de veiligheid te verhogen, zoals het gebruik van speciale, onzichtbare inkten, brandbare materialen voor snelle vernietiging, of het produceren van zeer kleine paden die alleen met speciale lenzen leesbaar waren [4](#page=4).
* **Militaire toepassingen:** De methode werd gebruikt voor het coderen van berichten tussen het verzet en het VK, die via duiven werden vervoerd tijdens de Tweede Wereldoorlog [4](#page=4).
* **Elektromechanische mixers:** De Amerikaanse strijdkrachten gebruikten elektromechanische mixers om bits van de boodschap en de eenmalige tape te combineren. Deze mixers straalden echter elektromagnetische energie uit die kon worden onderschept (een kwetsbaarheid codenaam Tempest) [5](#page=5).
### 2.4 Historische exploits en zwakheden
Ondanks de theoretische sterkte, leidde het schenden van de vereisten voor de eenmalige pad vaak tot succesvolle cryptanalyse.
* **Gebrek aan willekeurigheid:** Het Duitse Buitenlandse Bureau's eenmalige pad systeem (codenaam GEE) werd opgelost omdat de paden niet willekeurig genoeg waren; de machine die ze genereerde produceerde voorspelbare output [4](#page=4).
* **Hergebruik van sleutels:** De Amerikaanse ontdekking dat berichten tussen Canberra en Moskou eerst met een codeboek en vervolgens met een eenmalige pad werden gecodeerd, waarbij dezelfde pad werd gebruikt als voor Washington-Moskou berichten, leidde tot het breken van sommige berichten [4](#page=4).
* **Fouten in generatie en distributie:** Sovjet-spionagebureaus gebruikten paden die door typisten met typemachines werden gegenereerd. Hoewel enigszins onvoorspelbaar, was dit niet echt willekeurig. Fouten in de generatie en distributie van sleutelmateriaal, zoals het per ongeluk produceren van meerdere kopieën van dezelfde sleutel tijdens de Duitse dreiging op Moskou, stelden Amerikaanse en Britse inlichtingendiensten in staat om Sovjetverkeer te breken (#page=4, 5). De VENONA-inspanning, die decennialang duurde, wist een klein percentage van de onderschepte berichten te ontcijferen [4](#page=4) [5](#page=5).
* **Vergelijking met stream ciphers:** Een stream cipher gebruikt een pseudowillekeurige nummerstroom, terwijl een eenmalige pad een echte willekeurige nummerstroom gebruikt. Een verkeerd gebruik van de eenmalige pad (zoals het hergebruiken van een sleutel, een "twee-keer pad") maakt het systeem zeer zwak [5](#page=5).
> **Tip:** Het succes van cryptanalyse van eenmalige paden berust vrijwel altijd op het niet voldoen aan de strikte vereisten, met name het hergebruiken van sleutels of het produceren van sleutels die niet echt willekeurig zijn.
### 2.5 Praktische uitdagingen
Het grootste obstakel voor de brede toepassing van de eenmalige pad is de problemen met de veilige distributie van de lange sleutels. Het delen van de geheime sleutels vooraf, tussen alle communicerende partijen, is een logistieke nachtmerrie die de techniek impraktisch maakt voor de meeste toepassingen [3](#page=3).
> **Tip:** Hoewel theoretisch perfect, is de eenmalige pad vanwege de sleuteldistributieproblematiek voornamelijk relevant voor situaties met een hoge beveiligingseis en waar de distributie van sleutels beheersbaar is, zoals in specifieke diplomatieke of militaire communicatie.
---
# Historische streamciphers en hun cryptanalyse
Dit onderwerp behandelt historische streamciphers, met name de Enigma en Lorenz die tijdens de Tweede Wereldoorlog werden gebruikt, en de methoden van cryptanalyse die werden toegepast, inclusief de rol van vroege computers zoals Colossus en de Bombe.
### 3.1 Enigma en Lorenz: de Duitse streamciphers
Enigma en Lorenz waren streamciphers die door de Duitsers tijdens de Tweede Wereldoorlog werden ingezet voor versleuteling. Lorenz werd gebruikt voor meer strategische communicatie, zoals berichten tussen Hitler en zijn generaals, en was significant complexer dan Enigma. Enigma was daarentegen draagbaarder en werd onder andere gebruikt aan boord van U-boten [7](#page=7).
### 3.2 Cryptanalyse van Lorenz en Enigma
#### 3.2.1 De Lorenz cryptanalyse en Colossus
Een cruciale doorbraak in de cryptanalyse van Lorenz werd mogelijk gemaakt door een fout van een operator in 1941, die twee keer dezelfde bitstroom gebruikte voor twee vergelijkbare, maar niet identieke berichten. Dit stelde de codebrekers in staat de werking van Lorenz te ontrafelen. De cryptanalyse van Lorenz in 1944 maakte gebruik van Colossus, de eerste computer ooit gebouwd, twee jaar vóór de ENIAC. Bill Tutte speelde een sleutelrol in het ontdekken van de werking van Lorenz en de daaropvolgende ontcijfering [7](#page=7).
Colossus, gebouwd door Tommy Flowers buiten Bletchley Park, was een elektronische digitale computer, hoewel specifiek bedoeld voor een enkel doel, zonder een programmeerbare opgeslagen programma. De machine werd begin januari 1944 in gebruik genomen in Bletchley. De ontcijfering door Colossus was van groot belang voor de planning van D-Day [8](#page=8).
#### 3.2.2 De Enigma cryptanalyse en de Bombe
Voor het breken van de Enigma-code werd een speciaal apparaat gebruikt, de "Bombe" (ook wel Turing-Welchman Bombe genoemd). De Bombe was een elektromechanische machine en had niet de vorm van een klassieke computer. Het was een specifieke machine die op relais gebaseerd was, wat voldoende was voor het ontcijferen van Enigma. De Britten hadden een operationele Enigma-machine die volledig geanalyseerd kon worden, maar geen informatie over de Lorenz-machine. De werking van Lorenz werd afgeleid uit één set van twee onderschepte berichten, doordat de verzendende operator de wielen opnieuw naar dezelfde startpositie had gezet bij het herversturen van een bericht. Dit gaf Bill Tutte de mogelijkheid om de werking van het systeem te achterhalen. De Britten noemden de Lorenz machine, die ze nooit fysiek hadden gezien, "Tunny" [7](#page=7) [8](#page=8).
### 3.3 Vroege computers en hun impact
#### 3.3.1 De ontwikkeling van Colossus en de Bombe
Tegen het einde van de oorlog waren er 10 Colossus-machines en 200 Bombe-machines in Bletchley. Er stonden ook 120 Bombes in de Verenigde Staten. Na de oorlog bleef deze informatie lang geheim, waardoor de geschiedenis van computers vaak begint met de ENIAC (december 1946), terwijl Colossus daarvóór al bestond. De ENIAC was vergelijkbaar met Colossus in die zin dat het ook een computer voor specifieke doeleinden was [8](#page=8) [9](#page=9).
#### 3.3.2 Invloed op de moderne computertechnologie
Tussen 1945 en 1960 werd een operationele Colossus nog steeds gebruikt door GCHQ (de Britse inlichtingendienst) om hedendaagse berichten te ontcijferen. De Oost-Duitse Stasi zou de Enigma nog tot eind jaren zestig hebben gebruikt. Na de oorlog realiseerden Turing en Newman zich dat de Colossus-technologie de basis kon vormen voor een universele computer (ook wel universele Turing-machine genoemd). Newman won in 1948 de race voor de eerste opgeslagen programmacomputer in Manchester, vóór Turing [9](#page=9).
> **Tip:** De rol van Alan Turing bij het kraken van de Enigma-code wordt soms overschat in populaire media. De oorsprong van het kraken van de code lag mede bij de Poolse inlichtingendienst [8](#page=8).
De combinatie van de Bombe en Colossus wordt geschat de oorlog met minstens twee jaar te hebben verkort. Informatie over Enigma werd pas in 1973 publiek en over Colossus in 2000. Alan Turing ontving pas in 2013 een koninklijke gratie [9](#page=9).
---
# Moderne streamciphers: RC4, ChaCha20 en andere
Dit onderwerp analyseert moderne streamciphers, met een focus op RC4 en ChaCha20, inclusief hun ontwerp, sterke en zwakke punten, toepassingen en de evolutie van cryptografische aanbevelingen.
### 4.1 RC4 streamcipher
RC4 is een streamcipher, ontworpen in 1987 door Ron Rivest voor RSA Security. Het is een variabele key-size streamcipher met byte-georiënteerde operaties, gebaseerd op een willekeurige permutatie. De periode van het cipher is naar verwachting groter dan $10^{100}$. Het vereist acht tot zestien machine-operaties per uitvoerbyte en is daardoor zeer snel in software [10](#page=10).
RC4 werd gebruikt in de Secure Sockets Layer/Transport Layer Security (SSL/TLS) standaarden, het Wired Equivalent Privacy (WEP) protocol en het WiFi Protected Access (WPA) protocol. Het algoritme wordt echter niet langer als veilig beschouwd [10](#page=10).
#### 4.1.1 RC4 ontwerp en werking
Het algoritme is eenvoudig en gemakkelijk te verklaren. Een variabele sleutel van 1 tot 256 bytes (8 tot 2048 bits) initialiseert een 256-byte statusvector $S$, met elementen $S $ tot $S $. $S$ bevat te allen tijde een permutatie van alle 8-bit getallen van 0 tot 255 [10](#page=10) .
**Initialisatie:**
1. De elementen van $S$ worden ingesteld op de waarden van 0 tot 255 in oplopende volgorde [10](#page=10).
2. Een tijdelijke vector $T$ wordt aangemaakt. Als de sleutellengte $K$ 256 bytes is, wordt $K$ naar $T$ gekopieerd. Anders worden de eerste $keylen$ elementen van $T$ uit $K$ gekopieerd, en wordt $K$ herhaald om $T$ te vullen [10](#page=10).
3. De initiële permutatie van $S$ wordt uitgevoerd met behulp van $T$. Voor elke $S[i]$, wordt $S[i]$ verwisseld met $S[j]$, waar $j = j + S[i + T[i]$. Na deze stap bevat $S$ nog steeds alle getallen van 0 tot 255 [10](#page=10).
**Streamgeneratie:**
Na de initialisatie wordt de input sleutel niet meer gebruikt. Bij het genereren van de keystream worden alle elementen van $S[i]$ doorlopen. Voor elke $S[i]$ wordt $S[i]$ verwisseld met een andere byte in $S$ volgens een schema gedicteerd door de huidige configuratie van $S$. Vervolgens wordt $j = j + S[i]$ berekend, daarna $t = S[i + S[j]$, en $S[t]$ wordt teruggegeven als een willekeurige byte ($k$). Nadat $S $ is bereikt, begint het proces opnieuw bij $S $ [10](#page=10) .
**Encryptie en Decryptie:**
Om te versleutelen, wordt de gegenereerde byte $k$ XOR'ed met de volgende plaintext byte. Om te ontsleutelen, wordt $k$ XOR'ed met de volgende ciphertext byte [10](#page=10).
#### 4.1.2 Zwakheden en aanbevelingen
RC4's belangrijkste zwakte is de onvoldoende sleutelplanning. Hoewel er manieren zijn om RC4 te gebruiken zonder de specifieke zwakte die in WEP voorkomt, is het algoritme niet langer algemeen veilig [11](#page=11).
**Bekende zwakheden en beperkingen:**
* **Bit-flipping attack:** Net als bij elke streamcipher is RC4 kwetsbaar voor bit-flipping aanvallen (malleabiliteit) [11](#page=11).
* **Verbod in TLS:** Het gebruik van RC4 in TLS is sinds 2015 verboden [11](#page=11).
* **Statistische analyse:** Cipherteksten, met name de eerste 256 bytes van de RC4 keystream, zijn gevoelig voor statistische analyse [11](#page=11).
* **Herhaalde plaintext:** Kwetsbaarheden treden op wanneer dezelfde plaintext meerdere keren wordt verzonden [11](#page=11).
* **Snowden-documenten:** Deze suggereren een praktische aanval op RC4 [11](#page=11).
#### 4.1.3 Aanbevelingen voor streamciphers (2017-2024)
De aanbevelingen voor het gebruik van streamciphers zijn geëvolueerd:
* **Te stoppen met gebruiken:**
* Mobiele stem: A5/1, A5/2 [15](#page=15).
* Mobiele GPRS data: GEA-1, GEA-2 [15](#page=15).
* Satelliet telefoons: GMR-1, GMR2 [15](#page=15).
* Bluetooth: E0-RC4 [15](#page=15).
* **Acceptabel voor legacy:**
* Grain-Mickey 2.0 [15](#page=15).
* Trivium [15](#page=15).
* Rabbit [15](#page=15).
* SNOW 3G [15](#page=15).
* SNOW 2.0 [15](#page=15).
* **Aanbevolen:**
* HC-128, HC-256 [15](#page=15).
* ChaCha20 (iets beter dan Salsa20) [15](#page=15).
* SOSEMANUK [15](#page=15).
* AES-GCM [15](#page=15).
* AES-CTR [15](#page=15).
* ChaCha20-Poly1305 [15](#page=15).
### 4.2 ChaCha20 streamcipher
ChaCha20 is een ARX-cipher (Addition, Rotation, XOR). ARX-ciphers maken gebruik van deze drie operaties met een woordgrootte van $n=32$ of $n=64$ bits. Veel ARX-ciphers zijn voorgesteld, waaronder SHA-3 finalisten BLAKE en Skein, het tweakable block cipher Threefish, en de streamciphers ChaCha20 en Salsa20 [12](#page=12).
#### 4.2.1 ChaCha20 ontwerp en werking
De kern van ChaCha20 werkt met een blok van 512 bits, dat bestaat uit:
* Een 256-bit sleutel [12](#page=12).
* Een 64-bit teller (block counter) [12](#page=12).
* Een 64-bit nonce (initialization vector) [12](#page=12).
* Vier 32-bit diagonale constanten [12](#page=12).
ChaCha20 gebruikt 20 rondes, wat neerkomt op 80 toepassingen van een "quarter-round" [12](#page=12).
**De Quarter-Round:**
De quarter-round is een pure ARX-operatie die vier 32-bit getallen $a, b, c, d$ (een vierde van een blok) transformeert:
1. `a += b;`
2. `d ^= a; d <<<= 16;`
3. `c += d;`
4. `b ^= c; b <<<= 12;`
5. `a += b;`
6. `d ^= a; d <<<= 8;`
7. `c += d;`
8. `b ^= c; b <<<= 7;`
Hierbij staat `<<<` voor een circulaire linksverschuiving (rotatie), `+=` voor optelling modulo $2^{32}$, en `^=` voor XOR [13](#page=13).
**Rondes:**
Het proces wordt uitgevoerd door eerst 4 quarter-rounds parallel toe te passen, kolom per kolom. Daarna volgen 4 rondes diagonaal. Dit wordt 10 keer herhaald (10 kolomrondes en 10 diagonale rondes), resulterend in 20 rondes of 80 quarter-rounds. Deze iteraties zorgen voor goede diffusie, waarbij veranderingen op elke positie alle andere posities beïnvloeden [13](#page=13).
**Preventie van Invertibiliteit:**
De 20 rondes zijn op zichzelf niet genoeg om de inverse operatie te voorkomen, wat de voorspelling van de gehele keystream en het herstellen van de plaintext mogelijk zou maken. Om dit te voorkomen, telt ChaCha20 het oorspronkelijke blok op bij het verwerkte blok, woord voor woord, en gebruikt dit als pseudo-willekeurig blok. Dit voorkomt dat een aanvaller de berekening kan omkeren zonder de oorspronkelijke inhoud te kennen [13](#page=13).
**Constante "expand 32-byte k":**
Dit element in het ontwerp is bedoeld om de controle die een aanvaller kan uitoefenen te verminderen en te voorkomen dat een nulblok nog steeds nul oplevert [13](#page=13).
#### 4.2.2 Voordelen en toepassingen van ChaCha20
ChaCha20 wordt beschouwd als een praktisch alternatief voor AES in de meeste realistische contexten [13](#page=13).
**Voordelen:**
* **Geen tabel-lookups:** Het algoritme maakt geen gebruik van tabel-lookups [13](#page=13).
* **Eenvoudige operaties:** Het bevat geen ingewikkelde vermenigvuldigingen of IF-statements [13](#page=13).
* **Constante uitvoeringstijd:** De timing van elke operatie is identiek, waardoor timing-lekken, die een probleem kunnen zijn bij AES, hier irrelevant zijn [13](#page=13).
* **Hardware-onafhankelijk:** ChaCha20 heeft geen hardware-ondersteuning nodig vanwege zijn eenvoud, hoewel AES dat wel heeft [13](#page=13).
* **Snelheid:** De snelheid is vergelijkbaar met AES [13](#page=13).
* **Adoptie:** De adoptie van ChaCha20 werd gestimuleerd door de Snowden-onthullingen in 2013 [13](#page=13).
**Toepassingen:**
* Linux `/dev/random` en `/dev/urandom` zijn gebaseerd op ChaCha in plaats van het gebroken RC4 [23](#page=23).
* Recente Windows API calls, zoals BCryptGenRandom (sinds Windows Vista), gebruiken NIST_CTR_DRBG [24](#page=24).
* Wireguard, een moderne VPN, heeft ChaCha20-Poly1305 gekozen [25](#page=25).
* ChaCha20 wordt gebruikt in combinatie met Poly1305 voor geauthenticeerde encryptie (bijvoorbeeld in TLS 1.3) [15](#page=15) [24](#page=24).
#### 4.2.3 Belang van Nonce (IV)
Moderne streamciphers vereisen een initialisatievector (IV), ook wel nonce genoemd, om de keystream te variëren. Voor elke nieuwe boodschap moet een nieuwe IV worden gebruikt, zodat de sleutel voor elke boodschap anders is. Na de sleutel- en IV-setup is de daadwerkelijke keystreamgeneratie doorgaans zeer snel [13](#page=13).
### 4.3 Andere streamciphers en algemene overwegingen
#### 4.3.1 LFSR-gebaseerde ciphers
Veel streamciphers, zoals SNOW, SOSEMANUK, GRAIN, A5/1, A5/2, GEA-1, GEA-2, TRIVIUM, TURING en SOBER, zijn gebaseerd op Lineaire Feedback Shift Registers (LFSRs) [20](#page=20).
* **GEA-1 en GEA-2:** Deze GPRS Encryption Algorithms hebben een sleutellengte van 64 bits. GEA-1 heeft echter slechts 40 bits initiële interne LFSR-status nodig, wat mogelijk een opzettelijke verzwakking was, wellicht als gevolg van exportregels uit die tijd (beperking tot 40 bits). GEA-2 kent deze specifieke zwakte niet, maar heeft andere zwakheden die een aanval met beperkingen mogelijk maken. GEA-2 wordt nog steeds aanbevolen (niet vereist) in 2022 netwerken en apparaten [20](#page=20) [21](#page=21).
* **GMR-1 en GMR-2:** Deze ciphers voor satelliet-telefoons zijn zo zwak dat ze in real-time ontsleuteld kunnen worden. De 64-bit encryptiesleutel kan in 0.02 seconden worden afgeleid, waarbij de zoekruimte voor de sleutel van $2^{64}$ wordt gereduceerd tot $2^{13.6}$ met slechts één frame keystream van 15 bytes [22](#page=22).
* **SNOW family:** Hoewel er zwakheden zijn gevonden in gereduceerde-round versies van de SNOW-familie, blijft de aanbeveling voor SNOW 3G (door ENISA) geldig [23](#page=23).
#### 4.3.2 ChaCha als verbetering
ChaCha is een verbeterde versie van Salsa20 met een nieuwe round-functie die zorgt voor betere diffusie [23](#page=23).
#### 4.3.3 Block cipher modes als streamciphers
Block cipher modes van operatie kunnen ook fungeren als streamciphers:
* **Niet-geauthenticeerde encryptie:** AES-CTR [24](#page=24).
* **Geauthenticeerde encryptie:** AES-GCM en ChaCha20-Poly1305 [15](#page=15) [24](#page=24).
NIST_CTR_DRBG genereert bijvoorbeeld een random number generator met behulp van een block cipher in CTR-modus, wat anders is dan AES-CTR als streamcipher dat is ontwikkeld met een block cipher en een specifieke mode of operation [24](#page=24).
#### 4.3.4 Malleabiliteit van streamciphers
Alle streamciphers lijden onder malleabiliteit aanvallen, maar dit is niet altijd een probleem [25](#page=25).
> **Tip:** Bij het kiezen van een streamcipher is het essentieel om de huidige beveiligingsaanbevelingen te raadplegen, aangezien de cryptografische landschap snel evolueert en oudere algoritmes zoals RC4 niet langer als veilig worden beschouwd.
> **Voorbeeld:** De overgang van RC4 in TLS naar veiligere alternatieven zoals ChaCha20-Poly1305 illustreert de noodzaak om cryptografische protocollen regelmatig te herzien en te updaten om kwetsbaarheden te mitigeren.
---
# Ontwerpprincipes en aanvallen op streamciphers
Streamciphers worden ontworpen met specifieke principes in gedachten om hun veiligheid te waarborgen, terwijl cryptanalytische aanvallen verschillende technieken gebruiken om de versleutelde communicatie te breken.
### 5.1 Belangrijke ontwerpprincipes voor streamciphers
Voor de veilige werking van een streamcipher zijn er verschillende cruciale ontwerpprincipes [5](#page=5):
* **Grote periode:** Een pseudorandom getallengenerator produceert een deterministische reeks bits die uiteindelijk herhaalt. Een langere periode van herhaling maakt cryptanalyse bemoeilijker [5](#page=5).
* **Random-achtige eigenschappen van de keystream:** De keystream moet zoveel mogelijk de eigenschappen van een ware willekeurige getallenreeks benaderen. Dit omvat een ongeveer gelijke verdeling van nullen en enen. Als de keystream wordt behandeld als een reeks bytes, dan moeten alle 256 mogelijke byte-waarden ongeveer even vaak voorkomen. Hoe willekeuriger de keystream aanvoelt, hoe willekeuriger de cijfertekst is, wat cryptanalyse moeilijker maakt [5](#page=5).
* **Voldoende sleutellengte:** Om brute-force aanvallen te weerstaan, is een voldoende sleutellengte vereist. De overwegingen hiervoor zijn vergelijkbaar met die voor blockciphers. Met de huidige technologie is een sleutellengte van ten minste 128 bits wenselijk [5](#page=5).
Met een correct ontworpen pseudorandom getallengenerator kan een streamcipher even veilig zijn als een blockcipher met een vergelijkbare sleutellengte [5](#page=5).
### 5.2 Cryptanalytische aanvallen op streamciphers
Er zijn diverse cryptanalytische aanvallen die specifiek gericht zijn op streamciphers.
#### 5.2.1 Malleabiliteit (Bit-flipping attack)
Een streamcipher, waaronder RC4, is kwetsbaar voor een bit-flipping attack. Dit betekent dat een aanvaller de cijfertekst kan manipuleren om specifieke wijzigingen in de ontcijferde platte tekst te bewerkstelligen zonder de sleutel te kennen [11](#page=11).
> **Tip:** Malleabiliteit is een algemene zwakte die bij veel streamciphers voorkomt en vereist speciale aandacht bij het protocolontwerp.
#### 5.2.2 Statistische analyses
Statistische analyses kunnen worden toegepast op de cijferteksten, met name op de eerste 256 bytes van de RC4 keystream, om zwakheden te ontdekken. Ook onderscheidende aanvallen, die proberen de uitvoer van de cipher te onderscheiden van een normale distributie, kunnen worden gebruikt om staats- of sleutelinformatie af te leiden [11](#page=11) [27](#page=27).
#### 5.2.3 Inversieaanvallen
Een cruciaal vereiste voor streamciphers om bestand te zijn tegen bekende platte tekst aanvallen, is de eenrichtingseigenschap. Dit betekent dat het moeilijk moet zijn voor een aanvaller om de encryptiesleutel af te leiden uit de keystream met behulp van een inversieprocedure. Dit wordt een inversieaanval genoemd. Dergelijke aanvallen kunnen succesvol zijn, zelfs voor LFSRs met een niet-lineaire component (non-linear filter generators) [27](#page=27).
**Voorbeelden van zwakke ciphers en hun specifieke aanvallen:**
* **GPRS encryptiealgoritmen (GEA-1 en GEA-2):** GEA-1 en GEA-2 hebben een sleutellengte van 64 bits. Echter, voor GEA-1 is de initiële interne LFSR-status slechts 40 bits vereist, wat suggereert dat de zwakte opzettelijk is ingebouwd. Cryptanalyse van GEA-1 en GEA-2 is gedocumenteerd [19](#page=19) [20](#page=20).
* **GMR-1 en GMR-2 (satelliet telefoons):** Deze ciphers worden als zeer zwak beschouwd en kunnen in real-time worden ontsleuteld. De 64-bits encryptiesleutel kan in ongeveer 0.02 seconden worden afgeleid. Met slechts één frame keystream (15 bytes) kan de zoekruimte voor de encryptiesleutel worden gereduceerd van $2^{64}$ naar $2^{13.6}$. Een real-time inversieaanval op GMR-2 is beschreven [15](#page=15) [22](#page=22).
* **RC4:** Naast malleabiliteit is RC4 kwetsbaar voor statistische analyses van de keystream. Er zijn ook kwetsbaarheden wanneer dezelfde platte tekst meerdere keren wordt verzonden. Het gebruik van RC4 in TLS is sinds 2015 verboden [11](#page=11).
**Aanbevolen ciphers:**
* HC-128, HC-256 [15](#page=15).
* ChaCha20 (iets beter dan Salsa20) [15](#page=15).
* SOSEMANUK [15](#page=15).
* AES-GCM [15](#page=15).
* AES-CTR [15](#page=15).
* ChaCha20-Poly1305 [15](#page=15).
**Te vermijden ciphers:**
* Mobiele spraak: A5/1, A5/2 [15](#page=15).
* Mobiele GPRS data: GEA-1, GEA-2 [15](#page=15).
* Satelliet telefoons: GMR-1, GMR2 [15](#page=15).
* Bluetooth: E0 [15](#page=15).
* RC4 [15](#page=15).
Sommige ciphers gebaseerd op LFSRs, zoals SNOW, SOSEMANUK, GRAIN, A5/1, A5/2, GEA-1, GEA-2, TRIVIUM, TURING en SOBER, worden genoemd in de context van cryptanalytische analyses."} [20](#page=20),
---
## 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 |
|------|------------|
| Streamciphers | Encryptiealgoritmen die gegevens bit voor bit of byte voor byte versleutelen, in tegenstelling tot blockciphers die vaste blokken data versleutelen. Ze genereren een schijnbaar willekeurige reeks van sleutelbits (keystream) die vervolgens met de platte tekst wordt gecombineerd via een XOR-bewerking. |
| Blockciphers | Encryptiealgoritmen die grote, vaste blokken data versleutelen. Ze vereisen vaak een modus van operatie om met wisselende groottes van invoer om te gaan. Blockciphers worden beschouwd als inherent krachtiger omdat ze als bouwsteen voor andere cryptografische tools kunnen dienen. |
| Malleabiliteit | Een eigenschap van sommige cryptografische systemen waarbij een aanvaller kleine, voorspelbare wijzigingen kan aanbrengen in de cijfertekst, wat leidt tot corresponderende, voorspelbare wijzigingen in de ontcijferde platte tekst zonder dat de sleutel bekend is. |
| Eenmalige pad (One-Time Pad) | Een theoretisch perfecte en onbreekbare encryptiemethode waarbij een willekeurige sleutel van minstens dezelfde lengte als de platte tekst slechts één keer wordt gebruikt. De sleutel moet volledig willekeurig zijn, nooit worden hergebruikt en strikt geheim worden gehouden. |
| Pseudorandom bitgenerator | Een algoritme dat een reeks getallen of bits produceert die statistisch lijken op willekeurige getallen, maar deterministisch zijn. Deze gegenereerde reeks wordt gebruikt als de keystream in een streamcipher. |
| Keystream | De uitvoer van een pseudorandom bitgenerator die wordt gebruikt in een streamcipher om de platte tekst te versleutelen door middel van een XOR-bewerking. |
| XOR (Exclusive OR) | Een binaire logische bewerking die wordt gebruikt om bits te combineren. Als twee bits hetzelfde zijn, is het resultaat 0; als ze verschillend zijn, is het resultaat 1. In cryptografie wordt het gebruikt om de platte tekst te mengen met de keystream. |
| ARX cipher | Een klasse van cryptografische ciphers die gebruikmaken van drie fundamentele operaties: optelling modulo $2^n$, rotatie (circulaire linksverschuiving) en XOR. Deze operaties worden vaak gebruikt in moderne streamciphers en hashfuncties. |
| Initialisatievector (IV) | Een willekeurig gegenereerd getal dat wordt gebruikt om de initiële staat van een cryptografisch algoritme te initialiseren, vooral bij streamciphers. Een unieke IV voor elke encryptie zorgt ervoor dat zelfs met dezelfde sleutel, de uitvoer verschilt, wat de veiligheid verhoogt. |
| Nonce | "Number used once". Een cryptografisch concept dat lijkt op een initialisatievector, maar strikt genomen een getal is dat slechts één keer mag worden gebruikt binnen een bepaalde context of sessie, om herhaling van gebeurtenissen te voorkomen. |
| Rotatie (circulaire linksverschuiving) | Een bitmanipulatie waarbij bits naar links worden verschoven, waarbij de bits die aan de linkerkant uitvallen aan de rechterkant weer binnenkomen. Dit wordt vaak aangeduid met `<<<=` in algoritmebeschrijvingen. |
| Modulo optelling | Een rekenkundige bewerking waarbij de som van twee getallen wordt gedeeld door een specifieke modulus, en de rest van die deling het resultaat is. Dit wordt gebruikt om de resultaten binnen een bepaald bereik te houden, bijvoorbeeld bij de optelling van 32-bits of 64-bits getallen. |
| Cryptanalyse | Het proces van het analyseren van cryptografische systemen met als doel het achterhalen van geheime informatie, zoals de sleutel of de oorspronkelijke platte tekst, zonder legitieme toegang te hebben. |
| Inversieaanval | Een type cryptanalytische aanval waarbij een aanvaller probeert de sleutel of de interne staat van een cryptografisch algoritme af te leiden uit de uitvoer, door de transformaties van het algoritme om te keren. |
| Distinguishing attack | Een cryptanalytische aanval die tot doel heeft om de uitvoer van een cryptografisch algoritme te onderscheiden van een echte willekeurige reeks. Als dit lukt, kan dit informatie onthullen over de interne staat of de sleutel. |
| LFSR (Linear Feedback Shift Register) | Een type generator voor pseudowillekeurige getallen dat bestaat uit een reeks flip-flops en een lineaire feedbackfunctie. LFSRs zijn relatief eenvoudig te implementeren, maar kunnen kwetsbaar zijn voor specifieke cryptanalytische aanvallen. |