Perché? SHA-256 da solo è inadatto per la memorizzazione di password

I checksum dei file e l'archiviazione della password lato server risolvono diversi problemi.

3 minuti di letturaTempo necessario: lettura; implementazione ha bisogno di una recensione separata
In questa guida

Hashing non è crittografia: non c'è alcuna operazione di decrittografia corrispondente. Tuttavia, dopo una perdita di database un aggressore può hash indovina e confrontarli con i record rubati senza superare i limiti di tasso di login della vostra applicazione.

La velocità di SHA diventa uno svantaggio

SHA-256 è utile per i controlli di integrità e molte applicazioni crittografiche. La sua velocità è indesiderabile per l'archiviazione delle password. SHA256(salt + password) non fa ipotesi sufficientemente costose. Il sale e il costo computazionale servono scopi diversi.

Non inventare un formato di credenziali o un loop di hash ordinari.

Scegli una funzione di password dedicata

OWASP preferisce Argon2id per nuovi sistemi, con scrypt come alternativa quando non disponibile. PBKDF2 Bcrypt rimane rilevante per i sistemi legacy, ma ha limitazioni, compresa la lunghezza d'ingresso.

Scegli i parametri di costo dalla guida corrente e dalle misurazioni sul server di destinazione. L'account per i login concomitanti e i limiti delle risorse: l'hashing costoso non deve fare la negazione del servizio banale.

Capire il sale e il pepe

Un sale è casuale e unico per ogni record; non deve essere segreto. Conservare anche i parametri dell'algoritmo e della verifica, spesso all'interno del registro codificato della libreria.

Un pepe è un segreto facoltativo tenuto al di fuori del database delle password. Può aiutare in alcuni scenari di violazione, ma complica la rotazione e la gestione chiave.

Registrati di aggiornamento dopo la verifica di successo

In un login di successo, verificare prima il vecchio record, quindi rihash la password presentata se i parametri sono obsoleti. Non è possibile recuperare le password originali da hash esistenti per migrare l'intero database.

Prima dell'implementazione, prova password errate, migrazione legacy, limiti di lunghezza e carico.