it-swarm-eu.dev

Quanto dovrebbe essere grande il sale?

Userò scrypt per memorizzare le password nella mia applicazione. Come tale, userò SHA-256 e Salsa20 crypto primitives (con PBKDF2).

Avendo questo in mente, quanto grande sale dovrei usare? Dovrebbe essere uguale alla dimensione dell'uscita SHA-256: 256 bit o dovrebbe essere uguale al numero di bit che prenderò da questa funzione di allungamento della password: 512 bit?

Considerando che SSHA usato da OpenLDAP ha solo sale a 32 bit e Linux crypt () usa sale a 48 bit i miei sali sembrerebbero abbastanza grandi ...

In generale: qual è la regola empirica per le dimensioni del sale?


Relazionato:

Cosa dovrebbe essere usato come sale?

Qual è un sale abbastanza buono per un SaltedHash?

30
Hubert Kario

I sali devono essere unico; questo è il loro unico e unico lavoro. Dovresti sforzarti, per quanto possibile, di non riutilizzare mai un valore salato; il riutilizzo occasionale è raramente critico ma dovrebbe comunque essere evitato). Con schemi di password ragionevolmente progettati, non vi sono altre proprietà utili nei sali oltre all'unicità; puoi sceglierli come vuoi finché non riproduci esattamente la stessa sequenza di bit. L'unicità deve essere compresa in tutto il mondo.

(Con schemi di hashing della password mal progettati, il salt potrebbe avere alcune proprietà aggiuntive richieste, ma se usi uno schema di password mal progettato hai già problemi più grandi. Nota che un salt non è esattamente lo stesso di un vettore di inizializzazione per la crittografia simmetrica, dove in genere si applicano requisiti rigorosi come la casualità uniforme imprevedibile.)

A modo comune avere valori salini più o meno unici è generarli casualmente, con un buon generatore (diciamo, uno che è adatto per usi crittografici, come /dev/urandom). Se il sale è abbastanza lungo, i rischi di collisioni (cioè il riutilizzo di un valore di sale) sono bassi. Se usi n - bit bit, le probabilità di una collisione diventano non trascurabili quando raggiungi circa 2n/2 valori generati. Ci sono circa 7 miliardi di persone su questo pianeta e sembra sicuro supporre che, in media, possiedano meno di 1000 password ciascuna, quindi il numero mondiale di password con hash deve essere leggermente inferiore a 242.7. Pertanto, dovrebbero essere sufficienti 86 bit di sale. Poiché in qualche modo ci piacciono i cosiddetti "margini di sicurezza" e, inoltre, poiché i programmatori hanno solo amore potenze di due, andiamo a 128 bit . Secondo l'analisi di cui sopra, è più che sufficiente per garantire l'unicità mondiale con probabilità abbastanza elevata, e non c'è nulla di più che desideriamo da un punto di vista dell'unicità.

L'unicità può anche essere garantita con altri mezzi, ad es. usando come salt la concatenazione del nome del server (il sistema DNS mondiale garantisce già che tutti possano ottenere il proprio nome di server, distinto da quello di chiunque altro sul pianeta) e un contatore a livello di server. Ciò solleva alcuni problemi pratici, ad es. mantenendo un valore contatore che non si ripete, anche in caso di arresto anomalo del server e riavvio, e/o diversi front-end con bilanciamento del carico. Un sale casuale a lunghezza fissa è più facile.

33
Thomas Pornin

"Dovrebbe essere lungo almeno otto ottetti (64 bit)." da: http://www.ietf.org/rfc/rfc2898.txt

7
woliveirajr