Webbeveiliging

Salting (zouten van wachtwoorden)

Definitie

Salting is het toevoegen van een unieke, willekeurige waarde, de salt, aan elk wachtwoord voordat de hash wordt berekend. Twee identieke wachtwoorden leveren zo verschillende hashes op, waardoor vooraf berekende tabellen nutteloos worden en de aanvaller elk account apart moet aanpakken.

Salting (zouten van wachtwoorden), Webbeveiliging

Een site mag wachtwoorden nooit leesbaar bewaren: hij slaat alleen de hash op, berekend met een functie die maar in een richting werkt. Bij het inloggen berekent hij de hash van het ingevoerde wachtwoord opnieuw en vergelijkt. Zonder salt heeft die methode een groot nadeel: twee mensen die hetzelfde wachtwoord kozen, krijgen precies dezelfde hash, en een aanvaller kan vooraf tabellen maken met de hashes van de meest gebruikte wachtwoorden. De salt lost beide problemen op.

Hoe salting werkt

Bij de registratie of bij een wachtwoordwijziging kiest de site willekeurig een unieke tekenreeks, de salt, en voegt die toe aan het wachtwoord voordat de hash wordt berekend. De salt wordt leesbaar naast de hash opgeslagen: hij hoeft niet geheim te zijn. Zijn taak is elke berekening uniek te maken.

Vergelijking in twee kolommen: zonder salt krijgen Anna en Bram, die hetzelfde wachtwoord gebruiken, dezelfde hash, die een vooraf berekende tabel in een keer kraakt; met een eigen salt voor elk verschillen de hashes en moet elk account apart worden aangevallen
Hetzelfde wachtwoord met twee verschillende salts geeft twee hashes die niets met elkaar te maken hebben.
  • Vooraf berekende tabellen worden nutteloos: de aanvaller zou ze voor elke salt opnieuw moeten maken.
  • Identieke wachtwoorden vallen niet meer op in een gestolen database.
  • Elk account moet apart worden aangevallen, wat het werk van een offline aanval flink vermenigvuldigt.

Een salt maakt een zwak wachtwoord nog niet sterk: "Zomer2024" blijft een van de eerste pogingen bij een brute-force-aanval. Daarom combineer je de salt met een bewust trage functie zoals bcrypt, scrypt of Argon2, die de salt automatisch meenemen.

Salt, pepper en aanbevelingen

OWASP maakt onderscheid tussen de salt, uniek per wachtwoord en daarnaast opgeslagen, en de pepper, een gedeeld geheim dat buiten de database wordt bewaard, bijvoorbeeld in een kluis voor geheimen. De pepper voegt een extra verdedigingslaag toe als alleen de database uitlekt. Het uitgangspunt van de aanbevelingen is overal hetzelfde: bewaar wachtwoorden nooit leesbaar, maar alleen als uitkomst van een veilige, niet omkeerbare cryptografische functie met een salt.

Video: “Password Hashing, Salts, Peppers | Explained!” (Seytonic, in het Engels)

Voor WordPress

In WordPress verwijst het woord "salt" naar twee dingen die je niet door elkaar moet halen.

De salt van wachtwoorden

Sinds WordPress 6.8 worden de wachtwoorden van gebruikers met bcrypt gehasht via de PHP-functie password_hash(), die voor elk wachtwoord een willekeurige salt aanmaakt en die in de hash zelf opslaat. Je hoeft niets in te stellen: het salten gebeurt automatisch.

De sleutels en salts in wp-config.php

Het bestand wp-config.php bevat acht constanten: AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY en hun tegenhangers AUTH_SALT, SECURE_AUTH_SALT, LOGGED_IN_SALT, NONCE_SALT. Ondanks hun naam lijken deze waarden eerder op een pepper: ze zijn geheim en dienen om inlogcookies en nonces te ondertekenen. Lekken ze uit, dan kan iemand proberen geldige cookies te vervalsen.

  • Genereer ze met de officiële dienst api.wordpress.org/secret-key/1.1/salt/ of met het WP-CLI-commando wp config shuffle-salts.
  • Vervang ze na een inbraak: alle bestaande cookies worden ongeldig en elke gebruiker moet opnieuw inloggen.
  • Kopieer ze niet van site naar site en publiceer ze nooit in een coderepository.

Ons artikel over de beveiligingsinstellingen in wp-config.php bespreekt deze constanten en andere nuttige opties. Voor de andere kant van het probleem, wachtwoorden die op meerdere sites worden hergebruikt, lees je over gelekte wachtwoorden en het verweer ertegen: een salt beschermt geen wachtwoord dat de aanvaller al kent, en daarom is credential stuffing zo populair bij hackers.

Verder lezen

  • Artikel wp-config.php: de beveiligingsinstellingen die er echt toe doen

Bronnen

  1. OWASP: Password Storage Cheat Sheet (externe link, opent in een nieuw tabblad)
  2. Veilig Internetten: Veilig inloggen (externe link, opent in een nieuw tabblad)
  3. Broncode van WordPress: wp-config-sample.php (sleutels en salts) (externe link, opent in een nieuw tabblad)
  4. WP-CLI: wp config shuffle-salts (externe link, opent in een nieuw tabblad)

Alle definities

WordPress-beveiliging, zonder ruis

Eén e-mail wanneer het ertoe doet: nieuw waargenomen aanvallen, updates van de plugin en praktische gidsen. Geen spam, afmelden met één klik.

Begin gratis, stap over op Pro wanneer je eraan toe bent

De gratis versie verbergt WordPress al en verplaatst de inlogpagina. Pro voegt aliassen, tweestapsverificatie en bewaking toe.