0

Sicheres Speichern von Passwörtern

Geschrieben am 26. Juli 2009 in Programmierung von Oliver Obenland

Dieser Bereich der Software-Entwicklung ist leider ein Thema, dass oft vernachlässigt wird. Dabei ist der Umgang mit kritischen Daten ein wichtiger Bestandteil. Zudem ist das Thema gar nicht so schwirig und die Grundlagen sind leicht gelernt.

Grundlagen

Die Technik nennt man “Hashen”. Dabei handelt es sich um eine Art der Verschlüsslung, die nicht zurückführbar ist. Das heißt, dass ein verschlüsselter Text nicht mehr dekodiert werden kann. Beim Verschlüsseln kann man den Text wiederherstellen.

Einfaches Verschlüsseln

Ein kleines Beispiel zum veranschaulichen:
Zu erst verschlüsseln wir ein Text mit einer einfachen Verschlüsselung. Dabei wird jeder Buchstabe des Textes durch den Nächsten im Alphabet ersetzt. Also, “A” wird zu “B”, “B” zu “C”, und so weiter. Diese Art der Verschlüsselung heißt “symmetrische Verschlüsselung”.

"Hallo Welt" wird zu "Ibmmp Xfmu"

Hier wird jetzt nicht berücksichtigt, dass das Leerzeichen eigentlich auch um eins weiter geschoben werden müsste. Dazu kommen wir gleich.

Nun, diese Verschlüsselung ist recht einfach und eben so einfach ist sie wieder entschlüsselt, wenn man die Technik kennt.  In dem man das Vorgehen verkehrt herum wiederholt, hat man wieder den Text.

Einfaches Hashen

Beim Hashen geht das nicht. Eine einfache Hash-Methode wäre es, den Quersummen des Textes zu nehmen. Dabei wird der Text in Zahlen umgewandelt. Hierfür verwende ich die UTF-8-Zeichentabelle:

"Hallo Welt" wird zu: 72, 97, 108, 108, 111, 32, 57, 87, 108, 116
72, 97, 108, 108, 111, 32, 57, 87, 108, 116 
addiert ergibt 896

Diesesmal haben wir das Leerzeichen mit verarbeitet. Nun Überlegen Sie sich ein mal, wie man aus 896 wieder zu dem Text “Hallo Welt” zurück findet. Haben Sie einen gefunden? Ich nicht. Der Grund ist recht einfach: Beim Hashen gehen Informationen verloren. Dadurch wird der Hashwert (das Ergebnis des Hashens) sehr viel kleiner, und verbraucht weniger Speicherplatz. Dadurch kommt es aber zu einem Problem, dass ich im nächsten Kapitel zeigen möchte.

Kollision

Wir benutzen immernoch die Quersummen-Methode zum Hashen.

"ab" wird zu 97, 98. Quersumme 195
"ba" wird zu 98, 97. Quersumme 195

Das Bedeutet, dass man mit dem Passwort “ab” und “ba” den gleichen Hash und somit möglicherweise Zugriff auf kritische Daten bekommt. So einen Fall nennt man Kollision.

MD5, SH1 und co.

MD5 und SH1 sind Algorithmen, welche recht effizient sind und deshalb sehr populär geworden sind.

Verschlüsselt wird der Satz “Hallo Welt”:

MD5:       5c372a32c9ae748a4c040ebadc51a829
SHA-1:     28cbbc72d6a52617a7abbfff6756d04bbad0106a
SHA-256:   2d2da19605a34e037dbe82173f98a992a530a5fdd53dad882f570d4ba204ef30<br />Whirlpool: 960a229d413399bf5249d654dec1f1d9f913a8e873ae9d4fa9293f6fae01ccb389ac40dbb19a7e54f84f964d638b055f7267cf2ec257a98a130416c883479d2e

Wie man sieht bekommt man bei den unterschiedlichen Hash-Algorithmen unterschiedliche Hashwerte heraus, die sich nicht nur durch die Reihenfolge der Buchstaben und Zahlen, sondern auch durch die Länge unterscheiden.

Allgemein kann man sagen, dass längere Hashwerte weniger Kollisionen bedeuten, da die Varianz der Werte größer ist. Ebenso ist durch die Benutzung von Hexidezimalwerten für den Hashwert eine größere Anzahl an Möglichkeiten entstanden. Für ein Hashwert mit 8 Zeichen, welcher aus Dezimalzahlen besteht, gibt es 108, also 100.000.000 Möglichkeiten. Mit hexidezimalen Zeichen gäbe es 168, 4.294.967.296 Möglichkeiten.

Regenbogentabellen, und Brut-Forcing

Na, das hört sich doch Klasse an. Das heißt, dass ich jetzt meine Passwörter mit MD5 oder SH1 hashe und dann hab ich all meine Sorgen los, oder? Vor ein paar Jahren hätte das gestimmt. Heutzutage gibt es technische Möglichkeiten, diese Hashs zu knacken. Mit so ganannten Regenbogentabellen oder durchs Brut-Forcing kann man Hashs hacken.

Regenbogentabellen sind Tabellen in einer Datenbanken, in denen nur Texte und deren Hashwerte stehen. Findet man ein Hashwert, so muss man nur noch die Datenbank fragen, und man hat den Text dazu. Es gibt auch Regenbogentabellen, die die Hashwerte für mehrfaches Hashen beinhalten. Also, solche Hashwerte, die entstehen, wenn man ein MD5-Hashwert erneut durch den MD5-Algorithmus schickt.

Das Brut-Forcen ist ein Prozess, bei dem einfach solange geraten wird, bis man den richtigen Text hat. Dagegen kann man wenig tun. Nur, wenn zum Beispiel Login-Systeme über diese Methode gehackt wird, kann man durch eine maximale Anzahl an Anfragen pro Zeit Brut-Forcing blockieren.
Gegen Regenbogentabellen gibt es hingegen zwei Möglichkeiten: Das Salzen und eigene Algorithmen.

Das Salzen

Das Salz für ein Passwort ist eine Erweiterung des Textes oder eine weitere Variable im Hash-Algorithmus, um das Passworthash sicherer zu machen.

Um es zu Veranschaulichen ändere ich die symmetrische Verschlüsselung ab. Nun wird nicht mehr um ein Buchstaben verschoben, sondern um X Buchstaben. Das heißt in diesem Fall, dass das Salz die Verschiebung ist. Je nach Verschiebung bekommt man ein anders verschlüsselten Text.

Es geht auch, in dem man dem Text das Salz anhängt. Ist das Salz zum Beispiel das aktuelle Datum, so ist ein Hash nur heute gültig, denn morgen hat sich das Datum geändert, und somit ist der Hashwert anders.

Zusammenfassung

Um ein Passwort sicher zu speichern, sollte man sich ein starken Hash-Algorithmus aussuchen, und das Passwort salzen. Für das Salzen kann man statische Texte, Benutzerdaten oder variable Zeichenketten benutzen, um das Passwort sicher zu verschlüsseln.

Jedoch ist das kein Garant für die Sicherheit des Login-Systems. Denn durch das sichere Speichern von Passwörtern ist der Server, die Datenbank oder das Login-System selber immernoch angreifbar!

Schreib einen Kommentar