Bij veel websites kun je tegenwoordig een account aanmaken om bij de website aan te melden. Door jezelf aan te melden weet de website wie je bent en kan de website gegevens voor jou onthouden. Zo kan een webwinkel je vorige bestellingen laten zien en alvast jouw gegevens invullen als je iets wilt bestellen. Deze gegevens waaronder jouw wachtwoord worden dan bewaard in een database. Als een hacker de inhoud van de database steelt is dat erg vervelend, tenslotte liggen al jouw gegevens dan op straat. Bij wachtwoorden is dat nog erger. Veel mensen gebruiken hetzelfde wachtwoord voor verschillende websites. Waardoor een hacker niet alleen kan aanmelden bij de webwinkel met jouw gegevens, maar ook bij andere websites.
Als programmeur moet je er alles aan doen om deze gegevens te beveiligen. Bij wachtwoorden wordt hiervoor vaak gebruik gemaakt van hashing. Een computer kan, met behulp van een hash functie, van iedere tekst of bestand een unieke kleine tekst berekenen. Deze unieke kleine tekst noemen we een hash. Het is niet mogelijk om met de hash de originele tekst te achterhalen. Als we het wachtwoord van een gebruiker door de hash functie halen, krijgen we dus een unieke waarde die niet terug te vertalen is in het oorspronkelijke wachtwoord. Deze waarde, de hash, bewaren we in de database. Als een gebruiker zich opnieuw aanmeld berekenen we van het wachtwoord de hash en vergelijken we die met de hash in de database.
Mocht de database gehacked worden, dan zijn daar alleen de hashes te vinden en niet de wachtwoorden. Met het steeds sneller worden van computers zijn hashes minder veilig geworden. Een moderne computer kan proberen achter het wachtwoord te komen door brute force hacking. Je laat dan de computer van alle combinaties van letters en cijfers een hash berekenen. Uiteindelijk vindt de computer een hash die overeenkomt met de hash van het wachtwoord en dus het oorspronkelijke wachtwoord. Om dit proces nog sneller te maken zijn er op internet zogenaamde rainbow tables te vinden. Dit zijn lijsten met al berekende hashes van veel voorkomende woorden en wachtwoorden. Nu hoef je alleen maar te zoeken naar de juiste hash en bijbehorend wachtwoord. Probeer het maar eens uit. De md5 hash van het woord schaap is 3ce0f51d2f5cec020cd1dff96f46e422. Deze hash is gemaakt met de website https://www.md5hashgenerator.com/, maar iedere md5 hash functie maakt deze hash van het woord schaap. Als je deze hash plakt in de volgende site: https://crackstation.net/, dan zie je dat dit een bekende hash is. Als gebruikers hetzelfde wachtwoord hebben hebben ze ook dezelfde hash. Bij een succesvolle hack heb je dan niet het wachtwoord van één gebruiker gevonden maar van meerdere.
Gelukkig is er een oplossing voor deze vorm van hacking, we maken het wachtwoord langer. Hoe langer het wachtwoord hoe lastiger het is om deze met bruteforce te achterhalen. Een wachtwoord met een lengte van 5 characters waarbij je alleen kleine- en hoofdletters gebruikt levert iets meer dan 380 miljoen combinaties op. Dat zijn er bij een wachtwoord met 12 characters al ongeveer 391 triljoen. Dus hoe langer het wachtwoord hoe beter. Toch kiezen gebruikers vaak een kort wachtwoord omdat dat gemakkelijk te onthouden is. Om het wachtwoord toch langer te maken, plakken we een extra stuk voor of achter wachtwoord. We noemen dit extra stuk een salt. Salt is letterlijk vertaald uit het engels, zout en met teveel zout wordt het eten, lees hacken, een stuk minder lekker. Als we nu ook nog voor iedere gebruiker een andere salt gebruiken zijn zelfs de hashes van twee dezelfde wachtwoorden niet meer hetzelfde. De unieke salt per gebruiker sla je dan naast de hash en de gebruikersnaam op in de database.