Cos'è Password Hashing?
Il Password Hashing è la pratica di applicare una funzione crittografica computazionalmente costosa e unidirezionale a una password — combinata con un salt unico — per produrre un digest di lunghezza fissa che può verificare la password senza archiviarla in forma recuperabile.
Noto anche come: password hash, password digest
Archiviare le password in chiaro è una delle pratiche più pericolose nello sviluppo software. Quando un database viene violato, le password in chiaro sono immediatamente utilizzabili per l'acquisizione degli account — non solo sul servizio compromesso, ma su ogni altro servizio dove gli utenti hanno riutilizzato la stessa password. Il Password Hashing sostituisce l'archiviazione in chiaro con digest irreversibili che possono verificare un tentativo di password ma non possono essere invertiti per recuperare la password originale.
Non tutte le funzioni di hash sono adatte per le password. Le funzioni di hash generiche come SHA-256 sono troppo veloci — le GPU moderne possono calcolare miliardi di hash SHA-256 al secondo, rendendo banali gli attacchi brute-force. Gli algoritmi di Password Hashing sono deliberatamente progettati per essere lenti, richiedendo tempo CPU, memoria o entrambi per ogni calcolo dell'hash. Questa lentezza è configurabile tramite parametri come il conteggio delle iterazioni (PBKDF2), il fattore di costo (bcrypt) o le impostazioni di memoria e parallelismo (Argon2).
L'evoluzione del Password Hashing riflette la corsa agli armamenti tra difensori e attaccanti. PBKDF2 (2000) ha aggiunto un conteggio di iterazioni configurabile. bcrypt (1999) ha introdotto un requisito di memoria fisso che resiste all'accelerazione GPU. scrypt (2009) ha aggiunto una memory-hardness configurabile. Argon2 (2015), vincitore del Password Hashing Competition, offre tempo CPU, memoria e parallelismo regolabili. Ogni generazione affronta nuove capacità di attacco; la scelta dipende dall'ambiente di deployment e dal modello di minaccia.
Come Vaulted usa Password Hashing
Vaulted non archivia password utente perché non ha account utente. Tuttavia, i principi del Password Hashing informano direttamente la funzionalità di protezione tramite passphrase. Quando imposti una passphrase su un segreto, viene usato PBKDF2 — un algoritmo di Password Hashing — per derivare una chiave dalla passphrase. La deliberata lentezza delle 100.000 iterazioni PBKDF2 rende impraticabile il brute-force della passphrase, proteggendo la wrapped key anche se un attaccante ottenesse il testo cifrato e il salt.