Posso forzare un hash della password anche se non conosco l'algoritmo hash utilizzato?

7

Posso forzare un hash della password anche se non conosco l'algoritmo sottostante?

Ad esempio, se ottengo un database con gli hash delle password e l'algoritmo hash utilizzato è sconosciuto, come un mix casuale di SHA / MD5 / Bcrypt / custom / Salt / Pepper.

Un esperto di password cracking sarà ancora in grado di forzare bruscamente gli hash delle password?

Immagino anche (per un sito web pubblico) che tu possa almeno creare il tuo "account" con una password conosciuta, quindi hai forse una nota hash di input- & gt ;. Sarà di qualche utilità?

    
posta user316 14.05.2014 - 06:21
fonte

4 risposte

2

La tua domanda non ha molto senso per me. Se conosci già l'hash e sai quale input lo genera, qual è il punto della tua forza bruta?

D'altra parte bruteforcing qualcosa significa applicare alcune procedure molte volte con input diversi e confrontare l'output con il tuo hash. Se non sai quale procedura usare, non c'è modo di applicarla più volte.

Ma se conosci l'input e l'hash, puoi applicarlo all'inizio per trovare quale algoritmo è usato. Ad esempio

sha1(i) , sha1(md5(i)) , md5(i) e così via provando molte combinazioni di possibili funzioni di hash. Potresti indovinare parzialmente ciò che viene utilizzato. Pertanto, se l'output è 160 bit, puoi supporre che l'ultimo passaggio potrebbe essere sha1 .

    
risposta data 14.05.2014 - 07:11
fonte
2

Sarà più difficile eseguire il brute-fore di un hash senza conoscere la funzione di hash utilizzata - dovrai indovinare sia la funzione hash che i dati all'hash. Tuttavia, non c'è motivo di mantenere segreta la funzione di hash.

In primo luogo, di solito è abbastanza evidente dalla lunghezza dell'hash (o dall'impostazione di un account fittizio e dal provare molte possibilità ovvie) quale algoritmo è stato usato per generarlo. In genere è una cattiva idea modificare le funzioni hash esistenti per "rollare la propria" funzione di hash, poiché (1) non è necessario, (2) sarà un incubo da mantenere su vari sistemi, (3) se fatto male può indebolire drasticamente la sicurezza e (4) come viene calcolata la funzione di hash nel codice sorgente / eseguibile e un determinato utente malintenzionato che compromette l'elenco degli hash, potrebbe anche essere in grado di mettere le mani sul codice sorgente / eseguibile ed essere in grado di decodificare la funzione di hash da lì.

Se vuoi davvero seguire il percorso che l'hash non deve essere forzato con forza bruta (fino a compromettere il codice sorgente dell'applicazione o l'eseguibile), non dovresti usare un hash ma dovresti usare un MAC (Message Authentication Code) . Puoi costruire un MAC con una funzione hash usando la costruzione HMAC : HMAC(password) = H(K1 ++ H(K2 ++ password)) dove H è una funzione di hash, K è una chiave segreta (memorizzata nell'applicazione che calcola l'HMAC), K1 = K XOR 0x5c5c...5c e K2 = K XOR 0x3636...36 sono due chiavi segrete diverse derivate da K (dove 0x5c5c...5c e 0x3636...36 è un blocco del byte 0x5c o 0x36 ripetuto con la stessa lunghezza della chiave segreta). Quindi se hai una chiave segreta a 256-bit e usi SHA-256 come funzione di hash, ci sono circa 2 256 potenziali chiavi HMAC (~ 10 77 - per il confronto ci sono stati solo circa 10 26 nanosecondi dal big bang) che un attaccante avrebbe dovuto scorrere prima di trovare la K usata (se in effetti trovano la K corretta e non una collisione improbabile che funzioni per una password specifica ma non altre).

I MAC vengono solitamente usati per verificare l'integrità del messaggio (nel senso che solo qualcuno con la chiave segreta può generare un MAC valido) e non per memorizzare password / autenticare gli utenti, ma non c'è motivo per cui non possano essere utilizzati a questo scopo. Il problema è lo stesso: non vuoi che qualcuno che ha ottenuto un messaggio e l'hash associato (MAC), sia in grado di creare nuovi hash (MAC) per altri messaggi (come parte di un attacco a forza bruta). Si ritiene che i MAC abbiano sicurezza contro questo attacco; mentre la scelta di alcuni schemi complicati casuali come SHA1(SHA512(pw)++SHA256(MD5(pw)++MD4(pw))) è in linea di principio molto più facile da indovinare per un utente malintenzionato rispetto a una chiave casuale a 256 bit (e più probabile che sia trapelata da una sorta di attacco canale laterale).

L'utilizzo di un MAC è probabilmente eccessivo. Se si utilizzano password complesse e un moderno hash salato rafforzato da chiave (bcrypt, PBKDF, SHA512crypt), la forzatura bruta non è fattibile.

    
risposta data 14.05.2014 - 21:14
fonte
0

Dato che l'attaccante ha un singolo input e output noto, può decodificare l'algoritmo di hash con forza bruta. Variare l'algoritmo di hashing per ogni password lo rende molto più difficile per lui ma non è ancora impossibile.

    
risposta data 14.05.2014 - 21:45
fonte
0

L'algoritmo di hashing è ipotizzabile, ma questo non è il modo in cui è possibile proteggere le password nel database. Se qualcuno può rubare l'intero database, allora presumo che il problema sia molto più ampio nel tuo sistema come pensi, e avrà anche il tuo codice sorgente ... Da lì non è un lungo passo per trovare l'algoritmo di hash che usi .

Quello che dovresti fare è usare un vero algoritmo di hashing della password, che è intenzionalmente molto lento. Quindi dimentica sha1 o md5, e usa bcrypt (se non possibile, di usare i precedenti con sale e con conteggio iterazione attualmente raccomandato ).

    
risposta data 15.05.2014 - 02:39
fonte

Leggi altre domande sui tag