matematicamente / teoricamente, qual è la possibilità che 2 diversi input abbiano gli stessi risultati di 2 diverse funzioni hash?

6

matematicamente / teoricamente, qual è la possibilità che 2 diversi input abbiano gli stessi risultati di 2 diverse funzioni hash?

Ad esempio, userò 2 algoritmi hash più deboli, l'MD5 (Collision Vulnerabilities) e SHA- 1 Vulnerabilità di collisione . Quindi ho una password . Lo ho hash con MD5 quindi lo ho hash con SHA-1. matematicamente / teoricamente, qual è la possibilità che ci sia un altro input con lo stesso hash SHA e hash MD5 come risultato?

    
posta Pacerier 13.07.2011 - 00:07
fonte

4 risposte

2

Se ho due stringhe casuali (s1, s2) diverse ( s1 != s2 ), vuoi sapere la probabilità che md5(s1) == md5(s2) AND sha1(s1) == sha1(s2) .

Bene, prima per due specifiche stringhe scelte a caso qual è la probabilità che md5(s1) == md5(s2) ? Rispondi a 1/2 ^ 128 dato che il primo hash è una stringa di 128 bit, e le probabilità che il secondo hash sia uguale al secondo è 1 in 2 ^ 128 o circa 2.9 x 10 ^ -37%.

Allo stesso modo, P(sha1(s1) == sha1(s2)) = 2^-160 ~ 6.8 x 10^-47 % .

Ora la probabilità che entrambe le condizioni siano vere presupponendo che siano condizioni indipendenti (cioè che le funzioni di hashing siano fondamentalmente indipendenti l'una dall'altra), si ottiene moltiplicando le probabilità da P(X AND Y) = P(X) P(Y) so P(md5(s1)==md5(s2) AND sha1(s1) == sha1(s2)) = 2^-288 ~ 2 x 10^-85 % .

È scontato che le funzioni di hashing siano indipendenti l'una dall'altra sulla stringa, il che è una buona ipotesi per md5 e sha1 come funzioni di hashing. Ma se invece di confrontare MD5 e SHA-1, abbiamo confrontato MD5 e una nuova funzione di hashing che è solo MD5 applicata a se stessa 100 volte, troveremmo che ogni volta che md5 (s1) == md5 (s2), avremmo anche md5 ^ 100 (s1) == md5 ^ 100 (s2), quindi la probabilità di collisione è uguale alla probabilità di avere una collisione.

Allo stesso modo, se avessimo una stupida funzione "hash" che era semplicemente silly_hash (s) = md5 (s) ++ s (dove ++ significa concatenato), allora potresti mostrare che se s1! = s2 e md5 ( s1) == md5 (s2) quindi silly_hash (s1)! = silly_hash (s2) - significa che non potresti mai avere una doppia collisione con md5 e silly_hash.

    
risposta data 15.07.2011 - 20:56
fonte
9

Matematicamente? Probabilità del 100%. C'è quasi sicuramente esiste qualche altro input con lo stesso hash MD5 e SHA.

In pratica? 0% di probabilità. Mentre qualche altro input esiste , non esiste un modo noto per trovarlo entro la vita dell'universo.

Stai chiedendo la seconda resistenza pre-immagine. Per quanto ne so, si ritiene che almeno SHA1 (e probabilmente MD5) forniscano una strong resistenza pre-immagine. Da qui il commento che non esiste un modo noto per trovare un altro input con gli stessi hash, nel corso della vita dell'universo conosciuto.

    
risposta data 13.07.2011 - 01:11
fonte
4

Gli attacchi di collisione sono specifici per il caso in cui è possibile scegliere i due ingressi in collisione, se necessario. Per lo scenario della password che descrivi, la password viene in genere determinata in anticipo, quindi non si tratta di una collisione ma di un attacco pre-immagine. Dal momento che probabilmente la password non è nota all'avversario, ciò che ti preoccupa è un attacco di "prima pre-immagine". Questo è l'attacco più difficile dal momento che offre all'avversario il minimo grado di libertà. SHA1 e MD5 sono attualmente al sicuro da questo tipo di attacco. Significa che la probabilità di trovare un altro input per un determinato output di hashsum è zero per tutti gli scopi pratici.

In altre parole: se questo attacco funzionasse, la maggior parte dei protocolli di rete attuali sarebbero insicuri. (Le persone hanno effettivamente controllato i protocolli correnti per vedere se gli attacchi di collisione sono pericolosi e hanno deciso che possiamo continuare a usarli.)

    
risposta data 13.07.2011 - 02:50
fonte
2

Se hai un $ str1 che restituisce lo stesso md5 di $ str2, allora avranno automaticamente lo stesso sha1. Questo perché se stai facendo SHA1 (MD5 ($ stringa)), hai ridotto il numero di ingressi alla porzione SHA1 da uno spazio infinito a 128 bit.

    
risposta data 13.07.2011 - 14:33
fonte

Leggi altre domande sui tag