Die häufigsten Muster für den Fehlgebrauch von Kryptografie
Verschaffen Sie sich einen Überblick über die häufigsten Fehler von Entwicklern: ECB-Modus, schwache PRNG-Initialisierung und selbst entwickelte Kryptografie.
Die häufigsten Muster für den Fehlgebrauch von Kryptografie 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.
Der ECB-Modus gibt Blockmuster preis
Der Electronic-Codebook-(ECB-)Modus verschlüsselt jeden Block unabhängig mit demselben Schlüssel. Identische Klartextblöcke erzeugen identische Chiffratblöcke. Die klassische Demonstration ist der „ECB-Pinguin“: Wird ein Bitmapbild im ECB-Modus verschlüsselt, bleibt die Struktur des Bildes auf Blockebene erhalten, sodass der Umriss des Pinguins im Chiffrat deutlich sichtbar bleibt. Der ECB-Modus bietet keine semantische Sicherheit und sollte niemals für praktische Verschlüsselungszwecke verwendet werden.
Kryptografie selbst implementieren
Die kryptografischen Primitive selbst zu implementieren gehört zu den gefährlichsten Praktiken in der Softwareentwicklung. Kryptografie muss unter Bedingungen mit einem Angreifer als Gegenüber vollkommen korrekt funktionieren: Ein subtiler Timing-Leak, ein Off-by-one-Fehler beim Padding oder ein Missverständnis der Sicherheitsanforderungen kann ausnutzbare Sicherheitslücken erzeugen, die sich bei normalen Tests nicht von korrektem Verhalten unterscheiden lassen. Selbst erfahrene Kryptografen machen Implementierungsfehler; Anwendungsentwickler sollten ausschließlich gut geprüfte Bibliotheken verwenden.
MD5 und SHA-1 für Sicherheitszwecke
MD5 gilt seit 2004 als kollisionsgebrochen; zwei Dateien mit demselben MD5-Hash zu erzeugen, ist mit geringem Rechenaufwand möglich. Praktische Kollisionsangriffe auf SHA-1 wurden 2017 durch Googles SHAttered-Angriff demonstriert, bei dem zwei PDF-Dateien mit demselben SHA-1-Hash erzeugt wurden. Keine der beiden Funktionen sollte für Sicherheitszwecke verwendet werden: weder für digitale Signaturen, die Integrität von Inhalten, die Passwortspeicherung noch für HMAC. Verwenden Sie für moderne Systeme SHA-256, SHA-3 oder BLAKE2.
Vorhersagbares Seeding von PRNGs
Die Verwendung von time() oder anderen vorhersehbaren Werten als Startwert für einen Pseudozufallszahlengenerator ist eine kritische Sicherheitslücke, wenn die Ausgabe des PRNG für Sicherheitszwecke verwendet wird. Ein Angreifer, der ungefähr weiß, wann ein Schlüssel erzeugt wurde, kann den möglichen Bereich der Startwerte (alle Zeitstempel in einem kleinen Zeitfenster) per Brute-Force durchsuchen und den Schlüssel rekonstruieren. Ein klassisches Beispiel: Frühe Versionen von Netscape verwendeten die Zeit und die Prozess-ID zum Erzeugen von SSL-Schlüsseln; beides konnte ein Angreifer auf demselben Rechner beobachten.
Auswahl eines schwachen PRNG
rand() in C, java.util.Random und Pythons Modul random verwenden deterministische lineare Kongruenzgeneratoren oder den Mersenne-Twister. Diese sind für statistische Qualität in Simulationen ausgelegt, nicht für Sicherheit. Ein Angreifer, der genügend Ausgaben dieser Generatoren beobachtet, kann ihren internen Zustand rekonstruieren und alle zukünftigen Ausgaben vorhersagen. Verwenden Sie für Sicherheitszwecke vom Betriebssystem bereitgestellte CSPRNGs: secrets.token_bytes() in Python, crypto.randomBytes() in Node.js oder /dev/urandom unter Linux.
Verschlüsseln ohne Authentifizierung
Verschlüsselung ohne Authentifizierung bietet nur Vertraulichkeit, nicht aber Integrität. Ein Angreifer, der den Klartext nicht lesen kann, kann das Chiffrat dennoch verändern und dadurch möglicherweise vorhersehbare Änderungen am Klartext bewirken (insbesondere im CTR- oder CBC-Modus). Diese Manipulierbarkeit ermöglicht Angriffe: Ein Angreifer, der eine verschlüsselte Banktransaktion abfängt, kann Bits umkehren und so den Überweisungsbetrag oder das Zielkonto ändern, ohne den Klartext zu kennen. Verwenden Sie immer authentifizierte Verschlüsselung (AEAD).
Schlüssel und IVs fest im Code hinterlegen
Das Festschreiben von Verschlüsselungsschlüsseln oder Initialisierungsvektoren im Quellcode ist eine kritische Sicherheitslücke. Quellcode wird häufig in Versionsverwaltungssysteme eingecheckt, manchmal in öffentliche. Selbst in privaten Repositorys kann jeder mit Zugriff auf den Code den Schlüssel verwenden. Fest hinterlegte Schlüssel bedeuten, dass alle Instanzen denselben Schlüssel verwenden, und eine Schlüsselrotation erfordert eine erneute Bereitstellung. Schlüssel müssen in Umgebungsvariablen, Systemen zur Verwaltung von Geheimnissen (HashiCorp Vault, AWS Secrets Manager) oder Hardware-Sicherheitsmodulen gespeichert werden.
Initialisierungsvektoren wiederverwenden
Die Verwendung desselben Initialisierungsvektors für mehrere Verschlüsselungen mit demselben Schlüssel erzeugt schwerwiegende Sicherheitslücken. Im CTR-Modus erzeugt die Wiederverwendung des IV denselben Schlüsselstrom, wodurch sich der Klartext über XOR rekonstruieren lässt. Im CBC-Modus kann ein Angreifer durch die Wiederverwendung des IV erkennen, wann zwei Nachrichten mit denselben Klartextblöcken beginnen. Im GCM-Modus ist die Wiederverwendung der Nonce (IV) katastrophal (siehe die Lektion zur Nonce-Wiederverwendung). Erzeugen Sie für jede Verschlüsselungsoperation einen neuen zufälligen IV und stellen Sie ihn zur Speicherung gemeinsam mit dem Entschlüsselungskontext dem Chiffrat voran.
Passwort-Hashing mit schnellen Hashfunktionen
Passwörter mit MD5, SHA-256 oder einer anderen schnellen kryptografischen Hashfunktion zu speichern, ist unzureichend. Moderne GPUs können Milliarden SHA-256-Hashes pro Sekunde berechnen, wodurch Offline-Brute-Force-Angriffe auf gestohlene Hash-Datenbanken trivial schnell werden. Passwort-Hashing erfordert speziell dafür entwickelte langsame, speicherintensive Funktionen: bcrypt, scrypt oder Argon2id. Diese sind darauf ausgelegt, Brute-Force-Angriffe selbst mit spezialisierter Hardware teuer zu machen und Offline-Angriffe rechnerisch praktisch unmöglich zu halten.
Zertifikatsprüfung ignorieren
Das Deaktivieren der SSL/TLS-Zertifikatsprüfung (durch Setzen von ssl.CERT_NONE in Python, Übergabe von -k an curl oder Setzen von trustAllCerts=true in Android) beseitigt den Schutz vor Man-in-the-Middle-Angriffen. Ein Angreifer kann jedes beliebige Zertifikat vorlegen und die gesamte Kommunikation abfangen. Dieses Vorgehen wird in der Entwicklung eingesetzt, um Fehler durch selbstsignierte Zertifikate zu umgehen, bleibt aber häufig in der Produktion bestehen. Verwenden Sie immer eine korrekte Zertifikatsprüfung und beheben Sie die zugrunde liegenden Zertifikatsprobleme ordnungsgemäß.
Rückgabewerte nicht prüfen
Kryptografische Funktionen melden Fehler über Rückgabewerte oder Ausnahmen. Werden diese ignoriert, kann die Ausführung mit einem ungültigen Zustand fortgesetzt werden: etwa nach einer Entschlüsselung, die unbrauchbare Daten erzeugt hat, einer fehlgeschlagenen Verifizierung oder einer fehlerhaften Schlüsselerzeugung. Bei C-basierten APIs wie OpenSSL ist das Ignorieren von Rückgabewerten besonders gefährlich, da das Programm möglicherweise mit nicht initialisiertem Speicher fortfährt. Prüfen Sie immer jeden Rückgabewert kryptografischer Funktionen und behandeln Sie Fehler sicher.
Schwachstelle des ECB-Modus
Warum gilt der ECB-Modus (Electronic Codebook) als unsicher für die Verschlüsselung von Daten?
Zusammenfassung des fehlerhaften Einsatzes von Kryptografie
Die wichtigsten zu vermeidenden Fehlanwendungen: Verwenden Sie niemals den ECB-Modus (Preisgabe von Blockmustern), implementieren Sie niemals kryptografische Primitive selbst, lehnen Sie MD5 und SHA-1 für Sicherheitszwecke ab, initialisieren Sie PRNGs nicht mit time(), sondern mit einem CSPRNG, verwenden Sie für alle sicherheitsrelevanten Zufallswerte einen CSPRNG, authentifizieren Sie verschlüsselte Daten immer (AEAD), hinterlegen Sie Schlüssel oder IVs niemals fest im Code, erzeugen Sie für jede Verschlüsselung einen neuen IV, verwenden Sie für Passwörter Argon2id statt schneller Hashfunktionen, prüfen Sie TLS-Zertifikate immer und kontrollieren Sie jeden Rückgabewert kryptografischer Funktionen.
Häufig gestellte Fragen
Ist die Lektion „Die häufigsten Muster für den Fehlgebrauch von Kryptografie“ kostenlos?
Ja — der vollständige Text von „Die häufigsten Muster für den Fehlgebrauch von Kryptografie“ 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 „Die häufigsten Muster für den Fehlgebrauch von Kryptografie“?
Verschaffen Sie sich einen Überblick über die häufigsten Fehler von Entwicklern: ECB-Modus, schwache PRNG-Initialisierung und selbst entwickelte Kryptografie. 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 „Die häufigsten Muster für den Fehlgebrauch von Kryptografie“?
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
- Padding-Oracle-Angriffe im Detail
- Replay-Angriffe und Schwachstellen durch Nonce-Wiederverwendung
- Timing-Angriffe in Code auf Anwendungsebene
- Die häufigsten Muster für den Fehlgebrauch von Kryptografie