Wachtwoordsterktetester
Realtime-analyse met de zxcvbn-engine: woordenlijsten met veelvoorkomende wachtwoorden, toetsenbordenreeksen, opeenvolgingen, herhalingen en datums kosten punten — een veel betere maatstaf voor beveiliging dan tellen van hoofdletters/kleine letters/cijfers/symbolen. Alles draait lokaal; uw wachtwoord verlaat nooit de browser.
- Engine
- zxcvbn
- Score
- schaal van 0–4
- Privacy
- Nooit geüpload
- Woordenlijst
- Veelvoorkomende wachtwoorden ingebouwd
Geavanceerde beleidsinstellingen
Komma- of nieuwlines gescheiden, niet hoofdlettergevoelig. zxcvbn vangt automatisch hoofdlettervariaties, l33t-vervangingen (bv. Pa$$w0rd) en omkeringen op.
Twee wachtwoorden vergelijken
WAAROM DIT BELANGRIJK IS
Waar "hoofd + kleine letter + cijfer + symbool" geen beveiliging is
P@ssw0rd! voldoet aan alle vier karaktervoorwaarden en staat toch bovenaan echte inbreuklijsten. Sterkte draait om raadselbaarheid, niet om de som van karakterklassen.
Zwak-wachtwoord-matching
Een ingebouwde woordenlijst met veelvoorkomende wachtwoorden en woorden wordt zwaar bestraft – wachtwoord, 123456 en P@ssw0rd worden terecht als erg zwak beoordeeld.
Patroondetectie
Toetsenbordwandelingen, rechte reeksen, herhalingen, datums en veelvoorkomende woorden verkleinen de effectieve raadselruimte.
Effectieve, niet theoretische entropie
De score schat werkelijke raadpogingen op basis van gevonden structuren – niet de grootte van de tekenset vermenigvuldigd met de lengte.
Twee aanvalsscenario's
Gescheiden schattingen voor offline GPU-breken en online snelheidsbeperkte raadpogingen geven inzicht in de kosten voor aanvallers.
Aangepast beleid & bloklijst
Stel minimale lengte en klassevereisten in; voeg bedrijfsnamen of projectcodenaams toe om aan bedrijfs-wachtwoordregels te voldoen.
Volledig lokaal
Uw wachtwoord verlaat nooit de browser of raakt een server; instellingen staan alleen in uw eigen localStorage.
Wachtwoordsterkte begrijpen
Hoe de scoring werkt, wat brekentijden betekenen en wat echt een goed wachtwoord maakt.
Hoe wordt zxcvbn's 0–4 score berekend?
zxcvbn splitst het wachtwoord eerst in stukken: woorden uit de woordenlijst (veelvuldige wachtwoorden, Engelse woorden), toetsenbordwandelingen, reeksen, herhalingen, datums en brute-force-fragmenten.
Het schat het aantal raadpogingen per stuk, combineert deze tot een totaal aantal raadpogingen en brengt dit in kaart naar een 0–4 score. Veelvuldige transformaties worden automatisch verrekend – hoofdletteromkering, l33t-vervangingen (@→a, 0→o), jaartochtervoegsels – daarom scoort P@ssw0rd slecht ondanks de verscheidenheid aan tekens.
Wat is het verschil tussen effectieve entropie en tekensetgrootte?
Tekensetgrootte vermenigvuldigt de alfabetgrootte met de lengte – een theoretisch plafond dat ervan uitgaat dat elk karakter volledig willekeurig is, wat echte wachtwoorden vrijwel nooit zijn.
Effectieve entropie (de hier getoonde bitwaarde) is de werkelijke raadselruimte die zxcvbn schat na het vinden van woorden uit de woordenlijst en patronen. Bij dezelfde lengte heeft iloveyou2024 veel minder effectieve entropie dan een willekeurige string.
Hoe worden brekentijden geschat – zijn ze betrouwbaar?
Kraaktijd = geschatte aantal wachtwoordpogingen gedeeld door pogingen per seconde. Er worden twee snelheden getoond: ~10 miljard/sec voor een offline GPU-farm (aanvaller beschikt over de hash), en ~100/uur voor een online login met rate limiting.
Beschouw ze als ordegroottes, geen voorspellingen: de werkelijke snelheid hangt af van het hash-algoritme (bcrypt/Argon2 zijn vele malen trager dan MD5), hardware en woordenlijstkwaliteit. Een verschil van 10× verandert niets; een verschil van een miljoen keer wel.
Wat maakt een goed wachtwoord eigenlijk?
Twee goede opties: een willekeurige string van 16+ tekens van een wachtwoordbeheerder, uniek per site; of een wachtwoordzin van 4+ ongerelateerde woorden (zoals correct-horse-battery-staple) — lang en zinloos.
Welke je ook kiest, combineer het met multi-factor authenticatie (MFA) en hergebruik nooit hetzelfde wachtwoord op verschillende sites.
Mijn site vereist hoofd/kleine letters/cijfers/symbolen — waarom de lage score?
Bedrijfsbeleid (lengte, tekensets) is een nalevingsminimum: het geeft antwoord op "voldoet het?". De zxcvbn-score geeft antwoord op "kan het worden geraden?". De twee zijn onafhankelijk.
Het toevoegen van een uitroepteken en een jaartal aan een gewoon woord (wachtwoord!2024) voldoet aan de meeste beleidscontroles, maar valt binnen enkele seconden in een woordenlijstaanval.
Wordt mijn wachtwoord ergens geüpload?
Nee. Alles draait in je browser via JavaScript — er is geen netwerkverzoek dat het wachtwoord verstuurt, en het werkt ook offline. Alleen je aangepaste beleid (lengteregels, woordenlijst voor geblokkeerde wachtwoorden) wordt lokaal opgeslagen; het bevat nooit een wachtwoord.
Wachtwoordsterkte controleren in code
Om live sterktecontroles toe te voegen aan je eigen aanmeldings- of wachtwoordwijzigingsformulier, gebruik je een zxcvbn-port voor jouw taal:
<!-- CDN -->
<script src="https://unpkg.com/[email protected]/dist/zxcvbn.js"></script>
<script>
const res = zxcvbn('P@ssw0rd!');
console.log(res.score, res.crack_times_display);
</script>
// npm i @zxcvbn-ts/core
import { zxcvbn } from '@zxcvbn-ts/core';
const result = zxcvbn('P@ssw0rd!');
console.log(result.score, result.guesses_log10);
composer require bjeavons/zxcvbn-php
<?php
require __DIR__ . '/vendor/autoload.php';
use ZxcvbnPhp\Zxcvbn;
$zxcvbn = new Zxcvbn();
$res = $zxcvbn->passwordStrength('P@ssw0rd!');
echo $res['score'];
pip install zxcvbn
from zxcvbn import zxcvbn
res = zxcvbn('P@ssw0rd!')
print(res['score'], res['crack_times_display'])
go get github.com/nbutton23/zxcvbn-go
package main
import (
"fmt"
zxcvbn "github.com/nbutton23/zxcvbn-go"
)
func main() {
res := zxcvbn.PasswordStrength("P@ssw0rd!", nil)
fmt.Println(res.Score, res.Guesses)
}
# Add dependency
cargo add zxcvbn
use zxcvbn::zxcvbn;
fn main() {
match zxcvbn("P@ssw0rd!", &[]) {
Ok(estimate) => {
println!("score: {}", estimate.score()); // 0..4
if let Some(times) = estimate.crack_times() {
println!("offline: {:?}", times.offline_slow_hashing_1e4_per_second());
}
}
Err(err) => eprintln!("zxcvbn error: {err}"),
}
}
Scores en patroonschattingen kunnen licht verschillen van deze pagina afhankelijk van bibliotheekversies, maar de principes zijn hetzelfde. Voor server-side controles moet je ook een maximumlengte en rate limiting afdwingen, zodat te grote invoer niet kan worden gebruikt om CPU te belasten.
Veelgestelde vragen
Hoe werkt deze wachtwoordsterktecontrole?
Het maakt gebruik van zxcvbn, de open-source algoritme van Dropbox: het wachtwoord wordt vergeleken met woordenlijsten van veelgebruikte wachtwoorden, Engelse woordenlijsten, toetsenbordpatronen, sequenties, datums en herhalingspatronen. Het geschatte gemiddelde aantal pogingen dat een aanvaller nodig heeft, wordt omgezet in een score van 0–4 en schattingen van de kraaktijd.
P@ssw0rd ziet er complex uit — waarom is het "heel zwak"?
Het is een van de meest iconische zwakke wachtwoorden in lekken. Het staat direct in de woordenlijsten van zxcvbn, en zowel hoofdlettergebruik als leet-substituties (a→@, o→0) worden automatisch herkend. Gevarieerde tekens met een volledig voorspelbare structuur is precies wat op regelmatige gebaseerde aanvalswoordenlijsten als eerste probeert.
Hoe lang moet een wachtwoord zijn?
Wanneer willekeurig gegenereerd, verslaat een wachtwoord van 12+ tekens doorgaans online aanvallen, terwijl 16+ tekens jarenlang bestand is tegen offline GPU-kraken. Lengte is belangrijker dan tekenscomplexiteit: een willekeurige string van 20 kleine letters is sterker dan een wachtwoord van 10 tekens met alle vier tekensets.
Waarom een verschil tussen offline en online kraaktijd?
De aanvalsscenario's verschillen: na een databaselek kan een aanvaller hashes lokaal op GPU's proberen met miljarden pogingen per seconde; tegen een actieve login beperkt rate limiting slechts enkele pogingen per seconde. Hetzelfde wachtwoord kan in het ene scenario een triljoen keer langer overleven dan in het andere — daarom worden beide getoond.
Worden mijn invoeren ergens opgeslagen?
Nee. Je wachtwoord blijft alleen in het geheugen van je browser en verdwijnt bij vernieuwen. Alleen je aangepaste beleidsinstellingen (lengteregels, woordenlijst voor geblokkeerde wachtwoorden) worden in lokale opslag bewaard — ze bevatten nooit een wachtwoord.