MINT lernen

Das Vigenère-Verfahren

Mit dem Vigenère-Quadrat ver- und entschlüsseln, den Python-Code erweitern und die Sicherheit abwägen.

Dein Fortschritt:
0 / 0 Aufgaben
1

Die Nachricht des Abi-Ausschusses

AFB I–II

Der Abi-Ausschuss verschickt seine Nachrichten mit dem Vigenère-Verfahren und dem Schlüsselwort EULE. Wie im Abitur wird das Vigenère-Quadrat verwendet: Die Zeile gehört zum Schlüsselbuchstaben, die Spalte zum Klartextbuchstaben. Die Buchstaben sind mit A = 1, B = 2, …, Z = 26 nummeriert. Die Abbildung zeigt die drei benötigten Zeilen des Quadrats. Leerzeichen werden übersprungen und verbrauchen keinen Schlüsselbuchstaben.

Ausschnitt aus dem Vigenère-Quadrat
Schlüssel ↓ / Klartext →A
1
B
2
C
3
D
4
E
5
F
6
G
7
H
8
I
9
J
10
K
11
L
12
M
13
N
14
O
15
P
16
Q
17
R
18
S
19
T
20
U
21
V
22
W
23
X
24
Y
25
Z
26
E (5)EFGHIJKLMNOPQRSTUVWXYZABCD
L (12)LMNOPQRSTUVWXYZABCDEFGHIJK
U (21)UVWXYZABCDEFGHIJKLMNOPQRST
Zeilen E, L und U; in der Kopfzeile die Klartextbuchstaben mit ihren Nummern.
  1. Beschreiben Sie, wie man mit dem Vigenère-Quadrat einen Klartextbuchstaben verschlüsselt und einen Geheimtextbuchstaben wieder entschlüsselt.
  2. Stellen Sie die Verschlüsselung der Nachricht TREFFEN UM ACHT in einer Tabelle mit den Zeilen Klartext, Schlüssel und Geheimtext dar.
  3. Bestimmen Sie den Klartext zum Geheimtext ILDXI JLYWY.

Hinweise

Hinweis zu Aufgabe a)
Gehe auf die Rolle von Zeile und Spalte ein und darauf, was mit dem Schlüsselwort passiert, wenn der Text länger ist als das Wort.
Hinweis zu Aufgabe b)
Schreibe das Schlüsselwort Buchstabe für Buchstabe unter den Klartext (ohne Leerzeichen) und lies jeden Geheimtextbuchstaben im Quadrat ab.Darstellen heißt hier: strukturiert in Tabellenform.
Hinweis zu Aufgabe c)
Rückwärts arbeiten: Suche in der Zeile des Schlüsselbuchstabens den Geheimtextbuchstaben; der Spaltenkopf ist der Klartextbuchstabe.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Das Schlüsselwort wird periodisch so oft wiederholt und unter den Klartext geschrieben, bis jeder Klartextbuchstabe einen Schlüsselbuchstaben hat.

Verschlüsseln: In der Zeile des Schlüsselbuchstabens und der Spalte des Klartextbuchstabens steht der Geheimtextbuchstabe. Rechnerisch wird der Klartextbuchstabe um (Nummer des Schlüsselbuchstabens − 1) Stellen zyklisch verschoben, z. B. mit E (5) um 4 Stellen.

Entschlüsseln: In der Zeile des Schlüsselbuchstabens den Geheimtextbuchstaben suchen; der Kopf dieser Spalte ist der Klartextbuchstabe (Verschiebung rückwärts).

Erwartungshorizont zu Aufgabe b)
12345678910111213
KlartextTREFFENUMACHT
SchlüsselEULEEULEEULEE
GeheimtextXLPJJYYYQUNLX

Geheimtext: XLPJJYY YQ UNLX. Auffällig: Das doppelte FF wird zu JJ, weil beide F unter E stehen; umgekehrt entsteht YYY aus drei verschiedenen Klartextbuchstaben E, N, U.

Erwartungshorizont zu Aufgabe c)
12345678910
GeheimtextILDXIJLYWY
SchlüsselEULEEULEEU
KlartextERSTEPAUSE

Klartext: ERSTE PAUSE. Beispiel: Zeile U, gesuchter Buchstabe L → Spalte R; Zeile L, gesuchter Buchstabe L → Spalte A.

2

Vigenère in Python

AFB II–III

Im Informatikkurs wurde die folgende Python-Funktion geschrieben. Sie erwartet einen Text aus Großbuchstaben ohne Leerzeichen und ein Schlüsselwort aus Großbuchstaben.

def vigenere(text, schluessel):
    geheim = ""
    for i in range(len(text)):
        p = ord(text[i]) - 65
        k = ord(schluessel[i % len(schluessel)]) - 65
        geheim = geheim + chr((p + k) % 26 + 65)
    return geheim

Um die Wirkung zu untersuchen, wurde derselbe deutsche Text (258 Buchstaben) einmal mit Caesar (\(k = 9\)) und einmal mit Vigenère (Schlüsselwort KLAUSUR) verschlüsselt und ausgezählt.

Häufigste Geheimtextbuchstaben
1.2.3.4.5.verschiedene Buchstaben
Caesar (k = 9)N: 47C: 29R: 25B: 19A: 1723
Vigenère (KLAUSUR)N: 18Y: 18L: 17V: 15W: 1326
Je die fünf häufigsten Buchstaben mit Anzahl sowie die Zahl der vorkommenden verschiedenen Buchstaben (von 26).
  1. Vergleichen Sie die beiden Auszählungen im Hinblick auf einen Angriff mit der Häufigkeitsanalyse.
  2. Erweitern Sie die Funktion um einen Parameter modus: Bei "ent" soll entschlüsselt werden. Außerdem sollen Leerzeichen unverändert übernommen werden und keinen Schlüsselbuchstaben verbrauchen.
  3. Erörtern Sie die Aussage eines Mitschülers: „Mit einem Schlüsselwort aus 20 Buchstaben ist das Vigenère-Verfahren praktisch nicht zu knacken.“

Hinweise

Hinweis zu Aufgabe a)
Achte auf die Höhe der Spitze, auf die Zahl der vorkommenden Buchstaben und darauf, welche Buchstaben oben stehen. Was wird aus dem Klartextbuchstaben E unter den sieben Schlüsselbuchstaben?
Hinweis zu Aufgabe b)
Die Laufvariable i zählt alle Zeichen. Du brauchst einen zweiten Zähler, der nur bei Buchstaben weiterläuft. Entschlüsseln heißt: um \(-k\) verschieben.
Hinweis zu Aufgabe c)
Sammle Argumente dafür (Schlüsselraum, Brute Force) und dagegen (Kasiski-Test, Länge der Teiltexte, Wahl des Schlüssels, Mehrfachverwendung) und wäge ab.

Erwartungshorizont

Erwartungshorizont zu Aufgabe a)

Caesar: eine deutliche Spitze (N mit 47 von 258 ≈ 18 %), das Profil ist das um 9 verschobene deutsche Profil; drei Buchstaben (H, S, Z) kommen gar nicht vor. Die Häufigkeitsanalyse liefert sofort \(k = 9\).

Vigenère: Die Spitze ist nur 18 von 258 ≈ 7 %, die Werte liegen dicht beieinander, alle 26 Buchstaben kommen vor — die Verteilung ist deutlich flacher. Grund: E wird je nach Schlüsselbuchstabe zu O, P, E, Y, W, Y oder V (K, L, A, U, S, U, R); deshalb stehen Y, V und W weit oben. Eine einfache Häufigkeitsanalyse über den ganzen Text (häufigster Buchstabe = E) führt in die Irre.

Erwartungshorizont zu Aufgabe b)
def vigenere(text, schluessel, modus):
    ergebnis = ""
    j = 0                  # Position im Schlüssel
    for zeichen in text:
        if "A" <= zeichen <= "Z":
            p = ord(zeichen) - 65
            k = ord(schluessel[j % len(schluessel)]) - 65
            if modus == "ent":
                k = -k     # rückwärts
            ergebnis = ergebnis + chr((p + k) % 26 + 65)
            j = j + 1      # nur bei Buchstaben
        else:
            # Leerzeichen unverändert übernehmen
            ergebnis = ergebnis + zeichen
    return ergebnis

Test: vigenere("TREFFEN UM ACHT", "EULE", "ver") liefert "XLPJJYY YQ UNLX", mit "ent" kommt der Klartext zurück. Negative Werte fängt % in Python ab. Gleichwertige Lösungen (z. B. zeichen == " " als Bedingung, eigene Hilfsfunktion) sind zulässig.

Erwartungshorizont zu Aufgabe c)

Für die Aussage: Es gibt \(26^{20} \approx 2 \cdot 10^{28}\) Schlüsselwörter — Brute Force ist aussichtslos. Bei kurzen Nachrichten (z. B. 200 Buchstaben) enthält jeder der 20 Teiltexte nur etwa 10 Buchstaben; eine Häufigkeitsanalyse ist dann kaum möglich, und echte Wiederholungen für den Kasiski-Test sind selten.

Gegen die Aussage: Bei langen Texten oder wenn derselbe Schlüssel für viele Nachrichten benutzt wird, wachsen die Teiltexte; Kasiski-Test und spaltenweise Häufigkeitsanalyse funktionieren dann wieder. Ist das Schlüsselwort ein Wort oder Satz, helfen zusätzlich Wörterbuchangriffe; ein periodischer Schlüssel bleibt ein strukturelles Leck.

Abwägung: Die Aussage gilt nur eingeschränkt — für wenige, kurze Nachrichten mit zufälligem Schlüssel. Wirklich sicher wird das Verfahren erst, wenn der Schlüssel zufällig, so lang wie der Text und nur einmal verwendet wird (One-Time-Pad). Vollständig ist eine Antwort mit mindestens je zwei Argumenten und einem begründeten Fazit.