Memoria password con hash con sale casuale

22

Da quando realizzo siti che richiedono a un utente di accedere con un nome utente e una password, ho sempre protetto le password memorizzandole nel mio hash del database con una frase salt. Bene, recentemente ho letto che è una cattiva pratica usare una singola parola di sale statica. Invece dovresti usare un salt casuale per ogni utente.

Sono in grado di generare una parola salata casuale per ciascun utente. Ma la mia domanda è, se devi memorizzare il sale casuale anche nel tuo database in modo da poterlo usare per incrociarlo in seguito per controllare la password immessa dagli utenti quando accedono. Non lo rende altrettanto facile se i nomi utente e le password vengono rubate dal tuo database quindi non avrebbero altrettanto accesso ai valori salt random? Sembra che quell'ulteriore livello di sicurezza non aggiunga molto all'equazione.

O mi sto sbagliando tutto questo?

    
posta Ryan 20.06.2012 - 23:50
fonte

5 risposte

18

Aggiunge una cosa significativa. Se rubano il database, hanno il nome utente, la parola saltata per utente e la password con hash. Ma ancora non hanno la password originale. Per invertire l'hash, generalmente dovranno fare una quantità significativa di lavoro separato per ciascun utente.

Senza qualsiasi sale (una pessima idea, come appreso da LinkedIn), gli attaccanti possono usare preesistente tavole arcobaleno e non hanno lavoro per utente per gli hash che traggono vantaggio dalle tabelle. Anche se nessuna parte dell'hash è nella tabella, possono raggruppare il lavoro (ad esempio se un utente ha due account con la stessa password oscura).

Con un sale per sito, possono generare una tabella arcobaleno per il sito e continuare a condividere il lavoro tra gli utenti.

Ricorda che se incrinano la password di un utente, oltre ad essere in grado di accedere al tuo sito, possono probabilmente anche accedere ad altri siti che l'utente utilizza.

    
risposta data 20.06.2012 - 23:54
fonte
9

Ciò che fa per te è costringerli a generare una tabella arcobaleno per utente invece di una tabella arcobaleno per l'intero sito per decifrare la tua password. Significa anche che non possono semplicemente google i tuoi valori hash, che è la "tavola dell'arcobaleno finale". Cambia la proposta di cracking in un compito molto più difficile.

Google "5f4dcc3b5aa765d61d8327deb882cf99". Guarda cosa ottieni (suggerisci che è l'hash MD5 della password e ci sono migliaia di risultati).

L'hashing di ogni passphrase con un diverso sale è migliore rispetto all'utilizzo di un solo sale, ma un sale è meglio di nessun sale.

    
risposta data 20.06.2012 - 23:59
fonte
3

Il sale serve a rendere l'elaborazione della password diversa per ogni utente. Altrimenti, l'autore dell'attacco che ha ottenuto una copia del tuo database (memorizzi la password hash proprio perché prevedi questa situazione) potrebbe ottimizzare la sua ricerca e attaccare tutte le password con lo stesso sforzo di quello necessario per rompere un password singola (le tabelle arcobaleno, come qualsiasi altra tabella precalcolata, sono un'incarnazione di questo concetto). Con i sali per utente, almeno, l'attaccante pagherà l'intero sforzo bruto-force per ogni password che desidera crack.

(Idealmente, usi un sale per utente che cambi anche ogni volta che l'utente cambia la sua password. Quindi è davvero un sale per password.)

I sali sono solo metà della storia; vuoi anche che il meccanismo di hashing sia slow (in modo configurabile, ma molto lento). Un semplice hash è troppo veloce, gli attaccanti possono letteralmente calcolarne miliardi al secondo.

Usa bcrypt . Le implementazioni di Bcrypt gestiscono la generazione e l'utilizzo di sale e bcrypt può essere reso lento come richiesto.

    
risposta data 25.11.2012 - 04:05
fonte
2

Le password di salatura individuale aiutano a prevenire gli attacchi sfruttando un passo di precomputazione non in linea, come i compromessi della memoria temporale (tabelle raibow). Questo costringe l'attaccante a eseguire la forza bruta sugli hash per recuperare una password. Questo post sul blog descrive diverse strategie di archiviazione delle password, dal meno sicuro al più sicuro.

    
risposta data 21.06.2012 - 16:35
fonte
1

Permettetemi di aggiungere che non volete hash con MD5 o SHA-1. Quelli erano progettati per essere veloci. Qual è l'esatto opposto di quello che vuoi quando qualcuno sta cercando di decifrare la tua lista di password. Hash con bcrypt, progettato per essere lento. Questa è un'opzione che molti sviluppatori ignorano.

Modifica: Ecco un buon articolo a riguardo.

Modifica: Un altro articolo dice che anche PBKDF2 e scrypt sono buone scelte.

    
risposta data 21.06.2012 - 00:08
fonte

Leggi altre domande sui tag