furryhamster
Lt. Commander
- Registriert
- Okt. 2008
- Beiträge
- 1.101
Hi,
ich überarbeite zur Zeit einen Login. Das Passwort soll als Hash in der Datenbank stehen. Dabei soll ich einen random salt anwenden. allerdings verstehe ich nicht so ganz den Unterschied zu einem festen salt (außer dass die Hashwerte bei gleichen Passwörtern anders sind)
Folgendes Beispiel habe ich im Internet gefunden:
Angenommen Passwort = Hans und das random generierte Salt = esel..
Also erstes mache ich aus esel ein md5 hash und nehme davon die ersten 8 ziffern, also "f8319e90". Diesen beschnittenen Hash speicher ich in der Datenbank. dann nehme ich f8319e90Hans und wieder md5 (=266acf38db238456686c471749b55e34). dort setz ich dann wieder den beschnittenen Salthash vor (=f8319e90266acf38db238456686c471749b55e34) und speicher dies als Passwort in der Datenbank.
wenn jetzt jedoch jmd kommt und es schafft auf die datenbank zugreift, sieht er ja hash und pwhash. dann brauch er ja eigl nur den Salt am anfang vom pw hash entfernen und eine brute force attacke starten mit f8319e90Beispielpasswort und den wert + f8319e90 vorgehängt mit dem pwhash vergleichen. Dies würde doch genau so lange zu bruten dauern wie komplett ohne salt oder?
irgendwas stimmt da doch an meiner logik nicht
ich überarbeite zur Zeit einen Login. Das Passwort soll als Hash in der Datenbank stehen. Dabei soll ich einen random salt anwenden. allerdings verstehe ich nicht so ganz den Unterschied zu einem festen salt (außer dass die Hashwerte bei gleichen Passwörtern anders sind)
Folgendes Beispiel habe ich im Internet gefunden:
function generateSaltedHash( $data, $salt=null )
{
if( is_null($salt) ) {
$salt = substr(md5(uniqid(rand())), 0, 8);
}
return $salt.md5($salt.$data);
}
function checkSaltedHash( $data, $hash )
{
return $hash === generateSaltedHash($data, substr($hash, 0, 8));
}
Angenommen Passwort = Hans und das random generierte Salt = esel..
Also erstes mache ich aus esel ein md5 hash und nehme davon die ersten 8 ziffern, also "f8319e90". Diesen beschnittenen Hash speicher ich in der Datenbank. dann nehme ich f8319e90Hans und wieder md5 (=266acf38db238456686c471749b55e34). dort setz ich dann wieder den beschnittenen Salthash vor (=f8319e90266acf38db238456686c471749b55e34) und speicher dies als Passwort in der Datenbank.
wenn jetzt jedoch jmd kommt und es schafft auf die datenbank zugreift, sieht er ja hash und pwhash. dann brauch er ja eigl nur den Salt am anfang vom pw hash entfernen und eine brute force attacke starten mit f8319e90Beispielpasswort und den wert + f8319e90 vorgehängt mit dem pwhash vergleichen. Dies würde doch genau so lange zu bruten dauern wie komplett ohne salt oder?
irgendwas stimmt da doch an meiner logik nicht