Aufgabenblock — AFB III
Begründen statt nur rechnen: Verfahren beurteilen, Behauptungen widerlegen, Betriebsmodi festlegen, ein eigenes Protokoll entwerfen und in Python umsetzen. Formuliere deine Antwort in ganzen Sätzen, bevor du die Musterlösung aufklappst.
Die Schach-AG verschlüsselt ihre Sitzungsprotokolle (je etwa 3 000 Buchstaben) seit drei Jahren mit dem Vigenère-Verfahren und immer demselben Schlüsselwort ZUG. Beurteilen Sie die Sicherheit dieses Vorgehens.
Hinweis: Betrachte Schlüssellänge, Textlänge, Wiederverwendung und mögliche Angriffe.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Das Verfahren ist unsicher. Mit nur \(26^{3}=17\,576\) möglichen Schlüsselwörtern ist schon Brute Force in Sekundenbruchteilen erledigt. Außerdem wiederholen sich in 3 000 Buchstaben Folgen wie „DER“ oder „UND“ oft an Stellen mit gleichem Schlüsselbuchstaben; der Kasiski-Test liefert die Länge 3. Jeder der drei Teiltexte hat dann etwa 1 000 Buchstaben — genug für eine sichere Häufigkeitsanalyse, die jeden Schlüsselbuchstaben einzeln liefert. Da der Schlüssel seit Jahren gleich ist, knackt ein einziger Angriff alle Protokolle. Sicher wäre ein modernes symmetrisches Verfahren (z. B. AES) mit zufälligem, langem Schlüssel.
Mix aus 7.1 und 7.2. Jan behauptet: „Vigenère mit einem Schlüsselwort aus 20 Buchstaben hat \(26^{20}\approx2{,}0\cdot10^{28}\) Schlüssel — mehr als ein modernes Verfahren mit 80-Bit-Schlüssel (\(2^{80}\approx1{,}2\cdot10^{24}\)). Also ist es sicherer.“ Widerlegen Sie Jans Behauptung.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Die Zahlen stimmen, der Schluss nicht. Ein großer Schlüsselraum schützt nur vor Brute Force. Bei Vigenère findet der Kasiski-Test die Schlüssellänge 20; danach zerfällt der Geheimtext in 20 Caesar-verschlüsselte Teiltexte, die man einzeln per Häufigkeitsanalyse knackt — höchstens \(20\cdot26=520\) Versuche statt \(26^{20}\). Voraussetzung ist nur ein ausreichend langer Text (z. B. 2 000 Buchstaben, also 100 je Teiltext). Gegen moderne Verfahren ist dagegen kein Angriff bekannt, der wesentlich schneller ist als das Durchprobieren. Also ist Vigenère trotz größerem Schlüsselraum deutlich unsicherer.
Mia verschlüsselt einen Text mit Vigenère und dem Schlüsselwort LAND, anschließend das Ergebnis noch einmal mit WASSER. Sie meint: „Das wirkt wie ein Schlüssel der Länge \(4+6=10\).“ Überprüfen Sie Mias Aussage und tragen Sie die tatsächlich wirksame Schlüssellänge ein.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Mias Aussage ist falsch. An jeder Position addieren sich die Verschiebungen beider Schlüsselbuchstaben. Das Muster wiederholt sich erst, wenn beide Schlüssel gleichzeitig wieder am Anfang stehen — nach kgV\((4,6)=12\) Buchstaben. Die doppelte Verschlüsselung ist also eine einzige Vigenère-Verschlüsselung mit dem Schlüsselwort HAFVPRJDDSRU (L + W = H, A + A = A, N + S = F, …). Sie bleibt mit Kasiski-Test und Häufigkeitsanalyse angreifbar; der Gewinn an Sicherheit ist gering.
Ein Verein verschlüsselt mit einem One-Time-Pad: Der Schlüssel ist eine zufällige Buchstabenfolge, so lang wie die Nachricht. Um Aufwand zu sparen, verwendet der Kassenwart denselben Schlüssel für zwei verschiedene Nachrichten. Nehmen Sie Stellung zu diesem Vorgehen.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Das Vorgehen ist abzulehnen. Mit einmal verwendetem, zufälligem Schlüssel ist das One-Time-Pad nicht zu knacken, weil jeder Klartext gleicher Länge gleich wahrscheinlich ist. Bei zweifacher Verwendung gilt aber buchstabenweise \(g_1-g_2=(p_1+s)-(p_2+s)=p_1-p_2\) (mod 26): Der Schlüssel fällt heraus. Aus der Differenz zweier sinnvoller deutscher Texte lassen sich mit häufigen Wörtern beide Klartexte schrittweise erraten; kennt der Angreifer eine Nachricht (z. B. eine Standardeinladung), erhält er sofort den Schlüssel und damit die zweite. Die Einsparung wiegt den Verlust der Sicherheit nicht auf.
Für einen Vigenère-Geheimtext kennt Eve den zugehörigen Klartext, z. B. TREFFPUNKT MORGEN und XLPJJJFRON XSVAPR. Sie will das Schlüsselwort per Programm bestimmen: Leerzeichen stehen in beiden Texten an denselben Stellen, und gesucht ist das kürzeste Wort, dessen periodische Wiederholung die ganze Schlüsselfolge ergibt. Entwickeln Sie eine Python-Funktion schluessel_finden(klartext, geheimtext), die das Schlüsselwort zurückgibt.
chr((ord(c) - ord(p)) % 26 + 65) · Kandidat folge[:laenge] · Test folge[j] == kandidat[j % laenge] für alle j.Musterlösung anzeigen (zählt als erledigt)
def schluessel_finden(klartext, geheimtext):
folge = ""
for i in range(len(klartext)):
p = klartext[i]
c = geheimtext[i]
if "A" <= p <= "Z": # Leerzeichen überspringen
folge += chr((ord(c) - ord(p)) % 26 + 65)
for laenge in range(1, len(folge) + 1):
kandidat = folge[:laenge]
passt = True
for j in range(len(folge)):
if folge[j] != kandidat[j % laenge]:
passt = False
if passt:
return kandidat # kürzeste Periode
return folge
print(schluessel_finden("TREFFPUNKT MORGEN", "XLPJJJFRON XSVAPR")) # EULE
Die Folge lautet EULEEULEEULEEULE; die kürzeste passende Länge ist 4, also EULE. Die Funktion zeigt, warum Vigenère schon bei bekanntem Klartext (known-plaintext) fällt: Ein paar Buchstaben Klartext genügen für den ganzen Schlüssel. Ist die Nachricht kürzer als eine Schlüsselperiode, liefert die Funktion nur den Anfang des Schlüssels — mehr gibt der Text dann auch nicht her.
Eine Schule speichert Noten verschlüsselt mit AES. Jeder Datensatz ist genau einen Block (128 Bit) lang, z. B. „Kurs Inf-LK, Note 11“. Der Dienstleister schlägt den ECB-Modus vor, weil man dann jeden Datensatz einzeln entschlüsseln kann; die Schulleitung überlegt, CBC mit zufälligem Initialisierungsvektor zu nehmen. Legen Sie sich begründet auf einen Betriebsmodus fest.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Festlegung: CBC mit einem zufälligen IV pro Datensatz. Im ECB-Modus wird „Kurs Inf-LK, Note 11“ bei jeder Schülerin und jedem Schüler zum selben Geheimtextblock. Ein Angreifer kann ohne Schlüssel zählen, wie oft jede Note vorkommt, und — sobald er einen einzigen Datensatz kennt (bekannter Klartext, z. B. die eigene Note) — alle gleichen Datensätze sofort zuordnen. Die Stärke von AES hilft dagegen nicht, weil der Angriff am Modus ansetzt. Der Vorteil des Dienstleisters bleibt auch mit CBC erhalten: Speichert man zu jedem Datensatz seinen eigenen zufälligen IV (der nicht geheim sein muss), lässt sich jeder Datensatz einzeln entschlüsseln, und gleiche Noten ergeben trotzdem verschiedene Geheimtexte. Der zusätzliche Speicher von 128 Bit je Datensatz ist ein geringer Preis.
Ein Start-up bewirbt sein selbst entwickeltes, geheim gehaltenes Verschlüsselungsverfahren: „Der Koinzidenzindex unserer Geheimtexte liegt bei 0,0386 — praktisch wie Zufall. Damit ist unser Verfahren nachweislich sicher.“ Diskutieren Sie diese Werbeaussage.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Für die Aussage spricht: Ein Wert nahe 1/26 ≈ 0,0385 zeigt, dass die Buchstabenhäufigkeiten des Klartexts verwischt sind; eine einfache Häufigkeitsanalyse und monoalphabetische Verfahren scheiden aus. Dagegen spricht: Der Koinzidenzindex prüft nur eine notwendige Bedingung. Auch ein Vigenère-Text mit langem Schlüssel oder ein One-Time-Pad mit mehrfach verwendetem Schlüssel kommen nahe an diesen Wert und sind trotzdem angreifbar. Nichts ist über Angriffe mit bekanntem oder gewähltem Klartext, über den Schlüsselraum (Brute Force erst ab etwa \(2^{128}\) Schlüsseln aussichtslos) oder über Fehler in der Implementierung gesagt. Dass das Verfahren geheim gehalten wird, widerspricht dem Prinzip von Kerckhoffs: Es konnte nicht öffentlich geprüft werden. Ergebnis: Die Werbeaussage ist nicht haltbar — „zufällig aussehend“ heißt nicht „sicher“. Vertrauenswürdig wäre ein offen geprüftes Standardverfahren wie AES mit 128-Bit-Schlüssel.
Lina schlägt für eine Messenger-App vor, alle Nachrichten, Fotos und Videos nur noch asymmetrisch zu verschlüsseln, „weil es dann das Schlüsselaustauschproblem nicht gibt“. Erörtern Sie Linas Vorschlag.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Für Linas Vorschlag spricht, dass nur öffentliche Schlüssel übertragen werden müssen; ein geheimer Vorab-Austausch entfällt, und pro Person genügt ein Schlüsselpaar. Dagegen spricht, dass asymmetrische Verfahren um Größenordnungen langsamer sind als symmetrische — bei Fotos und Videos würde das Ver- und Entschlüsseln spürbar dauern und den Akku belasten. Außerdem bleibt das Echtheitsproblem der öffentlichen Schlüssel bestehen. Ergebnis: Ein hybrides Verfahren verbindet beide Vorteile — die Daten werden symmetrisch mit einem zufälligen Sitzungsschlüssel verschlüsselt, nur dieser kurze Schlüssel asymmetrisch mit dem öffentlichen Schlüssel des Empfängers.
Eine Schule will Zeugnisnoten per E-Mail an Eltern senden. Niemand anderes soll mitlesen können, und die Eltern sollen prüfen können, dass die E-Mail wirklich von der Schule stammt und unverändert ist. Entwerfen Sie mit den Bausteinen des Kapitels ein Verfahren für Schule und Eltern.
Musterlösung anzeigen (zählt als erledigt)
- Schule und Eltern besitzen Schlüsselpaare; ihre öffentlichen Schlüssel sind durch Zertifikate einer Zertifizierungsstelle bestätigt.
- Die Schule bildet den Hashwert der E-Mail und verschlüsselt ihn mit ihrem privaten Schlüssel — das ist die Signatur.
- Die Schule erzeugt einen zufälligen Sitzungsschlüssel, verschlüsselt E-Mail und Signatur damit symmetrisch und den Sitzungsschlüssel mit dem öffentlichen Schlüssel der Eltern (hybrid).
- Die Eltern entschlüsseln den Sitzungsschlüssel mit ihrem privaten Schlüssel, damit E-Mail und Signatur.
- Sie entschlüsseln die Signatur mit dem öffentlichen Schlüssel der Schule (aus deren Zertifikat), berechnen selbst den Hashwert der E-Mail und vergleichen. Gleich → echt und unverändert.
Eine Funktion vigenere(text, schluessel, richtung) soll Texte aus Großbuchstaben ver- (richtung = 1) und entschlüsseln (richtung = -1). Zeichen außer A–Z bleiben unverändert, und der Schlüssel rückt nur bei Buchstaben weiter. Implementieren Sie die Funktion in Python.
ord(...) - ord("A") in Zahlen 0–25 umwandeln, rechnen, mit % 26 zurück ins Alphabet, mit chr wieder zum Buchstaben.Warum so? Der Schlüsselindex darf nur bei Buchstaben weiterzählen — sonst verschiebt jedes Leerzeichen die Zuordnung.i · k = ord(schluessel[i % len(schluessel)]) - 65 · (p + richtung * k) % 26.Musterlösung anzeigen (zählt als erledigt)
def vigenere(text, schluessel, richtung=1):
ergebnis = ""
i = 0 # Position im Schlüssel
for zeichen in text:
if "A" <= zeichen <= "Z":
k = ord(schluessel[i % len(schluessel)]) - ord("A")
neu = (ord(zeichen) - ord("A") + richtung * k) % 26
ergebnis += chr(neu + ord("A"))
i += 1 # nur bei Buchstaben weiter
else:
ergebnis += zeichen # Leerzeichen, Ziffern bleiben
return ergebnis
print(vigenere("ABI 2027", "KEY")) # KFG 2027
print(vigenere("KFG 2027", "KEY", -1)) # ABI 2027Da Python bei % auch für negative Zahlen ein Ergebnis zwischen 0 und 25 liefert, funktioniert das Entschlüsseln mit richtung = -1 ohne Sonderfall.
Alice fragt Bob über einen unverschlüsselten Chat nach seinem öffentlichen Schlüssel. Mallory sitzt im selben WLAN und kann Nachrichten abfangen und austauschen. Analysieren Sie, wie Mallory alle Nachrichten mitlesen kann, ohne dass Alice und Bob es bemerken, und welche Gegenmaßnahme hilft.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Mallory fängt Bobs Antwort ab und schickt Alice stattdessen ihren eigenen öffentlichen Schlüssel. Alice verschlüsselt nun mit Mallorys Schlüssel. Mallory entschlüsselt mit ihrem privaten Schlüssel, liest (oder ändert) die Nachricht, verschlüsselt sie mit Bobs echtem öffentlichem Schlüssel und leitet sie weiter. Bob kann normal entschlüsseln — niemand bemerkt etwas (Man-in-the-Middle-Angriff). Gegenmaßnahme: Alice muss prüfen, dass der Schlüssel wirklich Bob gehört, z. B. über ein Zertifikat einer vertrauenswürdigen Zertifizierungsstelle, die Bobs Identität und Schlüssel mit ihrer Signatur bestätigt, oder durch persönlichen Vergleich des Schlüssel-Fingerabdrucks.
Tom will eine Nachricht an Bob „signieren“: Er bildet den Hashwert der Nachricht und verschlüsselt ihn mit Bobs öffentlichem Schlüssel. Bewerten Sie Toms Vorgehen.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: Toms Vorgehen ist wertlos. Bobs öffentlicher Schlüssel steht jedem zur Verfügung; jeder Angreifer kann eine geänderte Nachricht hashen und ebenfalls mit Bobs öffentlichem Schlüssel verschlüsseln. Bob kann also nicht erkennen, ob die Nachricht von Tom stammt — weder Authentizität noch Nichtabstreitbarkeit sind gegeben. Richtig ist: Tom verschlüsselt den Hashwert mit seinem privaten Schlüssel, den nur er besitzt; Bob prüft mit Toms öffentlichem Schlüssel.
Ein älteres symmetrisches Verfahren arbeitet mit 64-Bit-Schlüsseln. Ein Rechencluster testet \(10^{11}\) Schlüssel pro Sekunde. Schätzen Sie ab, wie lange das Durchprobieren aller Schlüssel höchstens dauert, und ordnen Sie das Ergebnis für ein Verfahren mit 128-Bit-Schlüssel ein.
Musterlösung anzeigen (zählt als erledigt)
Musterlösung: \(t=\frac{2^{64}}{10^{11}\,/\text{s}}\approx1{,}84\cdot10^{8}\text{ s}\approx5{,}8\text{ Jahre}\), im Mittel etwa die Hälfte. Mit mehr Rechnern oder schnellerer Technik schrumpft das auf Monate — 64 Bit sind nicht mehr ausreichend. Bei 128 Bit wächst der Schlüsselraum um den Faktor \(2^{64}\approx1{,}8\cdot10^{19}\): rund \(10^{20}\) Jahre, weit mehr als das Alter des Universums (etwa \(1{,}4\cdot10^{10}\) Jahre). Brute Force ist dann aussichtslos.
