In den letzten Wochen und Monaten haben wir PIRATEN mehrmals auf das NetzDG und die Problematik bei der Herausgabe von Passwörtern durch Inhaltsanbieter hingewiesen. Auch viele Expertengruppen haben auf die Politik eingewirkt, in der Hoffnung, diesen Alptraum zu verhindern. Der aktuelle Entwurf sieht zumindest schon einmal vor, dass eventuelle „Verschlüsselung“ unangetastet bleiben muss. Doch wie werden Passwörter eigentlich verschlüsselt und warum wird, bei korrekter Speicherung, das Ziel, ein Passwort für mehrere Plattformen zu entschlüsseln nicht erreicht?
Damit auch du mitreden kannst, versuche ich heute einen kleinen Einblick in die Speicherung von Passwörtern zu geben. Also herzlich Willkommen in der wunderbaren Welt der Kryptografie!
Verschlüsselung von Passwörtern
Schon seit die Menschheit die Schrift erfunden hat, werden Nachrichten verschlüsselt. Archäologen haben nachgewiesen, dass z.B. die Sumerer im 34. Jh. v. Chr. ihre Nachrichten auf Tontafeln kodiert haben, um sie vor neugierigen Blicken zu schützen – und das in Keilschrift! Eine der heute am bekanntesten und einfachsten Verschlüsselungen ist allerdings die sogenannte „Caesar Chiffre“, die nach Überlieferung des Schriftstellers Sueton von Gaius Iulius Caesar höchstpersönlich dazu verwendet wurde, militärische Nachrichten zu verschicken.
Dazu wird das Alphabet einfach um eine bestimmte Anzahl Stellen nach links oder rechts verschoben (rotiert). Laut Sueton hat Caesar die Buchstaben um 3 Stellen nach rechts rotiert, sodass sich das folgende Bild ergibt:
Klartext: a b c d e f g h i j k l m n o p q r s t u v w x y z Geheim: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
Wenden wir dieses Verschlüsselungsverfahren nun auf ein Passwort wie supergeheim an, erhalten wir vxshujhkhlp. Damit kann doch ein Angreifer nichts mehr anfangen – oder etwa doch?
Warum sich symmetrische Verschlüsselung nicht für die Ablage von Passwörtern eignet
Der technische Fortschritt lässt sich nicht aufhalten. Seit der Erfindung des Computers und damit der Erschließung ungeahnter Rechenpotentiale, fällt eine Verschlüsselung nach der anderen. So hat bereits Alan Turing und sein Team mit Colossus (einem frühen Röhrencomputer) abgefangene, verschlüsselte Funksprüche dekodiert. Spätestens seit Erfindung des Mikrochips und der ständigen Performance-Verbesserung komplexer Rechenoperationen ist es allerdings tatsächlich nur eine Frage der Zeit, bis jedwede Verschlüsselung geknackt werden kann.
Nehmen wir z.B. unser Passwort, welches wir mit viel Mühe verschlüsselt haben. Wie lange es dauert, dieses zu entschlüsseln, kannst du gerne einmal selbst auf der folgenden Seite ausprobieren:
https://www.thomas-kuehn.de/geocaching/rot.php
Da wir das Alphabet um 3 Stellen verschoben haben, müssen wir es (unser Alphabet hat 26 Zeichen) noch 23 Stellen weiter verschieben, um unseren ursprünglichen Text zu erhalten. Spätestens jetzt sollte es jedem klar sein, dass diese Art von Verschlüsselung für Passwörtern kein ausreichend guter Schutz ist. Selbst wenn wir die Buchstaben vorher durcheinander würfeln oder ähnliches, bremst dies die heutigen Computer vielleicht aus, aber trotzdem wird früher oder später das Originalpasswort gefunden. Was also tun?
Hashing von Passwörtern
Die von uns betrachtete (symmetrische) Verschlüsselung kann nicht nur leicht geknackt werden – nach dem entschlüsseln ist auch das Originalpasswort bekannt. Da viele Menschen auch heute noch ein Passwort für mehrere Plattformen benutzen, musste man sich eine Lösung für dieses Problem einfallen lassen. Und die Lösung für das Problem heißt: „Hashing“.
Ein „Hash“ ist eine Prüfsumme, die über verschiedene (je nach Verfahren mehr oder minder komplexe) Rechenoperationen gebildet wird. Nehmen wir also mal wieder unser Passwort supergeheim und erzeugen eine ganz einfache Prüfsumme, indem wir jedem Buchstaben eine Zahl zuordnen:
Buchstabe: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z Zahl: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
also in unserem Fall
Klartext: s u p e r g e h e i m Zahlwert: 19 21 16 05 18 07 05 08 05 09 13 Summe: 126
Unsere „Prüfsumme“ ist also 126 – geben wir stattdessen mal ein falsches Passwort mit der gleichen Länge ein:
Klartext: f a l s c h e s p w d Zahlwert: 06 01 12 19 03 08 05 19 16 23 04 Summe: 116
Da die Summe nun 116 und damit anders als 126 ist wissen wir, dass nicht das richtige Passwort eingegeben wurde. Da man aus der reinen Zahl 126 die einzelnen Summanden nicht zurückberechnen kann, kann man auch unmöglich herausfinden, was das Ursprungspasswort war. Ein wichtiger Vorteil wenn man bedenkt, dass auch heute noch viele Personen ihr Passwort für mehr als eine Anwendung verwenden.
Dieses Beispiel ist natürlich nur zur Veranschaulichung und sollte keinesfalls für echte Authentifizierung benutzt werden. Würde unsere Prüfsumme mit einfacher Addition arbeiten und 126 rausbekommen, gäbe es vermutlich sehr viele Passwörter, die auf die 126 als Ergebnis kommen. So würde zum Beispiel das Passwort „zzzzzzzzzl“ zu der gleichen Prüfsumme kommen und man könnte sich ohne Probleme einloggen. Dieses Phänomen nennt man „Kollision“.
Kollision und Hashverfahren
Weil Kollisionen nicht ganz auszuschließen und je nach Hashverfahren unterschiedlich wahrscheinlich sind, gibt es unterschiedliche Hashfunktionen mit unterschiedlichen Ansprüchen. „MD5“ zum Beispiel, ist sehr gut dafür geeignet, eine Prüfsumme auf Dateien zu erstellen um zu prüfen, ob z.B. ein Download erfolgreich war. Auf der anderen Seite gibt es allerdings auch sehr viele Kollisionen. Aus diesem Grund sollte MD5 auf keinen Fall zur Ablage von Passwörtern eingesetzt werden. Denn auch wenn das Ergebnis erst einmal „kryptisch“ aussieht, ist das MD5-Verfahren kein kryptografisches Hashverfahren.
Soweit, so gut, aber… was macht denn nun ein kryptografisches Hashverfahren aus? Auf zwei wesentliche Punkte herunter gebrochen kann man sagen:
- Es ist kollisionsresistent
- Es ist eine Einwegfunktion (der Ursprungswert, also unser Originalpasswort, kann nicht ermittelt werden)
Um die Rückverfolgbarkeit des Ursprungswertes auszuschließen, wird in vielen kryptografischen Hashfunktionen ein mathematischer Trick verwendet:
Man rechnet mit Potenzen. Die Umkehrung einer Potenz ist die Wurzel, doch wer in Mathe aufgepasst hat weiß, dass die Wurzel eines Wertes kein einzelner Wert, sondern der Betrag ist. So ist zum Beispiel √9 = 3 oder -3 und damit nicht mehr eindeutig. Wenn man nun mehrere Potenzierungen nacheinander ausführt kann man unmöglich zurückrechnen, welcher Ursprungswert, also welches Passwort genommen wurde. Die einzige Möglichkeit ist dann noch die sogenannte „Brute Force“-Methode, indem man für jedes mögliche Passwort den Hashwert errechnet und hofft, das richtige Passwort zu „erraten“.
Bei der aktuellen Rechenpower wäre es doch ein leichtes, wenn sich einfach ein paar Leute zusammen schließen und jeder berechnet einen Teil der Passwörter vor. Zum Beispiel nehme ich alle Kleinbuchstaben bis 8 Stellen, jemand anderes alle Großbuchstaben etc. – sind damit nicht alle Passwörter „schwach“?
Nein, denn auch für dieses Problem haben sich Lösungen gefunden und wenn du wissen willst, wie die Sicherheit noch weiter erhöht werden kann und was ausgerechnet Pfeffer und Salz mit Kryptografie zu tun habt, findest du diese Information im nächsten Artikel dieser Reihe zum Thema Passwortsicherheit.
0 comments on “Verschlüsselung vs. Hashing von Passwörtern”