Hallo,
hier eine kleine, aber feine Funktion um Passwörter z.b. für eine User-DB zu hashen und mit Salz zu versehen. Dazu noch ein paar Bemerkungen meinerseits.
Warum sollte man Passwörter verschlüsseln?
Die Frage ist leicht und schnell beantwortet - Würd ein Angreifer, durch welchen Bug auch immer, Zugriff auf eine Datenbank mit unverschlüsselten bzw. ungehashten Passwörtern erhalten, könnte er mithilfe dieser und evtl. hinterlegten Emailadressen sowohl die Emailaccounts der User als auch deren andere Anmeldungen hijacken. Deshalb möchte man unverschlüsselte Passwörter in einer Userdatenbank unter keinen Umständen haben.
Was hat es mit dem "salzen" auf sich?
Salzen nennt man den Vorgang der dazu dient einen Angriff mit Rainbow Tables zu erschweren/verhindern. Es ist deutlich einfacher einen Passworthash mithilfe von Rainbow Tables zu brechen, wenn das Passwort 1:1 und möglicherweise auch nur ein mal gehashed wurde. Das Salz ist im Grunde nichts anderes als eine beliebige Zeichenkette. Diese kann, wie im Falle dieser Funktion, statisch sein oder auch dynamisch generiert werden.
Das Salz sorgt nun dafür dass der erzeugte Hash keine 1:1 Umwandlung des Passwortes mehr wird und somit der Angriff per Rainbow Tables erschwert wird (so etwas ist z.b. wichtig wenn einem die User-DB abhanden kommt, die Passwörter aber gehashed sind und der Angreifer die Klarpasswörter rausrechnen möchte). Als zusätzlichen Sicherheitslayer kann man nun den Hash mit dem Salz zusammenlegen und das Ergebnis dann nochmals hashen.
Sofern das Salz und die verwendeten Hash-Algorythmen dem Angreifer nicht bekannt sind, steigt der Aufwand zum Errechnen der Klarpasswörter exponenziell an und der Angreifer wird sich - hoffentlich - die Frage stellen, ob es den Aufwand wert ist - Eines muss nämlich klar sein, die Frage ist nicht ob eine Verschlüsselung gebrochen werden kann, sondern wie viel Aufwand damit verbunden ist.
PHP-Code:<?php
function encrypt_char($input_char) {
//define some random string for salting the password
$salt = "your random string goes here";
//first create a md5 hash of the given string
$input_char_md5 = md5($input_char);
//after that, add a little salt for extra spiciness
$input_char_with_salt = $input_char_md5.$salt;
//last but not least create a sha1 hash from the salted md5 hash
$input_char_encrypted = sha1($input_char_with_salt);
//return the encrypted password
return $input_char_encrypted;
}
?>


1Likes
LinkBack URL
About LinkBacks





Zitieren
Lesezeichen