Webshops beveiligen - Wachtwoorden veilig opslaan

Vrijwel elke webshop maakt gebruik van wachtwoorden om terugkerende gebruikers te laten inloggen. Deze gebruikers zouden voor elke website een uniek wachtwoord moeten gebruiken, maar de praktijk is helaas dat gebruikers wachtwoorden vaak voor meerdere websites gebruiken. Hierdoor zijn deze wachtwoorden voor hackers gewilde informatie, omdat ze hiermee op andere websites kunnen inloggen zoals bijvoorbeeld PayPal. Om uw gebruikers te beschermen is het daarom belangrijk  wachtwoorden op een veilige manier op te slaan, en zeker niet zomaar te bewaren. Je gebruikt hiervoor een zogenaamde one-way hash functie, zoals MD5, waarmee met een bepaalde code in principe het originele wachtwoord nooit meer te achterhalen is. Door het gebruik van zogenaamde rainbow tabellen is alleen het gebruik van een one-way hash functie echter niet genoeg, en kunt je daarnaast zogenaamde salted hashes gebruiken.

Wat is een one way hash-functie?

Een hash is een cryptografische functie waarmee een bepaalde invoer omgezet wordt naar een vingerafdruk, de hash. Een veelgebruikte hash-functie is bijvoorbeeld MD5, waarmee invoer wordt omgezet naar een code van 32 tekens. In plaats van het originele wachtwoord bewaar je de hash in de database. Elke keer als de gebruiker nu inlogt wordt er op basis van de invoer een hash berekend, die vergeleken wordt met de hash in de database.

Waarom salted hashes?

Een van de problemen van gebruikers is dat ze te eenvoudige wachtwoorden gebruiken. Doordat veel websites standaard alleen de MD5 hash-functie gebruikten was het eenvoudig om, met als basis een woordenboek en verschillende combinaties van letters een database te maken waarin zeer veel MD5 hashes werden opgenomen. Deze zogenaamde rainbow tabellen zijn soms wel enkele terrabyte groot. Doordat gebruikers voor gemakkelijk te onthouden en korte wachtwoorden kiezen, konden zodoende veel wachtwoorden makkelijk herleid worden.

Om te voorkomen dat wachtwoorden eenvoudig kunnen worden opgezocht in een rainbow tabel, kan er een aantal willekeurige tekens aan het wachtwoord worden toegevoegd. Het hierdoor verkregen resultaat is dan dermate uniek dat deze niet meer in een rainbow tabel kan worden gevonden. Deze willekeurige tekens, de zogenaamde salt, moeten per gebruiker uniek zijn. Als je voor alle gebruikers dezelfde tekenreeks gebruikt kan een mogelijke aanvaller een rainbow tabel speciaal voor jouw website genereren en de wachtwoorden alsnog opzoeken. Als de salt per gebruiker uniek is, zal er ook per gebruiker een rainbow tabel moeten worden berekend; dit is een langdurig proces. Het is het beste om ook een betere hash functie te gebruiken zoals SHA2, die nog veiliger is omdat het ook meer tijd kost om deze te berekenen.

Salted hashes en de wachtwoorden zijn veilig?

Als je salted hashes gebruikt en je database wordt door een inbreker gestolen, dan zijn de originele wachtwoorden inderdaad niet zomaar te herleiden. Als een hacker echter toegang heeft gekregen tot je systeem zonder datje dit door hebt, kan hij in bijvoorbeeld het inlogscript een wijziging aanbrengen die alle originele wachtwoorden ergens bewaart. Zorg er dus altijd voor dat je inbrekers tijdig opmerkt!

Registrer ook het aantal inlogpogingen, en blokkeer gebruikers of IP adressen als er te veel inlogpogingen plaatsvinden. Als je dit niet doet kan een hacker alle mogelijke combinaties uitproberen, net zo snel als je server antwoord geeft op zijn verzoeken.

Maar mijn software ondersteunt geen salted hashes!

Salted hashes zijn zeer eenvoudig te implementeren, op internet zijn voorbeelden beschikbaar in allerlei verschillende programmeertalen. Met een paar regels extra code en een wijziging in de database om de hash te kunnen opslaan kunt je al gebruik maken van salted hashes.

Wat nu als mijn gebruiker zijn wachtwoord kwijt is?

De meeste webshops gebruiken tegenwoordig een SSL Certificaat om de verbinding tegen afluisteren te beschermen. Toch zijn er nog steeds webshops die een vergeten wachtwoord gewoon per e-mail naar een gebruiker toe sturen, zonder enige beveiliging. Het is duidelijk dat dit niet veilig is en dat je als webshop niet zou moeten beschikken over de wachtwoorden van uw gebruikers.

Als je gebruiker zijn wachtwoord kwijt is kun je hem een e-mail sturen met een link waarmee het wachtwoord op gereset kan worden. Op internet zijn diverse voorbeelden hoe je dit veilig kunt implementeren.

point up