0Pricing
Cryptology Academy · Lektion

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 startup

Stolperfalle 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 encryption

Stolperfalle 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):
    pass

Stolperfalle 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 wrapper

Stolperfalle 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-Poly1305

Sicheres 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

  1. Überblick über die Python-cryptography-Bibliothek
  2. AES-GCM in Python ver- und entschlüsseln
  3. RSA- und ECDSA-Schlüsselpaare in Python
  4. Häufige Python-Krypto-Fallen und sichere Muster
← Zurück zu Cryptology Academy