Hallo!

Als ik wachtwoorden zoals: test hash en controleer met de volgende code:

$password = password_hash(md5(hash('sha256', sha1(md5('test')))), PASSWORD_DEFAULT);


    if (password_verify(md5(hash('sha256', sha1(md5('test')))), $password))
    {
        echo 'test';
    }


Dan zou dit toch hartstikke veilig moeten zijn? Want wie komt er nou achter zulke ritmes (als ik dat bv. 10 keer achter elkaar door elkaar haal).

En van de link https://crackstation.net/hashing-security.htm
snap ik het niet helemaal.

Dus wie zou mij kunnen uitleggen waarom dit niet veilig is?
Bcrypt werkt net even anders dan sha256. Het is dus geen vraag over veiligheid, maar over de methode. Bcrypt levert geen 2x dezelfde waarde op, waardoor je ook kunt besluiten om na een correcte inlogpoging een nieuwe hash in de database op te slaan.
>> waardoor je ook kunt besluiten om na een correcte inlogpoging een nieuwe hash in de database op te slaan.

Is dat gebruikelijk?
Dat kan. Zie http://php.net/manual/en/function.password-needs-rehash.php
Een voordeel lijkt me, dat als er een nieuwe word gegenereerd je een brute force bijna onmogelijk maakt.

Ik zou voor de zekerheid ook geen PASSWORD_DEFAULT gebruiken, wat zal er namelijk gebeuren als de default verandert? Dan werkt je login routine opeens niet meer met bestaande accounts.

Ehm... Hier wil even op inhaken.

Dat is toch echt niet wat de manual voorschrijft.
Ik meen zelfs te hebben gelezen dit juist WEL te gebruiken omdat het kan veranderen.
Het enige waar je over na moet denken is dat je het op moet slaan in een kolom die een behoorlijke grote is. bij php5.5 zo de grote van kolom 60 karakters genoeg moeten zijn, maar omdat hij in de toekomst kan veranderen word het advies gegeven om hem 255 karakters te maken. En als je php 7 gebruikt is een salt niet meer nodig extra toe te voegen, want dat doet hij voortaan zelf.
Als je alleen de hash wijzigt maar het wachtwoord niet, is het wachtwoord nog steeds bruikbaar en kun je dus remote bruteforcen. Je kunt brute force beter tegengaan door het aantal requests per periode, per IP-adres en per gebruikersnaam te beperken en door een zware work factor te gebruiken.

Het rehashen dient vooral een ander doel: als de hashes (dus de database) in verkeerde handen zijn gevallen, worden die bij een rehash onbruikbaar. Aangezien diefstal van wachtwoordhashes niet altijd onmiddellijk wordt ontdekt, beperk je automatisch de potentiƫle schade voor actieve gebruikers door wachtwoorden bij een login te rehashen.

Reageren