Webbeveiliging

bcrypt

Definitie

bcrypt is een hashfunctie die speciaal is ontworpen om wachtwoorden op te slaan. Ze bevat een willekeurige salt en een instelbare kostenfactor die elke berekening bewust traag maakt, wat aanvallen op een gestolen database sterk afremt. WordPress gebruikt bcrypt standaard sinds versie 6.8.

bcrypt, Webbeveiliging

bcrypt werd in 1999 voorgesteld door Niels Provos en David Mazières van het OpenBSD-project, in een artikel met de titel "A Future-Adaptable Password Scheme". Het kernidee zit al in die titel: een hashfunctie voor wachtwoorden moet trager kunnen worden naarmate computers sneller worden. Waar een snelle functie als SHA-256 een aanvaller miljarden kandidaten laat testen, maakt bcrypt elke poging duur, voor de aanvaller en voor de server.

Hoe bcrypt werkt

bcrypt is gebaseerd op een variant van het versleutelingsalgoritme Blowfish waarvan de sleutelvoorbereiding bewust kostbaar is. Drie elementen gaan de berekening in:

  • het wachtwoord, waarvan alleen de eerste 72 bytes meetellen;
  • een willekeurige salt, voor elk wachtwoord opnieuw gekozen;
  • een kostenfactor: elke extra eenheid verdubbelt de rekentijd.

Het resultaat bevat alles wat nodig is om het wachtwoord later te controleren: de aanduiding van het algoritme ($2y$ in PHP), de kosten, de salt en de hash. De functie password_verify() leest die parameters terug en doet de berekening opnieuw, zonder dat de salt apart hoeft te worden opgeslagen.

$hash = password_hash( $wachtwoord, PASSWORD_BCRYPT ); // kosten 12 standaard sinds PHP 8.4
password_verify( $invoer, $hash ); // true of false

bcrypt naast andere algoritmen

Het OWASP-spiekbriefje over het opslaan van wachtwoorden zet Argon2id op de eerste plaats en scrypt daarna, en raadt bcrypt aan voor bestaande systemen, met een kostenfactor van minstens 10 en extra aandacht voor de limiet van 72 bytes. Toch blijft bcrypt heel wijdverbreid, omdat het overal beschikbaar is: het is het enige algoritme dat PHP op elke installatie garandeert. In elk geval beschermt het veel beter dan een snelle functie als MD5 of SHA-1 op zichzelf, die je op een grafische kaart in een enorm tempo kunt berekenen.

Voor WordPress

Jarenlang gebruikte WordPress de bibliotheek phpass, gebaseerd op MD5 met veel iteraties. WordPress 6.8, uitgebracht op 15 april 2025, stapte voor gebruikerswachtwoorden over op bcrypt. De details, gepubliceerd op het blog van de core-ontwikkelaars:

Schema in vier lagen: het ingevoerde wachtwoord gaat eerst door een voorafgaande hash met HMAC-SHA384 in base64 om de limiet van 72 bytes te omzeilen, daarna door bcrypt met een willekeurige salt en een kostenfactor, en de opgeslagen hash begint met $wpy$ gevolgd door de kosten, de salt en het resultaat
De weg van een wachtwoord in WordPress 6.8 en later.
  • Het wachtwoord wordt eerst gehasht met HMAC-SHA384 en daarna in base64 gecodeerd, zodat wachtwoorden van meer dan 72 bytes al hun entropie behouden.
  • De hashes beginnen met het voorvoegsel $wp$2y$, dat ze onderscheidt van een gewone bcrypt-hash.
  • Oude phpass-hashes worden nog geaccepteerd en bij de volgende keer inloggen of de volgende wachtwoordwijziging van elke gebruiker omgezet naar bcrypt.
  • Applicatiewachtwoorden, resetsleutels en enkele andere tokens gebruiken een andere functie, BLAKE2b via de Sodium-bibliotheek; bestaande applicatiewachtwoorden worden niet automatisch omgezet.
  • Met het filter wp_hash_password_algorithm kun je Argon2id kiezen als de server het ondersteunt, en met wp_hash_password_options pas je de parameters aan, zoals de kosten.

Je hoeft zelf niets te doen. Onthoud alleen dat een terugkeer naar WordPress 6.7 of ouder gebruikers die al zijn omgezet, buitensluit tot ze hun wachtwoord opnieuw instellen. Ons artikel over wp-config.php gaat in op deze wijziging en op de beveiligingssleutels in dat bestand.

Wat bcrypt niet doet

bcrypt beschermt wachtwoorden nadat de database is uitgelekt: het vertraagt het offline achterhalen ervan. Het doet niets tegen een online brute-force-aanval op de inlogpagina, en ook niets tegen een wachtwoord dat al in een lek staat en elders wordt hergebruikt, de basis van credential stuffing. Daarvoor reken je op unieke wachtwoorden, het beperken van inlogpogingen en tweefactorauthenticatie, die WP Masquerade Pro aanbiedt naast het beperken van inlogpogingen.

Verder lezen

  • Artikel wp-config.php: de beveiligingsinstellingen die er echt toe doen
  • Pagina Brute force-bescherming voor WordPress

Bronnen

  1. Make WordPress Core: WordPress 6.8 will use bcrypt for password hashing (externe link, opent in een nieuw tabblad)
  2. WordPress Developer Resources: wp_hash_password() (externe link, opent in een nieuw tabblad)
  3. OWASP: Password Storage Cheat Sheet (externe link, opent in een nieuw tabblad)
  4. USENIX 1999: A Future-Adaptable Password Scheme (Provos et Mazières) (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.