Domanda:
Salare o non salare?
marco-fiset
2012-07-20 17:45:06 UTC
view on stackexchange narkive permalink

Possibile duplicato:
Perché l'utilizzo di salt è più sicuro?
Perché salt non avrebbe impedito alle password di LinkedIn di vieni violato?

Recentemente ho deciso di voler saperne di più sulla sicurezza web e sono arrivato a un punto in cui penso di capire abbastanza bene come archiviare in modo sicuro Le password. Ho usato sali casuali insieme all'hashing per l'archiviazione delle password e sono abbastanza fiducioso nella mia soluzione. Tuttavia, mi sono imbattuto in un articolo che mi ha sorpreso molto. Ecco una citazione da esso:

I sali non ti aiuteranno

È importante notare che i sali sono inutili per prevenire attacchi di dizionario o attacchi di forza bruta ​​strong >. Puoi usare sali enormi o molti sali o sale rosa dell'Himalaya biologico raccolto a mano, coltivato all'ombra. Non influisce sulla velocità con cui un utente malintenzionato può provare una password candidata, dato l'hash e il sale dal tuo database.

Bene, ora sono confuso ...

L'aggiunta di sale alle password è ancora pertinente?

Lettura interessante: http://blogs.msdn.com/b/ericlippert/archive/2005/01/28/362587.aspx
Perché tali punti impedirebbero ai sali di essere rilevanti? I punti di quell'articolo si sono sempre applicati ai sali.
@StuperUser Ho appena letto la prima parte e sembra molto promettente! Grazie per il collegamento.
Quello che sta dicendo questo ragazzo è che indossare la cintura di sicurezza non ti protegge dal raffreddore. Certamente vero, ma informazioni poco utili e sicuramente non qualcosa su cui dovresti agire.
AilipdcgrsCMTörgWMittag Ok so if I understand correctly, salts are still useful, but do not protect you against every type of attack?
Se questo è stato pubblicato su IT Security, posso vederlo chiuso come duplicato, tuttavia ritengo ancora che sia rilevante per l'implementazione della sicurezza relativa alle password, quindi potrebbe essere in argomento qui. Ha già 3 voti ravvicinati, se ne ottiene uno in più lo chiuderò.
http://cooking.stackexchange.com/ è un posto migliore per porre tali domande
@maple_shaft Il problema con le domande di sicurezza su questo sito è mostrato qui: la [risposta più votata e accettata] (http://programmers.stackexchange.com/a/157575) manca completamente il punto.
Interessante anche: [Perché il sale non avrebbe impedito che le password di LinkedIn venissero violate?] (Http://security.stackexchange.com/q/15910)
Sette risposte:
Kilian Foth
2012-07-20 17:54:54 UTC
view on stackexchange narkive permalink

Sì e no.

Salt ti protegge da qualcuno che ottiene il tuo database e deduce le password effettive anche se sono sottoposte ad hashing. (Se qualcuno ruba il tuo intero database, è probabile che abbia anche ottenuto i dati utente che le password avrebbero dovuto proteggere in primo luogo, ma supponiamo che le password siano ancora più preziose dei dati utilizzati, perché molte persone usano le loro password su più siti, che poi verrebbero anche compromessi.) pertanto, sia l'hashing che il salting sono una pratica standard per proteggere in modo ottimale i tuoi utenti.

Tuttavia, salt non ti protegge dalle persone che scelgono "password123" come password e un utente malintenzionato che prova semplicemente password comuni. Niente può proteggerti da questo: se l'utente può inserire la sua password scadente e ottenere l'accesso, può farlo anche un aggressore (il sistema non sa chi si trova all'altro capo della linea, che è l'intero punto delle password per cominciare ).

Per una buona sicurezza, sia il fornitore che l'utente devono agire in modo minimamente competente: uno dei due non è sufficiente.

+1 per "Se qualcuno ruba il tuo intero database, è probabile che abbia anche ottenuto i dati dell'utente che le password avrebbero dovuto proteggere in primo luogo", non l'ho mai pensato in questo modo !!
@marco-fiset: A meno che tu non sia una banca, probabilmente non sono i dati dell'utente che stanno cercando; sono le password stesse. Gli hacker cercano gli elenchi di password perché sanno che molte persone usano la stessa password per più siti. Quindi, se possono rubare la tua password di Twitter, potrebbero essere in grado di entrare anche nel tuo account PayPal.
I sali non * "impediscono a qualcuno di dedurre la password effettiva" *, ma lo rendono solo più difficile, il che è sempre una buona cosa. Un'altra pratica comune * (sebbene non così comune come dovrebbe essere) * per lo stesso motivo è l'utilizzo di un algoritmo di hashing molto ** SLOW **, come [bcrypt] (http://en.wikipedia.org/wiki/Bcrypt) . Usare bcrypt con un salt per utente e un salt a livello di sito * (in modo che qualcuno che ottiene il tuo database non possa decifrare ** nessuna ** delle password a meno che non abbia anche il tuo codice sorgente, che è molto meno comune) * è il meglio che puoi fare quando si tratta di memorizzare le password.
Un sale da solo non impedisce a nessuno di ottenere la password dall'hash, impedisce solo l'uso di tabelle arcobaleno. Se si utilizza un hash veloce come md5 o anche SHA-512, un utente malintenzionato può ancora forzare anche password ragionevolmente complesse utilizzando le GPU. Devi usare un hash lento progettato per questo scopo come PBKDF2, bcrypt o scrypt.
Sto già usando bcrypt in quanto sembra essere l'algoritmo più accettato per l'hashing delle password.
Tieni presente che dovresti utilizzare un valore non pubblico per un salt, come ho descritto [qui] (http://security.stackexchange.com/questions/17421/how-to-store-salt/17435#17435). Il sale non dovrebbe essere più pubblico dell'hash della password. Se il sale è disponibile, sei vulnerabile agli attacchi che utilizzano tabelle arcobaleno a sale singolo che non ti danno il tempo di rispondere a una violazione.
Pieter B
2012-07-20 17:50:05 UTC
view on stackexchange narkive permalink

Il sale non è lì per prevenirli. I sali sono lì per prevenire gli attacchi usando le tabelle arcobaleno, che sono fondamentalmente elenchi di hash e le loro password. Questo è quando un attacco ha già l'hash della tua password.

Brian
2012-07-20 17:52:21 UTC
view on stackexchange narkive permalink

Oltre alle tabelle arcobaleno, i sali impediscono a qualcuno con accesso al tuo database di sapere se una determinata coppia di utenti condivide la stessa password.

Dean
2012-07-20 23:58:15 UTC
view on stackexchange narkive permalink

I sali non aiutano a impedire a qualcuno di violare una particolare password. Aiutano a impedire a qualcuno di decifrare molte password contemporaneamente utilizzando una tabella arcobaleno.

Supponiamo che tu abbia i seguenti utenti sul tuo sito (la password non sarebbe effettivamente memorizzata nel database, solo la versione con hash).

  PASSWORD UTENTE PASSWORD CON HASH ==================================== ==== dio hamfist de898928393a893bttltoad god de898928393a893woob god de898928393a893marco-fiset mypass1 1238ffff2342399dean password2 a44ca77446ff449  

Se qualcuno dovesse pre-calcolare in anticipo gli hash in memoria (una tabella arcobaleno) allora sarebbe banale per loro controllare se de898928393a893 esistesse nell'elenco delle password. Saprebbero quindi che è possibile accedere a tutti questi account utente con la password, god . In brevissimo tempo, avrebbero accesso agli account di tutti con una semplice password che esiste nella loro tabella arcobaleno (e in qualsiasi altra parte del Web quella persona utilizza la stessa combinazione email / password).

Ora se aggiungi un salt casuale, tutti con la stessa password finiranno per avere hash diversi:

  PASSWORD UTENTE PASSWORD SALT HASHED ================ =============================== hamfist god ae # o abf4388ff343401bttltoad god cdo @ 29292d919100001woob god! doe 3902dda99210099marco-fiset mypass1 12uo aaffff121bcce13dean password2 TEe9 b44ca7743324234  

Ora un tavolo arcobaleno non aiuta davvero. Invece di avere solo bisogno dell'hash per god , ad esempio, dovresti pre-calcolare l'hash per god + <all_potential_salts> . Un po 'limita ciò che puoi memorizzare in memoria.

Tuttavia, se qualcuno vuole ottenere specificamente hamfist , ha il sale poiché è memorizzato nel database, quindi questo non rallenterà affatto un tentativo di cracking.

Brendan Long
2012-07-20 21:09:01 UTC
view on stackexchange narkive permalink

C'è un'altra sezione dell'articolo che risponde alla tua domanda:

Hai detto che i sali non sono utili, ma per quanto riguarda le tabelle arcobaleno? Perché suggeriresti alle persone di non usare i sali?

Come descrive l'articolo di Provos & Mazières, bcrypt ha i sali integrati per prevenire gli attacchi al tavolo arcobaleno. Quindi non sto dicendo che i sali sono senza scopo, sto dicendo che non impediscono il dizionario o gli attacchi di forza bruta (cosa che non fanno). [enfasi aggiunta]

Serra South
2012-07-20 19:13:15 UTC
view on stackexchange narkive permalink

Come hanno detto gli altri, ti proteggono semplicemente dalle tabelle arcobaleno e forse differenziano gli stessi hash delle password tra siti diversi. Non dovresti fare alcuno sforzo per rendere segreto il sale (molti erroneamente sostengono di metterli su un server diverso, ecc.), Mantenere il sale insieme agli hash delle password andrebbe bene. Tutti i tuoi sforzi dovrebbero essere concentrati nel rendere sicura la posizione degli hash delle password.

Questo è già quello che sto facendo. Niente di nuovo qui.
Simone Gianni
2012-07-20 18:21:47 UTC
view on stackexchange narkive permalink

Se ho capito bene, la citazione dice "Non influisce sulla velocità con cui un utente malintenzionato può provare una password candidata, dato l'hash e il sale dal tuo database", e "sale dal tuo database" è la parte principale qui .

Se memorizzi il sale nel database e un utente malintenzionato ha accesso a quella tabella del database dove trova l'hash e il sale, può attaccare con forza bruta quegli hash usando il sale, quindi usando o non usare un salt è lo stesso (tranne che per il rallentamento dell'attaccante dovuto all'aumento del lavoro di hashing, che è un fattore, ma non così importante).

Visto in questo modo, ha senso, se il l'attaccante ha "sali dal tuo database".

+1 ma un'altra difesa consigliata contro la forza bruta è di iterare attraverso l'hash molte volte, ad es. 1000 quindi l'attaccante deve anche provare più iterazioni per ogni tentativo
Hi James, yes, but when you receive a password you have to check it against your database records, so you are saving in the db all the informations needed to get to that hash, so the attacker will have those same informations as long has he manages to get that entire table. You can make it longer for he (and for you) to get there, but informations are still there. Even public/private key pairs are still only creating a big computational requirement on those not having the private key, but at least in that case it is highly asymmetric, you get there in one second, he in 2 billion years.
@james Ripetere più volte la funzione hash non è così efficace come sembra. Finisci comunque con un hash a uno strato di distanza da * alcune * password. Certo, non è vicino alla password originale, ma corrisponderà comunque a qualcosa. Questo problema è notevolmente mitigato utilizzando un algoritmo di hashing forte per cominciare e utilizzando anche uno lento.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...