Passwörter verschlüsseln

jochberger

Mitglied
Guten Morgen,
heute habe ich einmal eine allgemeine Frage.
Wie realisiert ihr die sichere Verschlüsselung von Kennwörtern und sensiblen Daten? Bisher bin ich davon ausgegangen, dass die Methode mit md5 sicher sei. Allerdings habe ich nun gelesen, dass dies nicht mehr der Fall ist.

Ich bin für jeden Hinweis sehr dankbar.

Gruß
jochberger
 
Hi

Du meinst wohl Hashverfahren
(bei Verschlüsselungen kann man mit dem Schlüssel auch wieder zum Klartext zurück.
Hashes sind nicht umdrehbar (und haben keinen Schlüssel).
Das Problem bei MD5: es ist mit heutiger Rechenleistung doch umdrehbar.)

Besser: Die SHA-Familie. zB.
SHA1
SHA512 (noch sicherer)
 
Wenn man sich nun die Frage stellt, wie man einen Hash als Passwort-"Verschlüsselung" denn verwenden kann:

1. Benutzer erstellt ein Konto, vergibt einen Benutzername und ein Passwort (tippt es als Klartext - also unverschlüsselt - in ein Passwort-Feld ein)
2. Das Klartext-Passwort wird (hoffentlich über einen sicheren Kanal wie https übertragen) am Server mittels Hash-Funktion in eine Zeichenkette verwandelt, die (idealerweise) nicht mehr rückgängig gemacht werden kann.
3. Das ge-hashte Passwort kann nun in einem Datenspeicher wie einer Datei oder Datenbank abgelegt werden.
4. Benutzer möchte einen Login vollziehen, dazu wird das Prozedere derart wiederholt, wie in 1 und 2 beschrieben.
5. Das beim Login eingegebene Passwort wird - wenn es das gleiche wie bei der Erstellung des Benutzerkontos ist - den gleichen Hash generieren.
6. Die beiden Hashes (gespeicherter und beim Login eingegebener) werden vergleichen und müssen identisch sein.

Noch besser als Hashing ist Hashing + Salt, also ein Verfahren, das es Brute-Force-Angreifern so gut wie unmöglich macht, ein Passwort in seine Klartext-Version zu "verwandeln", also durch Ausprobieren sämtlicher Möglichkeiten.

Was hat das Salten (salzen) für einen Hintergrund?

Es gibt sog. Rainbow-Tables, also riesengroße Dateien, in denen quasi für einen bestimmten Hash-Algorithmus sehr viele für eine bestimmte Klasse von Passworten (z.B. alles mit Buchstaben und Zahlen für eine Länge von 4 bis 8 Zeichen) vorberechnet werden. Anschließend kann man diese Rainbow-Table nach dem Hash durchforsten und möglicherweise findet man sogar ein Passwort darüber heraus - je nach dem wie sicher ein Passwort (Klein-/Großbuchstaben+Zahlen+Sonderzeichen) vergeben wurde.

Mit dem Salt wird dem Hash eine zusätzliche zufällige Komponente hinzugefügt, die beim Login einfach weg-gerechnet wird und kein großer Rechenaufwand ist. Der Salt macht die Rainbow-Tables jedoch sinnlos, denn man kann nicht für alle existierenden zufälligen Komponenten ein Salt für alle möglichen Kombinationen von Passworten speichern, das übersteigt einfach die Möglichkeiten der Persistenz (Hexa-Byte sind da Peanuts dagegen).

Für ein gut gesichertes Passwort gibt es also mehrere Möglichkeiten:

1. Gute Passworte forcieren, sprich Klein-/Großbuchstaben+Zahlen+Sonderzeichen als Voraussetzung beim Erstellen des Accounts
2. Salzen von Hashes
3. Security-by-obscurity (Ablegen von Passworten an Orten wo es ein Angreifer nicht erwartet)

Natürlich kann man die verschiedenen Tipps auch kombinieren ;-)


Bei Gelegenheit werde ich mal eine Klasse vorstellen, die ich für das Erstellen von gesalzenen Hashes geschrieben habe.
 

Neue Beiträge

Zurück