Scrypt-Passwortgenerator
Bilde mit scrypt, einer speicherintensiven Schlüsselableitungsfunktion, den Hash eines Passworts. Lege Salt, Kostenfaktor (N), Blockgröße (r), Parallelisierung (p) und Schlüssellänge fest. Du erhältst den Hash als PHC-String, Hexadezimalwert und Base64. Die Verarbeitung erfolgt in deinem Browser.
Eingabe
Ausgabe
Readme
Was ist scrypt?
scrypt ist eine Passwort-Hashfunktion oder Schlüsselableitungsfunktion, die 2009 von Colin Percival entwickelt und als RFC 7914 veröffentlicht wurde. Wie bcrypt und Argon2 ist sie absichtlich langsam, sodass jeder Versuch einen Angreifer Zeit kostet. Außerdem ist sie speicherhart: Jeder Hash füllt einen großen Speicherblock und liest ihn in einer nicht vorhersehbaren Reihenfolge wieder aus. Dadurch wird das Knacken mit GPUs und speziell entwickelten Chips erheblich teurer. scrypt wird zur Passwortspeicherung in vielen Web-Frameworks, in den Standardbibliotheken von Node.js, Python und Go sowie in Kryptowährungs-Wallets wie Ethereum-Keystores verwendet.
Beschreibung des Tools
Dieses Tool erstellt mit scrypt in deinem Browser einen Passwort-Hash. Es verwendet einen zufälligen Salt und die Einstellungen, die OWASP für die Passwortspeicherung empfiehlt. Du kannst den Salt, den Kostenfaktor (N), die Blockgröße (r), die Parallelisierung (p) und die Schlüssellänge ändern. Der Hash wird als PHC-String für Passwortbibliotheken sowie als Hexadezimal- und Base64-Ausgabe für Code bereitgestellt, der den Salt und die Parameter separat speichert.
Funktionen
- Erstellt einen Passwort-Hash mit scrypt gemäß RFC 7914
- Erstellt einen zufälligen Salt mit 16 Byte und bietet eine Schaltfläche, um einen neuen zu generieren
- Ermöglicht die Eingabe eines eigenen Salts, um einen Hash zu reproduzieren, der an anderer Stelle erstellt wurde
- Legt den Kostenfaktor (N) zwischen 2⁴ und 2²⁰, die Blockgröße (r), die Parallelisierung (p) und die Schlüssellänge fest
- Gibt den Hash als PHC-String, Hexadezimalwert und Base64 aus
- Zeigt den Fortschritt langsamer Hash-Berechnungen an und warnt, wenn die Einstellungen mehr als 1 GiB Speicher benötigen
- Läuft in deinem Browser, sodass das Passwort dein Gerät nie verlässt
Parameter
| Parameter | Standardwert | Funktion |
|---|---|---|
| Kostenfaktor (N) | 131072 (2¹⁷) | Anzahl der Speicherblöcke. Eine Verdopplung verdoppelt Zeit- und Speicherbedarf. |
| Blockgröße (r) | 8 | Größe jedes Blocks: 128 × r Byte. Skaliert ebenfalls Zeit- und Speicherbedarf. |
| Parallelisierung (p) | 1 | Anzahl unabhängiger Durchläufe. Erhöht den Zeitbedarf, nicht den Speicherbedarf. |
| Schlüssellänge | 32 Byte | Länge des Hashes. |
Der benötigte Speicher beträgt 128 × N × r Byte, also mit den Standardwerten 128 MiB.
Ausgabeformate
Der PHC-String enthält alle Angaben, die benötigt werden, um das Passwort später zu überprüfen: den Algorithmus, die Parameter, den Salt und den Hash. Salt und Hash werden dabei ohne Padding in Base64 angegeben:
$scrypt$ln=17,r=8,p=1$<salt>$<hash>ln ist der Logarithmus zur Basis 2 von N. ln=17 bedeutet also, dass N = 131072 ist. Dieses Format können passlib für Python, der Rust-Crate scrypt und das Node.js-Paket @phc/scrypt lesen und schreiben.
Die Hexadezimal- und Base64-Felder enthalten nur den Hash, wie er von crypto.scrypt in Node.js, hashlib.scrypt in Python und scrypt.Key in Go zurückgegeben wird. Speichere den Salt und die Parameter daneben.
Funktionsweise
Der Salt wird als Text eingelesen und als UTF-8 codiert, genau wie beim Übergeben eines String-Salts an Node.js crypto.scrypt. Der zufällige Salt besteht aus 16 zufälligen Byte, die als 32 Hexadezimalzeichen ausgegeben werden. Diese 32 Zeichen werden für die Hash-Berechnung verwendet. Auch das Passwort wird als UTF-8 codiert. Der Hash wird in einem Hintergrundthread berechnet, damit die Seite weiterhin reagiert. Bei jeder Änderung einer Eingabe wird die Berechnung neu gestartet.
Tipps
- Verwende für jedes Passwort einen neuen, zufälligen Salt. Dasselbe Passwort mit demselben Salt ergibt immer denselben Hash.
- OWASP empfiehlt für die Passwortspeicherung mindestens N = 2¹⁷, r = 8 und p = 1. Erhöhe N so weit, wie es dein Server bei jeder Anmeldung verkraften kann.
- Node.js begrenzt scrypt standardmäßig auf 32 MiB Speicher. Übergib einen höheren Wert für
maxmemancrypto.scrypt, wenn du N = 2¹⁷ oder höher mit r = 8 verwendest. - Um einen Hash aus einem anderen System zu überprüfen, gib dasselbe Passwort, denselben Salt und dieselben Parameter ein und vergleiche die Ergebnisse.