Scrypt-wachtwoordgenerator
Hash een wachtwoord met scrypt, een geheugenintensieve functie voor sleutelafleiding. Stel het salt, de kosten (N), de blokgrootte (r), de parallellisatie (p) en de sleutellengte in. Je krijgt de hash als PHC-string, in hex en in Base64. Werkt in je browser.
Invoer
Uitvoer
Readme
Wat is scrypt?
scrypt is een wachtwoord-hashfunctie, of sleutelafleidingsfunctie, die Colin Percival in 2009 heeft ontworpen en die is gepubliceerd als RFC 7914. Net als bcrypt en Argon2 is de functie bewust traag, zodat elke poging een aanvaller tijd kost. De functie is ook geheugenintensief: elke hash vult een groot geheugenblok en leest dit terug in een onvoorspelbare volgorde. Daardoor wordt kraken met GPU's en speciale chips veel duurder. scrypt wordt gebruikt voor wachtwoordopslag in veel webframeworks, in de standaardbibliotheken van Node.js, Python en Go, en in cryptocurrency-wallets zoals Ethereum-keystores.
Beschrijving van de tool
Deze tool hasht een wachtwoord met scrypt in je browser. De tool begint met een willekeurige salt en de instellingen die OWASP aanbeveelt voor wachtwoordopslag. Je kunt de salt, de kostenfactor (N), de blokgrootte (r), de parallelisatie (p) en de sleutellengte wijzigen. De hash is beschikbaar als PHC-string voor wachtwoordbibliotheken en als hex en Base64 voor code die de salt en parameters zelf opslaat.
Functies
- Hasht een wachtwoord met scrypt, zoals gedefinieerd in RFC 7914
- Maakt een willekeurige salt van 16 bytes, met een knop om een nieuwe te maken
- Accepteert je eigen salt, zodat je een hash kunt reproduceren die elders is gemaakt
- Stelt de kostenfactor (N) in van 2⁴ tot 2²⁰, evenals de blokgrootte (r), de parallelisatie (p) en de sleutellengte
- Geeft de hash weer als PHC-string, hex en Base64
- Toont de voortgang van trage hashes en waarschuwt wanneer de instellingen meer dan 1 GiB geheugen vereisen
- Werkt in je browser, zodat het wachtwoord je apparaat nooit verlaat
Parameters
| Parameter | Standaard | Beschrijving |
|---|---|---|
| Kostenfactor (N) | 131072 (2¹⁷) | Aantal geheugenblokken. Een verdubbeling verdubbelt de tijd en het geheugengebruik. |
| Blokgrootte (r) | 8 | Grootte van elk blok, 128 × r bytes. Heeft ook invloed op tijd en geheugengebruik. |
| Parallelisatie (p) | 1 | Aantal onafhankelijke uitvoeringen. Vermenigvuldigt de tijd, niet het geheugengebruik. |
| Sleutellengte | 32 bytes | Lengte van de hash. |
Het benodigde geheugen is 128 × N × r bytes, oftewel 128 MiB met de standaardinstellingen.
Uitvoerformaten
De PHC-string bevat alles wat nodig is om het wachtwoord later te controleren: het algoritme, de parameters, de salt en de hash. De salt en de hash zijn gecodeerd in Base64 zonder opvulling:
$scrypt$ln=17,r=8,p=1$<salt>$<hash>ln is de logaritme met grondtal 2 van N, dus ln=17 betekent N = 131072. Dit is het formaat dat passlib voor Python, de Rust-crate scrypt en het Node.js-pakket @phc/scrypt lezen en schrijven.
De velden hex en Base64 bevatten alleen de hash, zoals geretourneerd door crypto.scrypt in Node.js, hashlib.scrypt in Python en scrypt.Key in Go. Sla de salt en de parameters erbij op.
Hoe het werkt
Het salt-veld wordt als tekst gelezen en gecodeerd als UTF-8, net als wanneer je een string-salt doorgeeft aan crypto.scrypt in Node.js. De willekeurige salt bestaat uit 16 willekeurige bytes, weergegeven als 32 hextekens. Die 32 tekens vormen de salt die wordt gehasht. Ook het wachtwoord wordt gecodeerd als UTF-8. De hash wordt berekend in een achtergrondthread, zodat de pagina responsief blijft. De berekening begint opnieuw wanneer je een invoer wijzigt.
Tips
- Gebruik voor elk wachtwoord een nieuwe willekeurige salt. Hetzelfde wachtwoord met dezelfde salt levert altijd dezelfde hash op.
- OWASP beveelt voor wachtwoordopslag minimaal N = 2¹⁷, r = 8 en p = 1 aan. Verhoog N zo ver als je server per aanmelding aankan.
- Node.js beperkt scrypt standaard tot 32 MiB geheugen. Geef een hogere waarde voor
maxmemdoor aancrypto.scryptwanneer je N = 2¹⁷ of hoger gebruikt met r = 8. - Als je een hash van een ander systeem wilt controleren, voer dan hetzelfde wachtwoord, dezelfde salt en dezelfde parameters in en vergelijk de resultaten.