Cryptology Academy · Les

Belangrijkste patronen van verkeerd cryptografisch gebruik

Bekijk de meest voorkomende fouten van developers: ECB-modus, zwakke seeding van PRNG's en zelf cryptografie bouwen.

Les 4 van 413 stappen

Belangrijkste patronen van verkeerd cryptografisch gebruik is een gratis Cryptology Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Cryptology Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Cryptology Academy bevat in totaal 4 lessen.

ECB-modus onthult blokpatronen

De Electronic Codebook-modus (ECB) versleutelt elk blok onafhankelijk met dezelfde sleutel. Identieke blokken klare tekst leveren identieke blokken cijfertekst op. De klassieke demonstratie is de "ECB-pinguïn": wanneer je een bitmapafbeelding met ECB versleutelt, blijft de blokstructuur van de afbeelding behouden, waardoor de omtrek van de pinguïn duidelijk zichtbaar blijft in de cijfertekst. De ECB-modus biedt geen semantische beveiliging en mag nooit worden gebruikt voor enig praktisch versleutelingsdoel.

Zelf cryptografie bouwen

Cryptografische primitieven helemaal zelf implementeren is een van de gevaarlijkste praktijken binnen softwareontwikkeling. Cryptografie vereist volledige correctheid onder vijandige omstandigheden: een subtiel timinglek, een off-by-onefout in de opvulling of een verkeerd begrip van beveiligingsvereisten kan exploiteerbare kwetsbaarheden veroorzaken die bij normaal testen niet te onderscheiden zijn van correct gedrag. Zelfs deskundige cryptografen maken implementatiefouten; ontwikkelaars van toepassingen moeten uitsluitend grondig gecontroleerde bibliotheken gebruiken.

MD5 en SHA-1 voor beveiligingsdoeleinden

De botsingsbestendigheid van MD5 is sinds 2004 doorbroken; twee bestanden met dezelfde MD5-hash maken is rekenkundig triviaal. SHA-1-botsingsaanvallen zijn in 2017 praktisch aangetoond met de SHAttered-aanval van Google, waarbij twee PDF-bestanden met dezelfde SHA-1-hash werden gegenereerd. Geen van beide mag voor beveiligingsdoeleinden worden gebruikt: digitale handtekeningen, integriteit van inhoud, wachtwoordopslag of HMAC. Gebruik SHA-256, SHA-3 of BLAKE2 voor moderne implementaties.

Voorspelbare initialisatie van PRNG's

Het gebruiken van time() of andere voorspelbare waarden om een pseudotoevalsgenerator te initialiseren is een kritieke kwetsbaarheid wanneer de uitvoer van de PRNG voor beveiligingsdoeleinden wordt gebruikt. Een aanvaller die ongeveer weet wanneer een sleutel is gegenereerd, kan alle mogelijke initialisatiewaarden in een klein tijdvenster met brute kracht doorzoeken om de sleutel te herstellen. Een klassiek voorbeeld: vroege versies van Netscape initialiseerden SSL-sleutelgeneratie met de tijd en proces-ID, die beide waarneembaar waren voor een aanvaller op dezelfde machine.

Zwakke PRNG-keuze

rand() in C, java.util.Random en de random-module van Python gebruiken deterministische lineaire congruentiegeneratoren of Mersenne Twister. Ze zijn ontworpen voor statistische kwaliteit in simulaties, niet voor beveiliging. Een aanvaller die genoeg uitvoer van deze generatoren observeert, kan hun interne toestand reconstrueren en alle toekomstige uitvoer voorspellen. Gebruik voor beveiligingsdoeleinden CSPRNG's die door het besturingssysteem worden geleverd: secrets.token_bytes() in Python, crypto.randomBytes() in Node.js of /dev/urandom op Linux.

Versleutelen zonder authenticatie

Versleuteling zonder authenticatie biedt alleen vertrouwelijkheid, geen integriteit. Een aanvaller die de klare tekst niet kan lezen, kan de cijfertekst nog steeds wijzigen, waardoor mogelijk voorspelbare wijzigingen in de klare tekst ontstaan (vooral in de modi CTR of CBC). Deze kneedbaarheid maakt aanvallen mogelijk: een aanvaller die een versleutelde banktransactie onderschept, kan bits omklappen om het overschrijvingsbedrag of de doelrekening te wijzigen zonder de klare tekst te kennen. Gebruik altijd geauthenticeerde versleuteling (AEAD).

Sleutels en IV's hardcoderen

Encryptiesleutels of initialisatievectoren in broncode vastleggen is een kritieke kwetsbaarheid. Broncode wordt vaak vastgelegd in opslagplaatsen voor versiebeheer, soms openbare. Zelfs in besloten opslagplaatsen heeft iedereen met toegang tot de code de sleutel. Hardgecodeerde sleutels betekenen dat alle instanties dezelfde sleutel gebruiken en dat sleutelrotatie een nieuwe uitrol vereist. Sleutels moeten worden opgeslagen in omgevingsvariabelen, systemen voor geheimenbeheer (HashiCorp Vault, AWS Secrets Manager) of hardwarebeveiligingsmodules.

Initialisatievectoren hergebruiken

Dezelfde initialisatievector voor meerdere versleutelingen met dezelfde sleutel gebruiken, veroorzaakt ernstige kwetsbaarheden. In de CTR-modus zorgt hergebruik van de IV voor dezelfde sleutelstroom, waardoor herstel van de klare tekst met XOR mogelijk wordt. In de CBC-modus kan een aanvaller door hergebruik van de IV detecteren wanneer twee berichten met dezelfde blokken klare tekst beginnen. In GCM is hergebruik van een nonce (IV) catastrofaal (zie de les over hergebruik van nonce). Genereer voor elke versleutelingsbewerking een nieuwe willekeurige IV; sla die vóór de cijfertekst op, samen met de context voor ontsleuteling.

Wachtwoorden hashen met snelle hashfuncties

Wachtwoorden opslaan die met MD5, SHA-256 of een andere snelle cryptografische hash zijn gehasht, is onvoldoende. Moderne GPU's kunnen miljarden SHA-256-hashes per seconde berekenen, waardoor offline brutekrachtaanvallen op gestolen hashdatabases triviaal snel worden. Voor het hashen van wachtwoorden zijn speciaal ontworpen trage, geheugenintensieve functies nodig: bcrypt, scrypt of Argon2id. Deze zijn ontworpen om brutekrachtaanvallen duur te maken, zelfs met gespecialiseerde hardware, zodat offline aanvallen rekenkundig onhaalbaar blijven.

Certificaatvalidatie negeren

Het uitschakelen van SSL/TLS-certificaatvalidatie (in Python ssl.CERT_NONE instellen, -k aan curl doorgeven of trustAllCerts=true instellen in Android) elimineert de bescherming tegen man-in-the-middleaanvallen. Een aanvaller kan elk certificaat aanbieden en alle communicatie onderscheppen. Deze praktijk komt tijdens de ontwikkeling voor om fouten met zelfondertekende certificaten te omzeilen, maar blijft vaak bestaan in productie. Gebruik altijd de juiste certificaatvalidatie en los onderliggende certificaatproblemen correct op.

Retourwaarden niet controleren

Cryptografische functies melden fouten via retourwaarden of uitzonderingen. Als je die negeert, kan de uitvoering doorgaan met een ongeldige toestand: ontsleuteling die onleesbare gegevens heeft opgeleverd, een mislukte verificatie of sleutelgeneratie die is mislukt. In C-gebaseerde API's zoals OpenSSL is het negeren van retourwaarden bijzonder gevaarlijk, omdat het programma kan doorgaan met niet-geïnitialiseerd geheugen. Controleer altijd elke retourwaarde van cryptografische functies en handel fouten veilig af.

Zwakte van de ECB-modus

Waarom wordt ECB (Electronic Codebook) als onveilig beschouwd voor het versleutelen van gegevens?

Samenvatting van verkeerd cryptografiegebruik

Belangrijke patronen van verkeerd gebruik die je moet vermijden: gebruik nooit de ECB-modus (lekken van blokpatronen), implementeer cryptografische primitieven nooit zelf, gebruik MD5 en SHA-1 niet voor beveiliging, initialiseer PRNG's met CSPRNG's en niet met time(), gebruik CSPRNG's voor alle beveiligingsgevoelige willekeurigheid, authenticeer versleutelde gegevens altijd (AEAD), hardcodeer nooit sleutels of IV's, genereer voor elke versleuteling een nieuwe IV, gebruik Argon2id voor wachtwoorden en geen snelle hashes, valideer TLS-certificaten altijd en controleer elke cryptografische retourwaarde.

Gratis beginnen

Leer Cryptology Academy met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
67
Lessen
261

Veelgestelde vragen

Is de les “Belangrijkste patronen van verkeerd cryptografisch gebruik” gratis?

Ja — de volledige tekst van “Belangrijkste patronen van verkeerd cryptografisch gebruik” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Cryptology Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Cryptology Academy bevat in totaal 4 lessen.

Wat leer ik in “Belangrijkste patronen van verkeerd cryptografisch gebruik”?

Bekijk de meest voorkomende fouten van developers: ECB-modus, zwakke seeding van PRNG's en zelf cryptografie bouwen. Je oefent met Cryptology Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Cryptology Academy te beginnen?

Ervaring vooraf is niet nodig. Cryptology Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Belangrijkste patronen van verkeerd cryptografisch gebruik”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Cryptology Academy?

Ja. Elke les over Cryptology Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Padding-oracle-aanvallen in detail
  2. Replayaanvallen en kwetsbaarheden door noncehergebruik
  3. Timingaanvallen in code op applicatieniveau
  4. Belangrijkste patronen van verkeerd cryptografisch gebruik
← Terug naar Cryptology Academy