Wat is hashing
Hashing is het proces waarbij platte tekst, zoals wachtwoorden, via een eenrichtingstransformatie wordt omgezet in een string met vaste lengte. Dezelfde invoer levert altijd dezelfde hash op, maar je kunt de oorspronkelijke platte tekst niet uit de hash herleiden. DeHash-facade van Laravel ondersteunt de hashalgoritmen bcrypt en Argon2 voor het veilig opslaan van wachtwoorden.
Vergelijking van algoritmen
De “workfactor” van bcrypt bepaalt hoelang het genereren van een hash duurt. Hoe trager de hash, hoe beter de weerstand tegen brute-force-aanvallen. Door de workfactor te verhogen naarmate hardware sneller wordt, houd je de beveiliging op peil.
Flow van hashen en verifiëren
Configuratie
Standaard gebruikt Laravel debcrypt-driver. Je kunt dit wijzigen met de omgevingsvariabele HASH_DRIVER.
config:publish.
config/hashing.php onder andere de standaard workfactor wijzigen.
Basisgebruik
Een wachtwoord hashen
Geef de platte tekst van het wachtwoord door aanHash::make() en je krijgt de hashwaarde terug. Deze hashwaarde sla je op in de database.
De bcrypt-workfactor aanpassen
Met de optierounds pas je de rekenkosten van het hashen aan. Hoe hoger de waarde, hoe veiliger, maar ook hoe langer de verwerking duurt.
De standaardwaarde (12) is geschikt voor de meeste applicaties.
De Argon2-workfactor aanpassen
Gebruik je Argon2, dan kun je de rekenkosten aanpassen met de optiesmemory, time en threads.
Wachtwoorden verifiëren
MetHash::check() controleer je of een wachtwoord in platte tekst overeenkomt met de opgeslagen hash.
Een typisch voorbeeld binnen een inlogproces:
Auth::attempt(), dan gebeurt deze controle automatisch en hoef je hem niet zelf aan te roepen.
Hash::check() is vooral handig wanneer je handmatig het huidige wachtwoord wilt controleren.
Bepalen of rehashen nodig is
MetHash::needsRehash() controleer je of de workfactor waarmee de hash is gegenereerd afwijkt van de huidige configuratie.
Dit gebruik je om bestaande hashes bij te werken met de nieuwe instellingen nadat je de workfactor hebt gewijzigd.
Verificatie van het hashalgoritme
Standaard verifieertHash::check() of de hash is gegenereerd met het momenteel geconfigureerde algoritme.
Wijkt het algoritme af, dan wordt een RuntimeException gegooid.
Dit voorkomt aanvallen via manipulatie van het hashalgoritme.
Moet je meerdere algoritmen tegelijk ondersteunen, bijvoorbeeld tijdens een migratie naar een ander algoritme, dan kun je deze verificatie uitschakelen door HASH_VERIFY op false te zetten.
Samenvatting
Volgende stappen
Introductie tot authenticatie
Leer het volledige plaatje van authenticatie, waaronder het implementeren van een inlogproces met
Hash::check().