Websiteentwicklung: PHP: Hashfunktionen
Was sind überhaupt Hashfunktionen?
[Bearbeiten]Hashfunktionen zur Verschlüsselung von Passwörtern
[Bearbeiten]Die Passwörter einer Webanwendung mit Hilfe von Hashfunktionen zu verschlüsseln, ist eine der wichtigsten Sicherheitsvorkehrungen. Die Ideen dahinter ist es Passwörter bevor sie in einer Datenbank gespeichert werden, mit Hilfe einer Hashfunktion zu verschlüsseln. Wenn sich nun eine Person anmelden möchte, wird ihr Passwort auch verschlüsselt und mit dem verschlüsselten Passwort in der Datenbank verglichen. Sollten sie gleich sein hat der User das Passwort richtig eingegeben.
Sollte nun eine Person die Userdatenbank in die Hände bekommen, kann sie die Passwörter nicht einfach entschlüsseln, da eine Hashverschlüsselung eine Ein-Weg-Verschlüsselung ist. Er müsste alle möglichen Passwörter verschlüsseln und mit dem verschlüsselten Passwort in der Datenbank vergleichen.
Angriffsarten
[Bearbeiten]Die Brute-Force-Attacke ist die zeitaufwendigste Angriffsart. Es werden nacheinander alle möglichen Zeichenketten verschlüsselt und mit dem Hashcode verglichen.
Eine Wörterbuchattake verwendet, wie der Name schon sagt ein Wörterbuch zum Knacken eines Hashcodes und funktioniert ähnlich wie die Brute-Force-Attake. Da Passwörter leider im Normalfall aus Wörtern bestehen, probiert bei einer Wörterbuchattake ein kleines Programm einfach verschiedene Wortkombinationen aus um den Hashcode zu erraten.
Rainbowtables sind automatisch erstellte Tabellen, in welchen irgendwelche Wörter und deren Verschlüsselungen stehen. Diese Tabellen werden meist von sehr schnellen Rechnern erstellt und machen das entschlüsseln eines verschlüsselten Passworts um einiges einfacher. Es muss nur noch das verschlüsselte Passwort in der Tabelle gesucht werden und schon hat man das Passwort entschlüsselt.
Um sich vor den oben genannten Angriffen zu schützen gibt es ein paar Punkte die beachtet werden sollten:
- Zwingen sie ihre User dazu gute Passwörter zu verwenden.
- Verwenden sie gute und sichere Verschlüsselungsalgorithmen.
- Verwenden sie auf Salt und Pepper, welche im nächsten Abschnitt behandelt werden.
Salt und Pepper
[Bearbeiten]Salting ist eine relativ simple Technik um sich vor den oben genannten Angriffsarten zu schützen. Die Idee hinter Salting ist es eine beliebige Zeichenkette (Salt) vor dem Verschlüsseln an das Passwort anzuhängen und auch in der Datenbank abzuspeichern. Nun sind Rainbowtables ziemlich wirkungslos, da es vielleicht einen Eintrag für das Passwort "hallo" gibt, aber es sehr unwahrscheinlich ist, dass es einen Eintrag für das Passwort ("hallo" + Salt) gibt, vor allem da Salts im Normalfall relativ lange und möglichst zufällige Zeichenketten sind.
Ein Pepper ist eine weitere Sicherheitsvorkehrung, welche ähnlich funktioniert wie Salting. Es wird dabei vor dem Verschlüsseln nicht nur der Salt an das Passwort gehängt sondern auch der Pepper. Der Pepper ist eine Zeichenkette die zum Beispiel in einer PHP-Konstante gespeichert wird und für die ganze Webanwendung gleich ist. Sollte es also nun einer Person gelingen an die Userdatenbank zu gelangen, nützt im das relativ wenig, weil er auch den Pepper genötigt, welcher nicht in der Datenbank gespeichert ist.
Die Methoden md5, sha1 und sha256
[Bearbeiten]Die Methoden md5(), sha1() und sha256() wurden früher sehr gerne für Passwortverschlüsselungen verwendet, jedoch sind die heutigen Computer so leistungsstark, dass es nicht mehr sehr sicher ist sie zu verwenden.
Hier ist trotzdem ein kleines Beispiel:
$md5Hash = md5($password);
$sha1Hash = sha1($password);
$sha256Hash = sha256($password);