it-swarm.dev

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

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

Questo utente malintenzionato può decifrare queste password?

La mia comprensione è che MD5 e SHA-1 non sono più sicuri poiché gli strumenti di recupero password assistiti dalla GPU possono calcolare miliardi di questi hash al secondo per GPU.

Che dire di SHA-256 o SHA-512? Sono al sicuro al momento? Che dire tra qualche anno?

51
Seppo Erviälä

La domanda non indica quanti round di hashing vengono eseguiti. E l'intera risposta dipende da questo punto.

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

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

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

Ora considera l'effetto dell'esecuzione di più iterazioni. Se vengono eseguite 1.000 iterazioni di hashing, lo spazio della password di 6 caratteri richiede quasi 12 giorni anziché 15 minuti. Uno spazio di 7 caratteri richiede 3 anni. Se vengono utilizzate 20.000 iterazioni, tali numeri vanno rispettivamente a 8 mesi e 60 anni. A questo punto, anche le password brevi non possono essere cercate in modo esaustivo; l'attaccante deve ricorrere al dizionario delle password "più probabili".

61
erickson

Il sale può essere considerato pubblico praticamente per definizione .

Per quanto riguarda quale hash usare e quanto sia "sicuro", mi atterrei alle raccomandazioni che NIST fa per le agenzie governative statunitensi. Come l'articolo di Wikipedia dice:

SHA-1 è in pensione per la maggior parte degli usi governativi; lo US National Institute of Standards and Technology afferma che "Le agenzie federali dovrebbero smettere di usare SHA-1 per ... applicazioni che richiedono resistenza alle collisioni non appena possibile e deve utilizzare la famiglia di funzioni hash SHA-2 per queste applicazioni dopo il 2010 "

Puoi speculare su quanto siano sicuri o non sicuri vari algoritmi, ma perché preoccuparsi quando si dispone di una specifica che il governo degli Stati Uniti considera abbastanza buono per il proprio uso?

[modificare]

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

La forzatura bruta di un hash a 160 bit come SHA-1 richiede uno sforzo di 2 ^ 160; semplicemente non accadrà, non importa quante "GPU" ci lanci. In effetti, probabilmente non accadrà nella vita dell'universo. (Vero, forzare brutalmente una collisione richiede "solo" 2 ^ 80 sforzi. Ma richiede anche 2 ^ 80 immagazzinamento . Buona fortuna con quello.)

Il motivo per cui MD5 e SHA-1 sono considerati "probabilmente non sicuri" è che in ogni algoritmo sono stati scoperti punti deboli che potrebbero ridurre il modo di lavorare, molto al di sotto dello sforzo della forza bruta. Il motivo per passare a un algoritmo più recente (come SHA-2) è evitare quei punti deboli noti; la ragione per usare 256 bit è di fornire un po 'di buffer contro punti deboli sconosciuti . Non ha nulla a che fare con le "GPU"; per resistere agli attacchi di forza bruta, 160 bit sono molti.

Dichiarazioni simili valgono per tutta la crittografia, tra l'altro.

Ora, è impossibile sopravvalutare quanto più la gente di NSA sa di queste cose di te o di me. Esse fanno raccomandazioni per agenzie governative e industrie statunitensi tramite NIST. Quindi, a meno che il tuo avversario è esso stesso un importante governo mondiale, le raccomandazioni del NIST sono più che sufficienti. Ignora qualsiasi "esperto" autoproclamato che cerca di dirti diversamente; NSA è meglio in quello che fa di quanto tu possa possibilmente immaginare.

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

[modifica 2]

Naturalmente suppongo che tu stia già utilizzando questa funzione come parte di uno schema di hashing della password standard, come PKCS # 5 (noto anche come "PBKDF2"), e la tua domanda era puramente su quale funzione hash uso.

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

17
Nemo

Se l'attaccante conosce il sale, può calcolare una nuova tabella Rainbow in base al valore del sale.

Dipende dall'algoritmo utilizzato. Secondo Coda Hale , MD5 e la famiglia SHA della famiglia di algoritmi di hashing sono scopi generici e pensati per la velocità. In breve, continua a concludere che questi non sono sufficienti per prevenire gli attacchi ai dizionari e che bcrypt è la strada da percorrere, in quanto vi è più tempo di installazione nel craccare le password, rallentando drasticamente un attaccante. Ecco un altro articolo interessante su bcrypt .

Che dire di SHA-256 o SHA-512? Sono al sicuro al momento? Che dire tra qualche anno?

Attenzione, ci sono due lati di questo argomento. C'è il lato bcrypt e il lato SHA-256 e verso l'alto. Se credi a quelli nella 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, mi atterrei a SHA-256. C'è un forum che menziona anche che MD5 ha ancora 5-10 anni per essere dimostrato "sufficientemente inaffidabile". Purtroppo non posso pubblicare i collegamenti ad esso, perché ho già raggiunto il massimo di due.

Personalmente, sto usando SHA-256 con un sale, ma dovrò sicuramente leggere di più su bcrypt e rivalutare. Speriamo che questo aiuti. Questo è un tipo di domanda che puoi facilmente dedicare innumerevoli ore alla ricerca, ma comunque interessante.

1
SantosLHalper