Zufallszahlengeneratoren spielen eine wesentliche Rolle in der Kryptologie. Daher wollen wir in diesem Thema Zufallszahlengeneratoren genauer unter die Lupe nehmen und auf Schwächen untersuchen.
Aufträge
Vorbereitung
- Verschafft euch einen groben Überblick über AES
- Was ist AES überhaupt?
- Wie und wo wird AES heute eingesetzt?
- Gilt AES als sicher?
- Informiert euch über die Funktionsweise von Zufallszahlengeneratoren
- Was versteht man unter echten Zufallszahlengeneratoren, was unter Pseudozufallszahlengeneratoren?
- Wie bestimmt der Computer eine zufällige Zahl?
- Welche Voraussetzungen müssen kryptographisch sichere Zufallszahlengeneratoren erfüllen?
- RANDU ist ein Zufallszahlengenerator entwickelt von IBM, der vor allem in den 1960er und 1970er Jahren sehr verbreitet war.
- Unter Material findet ihr eine Implementation von RANDU, die ihr verwenden könnt.
- Unsere Implementation verwendet den Originalalgorithmus, liefert aber als Resultat jeweils nur die letzten 4 Bit der generierten Zahl als Hexwert zurück.
- Testet den Zufallszahlengenerator RANDU und überlegt euch:
- Wie wollt ihr den Zufallszahlengenerator untersuchen?
- Wie könnt ihr mit euren Erkenntnissen die verschlüsselten Nachrichten entschlüsseln?
Programm
- Ihr sollt zwei mit AES-verschlüsselte Nachrichten (ECB-Modus) knacken.
- Bibliothek pycryptodomex
- Bibliothek base64
- Untersucht unsere Implementation des RANDU-Algorithmus.
- Bibliothek rng_randu
- Untersucht das beiliegende Programm und schreibt eigenen Code, der den Schlüssel findet und die Nachricht entschlüsselt.
- Schreibt Programme, die die Nachrichten entschlüsseln.
Präsentation
- Bereitet eine Präsentation vor, die 15 Minuten (plus 5 Minuten für Fragen) dauert. Sie soll die benötigte Theorie, eigene Überlegungen, das Programm und die Erkenntnisse der Klasse näherbringen.
Zusatzaufträge
- Programmiert den Zufallszahlengenerator RANDU selbst, damit ihr nicht die Vorgabe verwenden müsst.
Material
Geheimtext 1 – AES mit RANDU
Die Nachricht ist euch zugänglich gemacht worden mit folgenden Hinweisen:
- Der benötigte AES-Schlüssel wurde mit Hilfe von RANDU in der vorliegenden Implementation erzeugt (16 Hex-Zeichen).
- Die Person, die euch die Nachricht zugetragen hat, hat auf dem Bildschirm einer beteiligten Person den Schlüssel ganz kurz gesehen und sich nur merken können, dass er mit einer
7beginnt.
ybNfmfq0KGctz3UJHIO2zrOZnnwmi+Ksti+z78s/ydgIzCCBX522gkS01qzUMxRHGUDtNTW8BAXv04O9WmtMxM7U6J6g0uCGyACmn1Spt6U=Geheimtext 2 – AES mit random-Bibliothek
Die Nachricht ist euch zugestellt worden mit folgendem Hinweis:
- Der benötigte Schlüssel wurde mit beiliegendem Programm erstellt.
xDjRYCkTVn8NnFBcDHKP0AFg5LA2qvOb4iCGLYLsXDpcGCyZg26yDKbrzm4ijMq7amYwFhqgdLOjIKQe57dT9g==Programm zur Schlüsselerstellung:
python
import random
ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,.-;:_[]{}+*%&/()=?<>"
random.seed(random.randrange(1000000))
key = ""
for n in range(16):
index = random.randrange(len(ALPHABET))
char = ALPHABET[index]
key += char1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11