Cryptografie

Cyberboswachters

Tim Dams

Wat leer je in dit hoofdstuk?

Na dit hoofdstuk kan je:

  • het principe van Kerckhoffs uitleggen
  • symmetrisch vs asymmetrisch duiden (snelheid ↔︎ sleuteldistributie)
  • voor ECB/CBC/CTR uitleggen waarom ECB onveilig is + rol van IV/nonce
  • hashing, digitale handtekeningen en certificaten situeren
  • de werking van HTTPS/TLS beschrijven + impact van een MITM-aanval inschatten

Cryptografie

Cryptografie: het versleutelen van informatie zodat enkel zender en ontvanger het bericht kunnen lezen.

Tip

Meer weten? Lees “The Codebreakers” van David Kahn — 1200 pagina’s die lezen als een thriller.

CIA

Aspect Beschrijving
Confidentiality Informatie is alleen leesbaar voor geautoriseerde partijen
Integrity Informatie is niet gewijzigd tijdens overdracht
Availability Informatie is toegankelijk wanneer nodig

Dit hoofdstuk: focus op Confidentiality via encryptie.

Tip

Integrity wordt ook vaak opgelost m.b.v. cryptgrafische technieken, zoals hashing en digitale handtekeningen.

Encryptie en decryptie

  • Data versleutelen (encrypteren) met een geheime sleutel
    • Data is onleesbaar zonder sleutel

Alice gebruikt encryptie om een beveiligd bericht naar Bob te sturen, zodat Eve deze niet kan lezen.

Enkele termen

  • Plaintext : originele data

  • Ciphertext : versleutelde data

  • Cryptanalyse: ontcijferen zonder de sleutel

  • Cryptografie: ontwerpen van encryptiesystemen

  • Cryptologie: combinatie cryptografie + cryptanalyse

Encryptie doorheen de tijd

  • Al sinds de Romeinen wordt er aan cryptografie gedaan

  • Wedloop tussen stropers en boswachters

    • Sterkere computers → sterkere algoritmes nodig

Crypto volgens m’n kids

Crypto volgens m’n kids, deel 2

Classificatie van cryptosystemen

  • Acties op de data:
    • Substitutie: teken door ander teken vervangen
    • Transpositie: teken op andere plek zetten
    • Product: combinatie van beiden
  • Aantal sleutels:
    • 1 sleutel → symmetrisch / private encryption
    • 2 sleutels → asymmetrisch / public encryption
  • Verwerking:
    • Blok: blok per blok
    • Stream: teken per teken

Kerckhoffs principe

August Kerckhoffs

“Het kennen van het algoritme door de tegenstander is geen probleem. Enkel de geheime sleutel moet uit diens handen blijven.”

  • De sleutel moet geheim blijven (sleutel == wachtwoord)
  • Het algoritme mag publiek zijn
    • Publieke algoritmes worden door duizenden experts getest → veiliger
    • Security through obscurity == vals gevoel van veiligheid

Waarschuwing

Alles draait dus om het geheimhouden van je sleutel!

Sleutellengtes en bruteforcen

  • Bruteforce = alle mogelijke sleutels testen
  • Gemiddelde kraaktijd = is maar de helft van de maximale tijd

Sleutellengtes en bruteforcen, deel 2

\[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}\]

Gemiddeld gevonden in ~29 uur.

Eén teken extra → 62 dagen!

Bruteforce: de tabel

GeForce GTX 1080 (~30M pogingen/s):

# 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

Opmerking

Leeftijd universum: \(1,38 \times 10^{10}\) jaar. Per verdubbeling GPU’s halveert de tijd.

Dictionary attack

  • Bruteforce verbeteren door een woordenboek te gebruiken
  • Tools zoals John The Ripper testen variaties: god1, god2, …
  • Meest gebruikte wachtwoorden: 123456, password, qwerty, master, …

Tip

Gebruik nooit wachtwoorden uit bekende lijsten! Zie: SecLists

Soorten cryptanalytische aanvallen

Type Beschrijving
Enkel ciphertext Alleen geëncrypteerde data beschikbaar (beste scenario voor cyberboswachters)
Gekende plaintext Zowel ciphertext als bijhorende plaintext gekend
Gekozen plaintext Analist kiest plaintext en ziet resulterende ciphertext
Gekozen ciphertext Analist kiest ciphertext en ziet resulterende plaintext

De beste “cryptanalyse” is géén cryptanalyse

  • Veel makkelijker dan sleutels kraken: vraag de sleutel gewoon aan de gebruiker
    • Phishing, helpdesk-scams, post-its onder toetsenbord, …
  • “There is no patch for human stupidity”

→ Hoofdstuk Social Engineering behandelt dit uitgebreid

Belangrijk

Cryptografie is noodzakelijk maar zelden voldoende voor veiligheid (cfr McCumber).

Quantum-computers en crypto

  • Quantum-computers kunnen bruteforce drastisch versnellen
    • Veel veiligheidsdiensten hanteren al jaren “Store now, decrypt later” strategie
  • Alle huidige encryptie potentieel kwetsbaar
  • Impact op cryptocurrencies, e-commerce, wachtwoorden, …
  • Onderzoek naar post-quantum cryptografie is volop bezig

Opmerking

“Encryption is everywhere in modern day life — everything will be vulnerable!”

uclftr.com

De eerste algoritmes

Encryptie-algoritmes onderverdeeld naar actie:

  1. Substitutie (bv. Caesar)
  2. Transpositie (bv. Scytale)
  3. Combinatie van beiden (bv. AES)

Tip

Handige tool om crypto te leren: CrypTool

Caesar encryptie (substitutie)

  • Sleutel = getal 1-25 → iedere letter schuift op
    • A=0, B=1, … Z=25
    • Sleutel 3: A→D, B→E, … Z→C (overflow)
  • Ook wel Rot (rotatie) genoemd: Rot4, Rot13, …
    • Rot13 is speciaal: 2x toepassen = originele tekst

Formule: (teken + sleutel) % 26 = nieuw teken

Voorbeeld: Y (24) met sleutel 7:

(24+7) % 26 = 5F

Caesar voorbeeld

Caesar wiel

Andere manier om Caesar encryptie te visualiseren

Caesar kraken

  • Via bruteforce: Slechts 25 mogelijke sleutels
  • Via Frequentieanalyse: statistische verdeling van letters in een taal
    • Letter e komt veel vaker voor dan v in NL
    • Meest voorkomende letter in ciphertext → waarschijnlijk e

Frequentie-analyse Nederlandstalige tekst (Bron: Wikipedia).

Vigenère: substitutie 2.0

  • Zwakte Caesar: iedere letter → zelfde shift → frequentieanalyse werkt
  • Vigenère (16e eeuw): gebruik een sleutelwoord i.p.v. één getal
    • Iedere letter van de sleutel = shift voor bijhorende plaintext-letter
    • Sleutelwoord wordt herhaald over de tekst
  • = “Combinatie van meerdere Caesars na elkaar”

Tip

Eeuwenlang onkraakbaar genoemd: le chiffre indéchiffrable

Vigenère: voorbeeld

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) → X
  • Iedere eandere letter (R, S, G, S, E)
  • → frequentieanalyse werkt niet meer

Tabula recta

Opmerking

19e eeuw: Kasiski kraakte het. Sleutellengte bekend → meerdere parallelle Caesars.

Scytale encryptie (transpositie)

  • Oude Grieken: lint wikkelen rond stok met meerdere zijden
  • Sleutel = aantal vlakken van de scytale
  • Letters komen op verschillende zijden → per zijde uitlezen = ciphertext

Een authentieke scytale (Bron: Wikipedia).

Scytale: voorbeeld

“De perzen komen er nu aan” op scytale met 4 zijden:

Ciphertext na afwikkelen:

Combinatie: substitutie + transpositie

  • Combinatie versterkt encryptie
  • Moderne algoritmen = sequentie van basisvormen
    • AES (de facto standaard): substituties (sub) + transposities (mixcolumns, shiftrows) in meerdere rondes (zien we later)

Moderne cryptosystemen

%%{init: {"theme": "base", "flowchart": {"useMaxWidth": true}} }%%
graph TD
    A("Encryption/Decryption") --> B("Symmetric: 1-key,<br/>to en- and decrypt")
    A --> C("Asymmetric: 2 keys,<br/>Public key to encrypt<br/>Private key to decrypt")

    style B fill:#ff9900,stroke:#333,color:#000

Wat maakt crypto “modern”?

Klassieke ciphers (Caesar, Vigenère, scytale) zijn ondertussen allemaal gekraakt → tijd voor zwaarder geschut.

Moderne systemen verschillen op vier punten:

  • Grote sleutels (128–256 bits) → bruteforce onhaalbaar
  • Vele rondes van substitutie + transpositie
  • Publiek getest algoritme (Kerckhoffs!)
  • Wisselende subkeys per ronde (Vigenère op steroïden)

Twee grote families volgens aantal sleutels:

  • Symmetrisch: zelfde sleutel aan beide kanten
  • Asymmetrisch: publieke + private sleutel

Tip

We starten met symmetrisch — de oudste van de twee.

Symmetrische encryptie

  • Eén sleutel voor zowel encryptie als decryptie
    • Zender en ontvanger gebruiken dezelfde sleutel
  • Oudste vorm van encryptie
  • Voorbeelden: AES, DES, 3DES, RC4, Blowfish, IDEA

Symmetrische encryptie basismodel

Sleuteloverdracht == moeilijk in symmetric crypto

Het grote probleem: hoe wissel je de sleutel veilig uit?

  • Via asymmetrisch encryptiesysteem (zie later)
  • Via een ander beveiligd kanaal (fysiek, ander kanaal, …)

Block- en streamciphers

Streamcipher Blockcipher
Verwerking Teken per teken Blok per blok (bv. 128 bits)
Snelheid Sneller Trager
Voorbeelden RC4 AES, DES, 3DES

Streamciphers

%%{init: {"theme": "base", "flowchart": {"useMaxWidth": true}} }%%
graph TD
    A("Encryption/Decryption") --> B("Symmetric: 1-key,<br/>to en- and decrypt")
    A --> C("Asymmetric: 2 keys,<br/>Public key to encrypt<br/>Private key to decrypt")
    B --> D("Stream:<br/>Bit-wise")
    B --> E("Block:<br/>Block-wise")

    style D fill:#ff9900,stroke:#333,color:#000

Streamciphers: werking

Twee onderdelen:

  1. Keystream generator: expandeert sleutel naar keystream (zelfde lengte als data)
  2. XOR-functie: plaintext \(\oplus\) keystream = ciphertext

Streamciphers: Belangrijk inzicht

Belangrijk

Ontvanger met zelfde sleutel → zelfde keystream → originele plaintext

Enkel dus ontvanger met zelfde sleutel kan bericht decrypteren.

De XOR functie : hart van cryptografie!

Plaintext Keystream Ciphertext
1 0 1
0 1 1
0 0 0
1 1 0

Belangrijk

Voorbeeld:

1010 \(\oplus\) 1101 = 0111 (ciphertext)

Dezelfde XOR met keystream (1101) decrypteert weer!

0111 \(\oplus\) 1101 = 1010 (originele plaintext)

Keystream generator

  • Genereert pseudo-random keystream

  • Zelfde sleutel (seed) → zelfde reeks (reproduceerbaar)

  • Onvoorspelbaar voor buitenstaanders

  • Zwakke generator → kwetsbare encryptie (bv. WEP!)

  • Gebaseerd op PRNG (Pseudo-Random Number Generator)

Middle-square: de eerste PRNG

Von Neumann (1946): eenvoudig maar krachtig idee

  1. Start met seed
  2. Kwadrateer
  3. Neem middelste cijfers → nieuw getal
  4. Herhaal

Voorbeeld (seed = 1111):

1111² = 01 2343 21  →  2343
2343² = 05 4896 49  →  4896
4896² = 23 9708 16  →  9708

Reeks: 2343, 4896, 9708, ...

Opmerking

Ondertussen onveilig (korte cycli), maar basis van alle moderne PRNGs!

PRNG in de praktijk: Random() in C

int key = 666;

Random s = new Random(key);    // Zender
Random r = new Random(key);    // Ontvanger
Random e = new Random(123);    // Eve (andere seed)
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.

RC4: streamcipher

  • Ontwikkeld door Ron Rivest (Ron’s Cipher 4)
  • Sleutel: 40 tot 2048 bits
  • Eén van de meest gebruikte streamciphers ooit (WEP, SSL/TLS)
    • Nu verouderd en onveilig, maar nog steeds een goed voorbeeld van een streamcipher

RC4 in actie

  • Twee fasen:
    1. KSA (Key Scheduling Algorithm): sleutel → werksleutel
    2. PRGA (Pseudo-Random Generation Algorithm): werksleutel → keystream

Blockciphers

%%{init: {"theme": "base", "flowchart": {"useMaxWidth": true}} }%%
graph TD
    A("Encryption/Decryption") --> B("Symmetric: 1-key,<br/>to en- and decrypt")
    A --> C("Asymmetric: 2 keys,<br/>Public key to encrypt<br/>Private key to decrypt")
    B --> D("Stream:<br/>Bit-wise")
    B --> E("Block:<br/>Block-wise")

    style E fill:#ff9900,stroke:#333,color:#000

Blockciphers

  • Plaintext opdelen in blokken (bv. 128 bits)
  • Blok per blok encrypteren
  • Laatste blok eventueel padding nodig

Intermezzo: Feistel-structuren

  • Nieuwe soort operatie (naast XOR, substitutie, transpositie): Feistel-structuur

  • Data splitsen in twee helften (L en R)

  • F-operatie op één helft → XOR met andere helft

  • Meerdere rondes herhalen

  • Elke ronde een andere subkey (via key scheduling)

Een enkele Feistel-structuur.

DES (Data Encryption Standard)

  • 1977, blokken van 64 bits, sleutel van 56 bits
  • Outdated maar belangrijk voor begrip
  • Gebruikt in bankwezen (financiële transacties)
  • Gebaseerd op IBM’s Lucifer cipher (NSA halveerde sleutellengte!)

Twee onderdelen:

  1. Versleuteling: 16 Feistel-rondes
  2. Subkey generatie: 16 subkeys uit 56-bit sleutel

DES: versleuteling

DES encryptie: 16 Feistel-structuren.

DES: stappen per ronde

  1. Initiële Permutatie (IP): bits herschikken
  2. 16 Feistel-rondes: splitsen, F-operatie, XOR
  3. Finale Permutatie (FP)

DES: De Initiële Permutatie.

DES

DES: de F-operatie

Binnenin de F-operatie.
  1. Expansie: 32 bits → 48 bits Expansie van 32 naar 48 bits.
  2. XOR met subkey (48 bits)
  3. S-boxen: 6 bits → 4 bits (substitutie) (zie volgende slide)
  4. P-box: permutatie

DES: S-boxen

  • 8 S-boxen, elk 6 bits in → 4 bits uit
  • 2 outer bits = rij, 4 inner bits = kolom

Voorbeeld: 011011 → 1001

Waarheidstabel van het S5-blok (Bron: Wikipedia).

DES

DES: subkeys maken

  • 56-bit sleutel → splitsen in 2×28 bits
  • Per ronde: bit-shift + compressie P-box → 48-bit subkey
  • 16 rondes = 16 unieke subkeys

De 16 rondes die telkens 1 subkey maken.

DES: P-boxen

  • Compressie: 56 bits → 48 bits (bits vallen weg)
  • Permutatie: bits van plek veranderen

Drie types P-Boxes.

3DES

  • DES sleutel (56 bit) te kort → 3DES (1995)
  • Sleutel tot 168 bits, compatibel met bestaande DES hardware
  • 3x DES: Encrypt → Decrypt → Encrypt (met 3 verschillende sleutels)
  • Verlengde de levensduur van DES, maar is nu ook verouderd

Opmerking

Het bankwezen gebruikt 3DES nog steeds voor o.a. Visa en Mastercard transacties.

“Tripple DES”

3DES.

DES gekraakt in de praktijk

  • 1998: Electronic Frontier Foundation bouwt Deep Crack
    • Kostprijs: $250.000
    • 1.856 custom chips
    • DES-sleutel gekraakt in dagen
    • Later (+distributed.net): < 24 uur
  • DES is dood voor gevoelige data
  • Bevestigt 3DES (1995) als juiste keuze

Deep Crack board (64 van de 1.856 chips). Bron: EFF, CC-BY 3.0.

Block cipher modes

  • Hoe decryptie toepassen op data groter dan 1 blok?
  • Zelfde plaintext-blok + zelfde sleutel = zelfde ciphertext
  • Lekt informatie! Maakt replay attacks mogelijk
  • Verschillende modes of operation bedacht om dit probleem te verhelpen.

Block cipher modes: overzicht

Mode Werking
ECB Blokken onafhankelijk (onveilig!)
CBC Output vorig blok als extra input
CFB Vergelijkbaar met CBC
OFB Blockcipher als streamcipher
CTR Teller (IV) als extra input (veel gebruikt: WPA2, IPSEC)

Block cipher modes: ECB

Electronic Codebook (ECB): elk blok onafhankelijk encrypteren

Probleem met ECB

ECB lekt patronen (Bron: Wikipedia).

Block cipher modes: CBC

Cipher Block Chaining: output van vorig blok als extra input voor volgende blok

CBC encryptie (Bron: Wikipedia).

CBC werkt met een “Initialisatie Vector” (IV)

  • Extra seed naast de sleutel → effectief steeds andere sleutel
  • Wordt ongeëncrypteerd meegestuurd (in header)
  • Goede IV-selectie algoritme is cruciaal

CBC uitgewerkt

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

Block cipher modes: CTR

  • Counter (CTR): teller (IV) als extra input voor blockcipher (“we encrypten de teller”)
    • Nuttig voor parallelle verwerking (encryptie van blokken onafhankelijk van elkaar)
    • Gebruikt in WPA2, IPSEC, … (bv Netflix streaming)

CTR mode (Bron: Wikipedia).

AES (Advanced Encryption Standard)

  • Meest recente en meest gebruikte symmetric block cipher
  • 2001: nieuwe wereldwijde standaard
  • Gebaseerd op Rijndael (Belgisch! Door Vincent Rijmen & Joan Daemen)
  • Blokken van 128 bits, sleutels tot 256 bits

AES: werking in het kort

  • Key expansie: unieke sleutel per ronde
  • Meerdere rondes met:
    • Substituties (bytes)
    • Transposities (rijen/kolommen)
    • XOR met round key
  • XOR = wederom de feitelijke encryptie

AES encryptie

(Bron: Wikipedia).

Conclusie (deel 1)

  • Cryptografie beschermt vertrouwelijkheid (CIA) via encryptie met geheime sleutels
  • Kerckhoffs’ principe: de sleutel is het geheim, niet het algoritme
  • Symmetrische encryptie: één sleutel, snel, maar sleuteluitwisseling is moeilijk
  • Stream- (RC4) vs blockciphers (DES, AES) met verschillende modes (ECB, CBC, CTR)
  • AES is de huidige standaard — Belgisch en ongebroken!

Belangrijk

Langere sleutels + sterke algoritmes = betere bescherming. Maar sleuteluitwisseling blijft het grote probleem → asymmetrische crypto biedt de oplossing!

Up next?

%%{init: {"theme": "base", "flowchart": {"useMaxWidth": true}} }%%
graph TD
    A("Encryption/Decryption") --> B("Symmetric: 1-key,<br/>to en- and decrypt")
    A --> C("Asymmetric: 2 keys,<br/>Public key to encrypt<br/>Private key to decrypt")

    style C fill:#ff9900,stroke:#333,color:#000