Veelvoorkomende cryptovalkuilen in Python en veilige patronen
Vermijd hardcoded sleutels, ECB-modus, vergelijkingen die niet constant in tijd zijn en meer.
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 startupValkuil 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 encryptionValkuil 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):
passValkuil 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 wrapperValkuil 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-Poly1305Veilig 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.
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
- Overzicht van de Python cryptography-bibliotheek
- AES-GCM versleutelen en ontsleutelen in Python
- RSA- en ECDSA-sleutelparen in Python
- Veelvoorkomende cryptovalkuilen in Python en veilige patronen