An dieser Stelle findest du eine kleine Sammlung einfacher Probleme aus dem Bereich der Informationssicherheit. Diese Probleme sind absichtlich einfach gehalten und erfordern kein Vorwissen, auch wenn Grundwissen in Programmieren und ein gewisses mathematisches Verständnis sicher hilfreich sind.
Die folgenden Online Tests bieten wir zurzeit an:
Wir haben die anspruchsvolleren Tests mit ihrem Schwierigkeitsgrad gekennzeichnet:
- (*) Etwas anspruchsvoller
- (**) Sehr anspruchsvoll
Caesar-Chiffre
Kryptographische Methoden um Nachrichten zu verschlüsseln sind schon seit der Antike im Einsatz. Eine der ersten Verschlüsselungsmethoden war die Caesar-Chiffre, benannt nach dem römischen Feldherren Julius Gaius Caesar. Bei der Caesar-Chiffre handelt es sich um eine Substitutions-Chiffre, d.h. jeder Buchstabe der ursprünglichen Nachricht ("Klartext") wird durch einen anderen Buchstaben ersetzt um den Chiffretext ("Geheimtext" oder "Chiffrat") zu erzeugen. Eine Unterform der Substitutions-Chiffre ist die Verschiebe-Chiffre. Dabei wird jeder Buchstabe durch den Buchstaben im Alphabet ersetzt, der eine bestimmte Anzahl Positionen weiter vorne (oder weiter hinten) im Alphabet steht. Dieser Abstand, um den die Buchstaben bewegt werden, nennt man Schlüssel. Wenn es dabei zu einem Überlauf kommt, z.B. also beim Verschieben des Z um eine Position, fängt man vorne im Alphabet wieder an (Z wird also zu A). Die Entschlüsselung funktioniert analog durch rückwärtiges Verschieben. Bei der Caesar-Chiffre ist der Schlüssel festgelegt auf 3. Bild 1 illustriert die Verschlüsselung des Alphabets.
Bild 1: Prinzip der Caeser-Chiffre
Berechnung
Eine der Schwachstellen der Caesar-Chiffre ist, dass jeder Buchstabe immer auf genau denselben Buchstaben des Chiffre-Alphabets abgebildet wird (" monoalphabetische Chiffre"). Als Folge dessen erhält die Caesar-Chiffre die Texteigenschaften des Klartexts im Chiffre-Text aufrecht, insbesondere die Frequenz der einzelnen Buchstaben. Wenn man also beispielsweise weiß, dass 8% der Buchstaben des Klartextes ein "E" sind, dann stellt die Substitution von "E" ebenfalls 8% der Buchstaben im Chiffrat dar. Diese Textcharakteristika sind normalerweise abhängig von der Sprache des Klartexts. Zum Beispiel sind ca. 13% der Buchstaben eines englischen Texts ein "E". Statistiken zu den Buchstabenhäufigkeiten verschiedener Sprachen können u.a. auf Wikipedia gefunden werden. Diese Eigenschaft der Caesar-Chiffre erlaubt eine Frequenzanalyse der Buchstabenhäufigkeiten des Chiffrats und das Ableiten des Schlüssels. Wenn man also davon ausgeht, dass ein Klartext im Original englisch war und im Chiffrat ist "X" der häufigste Buchstabe, dann lässt dies vermuten, dass "X" die Substitution von "E" ist.
Natürlich kann man auch einfach alle Kombinationen ausprobieren, d.h. einfach alle potentiellen Klartexte erzeugen, indem man jeden der 26 möglichen Schlüssel probiert. Der richtige Klartext ist dann leicht erkennbar (unter der Annahme, dass der Klartext ein sinnvoller Text war und nicht eine zufällige Zeichenfolge). Mit Hilfe eines Computers ist dieses Brechen der Chiffre eine Sache von Millisekunden.
Aufgaben
Ein paar Anmerkungen zu dem Chiffrat und Klartext:
- Der Klartext ist englisch und enthält somit keine Umlaute oder Eszett
- Der Klartext und das Chiffre-Alphabet bestehen nur aus Großbuchstaben
- Um die Satzstruktur zu verstecken haben wir sämtliche Interpunktionszeichen inkl. Leerzeichen entfernt und den Chiffretext nur zur optischen Veranschaulichung auf dieser Webseite in Blöcke von je 5 Buchstaben unterteilt
- Zahlen wurden nicht verschlüsselt und sind im Klartext und Chiffretext identisch
- Um die Buchstabenhäufigkeit zu ermitteln gibt es Online-Tools, z.B. hier
BXDAL NFRTR YNMRJ
Um zu testen, ob du den richtigen Schlüssel gefunden hast, entschlüssele den folgenden Text mit dem Schlüssel, den du überprüfen willst, und gib den Klartext in das folgende Formular ein:
NRERNLJWPRNANRCJNIRNSNRKJJCQDRTX
Bild 2: Beispiel einer einfachen randomisierten Substitutionschiffre (monoalphabetisch).
QZWOI RLMKM URDME
Entschlüssele dann den folgenden kurzen Text mit dem Schlüssel, den du überprüfen willst, und nutze das Formular um dein Ergebnis zu überprüfen:
RMLZNCRMCZNZNHENYWWKWMQNEINRRBRE
Vigenère-Chiffre
Beschreibung
Die Vigenère-Chiffre wurde von Blaise de Vigenère erfunden, einem Kryptologen des 16ten Jahrhunderts. Sie ist ebenfalls eine Substitutions-Chiffre, jedoch im Gegensatz zur Caesar-Chiffre polyalphabetisch. Das bedeutet, dass die Chiffre mehrere Chiffre-Alphabete verwendet und Buchstaben des Klartexts durch Buchstaben aus unterschiedlichen Chiffre-Alphabeten substituiert werden. Bild 1 zeigt das Prinzip der Vigenère-Chiffre. Vereinfacht kann man sich dieses Prinzip so vorstellen, dass jeder Buchstabe des Klartexts mit einer Verschiebe-Chiffre verschlüsselt wird, wobei der aktuelle Buchstabe des Schlüsselwortes der Schlüssel für diese Verschiebe-Chiffre ist. Für Bild 1 heißt das, dass der erste Buchstabe "W" des Klartextes mit einer Verschiebe-Chiffre mit Schlüssel "S" verschlüsselt wird; der zweite Buchstabe "H" dann mit dem Schlüssel "E", usw. Da der Schlüssel für die Vigenère-Chiffre (hier das Wort "SECURITY") normalerweise kürzer ist als der Klartext, wird der Schlüssel einfach solange wiederholt, bis alle Buchstaben des Klartextes verschlüsselt wurden. Um das manuelle Ver- und Entschlüsseln zu erleichtern, gibt es das Vigenère-Quadrat (siehe Bild 2), welches ein leichtes Ablesen der Substitution für den aktuellen Buchstaben des Schlüssels erlaubt (d.h., jede Zeile des Vigenère-Quadrats zeigt die Verschiebe-Chiffrierung für einen Schlüssel aus dem Alphabet A-Z, wobei A=1, B=2, usw.).
Das Ziel dieser polyalphabetischen Substitution ist es, eine einfache Frequenzanalyse, wie sie bei der Caesar-Chiffre möglich war, zu verhindern. In Bild 1 zum Beispiel wird der Buchstabe "T" des Klartextes beim ersten Mal durch "N" substituiert, bei zweiten Mal jedoch durch "R". Da nun Buchstaben des Klartextes nicht immer auf denselben Buchstaben des Chiffretextes abgebildet werden, werden die Textcharakteristika wie Buchstabenhäufigkeit nicht mehr durch die Verschlüsselung erhalten und somit verrät eine Frequenzanalyse des Chiffretextes keine Information über den verwendeten Schlüssel oder Klartext.
Bild 1: Beispiel für Verschlüsselung mit der Vigenère-Chiffre.
Bild 2: Vigenère-Quadrat zum Ver- und Entschlüsseln von Texten mit der Vigenère-Chiffre.
(Quelle: Cryptool Online)
Berechnung
Auch wenn eine Frequenzanalyse wie bei der Caesar-Chiffre nicht mehr möglich ist, kann man aus einer Untersuchung des Chiffretextes Rückschlüsse auf den verwendeten Schlüssel ziehen und die Vigenère-Chiffre brechen. Die wichtigste Erkenntnis hier ist, dass man im Chiffretext Muster erkennen kann, die direkt abhängig von der Länge des Schlüssel(worte)s sind. Bild 3 illustriert dieses Prinzip für das Beispiel in Bild 1.
Bild 3: Beispiel für Muster im Chiffretext.
In Bild 3 kann man erkennen, dass der Chiffretext zweimal die Zeichenfolge "PTR" enthält. Dies ist die Folge davon, dass zufällig zweimal dieselbe Buchstabenfolge im Klartext ("HAT") mit derselben Buchstabenfolge des Schlüsselwortes ("ITY") verschlüsselt wurde. Dies kann passieren, weil zum einen der Klartext aus sinnvollen Wörtern besteht, die sich leicht wiederholen können (z.B. Artikel wie "der", "die", "das"), und zum anderen das Schlüsselwort in der Regel (wesentlich) kürzer ist als der Chiffretext und somit immer wieder wiederholt werden muss um, den gesamten Klartext zu verschlüsseln.
Die entscheidende Konsequenz dieser Muster ist, dass sie Rückschlüsse auf die Schlüssellänge zulassen. Damit ein Fall wie in Bild 3 eintreten kann, muss der Abstand zwischen den Mustern gleich einem Vielfachen der Schlüssellänge sein. Das bedeutet, dass wenn man bei langen Chiffretexten mehrere solcher Buchstabenfolgen findet. die sich in bestimmten Abständen wiederholen, dann muss die richtige Schlüssellänge ein Teiler all dieser gefundenen Abstände sein.
Sobald man eine Vermutung über die Schlüssellänge hat, kann man die Vigenère-Chiffre brechen, indem man das Schlüsselwort Buchstabe für Buchstabe bestimmt. Jeder Buchstabe kann durch das Brechen einer simplen Verschiebe-Chiffre bestimmt werden: Angenommen man vermutet wie in Bild 3, dass die Schlüssellänge ein Teiler von 8 sein muss. Die Längen 1 und 2 scheinen zu kurz zu sein für ein ordentliches Schlüsselwort und werden nicht weiter verfolgt (in der Tat, bei einer Länge von 1 wäre die Vigenère-Chiffre gleich einer einfachen Verschiebe-Chiffre). Wir überspringen an dieser Stelle auch die Länge 4 und nehmen nun also an, dass der Schlüssel 8 Buchstaben lang ist. Dann unterteilt man den Chiffretext in 8 Subtexte, wobei der erste Subtext jeden 8ten Buchstaben des Chiffretext enthält, ausgehend vom ersten Buchstaben; der zweite Subtext jeden 8ten Buchstaben ausgehend vom 2ten Buchstaben; usw., bis zum achten Subtext, der jeden 8ten Buchstaben ausgehend vom 8ten Buchstaben enthält. Dies bedeutet, dass der erste Subtext gleich einem Chiffretext einer einfachen Verschiebe-Chiffre ist, dessen Schlüssel der erste Buchstabe des Vigenère Schlüssels ist. Für das Beispiel in Bild 3 wären die ersten beiden Buchstaben dieses ersten Subtextes also "OT" und man nimmt an, dass sie beide mit einer Verschiebe-Chiffre mit demselben Schlüssel verschlüsselt wurden. Wie man in Bild 3 schon direkt sehen kann, ist diese Annahme richtig und der Schlüssel der Verschiebe-Chiffre ist "S". Der zweite Subtext ist dann gleich dem Chiffretext einer Verschiebe-Chiffre, bei der der Schlüssel gleich dem zweiten Buchstaben des Vigenère Schlüssels ist, usw. Nun kann die Verschiebe-Chiffre für jeden der Subtexte einzeln gebrochen werden und aus den resultierenden Schlüsseln der Subtexte der Vigenère-Schlüssel rekonstruiert werden.
Zusammengefasst sind dies die einzelnen Schritte zum Brechen der Vigenère-Chiffre:
- Finde Muster im Chiffretext, die sich wiederholen
- Bestimme die Abstände zwischen gleichen Mustern (wie in Bild 3 illustriert)
- Die Schlüssellänge muss ein Teiler aller Abstände sein
- Für jede mögliche Schlüssellänge
n unterteile den Chiffretext inn Subtexte, wobei der erste Subtext jeden n-ten Buchstaben des Chiffretexts enthält, der zweite Subtext jeden (n+1)ten Buchstaben, usw. - Für jeden der Subtexte führe ein Brechen einer Verschiebe-Chiffre basierend auf einer Frequenzanalyse durch
- Rekonstruiere den Vigenère-Schlüssel aus diesen Verschiebe-Schlüsseln. Teste ob dieser Schlüssel den Chiffretext erfolgreich entschlüsselt (z.B. einen sinnvollen Text ergibt). Ansonsten wiederhole Schritte 4-6 für eine andere mögliche Schlüssellänge.
Aufgaben
- Der Klartext ist englisch und enthält somit keine Umlaute.
- Wir haben die ursprüngliche Textstruktur inkl. Satzzeichen erhalten, um die Entschlüsselung etwas zu erleichtern. Satzzeichen wurden nicht substituiert.
- Verschiedene Tools existieren, um häufige Buchstabenfolgen (N-Gramme)
zu finden. (Zum Beispiel Crypto Tool,
Analysis →Tools for Analysis →N-Gram )
Aufgaben
In dem Geburtstagsparadoxon lässt sich folgende Geburtstagshashfunktion G finden: Jede Person wird auf ihren Geburtstag im Jahr abbildet. Damit ist das Geburtstagsdatum (ohne die Jahreszahl) bei dieser Geburtstagshashfunktion G die Prüfsumme. Die obige Frage lässt sich damit folgendermaßen uminterpretieren: Was ist die Wahrscheinlichkeit, dass es bei der Geburtstagshashfunktion eine Kollision in einer Gruppe von 23 zufällig gewählten Personen gibt? Für jede Hashfunktion, mit 365 möglichen Prüfsummen, ist die Wahrscheinlichkeit für eine Kollisionen mindestens genauso hoch wie für diese Geburtstagshashfunktion.
In der Praxis ist man an der Fragestellung interessiert, wie hoch für eine gegebene Hashfunktion H, die Wahrscheinlichkeit für eine Kollision in einer großen Menge von Nachrichten ist. Nach dem Geburtstagsparadoxon gibt es für jede Hashfunktion H schon in eine Menge von zufällig gewählten Nachrichten mit signifikanter Wahrscheinlichkeit eine Kollision.
Gegeben sei eine Hashfunktion H, eine Nachricht m beliebiger Länge auf eine Prüfsumme von 10 Bit abbildet. Mit maximal welcher Wahrscheinlichkeit befindet sich in einer Menge von 400 zufällig gewählten Nachrichten eine Kollision für diese Hashfunktion? Falls es mehrere richtige Antworten gibt, wähle bitte die Kleinste dieser oberen Schranken aus. (Tipp: Mit 10 Bit können 210=1024 mögliche Prüfsummen dargestellt werden. Zum Vergleich: Mit 9 Bit können 29=512 mögliche Prüfsummen dargestellt werden. Mit 9 Bit können also alle Geburtstage dargestellt werden.)
Sicheres Passwortprüfen
Jeder Online-Dienst, der eine Registrierung mit einem Benutzernamen und einem Passwort fordert, muss nach der Registrierung sicher prüfen können, ob ein bei der Anmeldung eingegebenes Passwort korrekt ist. Ein Online-Dienst muss also hinreichend viel vom Passwort speichern, um prüfen zu können, ob das bei der Anmeldung eingegebene Passwort mit dem bei der Registrierung benutzten Passwort übereinstimmt. In den letzten Jahren wurde vermehrt von Einbrüchen in die Systeme großer Dienste, wie etwa Yahoo oder Adobe, berichtet. Würden also Passwörter von einem Dienst im Klartext gespeichert werden, könnte ein Einbrecher diese Passwörter stehlen und auch bei anderen Diensten verwenden. Somit haben Online-Dienste eine Verantwortung, für den Falle eines Einbruchs, möglichst wenig Information über das Passwort eines Benutzers zu speichern. Optimalerweise sollte das System des Dienstes nicht mehr Information über ein Passwort speichern als notwendig ist, um zu überprüfen, ob ein eingegebenes Passwort valide ist. In der Praxis werden hierfür verschiedene Techniken benutzt.
Eine gängige Methode zum Prüfen eines Passwortes pw bei der Anmeldung ist das Speichern einer Prüfsumme H(pw) des Passwortes mittels einer geeigneten Hashfunktion H. In der vorherigen Aufgabe haben wir Kollisionsresistenz und schwache Kollisionsresistenzvon Hashfunktion beschrieben. Zum Speichern von Passwörtern genügt allerdings Kollisionsresistenz nicht; Kollisionsresistenz schließt nicht aus, dass ein Angreifer alleine durch die Prüfsumme t eine Nachricht m'berechnen kann, die diese Prüfsumme hat: H(m') = t. Man fordert daher zusätzlich, dass die Hashfunktion H schwer zu invertieren ist. Genauer: Für eine gegebene Prüfsumme H(m)einer zufällig gewählten Nachricht m findet kein realistischer Angreifer, der nur die Prüfsumme H(m) kennt, eine Nachricht m', welche genau diese Prüfsumme hat: H(m') = H(m). Eine Funktion H, die diese Eigenschaft hat, nennt man Einwegfunktion (engl. "One-Way Function"). Wir nehmen im Folgendem an, dass die benutzte Hashfunktion H sowohl kollisionsresistent als auch eine Einwegfunktion ist. Für die folgenden Aufgaben nennen wir solche Hashfunktionen sicher und die von ihnen ausgegebenen Prüfsummen nennen wir ebenfalls sicher.
Methode 1: Eine Prüfsumme des Passwortes speichern
Bei dieser Methode speichert der Dienst eine sichere Prüfsumme H(pw)des Passwortes pw zusammen mit dem Benutzernamen. Bei der Eingabe des Passwortes wird genau dann die Anmeldung als erfolgreich gewertet, wenn die Prüfsumme H(pw') des eingegebenen Passwortes pw mit der gespeicherten Prüfsumme übereinstimmt: H(pw') = H(pw).
Methode 2: Eine Prüfsumme des Passwortes mit Salz speichern
Bei dieser Methode zieht der Dienst zuerst eine Zufallszahl s (Salz genannt) von 128 Bit Länge, d.h. eine Zahl zwischen 0 und 2128-1. Diese Zahl s hängt der Dienst dann an das Passwort pw an (wir notieren die zusammengesetzte Nachricht als pw+s). Für diese modifizierte Nachricht pw+s berechnet der Dienst eine sichere Prüfsumme H(pw+s) und speichert H(pw+s)zusammen mit dem Salz s und dem Benutzernamen. Bei der Eingabe eines Passwortes pw' prüft der Dienst dann, ob die gespeicherte Prüfsumme H(pw+s) mit der Prüfsumme H(pw'+s) übereinstimmt. Falls dies der Fall ist, wird die Anmeldung als erfolgreich bewertet.
Methode 3: Eine Prüfsumme des Passwortes mit Salz und Pfeffer speichern
Bei dieser Methode wird zusätzlich zu dem zufällig gezogenen Salz eine weitere, kleinere Zufallszahl p (Pfeffer oder geheimes Salz genannt) von 10 Bit Länge gezogen, also eine Zahl zwischen 0 und 1023. Der Dienst speichert dann bei der Registrierung H(pw+s+p) zusammen mit dem Salz s und dem Benutzernamen, aber ohne den Pfeffer p. Bei der Anmeldung prüft der Dienst dann für das eingegebene Passwort pw' und für jede Zahl p' zwischen 0 und 1023, ob die gespeicherte Prüfsumme H(pw+s+p) mit der Prüfsumme H(pw'+s+p') übereinstimmt. Falls dies für ein p' der Fall ist, wird die Anmeldung als erfolgreich bewertet.
Ein bekannter Angriff auf Passwörter ist ein Wörterbuchangriff. Die meisten Personen wählen Passwörter, die echte Wörter oder Teile echter Wörter beinhalten. Der Sprachexperte Wolfgang Klein zählte in einer Untersuchung etwa 5,3 Millionen Wörter in der deutschen Sprache.
Viele Passwörter sind aus normalen Wörtern zusammengesetzt. Man nimmt an, dass Hochleistungsrechner problemlos 260 Möglichkeiten in kürzester Zeit durchprobieren können. Selbst gute Heimrechner können mittels massiver Parallelisierung auf Grafikkarten in kurzer Zeit mehr als 240 Möglichkeiten in kürzester Zeit durchprobieren.
Realistische Angreifer können 5.300.000, also weniger als 223, Möglichkeiten problemlos ausprobieren. Da die meisten Menschen geschätzt einen Wortschatz von lediglich 70.000, also weniger als 217 , Wörtern haben, können realistische Angreifer in kurzer Zeit sogar die häufigsten Kombinationen aus Wörtern und anderen Daten, wie z.B. Namen und Geburtstagen, ausprobieren.
Um den Angriff noch effizienter zu gestalten, kann ein Angreifer vorab eine Datenbank mit allen möglichen Passwörtern und den entsprechenden Prüfsummen erstellen (siehe Methode 1 bis 3). Nach einem erfolgreichen Einbruch in einen Online-Dienst kann er nun vergleichen, welche Prüfsummen beim Online-Dienst gespeichert waren, die ebenfalls in seiner vorausberechneten Tabellen enthalten waren. Durch die Vorausberechnung kann ein solcher Angriff um ein Vielfaches beschleunigt werden.
Aufgaben
Welche der folgenden Aussagen sind richtig? (Mehrfachnennung ist möglich.)