Wachtwoord-hashing is een fundamenteel aspect van wachtwoordbeveiliging, wat het wachtwoordopslaglandschap heeft getransformeerd van platte tekst naar versleutelde hashes. Dit artikel onderzoekt de evolutie van wachtwoord-hashing, van vroege algoritmen zoals MD5 en SHA-1 tot de veiligere methoden die tegenwoordig worden aanbevolen, met als slot de belangrijkheid van het gebruik van willekeurige wachtwoorden voor elke website.
Voordat we dieper ingaan op de geschiedenis en evolutie van wachtwoord-hashing, is het belangrijk om te begrijpen wat hashing is. Hash-functies, de methoden die het hashen uitvoeren, zijn ontworpen om elke string van gegevens, of "input," om te zetten in een string van bytes van vaste grootte, meestal bekend als een "hash." Dit proces heeft verschillende belangrijke kenmerken die het bijzonder nuttig maken voor beveiligingsdoeleinden.
Een cruciaal kenmerk van hash-functies is hun gevoeligheid voor invoerwijzigingen. Dit staat bekend als het lawine-effect. Zelfs een kleine wijziging in de invoer, zoals het veranderen van één enkel teken in een wachtwoord, zal een compleet andere hash opleveren. Bijvoorbeeld, de hashes voor de strings "wachtwoord1" en "wachtwoord2" zullen er volledig anders uitzien, ook al is het enige verschil tussen de twee invoeren het laatste teken. Dit kenmerk is essentieel voor het behoud van gegevensintegriteit, omdat het bijna onmogelijk maakt om de oorspronkelijke invoer te achterhalen alleen op basis van de hash.
Bovendien zijn hash-functies eenrichtingsfuncties. Dit betekent dat ze zijn ontworpen om computationeel niet omkeerbaar te zijn. De output (de hash) behoudt geen specifieke details over de invoer die iemand in staat zou stellen om de oorspronkelijke gegevens te reconstrueren zonder buitengewone rekencapaciteit. De enige haalbare manier om een hash "om te keren" is via een methode die brute-forcing wordt genoemd, waarbij elke mogelijke combinatie van de oorspronkelijke gegevens opnieuw wordt gehasht totdat een overeenkomende hash is gevonden.
In de vroege dagen van digitale beveiliging werden MD5 (Message-Digest Algorithm 5) en SHA-1 (Secure Hash Algorithm 1) veel gebruikt voor wachtwoord-hashing. Ontwikkeld tijdens het begin van de jaren '90, converteerden deze algoritmen platte-tekst wachtwoorden naar hashes van vaste grootte. Ondanks hun aanvankelijke veiligheid, maakten kwetsbaarheden zoals gevoeligheid voor collisions (botsingen) ze al snel ongeschikt voor veilige toepassingen.
Hoewel hash-functies zijn ontworpen om snel en efficiënt te zijn, kan deze eigenschap nadelig zijn als het gaat om wachtwoordbeveiliging, omdat het brute-force aanvallen gemakkelijker maakt. Wachtwoord-gebaseerde Sleutelafgeleidingsfuncties (PBKDFs), zoals PBKDF2, bcrypt en scrypt, zijn ontworpen om deze aanvallen tegen te gaan door een salt te gebruiken (om regenboogtabel-aanvallen te voorkomen) en een techniek genaamd key stretching toe te passen. Key stretching vertraagt opzettelijk het hash-proces, wat pogingen tot ongeautoriseerde toegang aanzienlijk kan ontmoedigen.
Naarmate de cyberbeveiliging geavanceerder werd, werden de tekortkomingen van vroege hash-algoritmen zoals MD5 en SHA-1 duidelijk, wat leidde tot de ontwikkeling van algoritmen die specifiek zijn ontworpen voor wachtwoordbeveiliging, zoals bcrypt, scrypt en Argon2, oftewel Wachtwoord-gebaseerde Sleutelafgeleidingsfuncties (PBKDFs).
Volgens OWASP zijn de aanbevolen algoritmen voor wachtwoord-hashing bcrypt, scrypt en Argon2. Deze worden geprefereerd vanwege hun robuuste verdediging tegen brute-force aanvallen en hun ingebouwde mechanismen voor salt en key stretching.
bcrypt is een wachtwoord-hashingfunctie afgeleid van het Blowfish-cijfer. Het bevat een salt om te beschermen tegen regenboogtabel-aanvallen en gebruikt een kostparameter om de rekentijd (en dus de moeilijkheid) van het genereren van de hash te verhogen. Deze kostfactor is aanpasbaar, waardoor het algoritme kan worden opgeschaald met hardwareverbeteringen.
Belangrijke Parameters:
OWASP beveelt aan om een werkfactor van 10 of meer te gebruiken met een wachtwoordlimiet van 72 bytes.
scrypt is ontworpen om zowel geheugen- als tijdsintensief te zijn om grootschalige aangepaste hardware-aanvallen te weerstaan. Het kan worden geconfigureerd om een specifieke hoeveelheid geheugen te vereisen, en het bevat ook een salt en een iteratieaantal, vergelijkbaar met PBKDF2.
Belangrijke Parameters:
OWASP beveelt aan om een minimum CPU/geheugenkostparameter van (2^17), een minimum blokgrootte van 8 (1024 bytes) en een parallelisatieparameter van 1 te gebruiken.
Argon2, de winnaar van de Password Hashing Competitie in 2015, komt in twee varianten: Argon2d en Argon2i. Argon2d is geoptimaliseerd voor omgevingen waar de dreiging van side-channel aanvallen laag is, terwijl Argon2i is geoptimaliseerd om side-channel aanvallen te weerstaan. Het bevat ook belangrijke kenmerken van zowel bcrypt als scrypt.
Belangrijke Parameters:
OWASP beveelt aan om Argon2id te gebruiken met een minimale configuratie van 19 MiB aan geheugen, een iteratieaantal van 2 en 1 graad van parallelisme.
Gezien de evoluerende aard van beveiligingsbedreigingen en tegenmaatregelen, is het cruciaal om op de hoogte te blijven van de nieuwste praktijken in wachtwoordbeveiliging. Voor de meest actuele en uitgebreide aanbevelingen, raadpleeg de OWASP Password Storage Cheat Sheet op de officiële site van OWASP. Zorg ervoor dat u deze richtlijnen regelmatig bekijkt om in lijn te blijven met de beste praktijken op het gebied van cyberbeveiliging.
Hoewel het toepassen van moderne hash-algoritmen cruciaal is, spelen de manier waarop wachtwoorden worden gecreëerd en beheerd ook een kritieke rol in het behouden van beveiliging. Willekeurige wachtwoorden voor elke website zijn essentieel vanwege verschillende factoren:
Van MD5 en SHA-1 tot moderne algoritmen zoals bcrypt en Argon2, wachtwoord-hashing heeft aanzienlijke transformaties ondergaan. Naarmate cyberdreigingen zich blijven ontwikkelen, zijn het adopteren van moderne hash-algoritmen en het garanderen van het gebruik van willekeurige, unieke wachtwoorden voor elke website essentiële praktijken voor het waarborgen van online beveiliging. Deze strategieën voorkomen niet alleen de compromittatie van individuele accounts, maar versterken ook het algehele beveiligingsbeeld tegen steeds geavanceerdere aanvallen.