MINT lernen

Vigenère knacken

Eine Schatzkarte, fünf Wiederholungen und eine Strichliste pro Spalte — bis das Schlüsselwort dasteht.

Dein Fortschritt:
0 / 0 Aufgaben
1

Die Schatzkarte der Informatik-AG

AFB I–II

Bei einer Schnitzeljagd der Informatik-AG taucht ein mit dem Vigenère-Verfahren verschlüsselter Text auf (219 Buchstaben, in Fünferblöcken notiert). Ein Teammitglied hat den Geheimtext nach Buchstabenfolgen durchsucht, die mehrfach vorkommen; die Positionen zählen ab dem ersten Buchstaben.

Geheimtext
IYTZU MUVGD NYIAM SNGYV JLCSL JHGPU MYCTJ FHFKW XQCSV JMILZ JPQUV JLCSL JHGPU MYBLZ SMEOJ NNVLF FWJUG WXGUM SXIYS GYFVJ YQQKW WMVLA SFKLY YQGYV JHUJZ FNBMA SXGAL JCNAA MHILJ JWJAE NNFLJ LUPGW SENHK XYFLJ XWJSM JMULD EOTRA XNGSA JAVBF YYTKW RMVLA SXGYS QNGUE FOGY
219 Buchstaben; Leer- und Satzzeichen wurden vor dem Verschlüsseln entfernt.
Mehrfach auftretende Buchstabenfolgen
Folgeerste Positionzweite Position
GYV18118
VJLCSLJHGPUMY2055
MVLAS107202
ASXG130205
FLJ153168
Jede Folge kommt genau zweimal vor.
  1. Nennen Sie die Ursache dafür, dass im Vigenère-Geheimtext Buchstabenfolgen mehrfach auftreten.
  2. Bestätigen Sie mithilfe der Tabelle, dass das Schlüsselwort vermutlich fünf Buchstaben lang ist.
  3. Begründen Sie, warum die 13 Buchstaben lange Wiederholung als Beleg deutlich stärker wiegt als eine Dreierfolge wie FLJ.

Hinweise

Hinweis zu Aufgabe a)
Denke an die Situation beim Verschlüsseln: Wann wird dieselbe Klartextfolge zu derselben Geheimtextfolge?
Hinweis zu Aufgabe b)
Berechne alle Abstände und zerlege sie in Primfaktoren.Bestätigen heißt: die vorgegebene Zahl durch eigene Rechnung belegen.
Hinweis zu Aufgabe c)
Schätze ab, wie wahrscheinlich es ist, dass zwei zufällige Dreierfolgen übereinstimmen — und wie viele Positionspaare es in 219 Buchstaben gibt.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Steht dieselbe Klartextfolge (z. B. ein häufiges Wort) zweimal im Text und beginnt beide Male an derselben Stelle des periodisch wiederholten Schlüsselworts, wird sie mit denselben Verschiebungen verschlüsselt und ergibt dieselbe Geheimtextfolge. Der Abstand ist dann ein Vielfaches der Schlüssellänge.

Erwartungshorizont zu Aufgabe b)
FolgeAbstandZerlegung
GYV1002² · 5²
VJLCSLJHGPUMY355 · 7
MVLAS955 · 19
ASXG753 · 5²
FLJ153 · 5

Der einzige gemeinsame Teiler größer als 1 ist 5: \(\operatorname{ggT}(100, 35, 95, 75, 15) = 5\). Die Schlüssellänge teilt alle Abstände, also ist sie vermutlich 5 (die Länge 1 hieße Caesar; dann müsste die Auszählung eine deutliche E-Spitze zeigen, die ein Vigenère-Text nicht hat).

Erwartungshorizont zu Aufgabe c)

Zwei zufällige Dreierfolgen stimmen mit einer Wahrscheinlichkeit von etwa \(1 : 26^3 = 1 : 17\,576\) überein. In 219 Buchstaben gibt es 217 Dreierfolgen und damit \(\binom{217}{2} = 23\,436\) Paare — man erwartet also rund eine zufällige Dreierwiederholung. FLJ könnte Zufall sein (ihr Abstand 15 passt hier aber zu 5).

Eine zufällige Übereinstimmung von 13 Buchstaben ist dagegen praktisch ausgeschlossen (\(26^{13} \approx 2{,}5 \cdot 10^{18}\) Möglichkeiten). Sie stammt fast sicher von einer gleichen Klartextfolge unter gleicher Schlüsselposition; ihr Abstand 35 ist daher ein verlässlicher Hinweis.

2

Das Schlüsselwort rekonstruieren

AFB II–III

Der Geheimtext aus Aufgabe 1 wird in fünf Teiltexte zerlegt: Teiltext 1 besteht aus dem 1., 6., 11., … Buchstaben, Teiltext 2 aus dem 2., 7., 12., … Buchstaben usw. Die Tabelle zeigt die häufigsten Buchstaben jedes Teiltexts. Außerdem ist bekannt: Das Schlüsselwort ist ein Tiername.

Auszählung der Teiltexte
TeiltextBuchstabenhäufigsterzweithäufigsterdritthäufigster
144J (11)S (7)F, M, X (je 4)
244Y (7)N (6)H, M (je 5)
344G (10)V (5)C, F, I (je 4)
444L (10)S, Y (je 5)A, U (je 4)
543A, J (je 6)—V, W (je 4)
Angegeben sind die Buchstaben mit ihrer Anzahl im jeweiligen Teiltext.
  1. Analysieren Sie die Auszählung im Hinblick auf das Schlüsselwort. Gehen Sie dabei besonders auf Teiltext 5 ein.
  2. Entwerfen Sie eine Python-Funktion schluessel_finden(geheimtext, n), die für jeden der \(n\) Teiltexte den häufigsten Buchstaben als E deutet und das vermutete Schlüsselwort zurückgibt.
  3. Bewerten Sie die Sicherheit des Vigenère-Verfahrens für die Schnitzeljagd und für den Fall, dass ein zufälliger Schlüssel, der so lang ist wie der Text, nur einmal verwendet wird.

Hinweise

Hinweis zu Aufgabe a)
Jeder Teiltext ist Caesar-verschlüsselt: Schlüsselbuchstabe = häufigster Buchstabe − 4. Bei Gleichstand teste die Kandidaten, indem du auch die anderen häufigen Buchstaben entschlüsselst.
Hinweis zu Aufgabe b)
Zerlege die Aufgabe in eine Hilfsfunktion für den häufigsten Buchstaben und eine Schleife über die Teiltexte. Überlege, was deine Funktion bei Gleichstand zurückgibt.
Hinweis zu Aufgabe c)
Kriterien: Verhältnis von Textlänge zu Schlüssellänge, Art des Schlüssels (Wort oder Zufall), Mehrfachverwendung.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Teiltexte 1–4 (häufigster Buchstabe ↔ E): J → F, Y → U, G → C, L → H. Probe mit dem zweithäufigsten Buchstaben: S − F = N, N − U = T, V − C = T, S bzw. Y − H = L bzw. R — häufige Buchstaben, die Zuordnung ist plausibel.

Teiltext 5 ist nicht eindeutig: A und J kommen gleich oft vor, und E muss nicht der häufigste Buchstabe sein. Test der Kandidaten:

AnnahmeJ →A →V →W →Bewertung
Schlüssel F (J ↔ E)EVQRV und Q selten — unplausibel
Schlüssel W (A ↔ E)NEZAZ selten, FUCHW kein Tier
Schlüssel S (W ↔ E)RIDElauter häufige Buchstaben

Nur S liefert durchweg häufige deutsche Buchstaben (E selbst ist hier nur viermal vertreten — bei 43 Buchstaben ein Zufallseffekt). Zusammen mit dem Hinweis „Tiername“ ergibt sich das Schlüsselwort FUCHS; der entschlüsselte Text beginnt mit „DER SCHATZ LIEGT UNTER DER ALTEN EICHE …“.

Erwartungshorizont zu Aufgabe b)
def haeufigster(text):
    anzahl = [0] * 26
    for c in text:
        anzahl[ord(c) - 65] += 1
    # Nummer des häufigsten Buchstabens
    return anzahl.index(max(anzahl))

def schluessel_finden(geheimtext, n):
    wort = ""
    for i in range(n):
        teiltext = ""
        # jeder n-te Buchstabe ab Position i
        for j in range(i, len(geheimtext), n):
            teiltext = teiltext + geheimtext[j]
        # häufigster Buchstabe ↔ E (Nummer 4)
        k = (haeufigster(teiltext) - 4) % 26
        wort = wort + chr(k + 65)
    return wort

Mit dem Geheimtext und \(n = 5\) liefert die Funktion "FUCHW": Bei Gleichstand gibt index den ersten Treffer (A) zurück. Ein vollständiger Entwurf benennt diese Schwäche, z. B. mit dem Vorschlag, bei Gleichstand mehrere Kandidaten zurückzugeben oder die Teiltexte mit der ganzen deutschen Häufigkeitsverteilung zu vergleichen. Kürzere Lösungen mit Slicing geheimtext[i::n] sind gleichwertig.

Erwartungshorizont zu Aufgabe c)

Schnitzeljagd: Der Schlüssel ist ein kurzes, sinnvolles Wort; bei 219 Buchstaben hat jeder Teiltext über 40 Buchstaben. Kasiski-Test und spaltenweise Häufigkeitsanalyse führen mit Papier und Bleistift in unter einer Stunde zum Ziel. Für ein Spiel ist das angemessen — als Schutz geheimer Daten ist es unsicher.

Zufälliger Schlüssel so lang wie der Text, einmal verwendet (One-Time-Pad): Es gibt keine Periode, also keine systematischen Wiederholungen, und jeder „Teiltext“ besteht nur aus einem Buchstaben. Zu einem Geheimtext passt jeder gleich lange Klartext mit einem passenden Schlüssel — das Verfahren ist beweisbar sicher. Der Preis: Der Schlüssel ist so groß wie die Nachricht und muss vorher sicher übergeben werden; bei Wiederverwendung bricht die Sicherheit zusammen. Vollständig ist eine Bewertung, die beide Fälle an denselben Kriterien misst.