Generatore di password scrypt
Calcola l’hash di una password con scrypt, una funzione di derivazione delle chiavi ad alto consumo di memoria. Imposta il salt, il costo (N), la dimensione del blocco (r), il parallelismo (p) e la lunghezza della chiave; ottieni l’hash come stringa PHC, in esadecimale e in Base64. Funziona nel browser.
Input
Output
Leggimi
Che cos’è scrypt?
scrypt è una funzione di hashing delle password, o funzione di derivazione delle chiavi, progettata da Colin Percival nel 2009 e pubblicata come RFC 7914. Come bcrypt e Argon2, è volutamente lenta, così ogni tentativo costa tempo all’attaccante. È anche memory-hard: ogni hash riempie un blocco di memoria di grandi dimensioni e lo rilegge in un ordine imprevedibile, rendendo molto più costoso violare le password con GPU e chip personalizzati. scrypt viene usato per memorizzare le password in molti framework web, nelle librerie standard di Node.js, Python e Go e in wallet di criptovalute, come gli archivi di chiavi di Ethereum.
Descrizione dello strumento
Questo strumento calcola l’hash di una password con scrypt nel browser. Inizia con un salt casuale e le impostazioni che OWASP raccomanda per la memorizzazione delle password; puoi modificare il salt, il costo (N), la dimensione del blocco (r), il parallelismo (p) e la lunghezza della chiave. L’hash è disponibile come stringa PHC, per le librerie di gestione delle password, e in formato esadecimale e Base64, per il codice che memorizza autonomamente il salt e i parametri.
Funzionalità
- Calcola l’hash di una password con scrypt, come definito in RFC 7914
- Crea un salt casuale di 16 byte e include un pulsante per generarne uno nuovo
- Accetta un salt personalizzato per riprodurre un hash generato altrove
- Imposta il costo (N) da 2⁴ a 2²⁰, la dimensione del blocco (r), il parallelismo (p) e la lunghezza della chiave
- Fornisce l’hash come stringa PHC, in formato esadecimale e Base64
- Mostra l’avanzamento degli hash lenti e avvisa quando le impostazioni richiedono più di 1 GiB di memoria
- Funziona nel browser, così la password non lascia mai il tuo dispositivo
Parametri
| Parametro | Predefinito | Descrizione |
|---|---|---|
| Costo (N) | 131072 (2¹⁷) | Numero di blocchi di memoria. Raddoppiandolo raddoppiano il tempo e la memoria. |
| Dimensione del blocco (r) | 8 | Dimensione di ogni blocco, 128 × r byte. Aumenta anche il tempo e la memoria. |
| Parallelismo (p) | 1 | Numero di esecuzioni indipendenti. Aumenta il tempo, ma non la memoria. |
| Lunghezza della chiave | 32 byte | Lunghezza dell’hash. |
La memoria necessaria è pari a 128 × N × r byte, cioè 128 MiB con i valori predefiniti.
Formati di output
La stringa PHC contiene tutto ciò che serve per verificare la password in seguito: l’algoritmo, i parametri, il salt e l’hash; salt e hash sono codificati in Base64 senza padding:
$scrypt$ln=17,r=8,p=1$<salt>$<hash>ln è il logaritmo in base 2 di N, quindi ln=17 significa N = 131072. Questo è il formato che passlib per Python, il crate Rust scrypt e il pacchetto Node.js @phc/scrypt leggono e scrivono.
I campi esadecimale e Base64 contengono solo l’hash, come restituito da crypto.scrypt in Node.js, hashlib.scrypt in Python e scrypt.Key in Go. Memorizza accanto all’hash il salt e i parametri.
Come funziona
Il campo del salt viene letto come testo e codificato in UTF-8, come quando si passa un salt di tipo stringa a crypto.scrypt di Node.js. Il salt casuale è composto da 16 byte casuali, rappresentati da 32 caratteri esadecimali; sono questi 32 caratteri a essere usati per calcolare l’hash. Anche la password viene codificata in UTF-8. L’hash viene calcolato in un thread in background, così la pagina rimane reattiva; il calcolo riparte quando modifichi un qualsiasi dato di input.
Suggerimenti
- Usa un nuovo salt casuale per ogni password. La stessa password con lo stesso salt produce sempre lo stesso hash.
- OWASP raccomanda almeno N = 2¹⁷, r = 8, p = 1 per memorizzare le password. Aumenta N il più possibile, compatibilmente con le risorse che il tuo server può dedicare a ogni accesso.
- Per impostazione predefinita, Node.js limita scrypt a 32 MiB di memoria. Passa un valore
maxmempiù alto acrypto.scryptquando usi N = 2¹⁷ o superiore con r = 8. - Per verificare un hash proveniente da un altro sistema, inserisci la stessa password, lo stesso salt e gli stessi parametri, quindi confronta i risultati.