Gli hash SHA-256/512 salati sono ancora al sicuro se gli hash e i loro sali sono esposti?

49

Scenario: un database di hash e password salate, inclusi i sali per ogni password, viene rubato da un utente malintenzionato. Le password sono lunghe 6-10 caratteri e vengono scelte da utenti non tecnici.

Questo utente malintenzionato può violare queste password?

La mia comprensione è che MD5 e SHA-1 non sono più sicuri in quanto gli strumenti di recupero password con assistenza GPU possono calcolare miliardi di questi hash al secondo per GPU.

Che mi dici di SHA-256 o SHA-512? Sono al sicuro al momento? Che dire in pochi anni?

    
posta Seppo Erviälä 21.06.2011 - 15:03
fonte

4 risposte

60

La domanda non dice quanti giri di hashing vengono eseguiti. E l'intera risposta dipende da quel punto.

Tutte le funzioni di hash non sono sicure se si utilizza una sola iterazione. La funzione di hash, che si tratti di SHA-1 o di una famiglia SHA-2, dovrebbe essere ripetuta migliaia di volte. Considererei 10.000 iterazioni il minimo e 100.000 iterazioni non sono irragionevoli, dato il basso costo dell'hardware potente.

Anche le password brevi non sono sicure. 8 caratteri dovrebbero essere il minimo, anche per obiettivi a basso valore (perché gli utenti riutilizzano la stessa password per più applicazioni).

Con una scheda grafica da $ 150, puoi eseguire 680 milioni di hash SHA-1 al secondo. Se usi solo un round di hashing, le password di 6 caratteri di tutte possono essere testate in poco più di 15 minuti (supponendo che tutti i 94 caratteri ASCII stampabili siano usati). Ogni carattere aggiuntivo moltiplica il tempo per 94, quindi 7 caratteri richiedono un giorno, 8 caratteri richiedono 103 giorni in questa configurazione. Ricorda, questo scenario è un quattordicenne che usa la sua GPU, non un criminale organizzato con soldi veri.

Consideriamo ora l'effetto di eseguire più iterazioni. Se vengono eseguite 1.000 iterazioni di hashing, lo spazio per la password di 6 caratteri richiede circa 12 giorni anziché 15 minuti. Uno spazio di 7 caratteri richiede 3 anni. Se vengono utilizzate 20.000 iterazioni, tali numeri passano rispettivamente a 8 e 60 anni. A questo punto, anche le password brevi non possono essere cercate esaurientemente; l'utente malintenzionato deve ricorrere a un dizionario di password "più probabile".

    
risposta data 21.06.2011 - 17:58
fonte
16

Il sale può essere considerato pubblico praticamente per definizione .

Per quanto riguarda l'hash da usare e il modo in cui è "sicuro", vorrei attenermi alle raccomandazioni che il NIST rivolge alle agenzie governative degli Stati Uniti. Come l'articolo di Wikipedia dice:

SHA-1 is being retired for most government uses; the U.S. National Institute of Standards and Technology says, "Federal agencies should stop using SHA-1 for...applications that require collision resistance as soon as practical, and must use the SHA-2 family of hash functions for these applications after 2010"

Puoi speculare su come vari algoritmi sicuri o non sicuri sono, ma perché preoccuparti quando hai una specifica che il governo degli Stati Uniti considera abbastanza buono per il proprio uso?

[modifica]

A proposito, la tua domanda sembra riflettere un fraintendimento su come vengono eseguite queste analisi. C'è molto di più per una funzione di hash rispetto al suo numero di bit.

Forzare a forza di un hash a 160 bit come SHA-1 richiede uno sforzo di 2 ^ 160; questo semplicemente non succederà, non importa quante "GPU" ci passi. In realtà probabilmente non accadrà nella vita dell'universo. (Vero, la forzatura brutale di una collisione richiede "solo" uno sforzo di 2 ^ 80. Ma richiede anche 2 ^ 80 memoria . Buona fortuna con quello.)

Il motivo per cui MD5 e SHA-1 sono considerati "potenzialmente insicuri" è che sono state scoperte debolezze in ogni algoritmo che potrebbe ridurre il modo di lavorare, molto al di sotto dello sforzo della forza bruta. La ragione per passare a un nuovo algoritmo (come SHA-2) è di evitare quelle note debolezze; il motivo dell'utilizzo di 256 bit è quello di fornire un buffer contro i punti deboli sconosciuti . Non ha nulla a che fare con "GPU"; per resistere agli attacchi di forza bruta, 160 bit sono sufficienti.

Dichiarazioni simili valgono comunque per tutti i tipi di crittografia.

Ora, è impossibile esagerare quanto più la gente della NSA sa di queste cose rispetto a te o a me. Fanno raccomandazioni per le agenzie governative degli Stati Uniti e l'industria degli Stati Uniti tramite il NIST. Quindi, a meno che il tuo avversario non sia di per sé un grande governo mondiale, le raccomandazioni del NIST sono più che sufficienti. Ignora gli "esperti" autoproclamati che cercano di dirti altrimenti; La NSA è migliore in ciò che fa di quanto tu possa immaginare.

Se il tuo avversario è un importante governo mondiale, nessuno in SO è qualificato per aiutarti. E tu hai problemi molto più grandi di quale funzione hash usare.

[modifica 2]

Naturalmente presumo che tu stia già utilizzando questa funzione come parte di uno schema di hashing delle password standard, come PKCS # 5 (noto anche come "PBKDF2") e la tua domanda riguardava esclusivamente la funzione hash da utilizzare.

PBKDF2 raccomanda un minimo di 1000 iterazioni, ma puoi scegliere quello che vuoi. Lo sforzo della forza bruta dell'attaccante sale linearmente con quel numero, quindi 10000 iterazioni contro 1000 significa che impiegheranno 10 volte di più per forzare ogni password.

    
risposta data 21.06.2011 - 17:34
fonte
1

If the attacker knows the salt, he/she can calculate a new rainbow table based on the salt value.

Dipende dall'algoritmo in uso. Secondo Coda Hale , MD5 e la famiglia SHA di algoritmi di hashing sono di uso generale e destinati a velocità. In breve, conclude affermando che questi non sono sufficienti per prevenire attacchi di dizionario e che bcrypt è la strada da percorrere, poiché c'è un tempo di setup più lungo nel cracking delle password, che rallenta drasticamente un attaccante. Ecco un altro interessante articolo su bcrypt .

What about SHA-256 or SHA-512? Are they safe currently? What about in a few years?

Attenzione, ci sono due lati di questo argomento. C'è il lato bcrypt e SHA-256 e il lato superiore. Se credi a quelli della famiglia SHA, allora credo che sarai al sicuro per più di qualche anno con SHA-256, anche alcuni sostengono che SHA-1 con un sale è ancora abbastanza buono, ma se vuoi essere sicuro quindi vorrei attenermi a SHA-256. C'è un forum che menziona anche che MD5 ha ancora 5-10 anni da dimostrare "sufficientemente inaffidabili". Purtroppo non posso pubblicare i link, perché ho già raggiunto il mio massimo di due.

Personalmente, sto usando SHA-256 con un sale, ma dovrò sicuramente leggere di più in bcrypt e rivalutare. Speriamo che questo aiuti. Questo è un tipo di domanda che puoi facilmente passare ore e ore a cercare, ma comunque interessante.

    
risposta data 21.06.2011 - 17:24
fonte
-1

Lo scopo del sale è proteggere dagli attacchi usando il tavolo del ranuncolo. Se l'attaccante conosce il sale, può calcolare una nuova tabella arcobaleno in base al valore del sale.

Quindi la risposta breve sarebbe sì. Il furto di sale consentirà al malintenzionato di essere in grado di utilizzare l'attacco della tabella arcobaleno contro queste credenziali (sebbene l'attaccante debba prima creare una tabella arcobaleno unica).

La lunga risposta dipenderà dalla complessità di queste password. Se l'utente utilizza una password semplice ( stackoverflow ), il sale rubato avrebbe un impatto maggiore sulla password. Se l'utente utilizza una password complessa ( $ TACK0verflow ), il sale rubato avrà un impatto molto più piccolo (in quanto è improbabile che appaia in una qualsiasi tabella arcobaleno).

    
risposta data 21.06.2011 - 15:58
fonte

Leggi altre domande sui tag