Quanto dovrebbe essere grande il sale?

27

Utilizzerò scrypt per memorizzare le password nella mia applicazione. Come tale, userò le primitive di crittografia SHA-256 e Salsa20 (con PBKDF2).

Tenendo presente questo, 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 estensione della password: 512 bit?

Considerando che SSHA come utilizzato da OpenLDAP ha solo sale a 32 bit e crypt di Linux () usa il sale a 48 bit, i miei sali sembrano abbastanza grandi ...

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

Related:

Cosa dovrebbe essere usato come sale?

Che cosa è un buon sale per un SaltedHash ?

    
posta Hubert Kario 31.01.2012 - 13:45
fonte

2 risposte

30

I sali devono essere unici ; quello è 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 c'è altra proprietà utile nei sali oltre all'unicità; puoi sceglierli comunque vuoi finché non riproduci esattamente la stessa sequenza di bit. L'unicità deve essere compresa in tutto il mondo.

(Con schemi di hash di password mal progettati, il sale potrebbe avere alcune proprietà aggiuntive richieste, ma se si utilizza uno schema di password di progettazione errato si hanno già problemi più grandi. Si noti che un sale non è esattamente lo stesso di un Initialization Vector per la crittografia simmetrica, in cui si applicano requisiti rigorosi come la casualità uniforme imprevedibile.

Un modo comune per avere valori salienti più o meno unici è di generarli casualmente, con un buon generatore (diciamo uno che è adatto per usi crittografici, come /dev/urandom ). Se il sale è abbastanza lungo, i rischi di collisione (cioè il riutilizzo di un valore salino) sono bassi. Se si usano i sali di n , le probabilità di collisione diventano non trascurabili una volta raggiunti i valori generati da 2 n / 2 . Ci sono circa 7 miliardi di persone su questo pianeta, e sembra sicuro che in media possiedano meno di 1000 password ciascuna, quindi il numero mondiale di password hash deve essere leggermente inferiore a 2 42.7 . Pertanto, 86 pezzi di sale dovrebbero essere sufficienti. Dal momento che siamo simili ai cosiddetti "margini di sicurezza", e inoltre, poiché i programmatori adorano solo i poteri di di due, andiamo a 128 bit . Secondo l'analisi di cui sopra, questo è più che sufficiente per garantire l'unicità in tutto il mondo con un'alta probabilità, e non c'è nient'altro che vogliamo da un sale che dall'unicità.

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

    
risposta data 31.01.2012 - 15:11
fonte
6

"Dovrebbe essere lungo almeno otto ottetti (64 bit)." da: link

    
risposta data 31.01.2012 - 14:52
fonte

Leggi altre domande sui tag