Summary
# Algemene principes en richtlijnen voor cryptografie
Dit document geeft algemene principes en richtlijnen voor het correct toepassen van cryptografie, met de nadruk op het vermijden van veelvoorkomende fouten en misvattingen [1](#page=1) [4](#page=4).
## 1. Algemene principes en richtlijnen voor cryptografie
### 1.1 De rol van cryptografie in beveiliging
Cryptografie is een cruciaal onderdeel van beveiliging, maar het is zelden de enige oplossing voor een probleem. Het correct toepassen van cryptografische technieken vereist een diepgaand begrip van zowel de technologie als het specifieke beveiligingsprobleem [1](#page=1) [3](#page=3).
### 1.2 Afgeleide beveiligingseisen
Voordat cryptografie wordt toegepast, is het essentieel om de beveiligingseisen te definiëren. Dit omvat het identificeren van de dreigingsagent, de impact op vertrouwelijkheid, integriteit, beschikbaarheid, authenticatie en niet-repudiatie, evenals de zakelijke impact (financieel, reputatie, naleving, privacy) [2](#page=2).
### 1.3 Conclusie met noodzakelijke beveiligingsmaatregelen
Na het definiëren van de eisen, moeten de noodzakelijke beveiligingsmaatregelen worden vastgesteld. Cryptografie alleen is nooit de volledige oplossing [3](#page=3).
## 2. Richtlijnen voor het toepassen van cryptografie
### 2.1 Niet zelf crypto ontwikkelen ("Don't roll your own crypto")
Het is sterk afgeraden om eigen cryptografische algoritmen of implementaties te ontwikkelen. Kies in plaats daarvan voor bestaande, goed geteste crypto tools en bibliotheken [5](#page=5).
* **Kies de juiste crypto tools**: Gebruik bestaande oplossingen zoals SSL/TLS, PGP, of hoogwaardige cryptografische bibliotheken.
* **Gebruik bestaande tools**: Maak gebruik van gestandaardiseerde protocollen en implementaties.
* **Hoog-niveau bibliotheken**: Indien bestaande tools niet volstaan, gebruik dan een hoog-niveau bibliotheek bedoeld voor productieomgevingen, zoals PyCryptodome, Cryptlib, Keyczar, GPGME, NaCL of Cryptography.io [5](#page=5).
* **Laag-niveau bibliotheken**: Als een hoog-niveau bibliotheek niet mogelijk is, overweeg dan een laag-niveau bibliotheek zoals OpenSSL, CryptoAPI of JCE [5](#page=5).
* **Vermijd eigen variaties**: Zelfgemaakte aanpassingen verhogen de complexiteit en introduceren vaak kwetsbaarheden. Meer hashes betekent niet noodzakelijkerwijs betere hashes [5](#page=5).
### 2.2 Gebruik encryptie nooit zonder berichtauthenticatie
Encryptie alleen garandeert geen integriteit of authenticiteit. Gebruik bij voorkeur geauthenticeerde encryptiemodi [6](#page=6).
* **Geauthenticeerde encryptiemodi**: CCM, GCM, EAX, CWC, OCB [6](#page=6).
* **Gesplitste authenticatie en encryptie**: Versleutel met een encryptiemethode (bv. AES-CBC) en authenticeer met een aparte methode (bv. AES-CMAC, SHA256-HMAC) [6](#page=6).
### 2.3 Wees voorzichtig bij het samenvoegen van strings voor hashing
Het simpelweg samenvoegen van strings (S||T) en deze hashen kan leiden tot kwetsbaarheden waarbij een aanvaller andere strings A en B kan construeren met dezelfde hash [7](#page=7).
* **Kwetsbaar voorbeeld**: Het samenvoegen van "customer id" en "customer name" kan leiden tot onverwachte resultaten als de data wordt opgedeeld en samengevoegd: `123` + `"johan"` kan hetzelfde zijn als `12` + `"3johan"` [7](#page=7).
* **Betere methoden**: Gebruik `H(length(S)||S||T)` of `H(H(S)||H(T))` om dit te voorkomen [7](#page=7).
### 2.4 Zorg voor voldoende entropie bij het initialiseren van de random generator
Gebruik cryptografisch veilige pseudorandom nummergeneratoren (PRNG's) voor kritieke toepassingen zoals het genereren van sleutels en IV's/nonces [8](#page=8).
* **Vermijd onveilige generatoren**: Gebruik geen standaardfuncties zoals `rand()`, `random()`, `drand48()` [8](#page=8).
* **Vermijd tijd als seed**: Gebruik de tijd van de dag niet als seed, omdat deze voorspelbaar is. `srand(time(NULL))` is zeer onveilig [8](#page=8).
* **Goede seeding**: Gebruik 128 bits aan echte willekeurige getallen, bijvoorbeeld uit `/dev/urandom`, `CryptGenRandom` of vergelijkbare bronnen [8](#page=8).
* **Platformspecifieke aanbevelingen**:
* Java: Gebruik `SecureRandom`, niet `Random` [8](#page=8).
*.NET: Gebruik `System.Security.Cryptography.RandomNumberGenerator`, niet `System.Random` [8](#page=8).
* Python: Gebruik `random.SystemRandom`, `os.urandom` of de `pycryptodome` variatie, niet de standaard `random` module [8](#page=8).
* **Vermijd lineaire congruentiële generatoren**: Deze zijn kwetsbaar voor analyse [8](#page=8).
### 2.5 Denk na over operationele modi, nonces en initialisatievectoren (IV's)
Het correct kiezen en gebruiken van operationele modi en IV's is cruciaal voor de veiligheid van versleuteling [9](#page=9).
* **Stream ciphers**: Het hergebruiken van een IV in CTR of OFB modus is catastrofaal [9](#page=9).
* **CBC modus**: Het hergebruiken van een IV in CBC modus kan leiden tot herstel van plaintext [9](#page=9).
* **ECB modus**: Gebruik nooit een blokcijfer met ECB modus. ECB is een standaard in sommige cryptobibliotheken [9](#page=9).
* **Standaardinstellingen vermijden**: Vertrouw niet blindelings op standaardinstellingen van bibliotheken (bv. AES-ECB is een veelvoorkomende fout in implementaties) [9](#page=9).
* **Geauthenticeerde encryptiemodi**: GCM, EAX, OCB worden aanbevolen [9](#page=9).
* **Sleutelencryptie**: Gebruik gespecialiseerde modi zoals Key Wrap (KW) voor het versleutelen van sleutels [9](#page=9).
### 2.6 Padding
Padding is essentieel voor het correct functioneren van sommige cryptografische algoritmen, met name RSA [10](#page=10).
* **PKCS#1 v1.5 is onveilig**: RSA encryptie met padding gedefinieerd in PKCS#1 v1.5 is sinds 1998 bekend als onveilig (Bleichenbacher-aanval) en wordt nog steeds gebruikt [10](#page=10).
* **Foutmeldingen als lek**: Foutmeldingen bij incorrecte padding kunnen informatie lekken die bruikbaar is voor aanvallen [10](#page=10).
* **OAEP aanbeveling**: Gebruik OAEP (Optimal Asymmetric Encryption Padding) in plaats van PKCS#1 v1.5 voor RSA [10](#page=10).
* **Symmetrische encryptie**: Voor symmetrische encryptie hangt de noodzaak van padding af van de modus (bv. CTR/GCM vereisen geen padding) [10](#page=10).
### 2.7 Gebruik niet dezelfde sleutel voor verschillende doeleinden
Een cryptografische sleutel moet slechts voor één specifiek doel worden gebruikt. Hergebruik kan leiden tot subtiele aanvallen [11](#page=11).
* **Encryptie en authenticatie sleutels**: Moeten verschillend zijn [11](#page=11).
* **Tweerichtingssleutels**: Sleutels voor beide communicatierichtingen moeten verschillend zijn. Het gebruik van dezelfde sleutel in beide richtingen kan replay-aanvallen faciliteren [11](#page=11).
* **Sleutelgebruik op meerdere apparaten**: Gebruik een sleutel niet op meerdere apparaten tegelijk, omdat dit kan leiden tot diefstal van de sleutel uit één van de apparaten [11](#page=11).
### 2.8 Kerckhoffs' Principe
De beveiliging van een cryptosysteem mag niet afhankelijk zijn van de geheimhouding van het algoritme zelf. Het systeem moet veilig zijn, zelfs als alles behalve de sleutel publiek bekend is. Dit staat bekend als "security by obscurity" en is een principieel onjuiste benadering [12](#page=12).
### 2.9 Opslaan van wachtwoorden
Het correct opslaan van wachtwoorden is cruciaal, vooral bij een compromittering van de server [13](#page=13).
* **Threat model**: Ga ervan uit dat de server en de code erop gecompromitteerd kunnen zijn [13](#page=13).
* **Wachtwoord-gebaseerde sleutelafleiding (PBKDF)**: Gebruik PBKDF2 of een vergelijkbare functie met voldoende iteraties voor het afleiden van een master password of encryptiesleutel [13](#page=13) [15](#page=15).
* **Hash functie en salt**: Gebruik een hash functie met een adequate salt en voldoende iteraties om rainbow table aanvallen te bemoeilijken [13](#page=13).
* **Dynamische salt**: Gebruik nooit een vaste salt [13](#page=13).
* **Digest grootte**: De digest grootte moet hoog genoeg zijn (bv. SHA256, SHA512) om botsingen (collisions) te ontmoedigen [13](#page=13).
* **Niet-performante functies**: Voor wachtwoordopslag moet de hash functie juist *niet* performant zijn, in tegenstelling tot standaard cryptografische hash functies die ontworpen zijn voor efficiëntie [13](#page=13).
* **Iteraties en salt voor PBKDF2**:
* Aantal iteraties: Essentieel (bv. 10.000 of 100.000). Een default van 1000 (in 2000) is onvoldoende [15](#page=15).
* Hash functie: Gebruik SHA-512 of SHA-256 [15](#page=15).
* Salt: Gebruik een unieke 64-bit salt voor elk wachtwoord [15](#page=15).
### 2.10 Vermijd het gebruik van wachtwoorden als encryptiesleutels
Wachtwoorden hebben doorgaans onvoldoende entropie om offline sleutelzoekaanvallen te weerstaan. Als toch een wachtwoord-gebaseerd systeem vereist is, gebruik dan een geschikte methode zoals PBKDF2 om brute-force aanvallen te vertragen [15](#page=15).
### 2.11 Gebruik veilige algoritmen, modi en sleutellengtes
Kies voor cryptografische algoritmen, operationele modi en sleutellengtes die als veilig worden beschouwd volgens actuele standaarden en aanbevelingen [17](#page=17).
### 2.12 Stream ciphers in schijfencryptie
Gebruik geen stream ciphers voor schijfencryptie. Stream ciphers kunnen eenvoudig gemanipuleerd worden zonder dat dit gedetecteerd wordt door de manier waarop ze plaintext transformeren (XOR met een random stream) [20](#page=20).
* **Alternatief**: Gebruik een blokcijfer met berichtintegriteit, zoals XTS-modus [20](#page=20).
* **Malleabiliteit**: De malleabiliteit van een stream cipher moet altijd in overweging worden genomen [20](#page=20).
### 2.13 Configuratie van cryptografie in applicaties
Het configureren van cryptografie is complex, zelfs bij het gebruik van bestaande bibliotheken [24](#page=24).
* **BetereCrypto.org**: Deze website biedt gedetailleerd, direct bruikbaar advies voor het configureren van cryptografie, inclusief aanbevolen cipher suites die een balans zoeken tussen maximale veiligheid en compatibiliteit [24](#page=24).
### 2.14 Hardware Security Module (HSM)
Hardware Security Modules (HSM's) bieden een hoog niveau van beveiliging voor cryptografische sleutels en operaties [26](#page=26).
* **FIPS 140-2 certificering**: HSM's voldoen vaak aan FIPS 140-2 (soms niveau 3 of 4) [26](#page=26).
* **Beschermde keystore**: Sleutels worden opgeslagen in fysiek beschermd, tamper-bestendig geheugen [26](#page=26).
* **Fysieke en logische bescherming**: HSM's bieden zowel fysieke als logische beveiliging voor sleutels [26](#page=26).
* **Sleutels verlaten het apparaat niet**: Cryptografische operaties worden binnen de HSM uitgevoerd en sleutels verlaten het apparaat niet via de API (bv. PKCS#11 / Cryptoki) [26](#page=26).
* **Transactiesnelheid en ontwerp**: Ontworpen voor snelheid en veiligheid [26](#page=26).
* **Toepassingen gescheiden van crypto**: HSM's scheiden cryptografische operaties van de applicatie [26](#page=26).
* **Fysieke beveiliging**: Sleutels worden gegenereerd en opgeslagen in een inbraakbestendig, tamper-evident apparaat met sterke toegangscontroles [26](#page=26).
* **Verlies en back-up**: Zelfs als een HSM wordt gestolen, werkt deze buiten zijn omgeving niet. Back-up oplossingen zijn beschikbaar, vaak vereist voor beschikbaarheid (twee HSM's) [26](#page=26).
* **SoftHSM**: Een open-source alternatief dat architecturaal nuttig kan zijn, maar niet de fysieke bescherming van een hardwarematige HSM biedt [26](#page=26).
* **Specificaties**: Omvatten random number generation, symmetrische en asymmetrische cryptografie. Hashing is vaak op de host geïmplementeerd [29](#page=29).
* **Threat model**: Sleutels kunnen gecompromitteerd worden door gecompromitteerde hosts, ontevreden personeel of via wiskundige aanvallen. HSM's bieden de veiligste plek om sleutels te bewaren, met duidelijke controle over waar sleutels zich bevinden [30](#page=30).
### 2.15 Sleutelbeheer (Key Management)
Sleutelbeheer omvat het beheren van de volledige levenscyclus van cryptografische sleutels [31](#page=31) [32](#page=32).
* **Proces**: Beheer van cryptografische sleutels voor een cryptosysteem, inclusief generatie, encryptie, decryptie, bescherming, opslag, uitwisseling, vervanging en gebruik [32](#page=32).
* **Governance**: Focust op het beheer van sleutels vanaf creatie tot activering, gebruik, intrekking en vernietiging [32](#page=32).
* **KMIP (Key Management Interoperability Protocol)**: Een client/server communicatieprotocol voor het opslaan en beheren van sleutels, certificaten en geheimen. KMIP maakt gecentraliseerd beheer van sleutels over heterogene producten mogelijk [32](#page=32).
* **PKCS#11 (Cryptoki)**: Een interface die cryptografisch materiaal veilig in HSM's kan houden. Het heeft geen functie om sleutelmateriaal eruit te halen, in tegenstelling tot KMIP [32](#page=32).
### 2.16 Combinatie van HSM en sleutelbeheer
HSM's kunnen worden gebruikt voor gecentraliseerde cryptografische operaties en opslag, terwijl Key Management zorgt voor gecentraliseerd sleutelgovernance [33](#page=33).
### 2.17 Post-Quantum Cryptografie (PQC)
Quantumcomputers vormen een bedreiging voor veel van de huidige asymmetrische cryptografie (gebaseerd op factorisatie, discrete logaritmen en elliptische curves) [47](#page=47).
* **Risico's voor huidige crypto**:
* Asymmetrische cryptografie (RSA, Diffie-Hellman, Elliptic Curve Cryptography) is kwetsbaar [47](#page=47) [50](#page=50).
* Symmetrische cryptografie verliest ongeveer de helft van zijn sterkte (n/2 in plaats van n) door Grover's zoekalgoritme [47](#page=47).
* Hashfuncties verliezen de helft van hun pre-image sterkte (n/2 in plaats van n) en een deel van hun collision sterkte (n/3 in plaats van n/2) [47](#page=47).
* **Kwantum-resistente cryptografie**:
* Lattice-based cryptography (bv. NTRUEncrypt) [47](#page=47).
* Code-based cryptography (bv. McEliece encryption) [47](#page=47).
* Multivariate cryptography (bv. Hidden Fields Equations, UOV, Rainbow) [47](#page=47).
* Hash-based cryptography (bv. Lamport, WOTS, XMSS, SPHINCS). Hash-based cryptografie is inherent kwantum-resistent als de onderliggende hash functie cryptografisch veilig is [47](#page=47) [48](#page=48).
* **NIST PQC Competitie**: Een doorlopend proces om nieuwe standaarden voor post-quantum cryptografie te selecteren [47](#page=47).
* **Uitdagingen PQC**: Grote sleutelgroottes (bv. McEliece kan 100 KB tot meerdere MB zijn) en handtekeninggroottes zijn een belangrijk probleem [47](#page=47) [52](#page=52).
* **AES en hashfuncties**: AES wordt als kwantum-veilig beschouwd door de sleutellengte te vergroten. Goede hash functies met voldoende digest grootte worden ook als kwantum-veilig beschouwd [50](#page=50).
* **Wanneer overschakelen?**: De standaardselectie is voorzien rond 2024, met een implementatieperiode van 3-12 jaar. Als data langer dan 10 jaar vertrouwelijk moet blijven, is het nu tijd om te beginnen met de voorbereidingen, zelfs zonder definitieve standaard [51](#page=51).
### 2.18 Blockchain en Quantum
Hashes, hashketens en Merkle trees zijn (los van sleutelgroottes) niet direct beïnvloed door kwantumcomputers. ECDSA-signaturen echter wel, maar er zijn alternatieven zoals hash-gebaseerde signaturen [52](#page=52).
* **Bitcoin en PQC**: Bitcoin is mogelijk minder kwetsbaar omdat publieke sleutels pas worden onthuld bij gebruik, en er dient altijd een nieuwe adres te worden gebruikt. De kwantumdreiging is hier mogelijk minder acuut dan in andere cryptografie-toepassingen [50](#page=50) [52](#page=52).
### 2.19 Keuze van cryptografische bibliotheken
De keuze voor een cryptografische bibliotheek is belangrijk, en gebruiksvriendelijkheid speelt een grote rol [48](#page=48).
* **Verifieerde bibliotheken**: HACL\* is een verifieerde, snelle C cryptografische bibliotheek die moderne cryptografische primitieven implementeert en is geverifieerd op geheugenveiligheid en bescherming tegen timing side-channels [47](#page=47) [55](#page=55).
* **Botan2.x**: Een andere belangrijke bibliotheek die een substantiële herontwikkeling heeft ondergaan [47](#page=47).
* **OpenSSL**: Bekend maar ook berucht [47](#page=47).
* **wolfSSL / mbedTLS**: Geschikt voor embedded applicaties en resource-beperkte omgevingen [47](#page=47) [55](#page=55).
* **Andere bibliotheken**: Libgcrypt, LibreSSL, JCA/JCE, Cryptography.io, PyCryptodome, Libsodium, Bouncy Castle, Crypto++ [47](#page=47).
* **Python**: PyCrypto is verouderd en wordt afgeraden; PyCryptodome is de opvolger [55](#page=55).
* **Evaluatie van bibliotheken**: Controleer wie verantwoordelijk is voor de bibliotheek, interoperabiliteit, mogelijke kwetsbaarheden, en of de standaardparameters optimaal zijn [58](#page=58).
### 2.20 Belang van Usability
Usability (gebruiksvriendelijkheid) is een cruciale factor bij de keuze en implementatie van cryptografische API's [48](#page=48).
### 2.21 Vervolg na de cursus
Voor diepgaandere kennis en oefening zijn er online bronnen beschikbaar zoals cryptohack challenges, online decryptietools en tools voor factoring [65](#page=65).
---
# Toekomstige bedreigingen door kwantumcomputing voor cryptografie
Dit onderwerp onderzoekt de impact van kwantumcomputers op bestaande cryptografische algoritmen en bespreekt de noodzaak van post-kwantum cryptografie [35](#page=35).
### 2.1 De impact van kwantumcomputers op cryptografie
Kwantumcomputers vormen een potentiële bedreiging voor de huidige cryptografische algoritmen, voornamelijk door hun vermogen om bepaalde wiskundige problemen exponentieel sneller op te lossen dan klassieke computers [36](#page=36).
#### 2.1.1 Shor's algoritme en asymmetrische cryptografie
Shor's algoritme is een van de meest significante kwantumalgoritmen met betrekking tot cryptografie. Het kan de factorisatie van grote getallen en het berekenen van discrete logaritmen efficiënt uitvoeren. Dit heeft directe implicaties voor asymmetrische cryptografiesystemen zoals RSA en Elliptic Curve Cryptography (ECC), die gebaseerd zijn op de moeilijkheid van deze problemen [36](#page=36).
* **RSA en factorisatie:** Shor's algoritme kan grote getallen ontbinden in hun priemfactoren, wat de basis vormt van de beveiliging van RSA [36](#page=36).
* **ECC en discrete logaritmen:** Evenzo kan Shor's algoritme het discrete logaritme probleem oplossen, wat de beveiliging van ECC ondermijnt. De kwetsbaarheid van ECC voor kwantumcomputers is zelfs groter dan die van RSA [36](#page=36) [38](#page=38).
Het breken van een 256-bits ECDSA-sleutel vereist naar schatting 1500 qubits. Het breken van RSA-3072 zou 6147 qubits vereisen, en RSA-2048 zou 4096 qubits vereisen [38](#page=38).
> **Tip:** Hoewel de ontwikkeling van kwantumcomputers langzaam verloopt, is het cruciaal om proactief te handelen en over te stappen op post-kwantum cryptografie om toekomstige kwetsbaarheden te voorkomen [38](#page=38).
#### 2.1.2 Grover's algoritme en symmetrische cryptografie
Grover's algoritme biedt een kwadratische versnelling voor het doorzoeken van ongestructureerde databases. Hoewel dit geen exponentiële doorbraak is zoals bij Shor's algoritme, heeft het wel invloed op symmetrische cryptografie en hashfuncties [36](#page=36).
* **Symmetrische encryptie:** Grover's algoritme kan de effectieve sleutellengte van symmetrische encryptie halveren. Dit betekent dat een AES-128 encryptie in een kwantumwereld vergelijkbaar is met een AES-64 in een klassieke wereld. Om dezelfde beveiliging te behouden, moeten de sleutellengtes van symmetrische algoritmen verdubbeld worden. Bijvoorbeeld, AES-256 biedt de equivalentie van AES-128 in de niet-kwantum wereld [36](#page=36) [40](#page=40).
* **Hashfuncties:** Het vinden van een aanvaring in hashfuncties (het vinden van twee verschillende inputs die dezelfde hashoutput produceren) wordt ook versneld door Grover's algoritme. Dit vereist een verdubbeling van de hashlengte [36](#page=36).
#### 2.1.3 Andere kwantumalgoritmen
Naast Shor's en Grover's algoritme zijn er diverse andere kwantumalgoritmen die relevant kunnen zijn, hoewel hun cryptografische impact momenteel minder duidelijk is:
* **Algoritmen gebaseerd op de Quantum Fourier Transform (QFT):** Zoals Shor's en Simon's algoritmen, die gericht zijn op het vinden van oplossingen voor vergelijkingen door gebruik te maken van de algebraïsche structuur van functies [36](#page=36).
* **Amplitude amplificatie en schatting:** Deze omvatten algoritmen zoals Grover's, die gebruikt worden voor zoeken, tellen van oplossingen, en optimalisatieproblemen. Adiabatische optimalisatie is een variant die op een adiabatische kwantumcomputer kan worden uitgevoerd [36](#page=36).
* **Quantum walks:** Gebaseerd op de gesimuleerde coherente kwantumevolutie van een deeltje op een graaf [38](#page=38).
* **Evaluatie van tensor netwerken:** Wiskundige representaties van het kwantum logische model, die ook in andere velden voorkomen en door kwantumcomputers kunnen worden geëvalueerd [38](#page=38).
* **Simuleren van kwantumsystemen:** Het oorspronkelijke doel van kwantumcomputing, voorgesteld door Richard Feynman [36](#page=36).
* **Oplossen van lineaire vergelijkingen (HHL-algoritme):** Hoewel potentieel, is de praktische toepassing in cryptanalyse nog niet wijdverbreid [36](#page=36).
### 2.2 Post-kwantum cryptografie (PQC)
Gezien de bedreiging van kwantumcomputers voor de huidige cryptografische standaarden, is de ontwikkeling van post-kwantum cryptografie (PQC) essentieel. PQC omvat cryptografische algoritmen die bestand zijn tegen aanvallen, zowel door klassieke als door kwantumcomputers [36](#page=36).
#### 2.2.1 Toepassingen van PQC
* **Asymmetrische cryptografie:** Voor toepassingen zoals sleuteluitwisseling en digitale handtekeningen, waarvoor kwantumcomputers een directe bedreiging vormen, is een overstap naar nieuwe asymmetrische cryptografie noodzakelijk. De meeste PQC-voorstellen zijn gebaseerd op roostergebaseerde cryptografie [36](#page=36) [38](#page=38).
* **Symmetrische cryptografie en hashes:** Voor deze toepassingen volstaat het in de meeste gevallen om de sleutel- en hashlengtes te vergroten [36](#page=36).
#### 2.2.2 NIST-competitie voor Post-Quantum Cryptography
Het National Institute of Standards and Technology (NIST) heeft een competitie georganiseerd om nieuwe PQC-standaarden te selecteren. Deze competitie heeft verschillende rondes doorlopen, waarbij inzendingen zijn geëvalueerd op hun beveiliging en prestaties. De meest veelbelovende kandidaten zijn vaak gebaseerd op roostergebaseerde cryptografie [36](#page=36) [38](#page=38).
#### 2.2.3 Uitdagingen in PQC-ontwikkeling
De ontwikkeling van PQC is complex. Een van de uitdagingen is het garanderen van de beveiliging tegen zowel klassieke als kwantumcomputers. Er is nog steeds aanzienlijk onderzoek nodig om de kwantumweerbaarheid van verschillende PQC-schema's te valideren [36](#page=36).
### 2.3 De huidige status van kwantumcomputing
Hoewel de theoretische basis voor kwantumcomputers al decennia bestaat, is de praktische realisatie ervan nog steeds in ontwikkeling [36](#page=36).
#### 2.3.1 Qubit-aantallen en foutcorrectie
De huidige kwantumcomputers werken met "noisy" qubits, wat betekent dat ze gevoelig zijn voor fouten (decoherentie). Het verminderen van de foutenmarge is een cruciale technische uitdaging. De aantallen qubits die genoemd worden voor het breken van cryptografie zijn vaak gebaseerd op foutvrije (logische) qubits, terwijl echte systemen momenteel nog fysieke qubits gebruiken die fouten introduceren [39](#page=39).
* **Fysieke versus logische qubits:** Om Shor's algoritme betrouwbaar uit te voeren, zijn logische qubits nodig, die op hun beurt een groot aantal fysieke qubits vereisen voor foutcorrectie [41](#page=41).
* **Resourcevereisten:** Het breken van RSA-2048 kan bijvoorbeeld tot wel 4098 logische qubits vereisen. De hoeveelheid benodigde fysieke qubits is nog aanzienlijk hoger, afhankelijk van de foutenmarge van de gebruikte gates [38](#page=38) [42](#page=42).
> **Tip:** Houd er rekening mee dat de cijfers voor benodigde qubits vaak verwijzen naar foutvrije (logische) qubits. De huidige kwantumcomputers hebben "noisy" qubits, wat een aanzienlijke engineering uitdaging blijft [39](#page=39).
#### 2.3.2 Ontwikkelingen in kwantumhardware
Er zijn significante ontwikkelingen in de bouw van kwantumcomputers, met toenemende aantallen qubits. Echter, deze systemen variëren in architectuur en capaciteit [43](#page=43).
* **Gate-based vs. Adiabatische kwantumcomputers:** Systemen zoals die van D-Wave maken gebruik van kwantum-annealing of adiabatisch kwantumcomputing, wat minder veeleisend is dan de gate-model aanpak die nodig is voor algoritmen zoals Shor's. Systemen gebaseerd op kwantum-annealing kunnen niet Shor's en Grover's algoritmes uitvoeren [43](#page=43) [44](#page=44).
* **Kwantum overmacht (Quantum Supremacy):** Dit verwijst naar de mogelijkheid van een kwantumcomputer om een probleem op te lossen dat klassiek onoplosbaar is. Hoewel dit een mijlpaal is, heeft het momenteel beperkte praktische waarde en is het vaak gerelateerd aan specifieke, niet-foutgecorrigeerde problemen [43](#page=43).
#### 2.3.3 Historische mijlpalen
Enkele historische momenten in de ontwikkeling van kwantumcomputing en cryptanalyse zijn:
* **2001:** Factorisatie van 15 [43](#page=43).
* **November 2011:** Factorisatie van 143 [43](#page=43).
* **November 2014:** Factorisatie van 56153 met een nieuwe Shor-variant en 4 qubits [43](#page=43).
* **September 2019:** Google claimt "kwantum overmacht" met een 53-qubit systeem [43](#page=43).
* **November 2021:** IBM onthult een 127-qubit kwantumprocessor [43](#page=43).
### 2.4 Kwantum Sleutel Distributie (QKD)
Kwantum Sleutel Distributie (QKD) maakt gebruik van de principes van de kwantumfysica om sleutels te distribueren op een manier die detecteerbaar is wanneer iemand probeert te "sniffen" [49](#page=49).
* **Werkingsprincipe:** QKD protocollen, zoals BB84, maken gebruik van kwantummechanische eigenschappen (bv. polarisatie van fotonen) om een geheime sleutel te delen. Elke observatie verstoort de kwantumtoestand, wat kan worden gedetecteerd [49](#page=49).
* **Beperkingen:** QKD blijft niche, extreem duur en is punt-tot-punt. Het is een gecentraliseerde oplossing en vereist vaak vooraf gedeelde sleutels voor authenticatie of digitale handtekeningen, wat betekent dat post-kwantum cryptografie nog steeds nodig is. Bruce Schneier noemde QKD "zo nutteloos als het duur is" [49](#page=49).
* **Huidige status:** QKD wordt momenteel voornamelijk toegepast in contexten met zeer hoge beveiligingseisen, zoals overheidsinstellingen [49](#page=49).
> **Disclaimer:** Het is belangrijk om te erkennen dat de exacte vereisten voor het breken van cryptografie door kwantumcomputers nog steeds onderwerp van onderzoek zijn, en de schattingen kunnen variëren afhankelijk van de gebruikte methodologie en de technologische vooruitgang [42](#page=42).
---
# Hardwarebeveiligingsmodules (HSM's) en sleutelbeheer
Dit onderwerp behandelt het veilige beheer en de opslag van cryptografische sleutels door middel van Hardware Security Modules (HSM's) en de principes van cryptografisch sleutelbeheer.
### 3.1 Hardwarebeveiligingsmodules (HSM's)
Een Hardware Security Module (HSM) is een fysiek computerapparaat dat cryptografische sleutels genereert, opslaat en beheert, en cryptografische bewerkingen uitvoert. Het hoofddoel van een HSM is om cryptografische sleutels te beschermen tegen diefstal en ongeautoriseerde toegang [26](#page=26).
#### 3.1.1 Functie en beveiliging van HSM's
HSM's implementeren de "keys-in-hardware"-aanpak, wat betekent dat sleutels altijd profiteren van zowel fysieke als logische beveiligingsmaatregelen van de HSM. Sleutels worden opgeslagen in geheugen dat bestand is tegen manipulatie (tamper-proof) door componenten af te dekken met epoxy of andere methoden [26](#page=26).
* **Key Protection:** De sleutels verlaten de HSM nooit en cryptografische bewerkingen worden uitsluitend binnen het apparaat uitgevoerd. Zelfs als de HSM wordt verplaatst of gestolen, zal deze buiten zijn omgeving niet functioneren [26](#page=26).
* **Certificering:** Veel HSM's beschikken over FIPS 140-2 certificering, waarbij sommige niveaus 3 of zelfs 4 ondersteunen. FIPS 140-2 is een standaard die eisen stelt aan cryptografiemodules [22](#page=22) [26](#page=26).
* **Niveau 1:** Basale beveiligingseisen.
* **Niveau 2:** Bewijs van manipulatie, gebruikersauthenticatie.
* **Niveau 3:** Detectie/weerstand tegen manipulatie, data zeroisatie (vernietiging), opsplitsing van gebruikersrollen.
* **Niveau 4:** Zeer hoge detectie/weerstand tegen manipulatie, omgevingsbescherming.
* **API:** De standaard software-interface voor HSM's is PKCS#11, ook bekend als Cryptoki [26](#page=26).
* **Beschikbaarheid:** Om redenen van beschikbaarheid zijn doorgaans twee HSM's nodig [26](#page=26).
> **Tip:** Hoewel er ook open-source SoftHSM-oplossingen bestaan, bieden deze niet de fysieke beveiliging van een hardwarematige HSM. Ze kunnen echter wel nuttig zijn als architecturale oplossing [26](#page=26).
#### 3.1.2 HSM Form Factors en Specificaties
HSM's zijn verkrijgbaar in verschillende vormfactoren, waaronder fysieke apparaten, virtuele varianten (waarbij de gebruiker verantwoordelijk is voor de tamper-resistente hardware) en ingebedde HSM's. Daarnaast zijn er Cloud HSM's beschikbaar bij grote cloudproviders [26](#page=26).
* **Specificaties:** Typische functionaliteiten omvatten een willekeurige getallengenerator, symmetrische en asymmetrische cryptografische bewerkingen. Hashing wordt doorgaans op de host-applicatie geïmplementeerd [29](#page=29).
* **Authenticatie:** Het verschil tussen bepaalde apparaten kan liggen in wachtwoordauthenticatie of multi-factor authenticatie. De markt van HSM-leveranciers is consoliderend; oorspronkelijke bedrijven zoals Safenet (overgenomen door Gemalto, wat weer is overgenomen door Thales) opereren in deze ruimte [29](#page=29).
* **Betalings-HSM's:** Voor betalingsverwerking bestaan specifieke apparaten met bijbehorende API's [29](#page=29).
#### 3.1.3 HSM Threat Model
Het bedreigingsmodel voor HSM's erkent dat sleutels gecompromitteerd kunnen worden door:
* Gecompromitteerde hosts [30](#page=30).
* Ontevreden personeel [30](#page=30).
* Wiskundige kwetsbaarheden in cryptografische algoritmes [30](#page=30).
Hoewel hosts beveiligd kunnen worden, blijft enige mogelijkheid tot extern beheer noodzakelijk. Een HSM wordt gezien als een van de veiligste plekken om sleutels op te slaan, omdat men precies weet waar de sleutels zich bevinden en waar niet. Dit draagt ook bij aan naleving van compliance-eisen, inclusief certificering [30](#page=30).
#### 3.1.4 HSM Use Cases
HSM's worden ingezet voor een breed scala aan toepassingen, waaronder:
* Betalingsverwerking [27](#page=27).
* PIN-beveiliging [27](#page=27).
* Bankwezen [27](#page=27).
* SIM-geheimen [27](#page=27).
* SSL-beveiligde websites [27](#page=27).
* Slimme meters (smart metering) [27](#page=27).
* Kritieke infrastructuur [27](#page=27).
* Veiligheidskritische systemen [27](#page=27).
### 3.2 Sleutelbeheer (Key Management)
Sleutelbeheer omvat het proces van het beheren van cryptografische sleutels gedurende hun gehele levenscyclus, inclusief creatie, opslag, gebruik, uitwisseling, vervanging, herroeping en vernietiging [32](#page=32).
#### 3.2.1 Principes van Sleutelbeheer
Een cryptosysteem bestaat uit drie algoritmes: sleutelgeneratie, encryptie en decryptie. Key Managers breiden de levenscyclus van sleutels uit om bescherming, opslag, uitwisseling, vervanging en gebruik te omvatten. Ze richten zich op het bestuur van sleutels gedurende hun levenscyclus, van creatie tot activering, gebruik, herroeping en vernietiging [32](#page=32).
#### 3.2.2 KMIP (Key Management Interoperability Protocol)
Veel Enterprise Key Managers maken gebruik van KMIP. KMIP is een client-server communicatieprotocol voor de opslag en het onderhoud van sleutel-, certificaat- en geheime objecten. Het maakt het voor bestaande producten die cryptografie vereisen mogelijk om sleutels te gebruiken en biedt een centraal punt voor het beheer van sleutels over heterogene producten [32](#page=32).
#### 3.2.3 Vergelijking met PKCS#11
Er zijn overeenkomsten tussen KMIP en PKCS#11, maar ook verschillen. KMIP zorgt voor gestandaardiseerde communicatie van sleutels en certificaten. PKCS#11 heeft geen functionaliteit om sleutelmaterialen eruit te halen, terwijl KMIP dit wel heeft. PKCS#11 maakt het mogelijk om cryptografisch materiaal veilig in HSM's te bewaren [32](#page=32).
#### 3.2.4 Integratie van HSM en Sleutelbeheer
HSM's en Key Management systemen kunnen complementair zijn. Een HSM kan worden gebruikt voor gecentraliseerde cryptografische bewerkingen en opslag, terwijl Key Management zorgt voor gecentraliseerd sleutelbeheer en governance. Dit biedt een robuuste oplossing voor het beveiligen en beheren van cryptografische sleutels in complexe omgevingen [31](#page=31) [33](#page=33).
> **Voorbeeld:** Een bank kan een HSM gebruiken om de private sleutels voor haar SSL-certificaten te genereren en op te slaan, en een Key Management systeem (gebruikmakend van KMIP) om het beleid voor het roteren en controleren van de toegang tot deze sleutels te beheren [33](#page=33).
---
# Cryptografische bibliotheken en hun beoordeling
Dit onderwerp behandelt de verschillende cryptografische bibliotheken, hun kenmerken, vergelijkingen en de criteria voor het kiezen van een geschikte bibliotheek.
### 4.1 Overzicht van cryptografische bibliotheken
Cryptografische bibliotheken zijn essentieel voor het toepassen van cryptografie in software. Er is een breed scala aan bibliotheken beschikbaar, elk met specifieke kenmerken en doelgroepen [53](#page=53).
#### 4.1.1 Bekende cryptografische bibliotheken
Verschillende bibliotheken worden vaak genoemd en gebruikt:
* **HACL***: Een geverifieerde, portable en snelle C cryptografische bibliotheek die moderne cryptografische primitieven implementeert. Het is geschreven in de F* programmeertaal en genereert verifieerbare C code die vergelijkbaar is met de snelste C implementaties van OpenSSL en Libsodium. HACL* implementeert de NaCl cryptografische API en kan dienen als een directe vervanging voor NaCl bibliotheken [54](#page=54) [55](#page=55).
* **Botan2.x**: Een belangrijke cryptografische bibliotheek die een aanzienlijke herontwikkeling heeft ondergaan, gefinancierd door de Duitse overheid [54](#page=54) [55](#page=55).
* **OpenSSL**: Een bekende, maar ook beruchte, cryptografische bibliotheek [54](#page=54).
* **wolfSSL / mbedTLS**: Geschikt voor embedded applicaties en resource-beperkte omgevingen [54](#page=54) [55](#page=55).
* **Libsodium**: Een moderne en veilige cryptografische bibliotheek [54](#page=54).
* **NaCl (Networking and Cryptography library)**: De "moeder" van veel andere bibliotheken, hoewel het nu als verouderd wordt beschouwd [54](#page=54) [55](#page=55).
* **PyCryptodome**: De opvolger van het populaire PyCrypto en wordt aanbevolen voor Python gebruikers [54](#page=54) [55](#page=55).
* **Cryptography.io**: Wordt functioneel beschouwd als de beste optie [57](#page=57).
* **Libgcrypt**: Een cryptografische bibliotheek die deel uitmaakt van GnuPG [54](#page=54).
* **LibreSSL**: Een fork van OpenSSL [54](#page=54).
* **JCA/JCE (Java Cryptography Architecture / Extension)**: De cryptografische API voor Java [54](#page=54).
* **Crypto++**: Een C++ cryptografische bibliotheek [54](#page=54).
* **Bouncy Castle**: Een populaire cryptografische bibliotheek, beschikbaar in Java en C# [54](#page=54).
* **PyNaCl**: Een Python binding voor de NaCl bibliotheek [54](#page=54).
* **HACL**: Een geverifieerde, moderne C cryptografische bibliotheek [54](#page=54).
* **Arduino cryptography library**: Specifiek ontworpen voor Arduino-platformen [54](#page=54).
#### 4.1.2 Vergelijking van cryptografische bibliotheken
Er zijn diverse onderzoeken gedaan naar de vergelijkbaarheid en bruikbaarheid van cryptografische API's, hoewel sommige van deze onderzoeken dateren uit 2016/2017. Functioneel wordt **cryptography.io** als de beste optie beschouwd [56](#page=56) [57](#page=57).
> **Tip:** Bij het evalueren van een bibliotheek, zelfs open source, is het cruciaal om te onderzoeken wie er verantwoordelijk voor is en wat de uitgiftes zijn [58](#page=58).
### 4.2 Criteria voor het beoordelen en kiezen van een cryptografische bibliotheek
Bij het selecteren van een cryptografische bibliotheek zijn er verschillende factoren van belang om de geschiktheid te beoordelen.
#### 4.2.1 Belangrijke overwegingen
Bij het beoordelen van een bibliotheek, zelfs een open-source, moet men letten op de volgende punten [58](#page=58):
* **Verantwoordelijkheid**: Wie is de auteur of onderhouder van de bibliotheek?
* **Interoperabiliteit**: Is de bibliotheek compatibel met andere gebruikte bibliotheken?
* **Flexibiliteit**: Biedt de bibliotheek de mogelijkheid om af te wijken van over-gestandaardiseerde methoden (bijvoorbeeld in elliptische curves)?
* **Veiligheidspatches en kwetsbaarheden**: Zijn er bekende kwetsbaarheden gepubliceerd en hoe snel worden deze aangepakt?
* **Compleetheid**: Is de bibliotheek volledig en dekt deze alle benodigde cryptografische functionaliteiten?
* **Standaardparameters**: Zijn de standaardparameters optimaal en veilig voor het beoogde gebruik?
#### 4.2.2 Voorbeelden van cryptografische operaties in bibliotheken
De documentatie bevat voorbeelden van de implementatie van diverse cryptografische operaties, zoals hashing, DES-encryptie, RSA en AES. Deze voorbeelden demonstreren hoe specifieke algoritmes en protocollen worden gebruikt binnen bibliotheken zoals PyCrypto. Deze voorbeelden zijn nuttig om de praktische toepassing van cryptografische concepten te begrijpen en de functionaliteit van verschillende bibliotheken te verkennen [59](#page=59) [60](#page=60) [61](#page=61) [62](#page=62) [63](#page=63) [64](#page=64).
> **Tip:** Neem de tijd om de implementatie van specifieke algoritmes en de gebruikte parameters te bestuderen. Soms leiden standaardinstellingen tot onverwachte beveiligingsrisico's [58](#page=58).
### 4.3 Post-kwantumcryptografie en bibliotheken
Hoewel het primaire onderwerp cryptografische bibliotheken betreft, is het vermeldenswaard dat de opkomst van post-kwantumcryptografie een impact heeft op de ontwikkeling en keuze van toekomstige cryptografische bibliotheken. Veel bestaande cryptografie is kwetsbaar voor kwantumcomputers. Nieuwe standaarden worden ontwikkeld, maar de technologie is nog niet volledig volwassen. Bibliotheken die moderne en verifieerbare implementaties bieden, zoals HACL*, zijn potentieel beter voorbereid op toekomstige ontwikkelingen [47](#page=47) [55](#page=55).
### 4.4 Verder leren
Voor studenten die zich verder willen verdiepen in cryptografie na deze cursus, worden uitdagingen zoals Cryptohack en online decryptietools aanbevolen. Ook middelen voor factoring, zoals Cado-NFS en Pari/GP, kunnen nuttig zijn [65](#page=65).
---
## 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 |
|------|------------|
| Cryptografie | Een wetenschap die zich bezighoudt met methoden om informatie te beveiligen tegen ongeautoriseerde toegang en manipulatie, met name door versleuteling en ontsleuteling. |
| Veiligheidseisen afleiden | Het proces van het identificeren en definiëren van de noodzakelijke beveiligingsmaatregelen op basis van risicoanalyse, waaronder bedreigingsagenten, de impact op vertrouwelijkheid, integriteit, beschikbaarheid en zakelijke gevolgen. |
| CIA-triade | Een model dat de drie fundamentele principes van informatiebeveiliging vertegenwoordigt: Vertrouwelijkheid (Confidentiality), Integriteit (Integrity) en Beschikbaarheid (Availability). |
| Vertrouwelijkheid | Het waarborgen dat informatie alleen toegankelijk is voor geautoriseerde personen of systemen, en niet wordt onthuld aan onbevoegden. |
| Integriteit | Het waarborgen van de nauwkeurigheid en volledigheid van gegevens, en dat deze niet ongeautoriseerd zijn gewijzigd. |
| Beschikbaarheid | Het waarborgen dat geautoriseerde gebruikers op elk moment toegang hebben tot informatie en systemen wanneer ze deze nodig hebben. |
| Authenticatie | Het proces van het verifiëren van de identiteit van een gebruiker, apparaat of systeem. |
| Niet-repudiatie (aansprakelijkheid) | Het vermogen om te bewijzen dat een specifieke actie door een specifieke entiteit is uitgevoerd, zodat deze entiteit de actie later niet kan ontkennen. |
| Zakelijke impact | De potentiële negatieve gevolgen van een beveiligingsincident op een organisatie, zoals financiële verliezen, reputatieschade of niet-naleving van regelgeving. |
| Cryptografische controles | Beveiligingsmaatregelen die gebruik maken van cryptografische technieken om de vertrouwelijkheid, integriteit en authenticiteit van gegevens te waarborgen. |
| Rol je eigen crypto niet | Een sterk advies om geen eigen cryptografische algoritmen te ontwerpen of te implementeren, maar gebruik te maken van bestaande, bewezen en gestandaardiseerde cryptografische tools en bibliotheken. |
| Timingaanval | Een cryptografische aanval die misbruik maakt van de tijd die een cryptografische operatie nodig heeft om uit te voeren, om zo informatie over de geheime sleutel te verkrijgen. |
| Gecertificeerde encryptie | Een vorm van encryptie waarbij de data zowel wordt versleuteld als wordt geauthenticeerd, wat betekent dat zowel de vertrouwelijkheid als de integriteit van de data wordt gewaarborgd. |
| Authenticated Encryption with Associated Data (AEAD) | Een encryptiemodus die naast de te versleutelen data ook geassocieerde, niet-versleutelde data kan authentiseren, wat nuttig is voor metadata. |
| AES-CBC | Een blokcijfermodus (Cipher Block Chaining) die de opeenvolgende blokken van de plaintext XOR't met het vorige ciphertextblok voordat het wordt versleuteld, wat zorgt voor een kettingreactie. |
| AES-CMAC | Een Message Authentication Code (MAC) algoritme dat is gebaseerd op AES, gebruikt om de integriteit en authenticiteit van een bericht te waarborgen. |
| SHA256-HMAC | Een Hash-based Message Authentication Code die de SHA-256 hashfunctie gebruikt om de integriteit en authenticiteit van een bericht te verifiëren. |
| Stringconcatenatie voor hashen | Het samenvoegen van meerdere strings tot één enkele string voordat deze wordt gehasht. Dit kan leiden tot kwetsbaarheden als het niet correct wordt uitgevoerd. |
| Message Authentication Code (MAC) | Een stukje cryptografische informatie dat aan een bericht wordt toegevoegd om de integriteit en authenticiteit ervan te garanderen. |
| Pseudowillekeurige nummergenerator (PRNG) | Een algoritme dat willekeurige getallen genereert die quasi-willekeurig lijken, maar deterministisch zijn op basis van een startwaarde (seed). |
| Entropie | De mate van willekeur of onvoorspelbaarheid in een gegevensset. Voor cryptografie is hoge entropie essentieel voor veilige sleutelgeneratie. |
| PRNG met cryptografische sterkte | Een PRNG die voldoende entropie gebruikt als seed en die produceert willekeurige getallen die moeilijk te voorspellen zijn, zelfs voor een aanvaller met aanzienlijke rekenkracht. |
| Lineaire congruentiële generator (LCG) | Een oudere en zwakkere methode voor het genereren van pseudowillekeurige getallen, die niet geschikt is voor cryptografische toepassingen vanwege voorspelbaarheid. |
| ECB-modus | Electronic Codebook is een blokcijfermodus die elk blok plaintext onafhankelijk versleutelt. Dit maakt het kwetsbaar voor patronenherkenning. |
| CTR-modus | Counter-modus is een blokcijfermodus die de plaintext versleutelt door deze te XOR'en met een reeks uitvoer van een PRNG die wordt gegenereerd door een teller te versleutelen. |
| OFB-modus | Output Feedback-modus is een blokcijfermodus die de plaintext versleutelt door deze te XOR'en met een reeks uitvoer van een PRNG die continu wordt gegenereerd door de vorige uitvoer te versleutelen. |
| CBC-modus | Cipher Block Chaining-modus, zie hierboven. |
| IV (Initialisatievector) | Een niet-geheime waarde die wordt gebruikt om de initiële staat van een cryptografisch algoritme te initialiseren, met name bij blokcijfermodi zoals CBC. |
| Nonce (Number used once) | Een getal dat slechts één keer wordt gebruikt tijdens de levensduur van een cryptografische sleutel, vaak gebruikt in streamcijfers of geauthenticeerde encryptie om herhalingen te voorkomen. |
| GCM-modus | Galois/Counter Mode is een AEAD-modus die zowel encryptie als authenticatie biedt en zeer efficiënt is. |
| EAX-modus | Een AEAD-modus die encryptie en authenticatie biedt, ontworpen om eenvoudig te implementeren en veilig te zijn. |
| OCB-modus | Offset Codebook-modus is een AEAD-modus die efficiënte encryptie en authenticatie biedt. |
| Key Wrap (KW) | Een cryptografisch algoritme dat wordt gebruikt om cryptografische sleutels veilig op te slaan of te transporteren door ze te versleutelen met een andere, sterkere sleutel. |
| Padding | Een techniek die wordt gebruikt om invoerdata aan te vullen tot een specifieke lengte, vaak vereist door blokcijfers of cryptografische protocollen. |
| PKCS#1 v1.5 | Een oudere specificatie voor padding en cryptografische protocollen, bekend om beveiligingskwetsbaarheden zoals Bleichenbacher's aanval. |
| OAEP | Optimal Asymmetric Encryption Padding is een veiligere padding-schema voor RSA-encryptie die is ontworpen om aanvallen te weerstaan. |
| Kerckhoffs" principe | Een fundamenteel principe in cryptografie dat stelt dat de veiligheid van een cryptosysteem niet mag afhangen van de geheimhouding van het algoritme, maar uitsluitend van de geheimhouding van de sleutel. |
| Beveiliging door obscuriteit | Een beveiligingsbenadering die berust op het geheimhouden van het ontwerp of de implementatie van een systeem, in plaats van op de intrinsieke sterkte van de cryptografische mechanismen. |
| Opslaan van wachtwoorden | De praktijk van het veilig opslaan van gebruikerswachtwoorden, meestal door ze te hashen met een salt en een voldoende aantal iteraties. |
| PBKDF2 | Password-Based Key Derivation Function 2 is een standaard algoritme voor het afleiden van cryptografische sleutels uit wachtwoorden, met iteratieve hashing om brute-force aanvallen te vertragen. |
| Salt | Een willekeurige reeks gegevens die aan een wachtwoord wordt toegevoegd voordat het wordt gehasht. Dit voorkomt dat identieke wachtwoorden dezelfde hash opleveren en maakt rainbow table-aanvallen moeilijker. |
| Rainbow table | Een vooraf berekende tabel van hashes die wordt gebruikt om wachtwoorden te kraken door de hash van een gestolen wachtwoord te vergelijken met de hashes in de tabel. |
| Hashfunctie | Een wiskundige functie die een invoer van variabele grootte omzet in een uitvoer van vaste grootte (de hash of digest). |
| Master wachtwoord | Een enkel, sterk wachtwoord dat wordt gebruikt om toegang te krijgen tot een verzameling andere wachtwoorden of gevoelige informatie. |
| Wachtwoordmanager | Een softwaretoepassing die helpt bij het veilig opslaan, genereren en beheren van wachtwoorden voor verschillende online accounts. |
| Clickjacking / UI redress | Een aanvalstechniek waarbij een aanvaller een transparante laag over een legitieme webpagina plaatst, waardoor de gebruiker wordt verleid om acties uit te voeren op de verborgen pagina zonder dat hij zich daarvan bewust is. |
| Interprocescommunicatie | Communicatie tussen verschillende processen binnen een computersysteem. In de context van beveiliging kan dit een vector zijn voor aanvallen als het niet goed wordt beveiligd. |
| Browser sandbox | Een beveiligingsmechanisme dat een webpagina of browserproces isoleert van de rest van het systeem, om de schade te beperken bij een beveiligingsinbreuk. |
| Wachtwoord of wachtzin als encryptiesleutel | Het gebruik van een gebruikerswachtwoord of wachtzin direct als sleutel voor een encryptie-algoritme. Dit is doorgaans onveilig omdat gebruikers vaak zwakke wachtwoorden kiezen. |
| Exhaustieve sleutelzoekaanval | Een brute-force aanval waarbij een aanvaller systematisch alle mogelijke sleutels probeert totdat de juiste sleutel is gevonden. |
| Iteratieve hashing | Het herhaaldelijk toepassen van een hashfunctie op het resultaat van de vorige hashing-operatie, gebruikt om de rekentijd voor het kraken van wachtwoorden te verhogen. |
| Post-kwantum cryptografie (PQC) | Cryptografische algoritmen die ontworpen zijn om weerstand te bieden tegen aanvallen van zowel klassieke als kwantumcomputers. |
| Kwantumcomputer | Een computer die gebruik maakt van kwantummechanische fenomenen zoals superpositie en verstrengeling om berekeningen uit te voeren. |
| Shor's algoritme | Een kwantumalgoritme dat efficiënt getallen kan factoriseren, wat een directe bedreiging vormt voor veel asymmetrische cryptografische systemen zoals RSA. |
| Grover's algoritme | Een kwantumalgoritme dat de zoektijd in een ongesorteerde database significant kan verkorten, wat de beveiliging van symmetrische cryptografie en hashfuncties beïnvloedt. |
| NIST-competitie voor post-kwantum cryptografie | Een wereldwijd initiatief, geleid door het National Institute of Standards and Technology (NIST), om nieuwe gestandaardiseerde post-kwantum cryptografische algoritmen te selecteren. |
| Symmetrische cryptografie | Cryptografische systemen die dezelfde sleutel gebruiken voor zowel versleuteling als ontsleuteling. |
| Asymmetrische cryptografie | Cryptografische systemen die een sleutelpaar gebruiken: een publieke sleutel voor versleuteling en een private sleutel voor ontsleuteling (of vice versa voor digitale handtekeningen). |
| Lattice-gebaseerde cryptografie | Een klasse van post-kwantum cryptografische algoritmen die gebaseerd zijn op de wiskundige problemen van roosters (lattices). |
| Code-gebaseerde cryptografie | Een klasse van post-kwantum cryptografische algoritmen die gebruik maken van foutcorrigerende codes om de beveiliging te waarborgen. |
| Multivariate cryptografie | Een klasse van post-kwantum cryptografische algoritmen die gebaseerd zijn op het oplossen van stelsels multivariate polynoomvergelijkingen over eindige lichamen. |
| Hash-gebaseerde cryptografie | Een klasse van post-kwantum cryptografische algoritmen die uitsluitend vertrouwen op de veiligheid van hashfuncties, zoals Lamport-handtekeningen of XMSS. |
| Kwantum sleuteldistributie (QKD) | Een methode om cryptografische sleutels te distribueren met behulp van de principes van kwantummechanica, die theoretisch onmogelijk te onderscheppen is. |
| BB84 protocol | Een van de eerste en meest bekende protocollen voor kwantum sleuteldistributie, ontwikkeld door Bennett en Brassard in 1984. |
| FIPS 140-2 | Een Amerikaanse federale standaard die beveiligingsvereisten definieert voor cryptografische modules, met verschillende beveiligingsniveaus (Level 1 tot 4). |
| Common Criteria (CC) | Een internationale standaard (ISO/IEC 15408) voor de evaluatie van de beveiligingskenmerken van informatietechnologieproducten. |
| CC-EAL | Common Criteria Evaluation Assurance Level, een reeks beveiligingsgaranties die worden toegekend aan een product na evaluatie volgens de Common Criteria. |
| Hardware Security Module (HSM) | Een gespecialiseerd fysiek beveiligingsapparaat dat cryptografische sleutels genereert, opslaat en beheert, en cryptografische operaties uitvoert binnen een beveiligde omgeving. |
| PKCS#11 (Cryptoki) | Een standaard API voor het aanroepen van cryptografische hardware, zoals HSM's. |
| KMIP | Key Management Interoperability Protocol, een communicatieprotocol voor de uitwisseling van cryptografische sleutels en certificaten tussen beveiligingsapparaten en -systemen. |
| Zachte HSM (SoftHSM) | Een softwarematige implementatie die de functionaliteit van een HSM nabootst, maar zonder de fysieke beveiligingskenmerken van hardware. |
| Quesy | Een term die in het document wordt gebruikt, mogelijk gerelateerd aan kwantum computing of een specifiek algoritme. De precieze betekenis is niet expliciet gedefinieerd. |
| Cryptografische bibliotheek | Een verzameling software-implementaties van cryptografische algoritmen en protocollen die ontwikkelaars kunnen gebruiken in hun applicaties. |
| HACL* | Een geverifieerde, moderne, portable en snelle C cryptografische bibliotheek die moderne cryptografische primitieven implementeert. |
| Botan2.x | Een uitgebreide en flexibele cryptografische bibliotheek die veel algoritmen en protocollen ondersteunt. |
| OpenSSL | Een wijdverbreide en krachtige open-source cryptografische bibliotheek, bekend om zowel zijn sterke punten als potentiële kwetsbaarheden. |
| wolfSSL / mbedTLS | Lichtgewicht SSL/TLS-bibliotheken, ontworpen voor ingebedde systemen en omgevingen met beperkte middelen. |
| Libgcrypt | Een cryptografische bibliotheek die deel uitmaakt van het GNU Privacy Guard (GnuPG) project. |
| LibreSSL | Een fork van OpenSSL, gericht op veiligheid en transparantie. |
| JCA/JCE | Java Cryptography Architecture / Java Cryptography Extension, de standaard API's voor cryptografie in de Java-programmeertaal. |
| PyCryptodome | Een fork van de PyCrypto-bibliotheek die actief wordt onderhouden en veel cryptografische algoritmen en functies biedt voor Python. |
| Libsodium | Een moderne, gebruiksvriendelijke en veilige cryptografische bibliotheek die ontworpen is om veelvoorkomende cryptografische fouten te voorkomen. |
| Bouncy Castle | Een populaire cryptografische bibliotheek die beschikbaar is voor Java en C#, en een breed scala aan cryptografische functionaliteit biedt. |
| Crypto++ | Een open-source C++ cryptografische bibliotheek die een breed scala aan algoritmen en functies biedt. |
| Gebruikersvriendelijkheid van cryptografische API's | De mate waarin cryptografische API's gemakkelijk te begrijpen, te gebruiken en correct te implementeren zijn door ontwikkelaars. |
| Cryptohack challenges | Online cryptografische puzzels en uitdagingen die ontworpen zijn om vaardigheden op het gebied van cryptanalyse en beveiliging te testen en te ontwikkelen. |
| Blokketen (Blockchain) | Een gedistribueerd, gedecentraliseerd en onveranderlijk grootboek dat transacties vastlegt. |
| ECDSA | Elliptic Curve Digital Signature Algorithm, een veelgebruikt algoritme voor digitale handtekeningen gebaseerd op elliptische krommen. |
| Lamport-handtekening | Een type eenmalige digitale handtekening (one-time signature) die gebaseerd is op hashfuncties en wordt beschouwd als post-kwantum veilig. |