Cryptografie

Cyberboswachters

Tim Dams

Deze cursus werd gemaakt met hulp van AI-assistentie. Sommige afbeeldingen zijn door AI gegenereerd.

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 + de rol van IV/nonce
  • hashing, digitale handtekeningen en certificaten situeren
  • de werking van HTTPS/TLS beschrijven + de impact van een MITM-aanval inschatten

Cryptografie

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.

CIA

Confidentiality

Enkel leesbaar voor geautoriseerde partijen.

Focus van dit hoofdstuk, via encryptie.

Integrity

Niet gewijzigd tijdens de overdracht.

Availability

Toegankelijk wanneer nodig.

Ook integrity los je vaak op met cryptografische technieken, zoals hashing en digitale handtekeningen.

Encryptie en decryptie

Data versleutelen (encrypteren) met een geheime sleutel. Zonder sleutel is de data onleesbaar.

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

Enkele termen

Plaintext
de originele data
Ciphertext
de versleutelde data
Cryptanalyse
ontcijferen zonder de sleutel
Cryptografie
encryptiesystemen ontwerpen
Cryptologie
cryptografie + cryptanalyse samen

Encryptie doorheen de tijd

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.

Crypto volgens m’n kids

Crypto volgens m’n kids, deel 2

Classificatie van cryptosystemen

Actie op de data

  • Substitutie: teken door een ander teken vervangen
  • Transpositie: teken op een andere plek zetten
  • Product: combinatie van beide

Aantal sleutels

  • 1 sleutel: symmetrisch (private encryption)
  • 2 sleutels: asymmetrisch (public encryption)

Verwerking

  • Blok: blok per blok
  • Stream: teken per teken

August Kerckhoffs

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

Het algoritme mag publiek zijn

Publiek algoritme

  • Getest door duizenden experts
  • Kans op (bewuste) fouten veel kleiner
  • De meest gebruikte algoritmes zijn publiek

Security through obscurity

  • Geheim, proprietary systeem
  • Geheimhouden is geen garantie op veiligheid
  • Vals gevoel van veiligheid

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.

Sleutels kraken Cryptanalyse

Ontcijferen zonder de sleutel te kennen.

Bruteforce

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.

Hoe lang duurt bruteforcen?

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

GeForce GTX 1080, ~30M pogingen/s Bruteforce: de tabel

# 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.

Dictionary attack

Bruteforce slimmer maken: test sleutels uit een woordenboek.

Woordenboek

De meest gebruikte wachtwoorden: 123456, password, qwerty, master, …

Variaties

Tools zoals John The Ripper testen ook god1, god2, …

Nooit gebruiken

Wachtwoorden uit bekende lijsten, of varianten ervan.

Check zelf: SecLists

Soorten cryptanalytische aanvallen

Afhankelijk van de informatie die de cryptanalist heeft:

Enkel ciphertext

Alleen versleutelde data. Het beste scenario voor cyberboswachters.

Gekende plaintext

Zowel de ciphertext als de bijhorende plaintext zijn gekend.

Gekozen plaintext

De analist kiest de plaintext en ziet de resulterende ciphertext.

Gekozen ciphertext

De analist kiest de ciphertext en ziet de resulterende plaintext.

Hoe kraak je deze kluis?

Een zware kluisdeur in een kantoor, en vooraan een rode post-it op het computerscherm.

De beste “cryptanalyse” is géén cryptanalyse

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

Wat ligt hier te wachten?

Een archief vol verzegelde kluizen die geduldig worden opgeslagen, terwijl achter een glazen wand een vreemde machine gebouwd wordt.

Quantum-computers en crypto

Bruteforce versneld

Quantum-computers kunnen bruteforce drastisch versnellen. Alle huidige encryptie is potentieel kwetsbaar.

Store now, decrypt later

Veel veiligheidsdiensten hanteren die strategie al jaren: nu bewaren, later ontcijferen.

Post-quantum

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!

uclftr.com

Substitutie en transpositie De eerste algoritmes

Onderverdeeld naar actie

Substitutie

Teken door een ander teken vervangen.

Bv. Caesar

Transpositie

Teken op een andere plek zetten.

Bv. Scytale

Combinatie

Substitutie én transpositie.

Bv. AES

Handige tool om crypto te leren: CrypTool

Substitutie Caesar encryptie

Sleutel = getal 1-25: iedere letter schuift evenveel plaatsen op. A=0, B=1, … Z=25

Sleutel 3

AD, BE, … en ZC (overflow: terug naar voor)

Rot13

Ook wel Rot (rotatie) genoemd: Rot4, Rot13, …

Rot13 2x toepassen = originele tekst.

Caesar met de modulo-operator

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

Voorbeeld: Y met sleutel 7

  1. Y = 24
  2. 24 + 7 = 31
  3. 31 % 26 = 5
  4. 5 = F

Caesar voorbeeld

Caesar wiel

Andere manier om Caesar encryptie te visualiseren

Caesar kraken

Bruteforce

Slechts 25 mogelijke sleutels.

Frequentieanalyse

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.

Frequentieanalyse

Frequentie-analyse Nederlandstalige tekst (cijfers: Wikipedia).

Substitutie 2.0 Vigenère

Caesar

  • Iedere letter krijgt dezelfde shift
  • Daardoor werkt frequentieanalyse

Vigenère (16e eeuw)

  • Een sleutelwoord i.p.v. één getal
  • Iedere sleutelletter = shift voor de bijhorende plaintext-letter
  • Sleutelwoord herhaald over de tekst: meerdere Caesars na elkaar

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 e → een andere letter (R, S, G, S)
  • Frequentieanalyse werkt niet meer

Tabula recta

Le chiffre indéchiffrable

Vigenère heette eeuwenlang onkraakbaar.

In de 19e eeuw kraakte Kasiski het: eens je de sleutellengte kent, heb je meerdere parallelle Caesars.

Transpositie Scytale encryptie

Oude Grieken. Sleutel = aantal vlakken van de scytale.

  1. Wikkel het lint rond de stok
  2. Elk volgend teken komt op een andere zijde
  3. Lees per zijde uit: dat is de ciphertext

Een authentieke scytale (Bron: Wikipedia).

Scytale: voorbeeld

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

Ciphertext na afwikkelen:

Combinatie: substitutie + transpositie

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.

Zwaarder geschut Moderne cryptosystemen

Klassieke ciphers (Caesar, Vigenère, scytale) zijn ondertussen allemaal gekraakt.

Wat maakt crypto “modern”?

Grote sleutels

128-256 bits: bruteforce wordt onhaalbaar.

Vele rondes

Substitutie en transpositie, telkens opnieuw.

Publiek getest

Kerckhoffs in actie: geen security through obscurity.

Wisselende subkeys

Per ronde een andere subkey: Vigenère op steroïden.

Families volgens aantal sleutels

Encryptie splitst in symmetrisch (1 sleutel om te encrypteren en te decrypteren) en asymmetrisch (publieke sleutel om te encrypteren, private om te decrypteren). Symmetrisch is gemarkeerd.

We starten met symmetrisch, de oudste van de twee.

Symmetrische encryptie

Eén sleutel voor encryptie én decryptie: zender en ontvanger gebruiken dezelfde sleutel.

Oudste vorm van encryptie: AES DES 3DES RC4 Blowfish IDEA

Sleuteloverdracht: het grote probleem

Zender en ontvanger hebben dezelfde sleutel nodig. Hoe wissel je die veilig uit?

Via asymmetrische encryptie

Dat systeem kan wél veilig sleutels uitwisselen (zie later).

Via een ander beveiligd kanaal

Fysiek afgeven, zeggen, via een ander kanaal, …

Block- en streamciphers

Streamcipher

  • Teken per teken
  • Sneller
  • Bv. RC4

Blockcipher

  • Blok per blok (bv. 128 bits)
  • Trager
  • Bv. AES, DES, 3DES

Symmetrisch Streamciphers

Teken per teken versleutelen.

Waar staan we?

Encryptie splitst in symmetrisch (1 sleutel om te encrypteren en te decrypteren) en asymmetrisch (publieke sleutel om te encrypteren, private om te decrypteren); symmetrisch splitst in streamciphers en blockciphers. Streamciphers zijn gemarkeerd.

Streamciphers: werking

Keystream generator
expandeert de sleutel naar een keystream, even lang als de data
XOR-functie
plaintext \(\oplus\) keystream = ciphertext

Belangrijk inzicht

Zelfde sleutel → zelfde keystream → originele plaintext.

Enkel een ontvanger met dezelfde sleutel kan het bericht dus decrypteren.

De XOR-functie: hart van cryptografie!

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

Keystream generator

Genereert een pseudo-random keystream, gebaseerd op een PRNG (Pseudo-Random Number Generator).

Seed

Zelfde sleutel (seed) → zelfde reeks. Reproduceerbaar.

Onvoorspelbaar

Voor buitenstaanders is de reeks niet te voorspellen.

Zwakke generator

kwetsbare encryptie (bv. WEP!)

Von Neumann, 1946 Middle-square: de eerste PRNG

  1. Start met een seed
  2. Kwadrateer
  3. Neem de 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, ...

Ondertussen onveilig (korte cycli), maar de basis van alle moderne PRNG’s.

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.

Ron’s Cipher 4 RC4: streamcipher

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.

RC4 in actie

  1. KSA (Key Scheduling Algorithm): sleutel → werksleutel
  2. PRGA (Pseudo-Random Generation Algorithm): werksleutel → keystream
  3. XOR van de keystream met de plaintext

Symmetrisch Blockciphers

Blok per blok versleutelen.

Waar staan we?

Encryptie splitst in symmetrisch (1 sleutel om te encrypteren en te decrypteren) en asymmetrisch (publieke sleutel om te encrypteren, private om te decrypteren); symmetrisch splitst in streamciphers en blockciphers. Blockciphers zijn gemarkeerd.

Blockciphers

  1. Plaintext opdelen in blokken (bv. 128 bits)
  2. Blok per blok encrypteren
  3. Laatste blok eventueel opvullen: padding

Intermezzo Feistel-structuren

Een nieuwe soort operatie, naast XOR, substitutie en transpositie:

  1. Data splitsen in twee helften (L en R)
  2. F-operatie op één helft
  3. Resultaat XOR met de andere helft
  4. Meerdere rondes, elk met een andere subkey (via key scheduling)

Een enkele Feistel-structuur.

Data Encryption Standard DES

1977

standaard

64 bits

per blok

56 bits

sleutel

  • Outdated, maar belangrijk voor begrip
  • Gebruikt in het bankwezen (financiële transacties)
  • Gebaseerd op IBM’s Lucifer cipher: de NSA halveerde de sleutellengte!

DES: hoe werkt het?

Versleuteling

16 Feistel-rondes die de data blok per blok versleutelen.

Subkeys maken

16 subkeys uit de 56-bit sleutel, één per ronde.

DES: versleuteling

DES encryptie: 16 Feistel-structuren.

DES: stappen

  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.

Outer bits (eerste + laatste)
rij
Inner bits (middelste 4)
kolom

Voorbeeld: 011011 → 1001

Waarheidstabel van het S5-blok.

DES

DES: subkeys maken

  1. 56-bit sleutel splitsen in 2 × 28 bits
  2. Per ronde: bit-shift
  3. 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 veranderen van plek

Drie types P-Boxes.

3DES

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.

Triple DES

3DES.

1998, Electronic Frontier Foundation DES gekraakt in de praktijk

Deep Crack kraakt een DES-sleutel in dagen.

$250.000

kostprijs

1.856

custom chips

< 24 uur

later, samen met distributed.net

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

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.

Blockciphers Block cipher modes

Hoe versleutel je data die groter is dan één blok?

Het probleem

Zelfde plaintext-blok + zelfde sleutel = zelfde ciphertext.

Dat lekt informatie en maakt replay attacks mogelijk. Daarom bedacht men verschillende modes of operation.

Block cipher modes: overzicht

ECB
blokken onafhankelijk (onveilig!)
CBC
output van het vorige 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

ECB: elk blok wordt apart met dezelfde sleutel geëncrypteerd, twee gelijke plaintext-blokken geven twee gelijke ciphertext-blokken.

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: de IV of de ciphertext van het vorige blok wordt met de plaintext ge-XOR'd vóór de encryptie.

CBC werkt met een “Initialisatie Vector” (IV)

Extra seed

Naast de sleutel. Zo werk je effectief steeds met een andere sleutel.

Onversleuteld mee

De IV gaat ongeëncrypteerd mee in de header. Dat is geen probleem.

IV-selectie

Een goed 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

Herhalingen in de ciphertext zeggen niets meer over herhalingen in de plaintext.

Block cipher modes: CTR

Counter (CTR): de blockcipher encrypteert een teller (IV) als extra input.

  • Blokken onafhankelijk van elkaar → parallel verwerken
  • Gebruikt in WPA2 IPSEC, … (bv. Netflix-streaming)

CTR mode: encryptie en decryptie.

Advanced Encryption Standard AES

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.

AES: werking in het kort

  1. Key expansie: unieke sleutel per ronde
  2. Substitutie van bytes
  3. Transpositie van rijen en kolommen
  4. XOR met de round key

Stap 2 tot 4 herhaal je in meerdere rondes.

De XOR is ook hier de feitelijke encryptie.

AES encryptie

Eén ronde van AES.

Conclusie (deel 1)

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

Sleuteluitwisseling blijft het grote probleem.

Langere sleutels en sterke algoritmes geven betere bescherming. De oplossing voor de sleuteluitwisseling: asymmetrische crypto.

Up next?

Encryptie splitst in symmetrisch (1 sleutel om te encrypteren en te decrypteren) en asymmetrisch (publieke sleutel om te encrypteren, private om te decrypteren). Asymmetrisch is gemarkeerd.