Cryptology Academy · Les

Veelvoorkomende cryptovalkuilen in Python en veilige patronen

Vermijd hardcoded sleutels, ECB-modus, vergelijkingen die niet constant in tijd zijn en meer.

Les 4 van 413 stappen

Veelvoorkomende cryptovalkuilen in Python en veilige patronen 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.

De gevaarlijkste fouten in cryptografie

Cryptografie is gemakkelijk verkeerd te gebruiken. De meest voorkomende valkuilen in Python zijn: hardgecodeerde sleutels, de ECB-modus, vergelijkingen die niet in constante tijd worden uitgevoerd, zwakke willekeurigheid, het hergebruiken van sleutels of nonces en zelf cryptografie bouwen.

Valkuil 1: hardgecodeerde sleutels

Neem sleutels nooit op in broncode. Ze belanden in de Git-geschiedenis, logboeken en foutmeldingen. Gebruik omgevingsvariabelen of een KMS:

# WRONG
SECRET_KEY = b"my_secret_key_12"  # visible in git!

# RIGHT
import os
SECRET_KEY = os.environb.get(b"SECRET_KEY") or os.urandom(32)
# Or load from KMS at startup

Valkuil 2: ECB-modus

AES-ECB versleutelt elk blok afzonderlijk — identieke blokken platte tekst leveren identieke blokken versleutelde tekst op. De aanval met de "ECB-pinguïn" onthult patronen in afbeeldingen en gestructureerde gegevens. Gebruik altijd GCM of CBC met een willekeurige IV.

# WRONG — never use ECB
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
cipher = Cipher(algorithms.AES(key), modes.ECB())  # insecure!

# RIGHT
from cryptography.hazmat.primitives.ciphers.aead import AESGCM
aesgcm = AESGCM(key)  # authenticated encryption

Valkuil 3: MAC's vergelijken zonder constante uitvoeringstijd

MAC's vergelijken met == lekt informatie over de uitvoeringstijd. Gebruik altijd hmac.compare_digest:

import hmac

# WRONG — leaks timing
if received_mac == expected_mac:
    pass

# RIGHT — constant-time
if hmac.compare_digest(received_mac, expected_mac):
    pass

Valkuil 4: zwakke generatie van willekeurige getallen

Gebruik de module random nooit voor cryptografische doeleinden — deze is geen CSPRNG. Gebruik secrets of os.urandom:

import random, secrets, os

# WRONG
key = bytes([random.randint(0, 255) for _ in range(32)])  # predictable!

# RIGHT
key = os.urandom(32)          # OS CSPRNG
token = secrets.token_bytes(32)  # secrets module wrapper

Valkuil 5: IV's of nonces hergebruiken

Het hergebruiken van een IV met CBC of een nonce met GCM maakt de beveiliging ongedaan. Genereer voor elke encryptie een nieuwe willekeurige IV of nonce en sla deze naast de versleutelde tekst op:

import os
from cryptography.hazmat.primitives.ciphers.aead import AESGCM

key = AESGCM.generate_key(bit_length=256)
aesgcm = AESGCM(key)

# WRONG — fixed nonce
nonce = b"\x00" * 12  # reuse breaks GCM!

# RIGHT — fresh nonce every time
nonce = os.urandom(12)
ciphertext = aesgcm.encrypt(nonce, b"data", None)

Valkuil 6: MD5 of SHA-1 gebruiken voor beveiliging

MD5 en SHA-1 zijn cryptografisch gebroken wat betreft botsingsbestendigheid. Gebruik ze nooit voor digitale handtekeningen, vingerafdrukken van certificaten of HMAC. Gebruik SHA-256 of SHA-3-256.

Valkuil 7: zelf cryptografie bouwen

Cryptografische primitieve bouwstenen helemaal zelf implementeren leidt bijna altijd tot subtiele fouten. Gebruik de pakketten cryptography, PyNaCl of PyCA. Implementeer AES, RSA of ECDSA nooit zelf.

Veilig patroon: PyNaCl voor cryptografie op hoog niveau

PyNaCl gebruikt de NaCl/libsodium-bibliotheek onder de motorkap — een weloverwogen API die moeilijk verkeerd te gebruiken is:

# pip install PyNaCl
import nacl.secret
import nacl.utils

key = nacl.utils.random(nacl.secret.SecretBox.KEY_SIZE)
box = nacl.secret.SecretBox(key)

encrypted = box.encrypt(b"my secret message")
decrypted = box.decrypt(encrypted)
print("Decrypted:", decrypted)  # Uses XSalsa20-Poly1305

Veilig patroon: wachtwoordhashing met Argon2

Gebruik argon2-cffi voor het hashen van wachtwoorden — nooit rechtstreeks SHA-256 of bcrypt:

# pip install argon2-cffi
from argon2 import PasswordHasher

ph = PasswordHasher(time_cost=3, memory_cost=65536, parallelism=4)
hash_val = ph.hash("user_password")
print("Hash:", hash_val[:40], "...")

# Verify
try:
    ph.verify(hash_val, "user_password")
    print("Password correct")
except Exception:
    print("Wrong password")

Sleutels op nul zetten

Zet een sleutel na gebruik in het geheugen op nul om de periode waarin aanvallen met geheugendumps mogelijk zijn te verkorten. De garbage collector van Python maakt dit lastig — gebruik ctypes of PyNaCl, dat dit automatisch afhandelt.

Kennistoets

Welke Python-functie moet je gebruiken in plaats van == bij het vergelijken van cryptografische MAC's?

Samenvatting van de les

Vermijd hardgecodeerde sleutels, de ECB-modus, == voor het vergelijken van MAC's, de module random en het hergebruiken van nonces. Gebruik os.urandom/secrets voor willekeurigheid, AESGCM voor encryptie en hmac.compare_digest voor verificatie. PyNaCl en argon2-cffi bieden veilige API's op hoog niveau voor symmetrische cryptografie en wachtwoorden.

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 “Veelvoorkomende cryptovalkuilen in Python en veilige patronen” gratis?

Ja — de volledige tekst van “Veelvoorkomende cryptovalkuilen in Python en veilige patronen” 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 “Veelvoorkomende cryptovalkuilen in Python en veilige patronen”?

Vermijd hardcoded sleutels, ECB-modus, vergelijkingen die niet constant in tijd zijn en meer. 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 “Veelvoorkomende cryptovalkuilen in Python en veilige patronen”?

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. Overzicht van de Python cryptography-bibliotheek
  2. AES-GCM versleutelen en ontsleutelen in Python
  3. RSA- en ECDSA-sleutelparen in Python
  4. Veelvoorkomende cryptovalkuilen in Python en veilige patronen
← Terug naar Cryptology Academy