Si può dire se una supposizione della password fosse vicina al risultato dell'hash?

74

Recentemente ho letto della gestione delle password (cose molto interessanti!) e mi stavo chiedendo come sarebbero diversi gli hash per stringhe simili.

È possibile sapere se una supposizione della password fosse vicina confrontando l'hash risultante con l'hash reale?

Ad esempio, se la password reale è "password123" e un hacker prova "Password123", "password1234", "password124", ecc., gli hash generati sarebbero abbastanza simili all'hash reale che l'hacker o i loro il computer potrebbe dire che erano sulla strada giusta?

Supponiamo che l'hacker conosca sale, pepe, polvere di caienna, adobo, qualsiasi cosa ... Se provano la password corretta genereranno un hash corrispondente.

(Penso che questo potrebbe variare a seconda della funzione di hash usata, ma non lo so per certo.)

    
posta elmer007 15.09.2016 - 22:50
fonte

9 risposte

159

No, non puoi determinare quanto vicino hai indovinato guardando l'hash. Una funzione di hash è progettata per questo: un singolo bit modificato sull'ingresso deve cambiare molti bit sull'output. Si chiama Avalanche Effect .

Più sotto sono gli hash SHA1 per alcune delle tue password di esempio:

cbfdac6008f9cab4083784cbd1874f76618d2a97 - password123

b2e98ad6f6eb8508dd6a14cfa704bad7f05f6fb1 - Password123

2b4bfcc447c3c8726d26c22927a68f511d5e01cc - password124

115b55dcc1cd9a0dfdd60c120e83eaf658c45fc6 - right horse battery staple

abf7aad6438836dbe526aa231abde2d0eef74d42 - correct horse battery staple

Una modifica a singolo bit cambierà completamente il risultato di hashing. Infatti, in un caso ideale per ogni bit di input, ogni bit di output verrà modificato con una probabilità del 50%.

    
risposta data 15.09.2016 - 23:12
fonte
14

No, grazie all'effetto valanga, anche un singolo bit di input dovrebbe creare una differenza significativa nell'output.

Parlando anche di funzioni di hashing come md5 o altre ... Data qualsiasi dimensione di input, la dimensione dell'output non cambierà. In md5 se la dimensione di input è 2 bit o 2000 bit, l'output sarà sempre 32 cifre in alfanumerico (formato esadecimale). Quindi è quasi impossibile per il normale utente indovinare la dimensione dell'input anche se ha cancellato l'output md5, supponendo che la password sia ben al di là dell'ambito per l'utente normale, ci sono ancora modi con il computing parallelo di fascia alta applicando algoritmi e molte permutazioni e combinazioni per capire uno degli input possibili se hai il codice hash ...!

md5 Output:
password123  = 482c811da5d5b4bc6d497ffa98491e38
Password123  = 42f749ade7f9e195bf475f37a44cafcb
password1234 = bdc87b9c894da5168059e00ebffb9077

I risultati sopra riportati mostrano l'effetto valanga.

    
risposta data 16.09.2016 - 00:31
fonte
13

Per aggiungere un elemento aggiuntivo alle risposte di cui sopra - il punto intero di una funzione di hash è di non gettare il tipo di informazione nella domanda - se tu potessi determinare qualsiasi cosa circa la somiglianza degli input formano il confronto degli output, che rappresenta un fallimento della funzione hash.

Non è solo che le funzioni di hash eseguono un certo lavoro e, per inciso, non puoi capire nulla degli input, il lavoro della funzione di hash è di darti zero informazioni sugli input, e se potresti scoprire qualcosa sugli input confrontando due output, quindi violerebbe quel principio.

    
risposta data 16.09.2016 - 19:06
fonte
7

Dipende dalla funzione di hash che usi. Dato che hai specificato un hash password , quindi univocamente no , non vorrai mai utilizzare una funzione hash per le password che hanno divulgato qualsiasi tipo di informazioni. L'hash deve semplicemente corrispondere o non corrispondere e basta.

Detto questo, esistono funzioni di hash che forniscono informazioni di similarità; ulteriori informazioni sono fornite in questa risposta .

    
risposta data 16.09.2016 - 17:18
fonte
4

No. Non dovrebbe esserci alcuna relazione con i dati inseriti nella funzione di hash e ciò che viene fuori.

Ad esempio, ecco 'ciao' in MD5:

5d41402abc4b2a76b9719d911017c592

Ed ecco "Ciao":

8b1a9953c4611296a827abf8c47804d7
    
risposta data 15.09.2016 - 23:08
fonte
1

Questo è un po 'esagerato, ma in generale no - non esiste un modo per determinare "quanto è corretta" l'ipotesi di una password da un valore hash. Lo scenario più vicino che posso pensare sarebbe quando segmenti della passphrase vengono suddivisi e hash separati, come con LMhash . Questa situazione consentirebbe all'utente malintenzionato di raccogliere informazioni da sezioni corrette della password, ma non consentirebbe all'utente malintenzionato di dedurre "quanto vicino" doveva essere corretto ogni segmento.

Gli altri utenti hanno dato una grande panoramica dell'hashing e dell'effetto valanga, quindi non ci entrerò!

    
risposta data 20.09.2016 - 12:11
fonte
0

Sì, è possibile, ma è necessario memorizzare gli hash per i quasi incidenti e associarli, quindi lavoro e risorse e possibili problemi di sicurezza qui e là. Ad esempio, è possibile, ad esempio, vedere la "password" in chiaro su un sito Wordpress, se qualcuno di questi è in grado di individuare una password ad alta entropia nota da qualche altra parte, possiamo dire da dove potrebbe essere trapelata. Esistono naturalmente degli algoritmi per generare dati errati, e questo è ampiamente noto a causa dell'uso di URL su mispelling simili, tuttavia è necessario assegnare punteggi per determinare quanto potrebbe essere vicina la partita e quanto deve essere vicina prima di essere allertato. Essenzialmente se si trattasse di parole del dizionario potresti classificarle con Soundex o simili.

    
risposta data 19.09.2016 - 08:45
fonte
0

A seconda degli algoritmi utilizzati potrebbe essere possibile calcolare quanto è vicina la password e questo porta ad attacchi di collisione che permettono di decifrare la password molto più velocemente della forza bruta.

Come ho capito è il caso di MD4 che può essere rotto in pochi millisecondi a causa di difetti del genere. Non ho analizzato l'exploit MD4, ma scommetto che c'è un'equazione di prossimità incorporata in esso.

Facciamo un esempio idiota: una funzione hash che è la somma dei codici ASCII della password. La password AB e BA avranno lo stesso hash 131. Se la vera password è AB, il sistema accetterà BA come vera password. Un po 'di reverse engineering mostrerà una relazione: a) cambiando una qualsiasi lettera a quella successiva ne aggiungerai una nell'hash; b) aggiungendo una nuova A alla password aggiunge 65 all'hash. E poi il crack è pronto. La password restituita dal crack potrebbe non essere la stessa utilizzata dall'utente, ma il sistema non conoscerà la differenza.

Sì, l'obiettivo di un algoritmo di hash crittografico è di impedirlo. Dovrebbe essere imprevedibile e quindi richiedere la forza bruta. Ma non sempre funziona come previsto. La matematica è imperdonabile.

EDIT: MD4, MD5 e SHA1 sono ormai obsoleti a causa di questi tipi di attacchi. Sono nati nuovi algoritmi per evitare tali vulnerabilità. E il controllo della password fa un po 'più di un semplice hashing. L'adozione di nuovi algoritmi non è veloce come vogliamo. Per Linux costantemente aggiornato, le password di base dovrebbero utilizzare algoritmi moderni. Ma scommetto che ci sono molti sistemi in tutto il mondo che eseguono software di più di 10 anni perché la nuova versione del sistema operativo potrebbe non essere compatibile con le vecchie applicazioni o semplice dai costi della licenza se viene utilizzato un software a pagamento. Scommetto che molti software che hanno il proprio database delle password separato dal sistema hanno una sicurezza debole.

    
risposta data 18.09.2016 - 22:56
fonte
-1

Non guardando l'hash, no.

Potrebbero tuttavia eseguire la forza bruta di alcune migliaia di password vicine alla password inserita.

Presumendo, naturalmente, che possono aggirare la difesa di un sito contro qualcuno che fa numerosi tentativi. Ovviamente, il sito stesso ha questa capacità, per esempio, se vuole verificare se una password è stata semplicemente fat-fingered e non la conta contro il numero consentito di tentativi.)

Quanti tentativi ci vorrebbe per una password di n caratteri?

  • n per testare l'utente con un personaggio extra.

  • (n + 1) * 95 per testare un personaggio mancante in qualsiasi posizione.

  • n per verificare che l'utente esegua 1 carattere minuscolo anziché superiore o spostato (#) anziché non spostato (3).

  • n (n-1) per testare per 2 caratteri in minuscolo / non spostato o viceversa.

  • < = 6n per verificare che l'utente digiti inavvertitamente un carattere adiacente anziché questo carattere. (Se si dice una F, sostituire D R T G V C).

  • 12 per verificare che una delle mani dell'utente sia spostata di un punto da dove dovrebbe essere, più qualche altro per i caratteri nel mezzo della tastiera (Y G H B) che potrebbero essere colpiti da entrambe le mani.

Come puoi vedere, questi numeri non sono proibitivi, e tale analisi è fattibile.

    
risposta data 19.09.2016 - 03:34
fonte

Leggi altre domande sui tag