Naar aanleiding van de reacties op nieuws: LinkedIn: wachtwoorden zijn nu gesalt
In de reacties kom ik twee verschillende manieren tegen om password hashing met een salt toe te passen, en ik vraag me af welke nu de juiste of betere methode is.
Voor beide methodes geldt: De salt is een random string die verschilt per gebruiker, en die in de kolom "salt" is opgeslagen in dezelfde tabel waar de hash staat.
Beide methodes lijken qua veiligheid op elkaar, een collision vinden heeft voor beide methodes geen nut, en rainbow tables zullen minder effectief zijn door de salt.
Zit er echter een verschil in de daadwerkelijke veiligheid van beide methodes die ik over het heeft zie, waardoor de ene methode veiliger is dan de ander?
Methode 1:
Een deel van de gebruikers noemt de volgende methode:
Kortom: de salt wordt toegevoegd aan het password, en dat geheel wordt gehasht.
Methode 2:
Dan de andere methode:
In dit geval wordt het password gehasht, waarna de salt aan de hash wordt toegevoegd, en het geheel nogmaals wordt gehasht.
Edit:
Een verschil wat ik me net besef:
Met de tweede manier is het "makkelijker" om de originele string van de tweede hash te vinden, je weet immers de lengte van de die string: de lengte van een sha1 hash (40 tekens) + de lengte van de hash. Hiermeer verklein je de mogelijkheden die je moet proberen enorm.
In de reacties kom ik twee verschillende manieren tegen om password hashing met een salt toe te passen, en ik vraag me af welke nu de juiste of betere methode is.
Voor beide methodes geldt: De salt is een random string die verschilt per gebruiker, en die in de kolom "salt" is opgeslagen in dezelfde tabel waar de hash staat.
Beide methodes lijken qua veiligheid op elkaar, een collision vinden heeft voor beide methodes geen nut, en rainbow tables zullen minder effectief zijn door de salt.
Zit er echter een verschil in de daadwerkelijke veiligheid van beide methodes die ik over het heeft zie, waardoor de ene methode veiliger is dan de ander?
Methode 1:
Een deel van de gebruikers noemt de volgende methode:
PHP:
1
2
3
4
| $password = 'mijnwachtwoord'; $salt = '1234'; $hash = sha1($password . $salt); |
Kortom: de salt wordt toegevoegd aan het password, en dat geheel wordt gehasht.
Methode 2:
Dan de andere methode:
PHP:
1
2
3
4
| $password = 'mijnwachtwoord'; $salt = '1234'; $hash = sha1(sha1($password) . $salt); |
In dit geval wordt het password gehasht, waarna de salt aan de hash wordt toegevoegd, en het geheel nogmaals wordt gehasht.
Edit:
Een verschil wat ik me net besef:
Met de tweede manier is het "makkelijker" om de originele string van de tweede hash te vinden, je weet immers de lengte van de die string: de lengte van een sha1 hash (40 tekens) + de lengte van de hash. Hiermeer verklein je de mogelijkheden die je moet proberen enorm.
[ Voor 11% gewijzigd door Morax op 13-06-2012 14:57 ]
What do you mean I have no life? I am a gamer, I got millions!