Cyberboswachters
Deze cursus werd gemaakt met hulp van AI-assistentie. Sommige afbeeldingen zijn door AI gegenereerd.
Na dit hoofdstuk kan je:
Informatie versleutelen zodat enkel zender en ontvanger het bericht kunnen lezen.
Meer weten? Lees The Codebreakers van David Kahn: 1200 pagina’s die lezen als een thriller.
Enkel leesbaar voor geautoriseerde partijen.
Focus van dit hoofdstuk, via encryptie.
Niet gewijzigd tijdens de overdracht.
Toegankelijk wanneer nodig.
Ook integrity los je vaak op met cryptografische technieken, zoals hashing en digitale handtekeningen.
Data versleutelen (encrypteren) met een geheime sleutel. Zonder sleutel is de data onleesbaar.

Hoe sterker de computers, hoe sterker de algoritmes moeten zijn.
Al sinds de Romeinen wordt er aan cryptografie gedaan: een wedloop tussen stropers en boswachters.

Het kennen van het algoritme door de tegenstander is geen probleem. Enkel de geheime sleutel moet uit diens handen blijven.
Principe van Kerckhoffs, 19e eeuw
Alles draait om het geheimhouden van je sleutel.
Sleutel == wachtwoord. Zonder de sleutel mag niemand aan de data kunnen, ook al weet iedereen welk algoritme je gebruikt.
Ontcijferen zonder de sleutel te kennen.
Gewoon alle mogelijke sleutels testen.
Gemiddeld vind je de sleutel al in de helft van de maximale tijd: de eerste sleutel die je test, kan evengoed de juiste zijn als de laatste.
\[MaximaleTijd = \frac{AantalMogelijkeTekens^{SleutelLengte}}{pogingen/seconde}\]
Voorbeeld: 8 tekens (a-z), 1M pogingen/s:
\[\frac{26^8}{1\,000\,000} = 208\,827 \text{ sec} \approx 58 \text{ uur}\]
~29 uur
gemiddeld gevonden
62 dagen
maximaal, met één teken extra
| # tekens | nummers (10) | kleine letters (26) | alle tekens (95) |
|---|---|---|---|
| 6 | 33 ms | 10 s | 6,8 uur |
| 8 | 3,3 s | 1,9 uur | 7 jaren |
| 10 | 5,6 min | 54 dagen | \(6,3 \times 10^{4}\) jaren |
| 12 | 9,3 u | 100 jaren | \(5,7 \times 10^{8}\) jaren |
| 16 | 11 jaar | \(4,6 \times 10^{7}\) jaren | \(4,7 \times 10^{16}\) jaren |
Ter vergelijking: het universum is \(1,38 \times 10^{10}\) jaar oud. Per verdubbeling van het aantal GPU’s halveert de tijd.
Bruteforce slimmer maken: test sleutels uit een woordenboek.
Tools zoals John The Ripper testen ook god1, god2, …
Wachtwoorden uit bekende lijsten, of varianten ervan.
Check zelf: SecLists
Afhankelijk van de informatie die de cryptanalist heeft:
Alleen versleutelde data. Het beste scenario voor cyberboswachters.
Zowel de ciphertext als de bijhorende plaintext zijn gekend.
De analist kiest de plaintext en ziet de resulterende ciphertext.
De analist kiest de ciphertext en ziet de resulterende plaintext.
Vraag de sleutel gewoon aan de gebruiker.
Veel makkelijker dan sleutels kraken: phishing helpdesk-scams post-its onder het toetsenbord
Cryptografie is noodzakelijk, maar zelden voldoende (cfr McCumber). Meer hierover in het hoofdstuk Social Engineering.
There is no patch for human stupidity.
Vaak gehoord cliché in de security-wereld
Quantum-computers kunnen bruteforce drastisch versnellen. Alle huidige encryptie is potentieel kwetsbaar.
Veel veiligheidsdiensten hanteren die strategie al jaren: nu bewaren, later ontcijferen.
Onderzoek naar post-quantum cryptografie is volop bezig.
Impact op cryptocurrencies e-commerce wachtwoorden …
Encryption is everywhere in modern day life - everything will be vulnerable!
Teken door een ander teken vervangen.
Bv. Caesar
Teken op een andere plek zetten.
Bv. Scytale
Substitutie én transpositie.
Bv. AES
Handige tool om crypto te leren: CrypTool
Sleutel = getal 1-25: iedere letter schuift evenveel plaatsen op. A=0, B=1, … Z=25
A→D, B→E, … en Z→C (overflow: terug naar voor)
Ook wel Rot (rotatie) genoemd: Rot4, Rot13, …
Rot13 2x toepassen = originele tekst.
Formule: (teken + sleutel) % 26 = nieuw teken
Voorbeeld: Y met sleutel 7
Y = 24Andere manier om Caesar encryptie te visualiseren
Slechts 25 mogelijke sleutels.
Statistische verdeling van letters in een taal: de e komt in het Nederlands veel vaker voor dan de v.
De meest voorkomende letter in de ciphertext is dus waarschijnlijk een e.
Frequentie-analyse Nederlandstalige tekst (cijfers: Wikipedia).
Sleutel: COUNTON, plaintext: vigenerecipher
C O U N T O N C O U N T O N
v i g e n e r e c i p h e r
X W A R G S E G Q C C A S E
v + sleutel C (shift 2) → Xe → een andere letter (R, S, G, S)
Vigenère heette eeuwenlang onkraakbaar.
In de 19e eeuw kraakte Kasiski het: eens je de sleutellengte kent, heb je meerdere parallelle Caesars.
Oude Grieken. Sleutel = aantal vlakken van de scytale.
Een authentieke scytale (Bron: Wikipedia).
“De perzen komen er nu aan” op een scytale met 4 zijden:

Ciphertext na afwikkelen:

Een combinatie versterkt de encryptie.
Moderne algoritmen zijn een sequentie van basisvormen. AES (de facto standaard): substituties (sub) en transposities (mixcolumns, shiftrows) in meerdere rondes. Dat zien we later.
Klassieke ciphers (Caesar, Vigenère, scytale) zijn ondertussen allemaal gekraakt.
128-256 bits: bruteforce wordt onhaalbaar.
Substitutie en transpositie, telkens opnieuw.
Kerckhoffs in actie: geen security through obscurity.
Per ronde een andere subkey: Vigenère op steroïden.
We starten met symmetrisch, de oudste van de twee.
Eén sleutel voor encryptie én decryptie: zender en ontvanger gebruiken dezelfde sleutel.

Oudste vorm van encryptie: AES DES 3DES RC4 Blowfish IDEA
Zender en ontvanger hebben dezelfde sleutel nodig. Hoe wissel je die veilig uit?
Dat systeem kan wél veilig sleutels uitwisselen (zie later).
Fysiek afgeven, zeggen, via een ander kanaal, …
Teken per teken versleutelen.

Zelfde sleutel → zelfde keystream → originele plaintext.
Enkel een ontvanger met dezelfde sleutel kan het bericht dus decrypteren.
| Plaintext | Keystream | Ciphertext |
|---|---|---|
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
| 1 | 1 | 0 |
Encrypteren
1010 \(\oplus\) 1101 = 0111
Dezelfde XOR met de keystream (1101) decrypteert weer:
0111 \(\oplus\) 1101 = 1010
Genereert een pseudo-random keystream, gebaseerd op een PRNG (Pseudo-Random Number Generator).
Zelfde sleutel (seed) → zelfde reeks. Reproduceerbaar.
Voor buitenstaanders is de reeks niet te voorspellen.
→ kwetsbare encryptie (bv. WEP!)
Voorbeeld (seed = 1111):
1111² = 01 2343 21 → 2343
2343² = 05 4896 49 → 4896
4896² = 23 9708 16 → 9708
Reeks: 2343, 4896, 9708, ...
Ondertussen onveilig (korte cycli), maar de basis van alle moderne PRNG’s.
| Partij | Output (10 getallen) |
|---|---|
| Zender | 6337963648 |
| Ontvanger | 6337963648 |
| Eve | 9978711226 |
Zelfde seed → zelfde reeks. Andere seed → totaal andere reeks.
Waarschuwing
C# Random is niet cryptografisch veilig! Gebruik RandomNumberGenerator uit System.Security.Cryptography.
Ontwikkeld door Ron Rivest. Een van de meest gebruikte streamciphers ooit: WEP SSL/TLS
40-2048 bits
sleutellengte
Nu verouderd en onveilig, maar nog steeds een goed voorbeeld van een streamcipher.

Blok per blok versleutelen.
Een nieuwe soort operatie, naast XOR, substitutie en transpositie:

1977
standaard
64 bits
per blok
56 bits
sleutel
16 Feistel-rondes die de data blok per blok versleutelen.
16 subkeys uit de 56-bit sleutel, één per ronde.
DES encryptie: 16 Feistel-structuren.

8 S-boxen, elk 6 bits in → 4 bits uit.
Voorbeeld: 011011 → 1001
Waarheidstabel van het S5-blok.
16 rondes = 16 unieke subkeys

Drie types P-Boxes.
1995
de DES-sleutel (56 bit) bleek te kort
168 bits
sleutel, compatibel met bestaande DES-hardware
3x DES
Encrypt → Decrypt → Encrypt, met 3 verschillende sleutels
Verlengde de levensduur van DES, maar is nu ook verouderd.
Het bankwezen gebruikt 3DES nog steeds voor o.a. Visa- en Mastercard-transacties.
3DES.
Deep Crack kraakt een DES-sleutel in dagen.
$250.000
kostprijs
1.856
custom chips
< 24 uur
later, samen met distributed.net

It’s time for those 128-, 192-, and 256-bit keys.
Het bericht dat Deep Crack bij de publieke aankondiging kraakte
DES is dood voor gevoelige data. Dat bevestigt 3DES (1995) als de juiste keuze.
Hoe versleutel je data die groter is dan één blok?
Zelfde plaintext-blok + zelfde sleutel = zelfde ciphertext.
Dat lekt informatie en maakt replay attacks mogelijk. Daarom bedacht men verschillende modes of operation.
Electronic Codebook (ECB): elk blok onafhankelijk encrypteren
ECB lekt patronen (Bron: Wikipedia).
Cipher Block Chaining: output van vorig blok als extra input voor volgende blok
Naast de sleutel. Zo werk je effectief steeds met een andere sleutel.
De IV gaat ongeëncrypteerd mee in de header. Dat is geen probleem.
Een goed IV-selectie-algoritme is cruciaal.
Mini-cipher (2 bits/blok): 00→01, 01→10, 10→11, 11→00
Plaintext: 00 01 10 11, IV: 10
| Blok | Plaintext | XOR met | Resultaat | Cipher → |
|---|---|---|---|---|
| 1 | 00 |
IV=10 |
10 |
11 |
| 2 | 01 |
11 |
10 |
11 |
| 3 | 10 |
11 |
01 |
10 |
| 4 | 11 |
10 |
01 |
10 |
Ciphertext: 11 11 10 10
Herhalingen in de ciphertext zeggen niets meer over herhalingen in de plaintext.
Counter (CTR): de blockcipher encrypteert een teller (IV) als extra input.

Meest recente en meest gebruikte symmetrische blockcipher.
2001
nieuwe wereldwijde standaard
128 bits
per blok
256 bits
maximale sleutellengte
Gebaseerd op Rijndael. Belgisch! Door Vincent Rijmen en Joan Daemen.
Stap 2 tot 4 herhaal je in meerdere rondes.
De XOR is ook hier de feitelijke encryptie.
Eén ronde van AES.
Sleuteluitwisseling blijft het grote probleem.
Langere sleutels en sterke algoritmes geven betere bescherming. De oplossing voor de sleuteluitwisseling: asymmetrische crypto.