Assignment Chef icon Assignment Chef
All German tutorials

Programming lesson

Kryptographie-Entschlüsselung: Monoalphabetische und Vigenère-Chiffren knacken – Anleitung für CSCI 181

Lerne, wie du mit Frequenzanalyse und Kasiski-Methode monoalphabetische und Vigenère-Chiffren entschlüsselst. Schritt-für-Schritt-Anleitung für die Hausaufgabe 1 in CSCI 181.

Kryptographie Tutorial Monoalphabetische Chiffre entschlüsseln Vigenère-Chiffre knacken Frequenzanalyse Deutsch Kasiski-Methode CSCI 181 Hausaufgabe Python Vigenère Verschlüsselung Entschlüsselung ohne Brute Force Buchstabenhäufigkeit Deutsch Schlüssellänge bestimmen Kryptographie für Studenten Geheimtext entschlüsseln üben Cybersicherheit Grundlagen Klassische Chiffren lösen Programmieraufgabe Kryptographie

Einführung in die Kryptographie: Von Caesar bis Vigenère

Die Kryptographie ist heute relevanter denn je – ob beim Verschlüsseln von WhatsApp-Nachrichten, bei Blockchain-Transaktionen oder in der Cybersicherheit von KI-Systemen. In diesem Tutorial lernst du, wie man klassische Chiffren wie die monoalphabetische Substitution und die Vigenère-Chiffre entschlüsselt – genau das, was in der Hausaufgabe 1 (CSCI 181) verlangt wird. Wir zeigen dir, wie du Frequenzanalyse und die Kasiski-Methode anwendest, ohne brute Force. Du wirst sehen: Kryptographie ist wie ein spannendes Rätsel – ähnlich wie das Lösen eines Escape Games oder das Entschlüsseln eines viralen Codes in einer Social-Media-Challenge.

Teil 1: Monoalphabetische Substitution – Frequenzanalyse in der Praxis

Im ersten Teil der Aufgabe (10 Punkte) geht es um einen Geheimtext, der mit einer monoalphabetischen Chiffre verschlüsselt wurde. Deine Aufgabe: entschlüsseln mit Frequenzanalyse. Hier ist der Schlüssel: Buchstaben werden eins zu eins ersetzt, aber die Häufigkeitsverteilung bleibt gleich. Im Deutschen ist der häufigste Buchstabe das E, gefolgt von N, I, S, R, A, T.

Schritt 1: Buchstabenhäufigkeit zählen

Zuerst zählst du, wie oft jeder Buchstabe im Chiffrat vorkommt. Du kannst das manuell machen oder ein Python-Skript schreiben. Ein Beispiel: Angenommen, der häufigste Buchstabe im Chiffrat ist Z. Dann ist es sehr wahrscheinlich, dass Z für E steht. So gehst du vor:

  • Erstelle eine Häufigkeitstabelle (z. B. Z: 12%, W: 10%, Q: 9% usw.)
  • Vergleiche mit der Standardverteilung der deutschen Sprache.
  • Ersetze die häufigsten Buchstaben zuerst.

Schritt 2: Muster erkennen und Wörter erraten

Nach einigen Ersetzungen siehst du vielleicht Teile von Wörtern. Im Chiffrat ZIW VQKD LAFLIOFW YOSZWKWR ZIKGAUI könntest du nach Ersetzung von Z→E und W→N EIN V?KD LAFLIOFN YOS?ENKR EIKGAUI erhalten. Dann errätst du vielleicht EIN als Artikel. So arbeitest du dich vor – wie bei einem Wordle-Spiel, nur mit Buchstaben! Notiere jeden Schritt in deiner Abgabe.

Schritt 3: Vollständige Entschlüsselung

Am Ende erhältst du den Klartext. Zeige in deiner Lösung die Häufigkeitstabelle, deine Ersetzungsschritte und den finalen Text. Ein Beispiel für einen entschlüsselten Satz könnte sein: „Die Vögel zwitschern im Wald“ – aber dein tatsächlicher Text wird anders sein.

Teil 2: Vigenère-Chiffre – Programmieren in Python

Im zweiten Teil (10 Punkte) schreibst du ein Programm in Python, das die Vigenère-Chiffre ver- und entschlüsselt. Die Vigenère-Chiffre ist eine polyalphabetische Substitution: Ein Schlüsselwort gibt an, um wie viele Positionen jeder Buchstabe im Alphabet verschoben wird.

Verschlüsselungsfunktion

Die Funktion encrypt(plaintext, keyword) nimmt den Klartext und das Schlüsselwort. Jeder Buchstabe wird um den Wert des entsprechenden Schlüsselbuchstabens (A=0, B=1, …, Z=25) verschoben. Beispiel: encrypt('HELLO', 'KEY') ergibt RIJVS. So implementierst du es:

def encrypt(plaintext, keyword):
    ciphertext = []
    key_index = 0
    for char in plaintext.upper():
        if char.isalpha():
            shift = ord(keyword[key_index % len(keyword)]) - ord('A')
            cipher_char = chr((ord(char) - ord('A') + shift) % 26 + ord('A'))
            ciphertext.append(cipher_char)
            key_index += 1
        else:
            ciphertext.append(char)
    return ''.join(ciphertext)

Entschlüsselungsfunktion

Die Funktion decrypt(ciphertext, keyword) macht das Gegenteil: Sie subtrahiert die Verschiebung. Teste dein Programm mit dem Beispiel aus der Vorlesung.

Teil 3: Vigenère-Knacken mit Kasiski-Methode und Frequenzanalyse

Der dritte Teil (30 Punkte) ist der anspruchsvollste: Du erhältst einen längeren Chiffrattext (hw1q3-cipher.txt), der mit Vigenère verschlüsselt ist. Dein Ziel: Finde die Schlüssellänge und dann den Schlüssel selbst.

Schritt 1: Schlüssellänge mit Kasiski-Methode bestimmen

Die Kasiski-Methode sucht nach wiederholten Trigraphen (Dreiergruppen von Buchstaben) im Chiffrat. Wenn du z. B. XYZ zweimal siehst, berechnest du den Abstand zwischen den Vorkommen. Dieser Abstand ist oft ein Vielfaches der Schlüssellänge. Notiere alle Abstände und finde den größten gemeinsamen Teiler (ggT) – das ist ein guter Kandidat für die Schlüssellänge k.

Schritt 2: Frequenzvektoren für jede Position

Angenommen, du vermutest k = 5. Dann betrachtest du alle Buchstaben an Positionen 0, 5, 10, … (erster Vektor), dann Positionen 1, 6, 11, … (zweiter Vektor) usw. Für jeden Vektor zählst du die Häufigkeit von A bis Z. Das ergibt k Vektoren der Länge 26. Beispiel:

  • Vektor 1: [10, 0, 0, 1, 1, 3, 7, 0, 0, 5, 7, 3, 2, 2, 0, 0, 1, 0, 4, 1, 2, 3, 10, 0, 1, 6]
  • Unterstreiche alle Zahlen ≥ 4 – das sind die häufigsten Buchstaben.

Schritt 3: Verschiebung pro Vektor ermitteln

Im Deutschen sind die häufigsten Buchstaben E, N, I, S, R, A, T. Die Abstände zwischen E und A sind 4, zwischen E und T sind 15, zwischen E und N sind 9 (A=0, E=4, N=13, T=19). Wenn in einem Vektor der häufigste Buchstabe z. B. an Position 8 (I) liegt, dann könnte die Verschiebung so sein, dass I dem E entspricht: Shift = (8 - 4) mod 26 = 4. Probiere alle möglichen Shifts aus: Verschiebe die Häufigkeitsverteilung so, dass die Spitzen mit E, N, I usw. übereinstimmen. Notiere alle plausiblen Shifts pro Vektor.

Schritt 4: Schlüsselwort rekonstruieren

Aus den Shifts ergibt sich der Schlüssel: Shift 0 → A, Shift 1 → B usw. Wenn du für jeden Vektor einen Shift hast, erhältst du das Schlüsselwort. Teste es, indem du das Chiffrat mit deinem Programm aus Teil 2 entschlüsselst. Der Klartext sollte sinnvolles Deutsch ergeben.

Trends und Beispiele aus dem Jahr 2026

Stell dir vor, du entschlüsselst eine geheime Nachricht in einem Metaverse-Escape-Room oder knackst den Code eines KI-generierten Rätsels. Kryptographie ist nicht nur für Hacker – auch in Fintech-Apps wie N26 oder Trade Republic werden Verschlüsselungen genutzt, um deine Daten zu schützen. Oder denk an Verschlüsselung in Messengern wie Signal – ohne sie wäre Privatsphäre unmöglich. Mit diesem Wissen bist du bereit, die Hausaufgabe zu meistern und vielleicht sogar einen Bug-Bounty-Wettbewerb zu gewinnen!

Häufige Fehler und Tipps

  • Nicht brute forcen: Zeige deine Zwischenschritte, sonst gibt es Punktabzug.
  • Schlüssellänge prüfen: Teste mehrere Kandidaten, falls der ggT nicht eindeutig ist.
  • Groß-/Kleinschreibung ignorieren: Arbeite nur mit Großbuchstaben.
  • Dokumentation: Schreibe Kommentare in deinen Code und erkläre deine Logik.

Fazit

Mit Frequenzanalyse und Kasiski-Methode kannst du selbst komplexe Chiffren knacken. Diese Techniken sind die Grundlage für moderne Kryptographie – vom SSL/TLS-Protokoll bis zur Ende-zu-Ende-Verschlüsselung. Übe sie gut, denn sie sind der Schlüssel (Wortspiel beabsichtigt) zu vielen weiteren Geheimnissen.