UTILS.
100% in de browser
🧂

scrypt KDF-hashgenerator & -verificatie

Leid een scrypt-sleutel af uit een wachtwoord met instelbare N-, r-, p-cost, of verifieer een wachtwoord tegen een opgeslagen scrypt-string. Draait volledig in je browser.

Wachtwoorden worden 100% in je browser gehasht — er wordt niets geüpload.

— uitvoer verschijnt hier —

Over deze tool

De scrypt KDF-hashgenerator & -verificatie leidt scrypt-uitvoer lokaal in je browser af en controleert deze. scrypt, ontworpen door Colin Percival en gestandaardiseerd in RFC 7914, is een memory-hard key derivation function: de cost wordt bewust gedomineerd door geheugenbandbreedte, zodat aangepaste kraakhardware weinig voordeel behaalt. De pijplijn is PBKDF2-HMAC-SHA256 om het wachtwoord uit te breiden, de ROMix-functie gebouwd op BlockMix en de Salsa20/8-kern om groot sequentieel geheugengebruik af te dwingen, en een laatste PBKDF2-HMAC-SHA256 om de afgeleide sleutel van de door jou gekozen lengte te produceren.

De Generate-modus leest 16 willekeurige salt-bytes uit crypto.getRandomValues en draait scrypt met drie cost-parameters: N is de CPU/geheugen-cost en moet een macht van twee zijn (standaard 16384 = 2^14), r is de blokgrootte (standaard 8), en p is de parallellisatiefactor (standaard 1). Geheugengebruik is ongeveer 128 · N · r bytes — ongeveer 16 MiB bij de standaardwaarden — en de tool waarschuwt wanneer je instellingen 256 MiB zouden overschrijden. De uitvoer is een zelfbeschrijvende string $scrypt$ln=14,r=8,p=1$<base64 salt>$<base64 key> waarbij ln = log2(N), zodat elke parameter die nodig is om te verifiëren met de hash wordt meegedragen.

De Verify-modus haalt ln, r, p, de salt en de opgeslagen sleutel uit die string, herberekent de afgeleide sleutel met het kandidaat-wachtwoord, en doet een constant-time-vergelijking om wel of geen overeenkomst te rapporteren. De scrypt-kern draait als een eval-vrije WebAssembly-build onder het strikte beveiligingsbeleid van de browser, dus wachtwoorden worden 100% in je browser verwerkt en er wordt niets geüpload.

Veelgestelde vragen

Waarom moet N een macht van twee zijn?
De ROMix-stap van scrypt indexeert een tabel van exact N blokken en vertrouwt erop dat N een macht van twee is voor zijn integerify-and-mask-adressering. De tool weigert waarden die geen macht van twee zijn. Typische keuzes zijn 16384 (2^14) voor interactief gebruik en 1048576 (2^20) voor bestandsversleuteling.
Hoeveel geheugen gebruikt scrypt?
Ongeveer 128 · N · r bytes. Bij de standaardwaarden N=16384, r=8 is dat ongeveer 16 MiB. Omdat de browser dit echt toewijst, kunnen grote N- of r-waarden traag zijn of falen op apparaten met weinig RAM — de tool waarschuwt boven 256 MiB.
Wat regelen r en p?
r is de blokgrootte, die zowel het geheugengebruik als de hoeveelheid sequentieel werk per blok schaalt; het verhogen van r verhoogt de geheugen-cost samen met N. p is de parallellisatiefactor, die p onafhankelijke scrypt-berekeningen draait, wat de CPU-cost verhoogt zonder de geheugen-footprint per instantie te verhogen.
Welk formaat heeft de gegenereerde hash?
Een zelfbeschrijvende string $scrypt$ln=<log2 N>,r=<r>,p=<p>$<base64 salt>$<base64 key>. Het bevat elke parameter, dus de Verify-modus heeft alleen die string en het wachtwoord nodig. Alle berekeningen zijn lokaal — er wordt niets geüpload.

Meer tools