Häufige Python-Krypto-Fallen und sichere Muster
Vermeiden Sie fest codierte Schlüssel, den ECB-Modus, Vergleiche ohne konstante Laufzeit und weitere Fehler.
Häufige Python-Krypto-Fallen und sichere Muster ist eine kostenlose Cryptology Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Cryptology Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Cryptology Academy-Kurs umfasst insgesamt 4 Lektionen.
Die gefährlichsten Fehler bei Kryptografie
Kryptografie lässt sich leicht falsch anwenden. Zu den häufigsten Fehlern in Python gehören fest im Code hinterlegte Schlüssel, der ECB-Modus, Vergleiche ohne konstante Laufzeit, schwache Zufallswerte, die Wiederverwendung von Schlüsseln oder Nonces sowie das Entwickeln eigener Kryptografie.
Stolperfalle 1: Fest im Code hinterlegte Schlüssel
Betten Sie Schlüssel niemals in den Quellcode ein. Sie landen in der Git-Historie, in Protokollen und in Fehlermeldungen. Verwenden Sie Umgebungsvariablen oder ein 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 startupStolperfalle 2: ECB-Modus
AES-ECB verschlüsselt jeden Block unabhängig – identische Klartextblöcke erzeugen identische Chiffretextblöcke. Der Angriff mit dem "ECB-Pinguin" macht Muster in Bildern und strukturierten Daten sichtbar. Verwenden Sie immer GCM oder CBC mit einem zufälligen 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 encryptionStolperfalle 3: MAC-Vergleich ohne konstante Laufzeit
Die Verwendung von == zum Vergleichen von MACs verrät Informationen über die Laufzeit. Verwenden Sie immer 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):
passStolperfalle 4: Schwache Generierung von Zufallszahlen
Verwenden Sie das Modul random niemals für kryptografische Zwecke – es ist kein CSPRNG. Verwenden Sie secrets oder 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 wrapperStolperfalle 5: Wiederverwendung von IVs und Nonces
Die Wiederverwendung eines IV bei CBC oder einer Nonce bei GCM beeinträchtigt die Sicherheit. Generieren Sie für jede Verschlüsselung einen neuen zufälligen IV bzw. eine neue zufällige Nonce und speichern Sie ihn bzw. sie zusammen mit dem Chiffretext:
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)Stolperfalle 6: MD5 oder SHA-1 für Sicherheitszwecke verwenden
MD5 und SHA-1 sind hinsichtlich ihrer Kollisionsresistenz kryptografisch gebrochen. Verwenden Sie sie niemals für digitale Signaturen, Zertifikatsfingerabdrücke oder HMAC. Verwenden Sie SHA-256 oder SHA-3-256.
Stolperfalle 7: Eigene Kryptografie entwickeln
Die Implementierung kryptografischer Primitive von Grund auf führt fast immer zu subtilen Fehlern. Verwenden Sie die Pakete cryptography, PyNaCl oder PyCA. Implementieren Sie AES, RSA oder ECDSA niemals selbst.
Sicheres Muster: PyNaCl für Kryptografie auf hoher Ebene
PyNaCl kapselt die NaCl/libsodium-Bibliothek – eine bewusst eingeschränkte und schwer falsch zu verwendende API:
# 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-Poly1305Sicheres Muster: Passwort-Hashing mit Argon2
Verwenden Sie argon2-cffi zum Hashen von Passwörtern – niemals SHA-256 oder bcrypt direkt:
# 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")Schlüssel-Nullisierung
Setzen Sie einen Schlüssel nach seiner Verwendung im Speicher auf null, um das Zeitfenster für Memory-Dump-Angriffe zu verkleinern. Der Garbage Collector von Python erschwert dies – verwenden Sie ctypes oder PyNaCl, das dies automatisch übernimmt.
Wissenscheck
Welche Python-Funktion muss anstelle von == zum Vergleichen kryptografischer MACs verwendet werden?
Zusammenfassung der Lektion
Vermeiden Sie fest im Code hinterlegte Schlüssel, den ECB-Modus, == zum Vergleichen von MACs, das Modul random und die Wiederverwendung von Nonces. Verwenden Sie os.urandom/secrets für Zufallswerte, AESGCM zur Verschlüsselung und hmac.compare_digest zur Verifizierung. PyNaCl und argon2-cffi bieten sichere APIs auf hoher Ebene für symmetrische Kryptografie und Passwörter.
Häufig gestellte Fragen
Ist die Lektion „Häufige Python-Krypto-Fallen und sichere Muster“ kostenlos?
Ja — der vollständige Text von „Häufige Python-Krypto-Fallen und sichere Muster“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Cryptology Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Cryptology Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Häufige Python-Krypto-Fallen und sichere Muster“?
Vermeiden Sie fest codierte Schlüssel, den ECB-Modus, Vergleiche ohne konstante Laufzeit und weitere Fehler. Du übst Cryptology Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Cryptology Academy zu starten?
Keine Vorkenntnisse erforderlich. Cryptology Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Häufige Python-Krypto-Fallen und sichere Muster“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Cryptology Academy-Lektion Code schreiben und ausführen?
Ja. Jede Cryptology Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Überblick über die Python-cryptography-Bibliothek
- AES-GCM in Python ver- und entschlüsseln
- RSA- und ECDSA-Schlüsselpaare in Python
- Häufige Python-Krypto-Fallen und sichere Muster