Qual è la lunghezza ottimale per la password utente sale?

Ovviamente qualsiasi sale sarà di aiuto durante la salatura e l’hashing della password di un utente. Esistono buone pratiche per quanto tempo dovrebbe essere il sale? Memorizzerò il sale nella mia tabella utente, quindi mi piacerebbe il miglior compromesso tra dimensioni di archiviazione e sicurezza. Una quantità casuale di 10 caratteri è sufficiente? O ho bisogno di qualcosa di più lungo?

Molte di queste risposte sono un po ‘fuorvianti e dimostrano una confusione tra sali e chiavi crittografiche. Lo scopo di includere i sali è di modificare la funzione utilizzata per cancellare la password di ciascun utente in modo che ogni hash delle password memorizzate debba essere attaccato individualmente. L’unico requisito di sicurezza è che sono unici per utente, non vi è alcun vantaggio nel fatto che siano imprevedibili o difficili da indovinare.

I sali devono essere abbastanza lunghi in modo che il sale di ciascun utente sia unico. È improbabile che i sali a 64 bit casuali possano mai ripetersi anche con un miliardo di utenti registrati, quindi dovrebbe andare bene. Un salt singolarmente ripetuto è un problema di sicurezza relativamente minore, consente a un utente malintenzionato di cercare contemporaneamente due account, ma nel complesso non velocizza la ricerca molto sull’intero database. Anche i sali a 32 bit sono accettabili per la maggior parte degli scopi, nel peggiore dei casi accelera la ricerca di un aggressore di circa il 58%. Il costo di aumentare i sali oltre i 64 bit non è elevato ma non vi sono motivi di sicurezza per farlo.

Vi sono alcuni vantaggi nell’utilizzare anche un sale in tutto il sito in cima al sale per utente, questo eviterà possibili collisioni con hash delle password archiviati in altri siti e impedirà l’uso di tabelle rainbow generiche, sebbene anche 32 bit di il sale è sufficiente per rendere le tavole arcobaleno un attacco poco pratico.

Ancora più semplice, e gli sviluppatori lo ignorano sempre: se disponi di ID utente o nomi di accesso unici, questi funzionano perfettamente come sale. Se si esegue questa operazione, è necessario aggiungere un sal in tutto il sito per garantire che non si sovrappongano agli utenti di un altro sistema che hanno avuto la stessa brillante idea.

Gli standard attualmente accettati per le password di hashing creano un nuovo intervallo di 16 caratteri per ogni password e memorizzano il sale con l’hash della password.

Ovviamente dovrebbe essere presa una cura crittografica adeguata per creare sale davvero casuale.

Modifica: La mia risposta qui sotto risponde alla domanda come chiesto, ma la risposta “reale” è: basta usare bcrypt , scrypt o Argon2 . Se stai facendo domande come questa, stai quasi certamente usando strumenti a un livello troppo basso.

Onestamente, non c’è motivo per cui il sale non abbia la stessa lunghezza esatta della password con hash. Se utilizzi SHA-256, hai un hash a 256 bit. Non c’è motivo per non usare un sale a 256 bit.

Più di 256 bit non ti miglioreranno in termini di sicurezza, matematicamente. Ma andare con un sale più corto può sempre finire con una situazione in cui un tavolo arcobaleno raggiunge la lunghezza del sale, specialmente con sali più corti.

Wikipedia :

I metodi SHA2-crypt e bcrypt, usati in Linux, Unix BSD e Solaris, hanno sale di 128 bit. Questi valori salati più ampi rendono gli attacchi di precomputazione per quasi tutte le lunghezze della password non applicabili a questi sistemi per il prossimo futuro.

Il sale a 128 bit (16 byte) sarà sufficiente. Puoi rappresentarlo come una sequenza di 128 / 4 = 32 cifre esadecimali.

Una risposta potrebbe essere quella di utilizzare come dimensione del sale il valore che l’hash che si intende utilizzare fornisce in termini di sicurezza.

Ad esempio, se si utilizzerà SHA-512, utilizzare 256 bit salt poiché la sicurezza fornita da SHA-512 è 256 bit.