it-swarm-eu.dev

È possibile decifrare gli hash MD5?

Qualcuno mi ha detto di aver visto sistemi software che:

  1. recuperare password crittografate MD5 da altri sistemi;
  2. decrittografare le password crittografate e
  3. memorizzare le password nel database del sistema utilizzando l'algoritmo del sistema stesso.

È possibile? Ho pensato che non fosse possibile/fattibile decodificare gli hash MD5.

So che ci sono dizionari MD5, ma esiste un vero algoritmo di decrittografia?

240
John Bubriski

No. MD5 non è una crittografia (sebbene possa essere usata come parte di alcuni algoritmi di crittografia), è una funzione di hash a senso unico . Gran parte dei dati originali sono effettivamente "persi" come parte della trasformazione.

Pensa a questo: un MD5 ha sempre una lunghezza di 128 bit. Ciò significa che ci sono 2128 possibili hash MD5. Questo è un numero ragionevolmente grande, eppure è decisamente finito. Eppure, esiste un numero infinito di possibili input per una determinata funzione di hash (e la maggior parte di essi contiene più di 128 bit o un misero 16 byte). Quindi ci sono in realtà un numero infinito di possibilità per i dati che farebbero lo hash allo stesso valore. La cosa che rende gli hash interessanti è che è incredibilmente difficile trovare due pezzi di dati che hanno lo stesso valore, e le probabilità che accada per caso sono quasi 0.

Un semplice esempio di funzione hash (molto insicuro) (e questo illustra l'idea generale che sia unidirezionale) consiste nel prendere tutti i bit di un pezzo di dati e trattarli come un numero elevato. Quindi, esegui la divisione integer usando un numero grande (probabilmente primo) n e prendi il resto (vedi: Modulus ). Rimarrai con un numero compreso tra 0 e n . Se dovessi eseguire di nuovo lo stesso calcolo (in qualsiasi momento, su qualsiasi computer, ovunque), utilizzando la stessa stessa stringa, verrà visualizzato lo stesso valore. Eppure, non c'è modo di scoprire quale fosse il valore originale, dal momento che ci sono un numero infinito di numeri che hanno quell'esatto resto, quando divisi per n .

Detto questo, MD5 ha riscontrato alcuni punti deboli, tanto che con una matematica complessa, potrebbe essere possibile trovare una collisione senza provare 2128 possibili stringhe di input. Inoltre, il fatto che la maggior parte delle password sia breve e che le persone usino spesso valori comuni (come "password" o "segreto") significa che in alcuni casi, è possibile fare una stima ragionevole della password di qualcuno utilizzando Google per l'hash o utilizzando un Tabella arcobaleno . Questa è una delle ragioni per cui dovresti sempre " salt " password hash, in modo che due valori identici, quando sottoposti a hash, non eseguiranno lo hash sullo stesso valore.

Una volta che un dato è stato eseguito attraverso una funzione hash, non si può tornare indietro.

393
Adam Batkin

Non puoi - in teoria. Il punto centrale di un hash è che è solo un modo. Ciò significa che se qualcuno riesce a ottenere l'elenco degli hash, non è ancora possibile ottenere la password. Inoltre significa che anche se qualcuno usa la stessa password su più siti (sì, sappiamo tutti che non dovremmo, ma ...) chiunque abbia accesso al database del sito A non sarà in grado di utilizzare la password dell'utente su sito B.

Il fatto che MD5 sia un hash significa anche che perde le informazioni. Per ogni dato hash MD5, se si consentono password di lunghezza arbitraria, potrebbero esserci più password che producono lo stesso hash. Per un buon hash sarebbe computazionalmente impossibile trovarli oltre una lunghezza massima abbastanza insignificante, ma significa che non c'è alcuna garanzia che se trovi una password che ha l'hash di destinazione, è sicuramente la password originale. È astronomicamente improbabile che vedresti due password di sola lunghezza ASCII con lo stesso hash MD5, ma non è impossibile.

MD5 è un hash non valido da utilizzare per le password:

  • È veloce, il che significa che se si dispone di un hash "target", è economico provare molte password e vedere se è possibile trovarne una che abbia un hash per quel target. Salting non aiuta che scenario, ma aiuta a rendere più costoso cercare di trovare una password che corrisponda a una qualsiasi multiple hash che utilizzano diversi sali.
  • Credo che abbia conosciuto difetti che rendono più facile trovare le collisioni, anche se trovare collisioni all'interno di testo stampabile (piuttosto che dati binari arbitrari) sarebbe almeno più difficile.

Non sono un esperto di sicurezza, quindi non farò una raccomandazione concreta oltre "Non eseguire il rollover del tuo sistema di autenticazione". Trova uno da un fornitore stimabile e usalo. Sia la progettazione che l'implementazione dei sistemi di sicurezza sono un affare complicato.

154
Jon Skeet

Tecnicamente, è 'possibile' , ma sotto condizioni molto severe ( Tabelle arcobaleno , forzatura bruta in base alla possibilità molto piccola che la password di un utente sia in quel database hash).

Ma questo non significa che sia

  • Praticabile
    o
  • Sicuro

Non vuoi "invertire" un MD5 hash. Usando i metodi descritti di seguito, tu Non avrò mai bisogno di 'Inversione' MD5 è in realtà considerato malevolo - alcuni siti web offrono la possibilità di crack e bruteforce hash MD5 - ma tutti sono enormi database contenenti parole del dizionario, password precedentemente inviate e altre parole. C'è una piccolissima possibilità di avere l'hash MD5 che è necessario invertire. E se hai salted l'hash MD5 - questo non funzionerà neanche! :)


Il modo in cui i login con MD5 hashing dovrebbe il lavoro è:

Durante la registrazione:
Utente crea password -> Password hash con MD5 -> Hash memorizzato nel database

Durante l'accesso:
L'utente immette nome utente e password -> (Nome utente controllato) La password viene cancellata utilizzando MD5 -> L'hash viene confrontato con l'hash memorizzato nel database

Quando è richiesta la 'Password dimenticata':

2 opzioni:

  • L'utente ha inviato una password casuale per l'accesso, quindi è stato intercettato per cambiarlo al primo accesso.

o

  • All'utente viene inviato un link per cambiare la password (con controllo extra se si ha una domanda di sicurezza/etc) e quindi la nuova password viene sottoposta a hash e sostituita con la vecchia password nel database
53
Daniel May

Non direttamente A causa del principio della pigeonhole , c'è (probabilmente) più di un valore che ha hash su ogni dato output MD5. In quanto tale, non è possibile invertire con certezza. Inoltre, MD5 è fatto per rendere difficile trovare qualsiasi tale hash invertito (tuttavia ci sono stati attacchi che producono collisioni - cioè, produce due valori che hanno un hash sullo stesso risultato, ma non puoi controllare quale sarà il valore MD5 risultante).

Tuttavia, se si limita lo spazio di ricerca, ad esempio, a password comuni con lunghezza sotto N, potrebbe non essere più presente la proprietà di irreversibilità (poiché il numero di output MD5 è molto maggiore del numero di stringhe nel dominio di interesse). Quindi puoi usare una tabella Arcobaleno o simile agli hash inversi.

32
bdonlan

Non possibile, almeno non in un ragionevole lasso di tempo.

Il modo in cui viene spesso gestito è una "reimpostazione" della password. Cioè, tu dai loro una nuova password (casuale) e li mandi in una email.

13
Matthew Groves

Non è possibile ripristinare una password MD5 (in qualsiasi lingua)

Ma tu puoi:

dare all'utente un nuovo.

controlla in qualche tavolo Arcobaleno per recuperare il vecchio.

12
Nettogrof

No, dev'essere stato confuso dai dizionari MD5.

Gli hash crittografici (MD5, ecc.) Sono senso unico e non puoi tornare al messaggio originale con solo il digest salvo che hai altre informazioni sul messaggio originale, ecc. che non dovresti.

9
Robert Greiner

Decodifica (ottenendo direttamente il testo semplice dal valore hash, in modo algoritmico), no.

Esistono, tuttavia, metodi che usano la cosiddetta tabella Rainbow . È piuttosto fattibile se le tue password sono sottoposte a hash senza sale.

8
Sinan Taifour

MD5 è un algoritmo di hashing, non è possibile annullare il valore hash.

È necessario aggiungere "cambia funzionalità password", dove l'utente fornisce un'altra password, calcola l'hash e lo memorizza come nuova password.

7

Non c'è un modo semplice per farlo. Questo è un po 'il punto di hashing della password, in primo luogo. :)

Una cosa che dovrebbe essere in grado di fare è impostare una password temporanea per loro manualmente e inviarli così.

Esito a dire questo perché è una cattiva idea (e non è garantito che funzioni comunque), ma potresti provare a cercare l'hash in una tabella di Rainbow come milw0rm per vedere se è possibile recuperare la vecchia password in questo modo.

7
Bill the Lizard

Vedi tutte le altre risposte qui su come e perché non è reversibile e perché non vorresti comunque.

Per completezza ci sono le tabelle Rainbow a cui puoi cercare le possibili corrispondenze. Non vi è alcuna garanzia che la risposta nella tabella Arcobaleno sia la password originale scelta dall'utente in modo tale da confonderli notevolmente.

Inoltre, questo non funzionerà per gli hash salati. Salting è raccomandato da molti esperti di sicurezza.

6
Dinah

Non c'è modo di "ripristinare" una funzione hash in termini di trovare la funzione inversa per esso. Come accennato prima, questo è il punto di avere una funzione di hash. Non dovrebbe essere reversibile e dovrebbe consentire un rapido calcolo del valore hash. Quindi, l'unico modo per trovare una stringa di input che produce un determinato valore hash è provare tutte le possibili combinazioni. Questo è chiamato attacco a forza bruta per questo motivo.

Provare tutte le combinazioni possibili richiede molto tempo e questo è anche il motivo per cui i valori hash vengono utilizzati per memorizzare le password in modo relativamente sicuro. Se un utente malintenzionato è in grado di accedere al tuo database con tutte le password utente all'interno, perdi in ogni caso. Se si hanno valori hash e password (idealisticamente parlando), sarà molto più difficile ottenere le password dai valori hash per l'utente malintenzionato.

Anche la memorizzazione dei valori hash non comporta problemi di prestazioni poiché il calcolo del valore hash è relativamente veloce. Quindi, la maggior parte dei sistemi sta calcolando il valore hash della password digitata dall'utente (che è veloce) e quindi la confronta con il valore hash memorizzato nel proprio database utente.

4
Kage

MD5 è considerato non funzionante, non perché è possibile recuperare il contenuto originale dall'hash, ma poiché con il lavoro, è possibile creare due hash sullo stesso hash.

Non è possibile annullare un hash MD5.

3
Ned Batchelder

Sì, esattamente quello che stai chiedendo è possibile. Non è possibile "decifrare" una password MD5 senza aiuto, ma è possibile re-crittografare una password MD5 in un altro algoritmo, ma non tutto in una volta.

Quello che fai è organizzare che gli utenti possano accedere al tuo nuovo sistema usando la vecchia password MD5. Al punto in cui hanno effettuato l'accesso, hanno fornito al tuo programma di accesso una versione unhashed della password che hai dimostrato che corrisponde all'hash MD5 che hai. È quindi possibile convertire questa password unhashed nel nuovo algoritmo di hashing.

Ovviamente, questo è un processo esteso perché devi aspettare che i tuoi utenti ti dicano quali sono le password, ma funziona.

(NB: sette anni dopo, oh, speriamo che qualcuno lo trovi utile)

2
user3710044

Puoi trovare strumenti online che usano un dizionario per recuperare il messaggio originale.

In alcuni casi, il metodo del dizionario potrebbe essere inutile:

  • se il messaggio viene cancellato utilizzando un messaggio SALT
  • se il messaggio è hash più di una volta

Ad esempio, ecco uno MD5 decrypter strumento online.

2
davitz38

L'unica cosa che può funzionare è (se diciamo che le password sono solo hash, senza aggiungere alcun tipo di sale per prevenire gli attacchi di replay, se è così devi sapere il sale), a proposito, ottieni uno strumento di attacco del dizionario , i file di molte parole, numeri ecc. quindi creano due righe, una riga è Word, numero (nel dizionario) l'altro è hash della parola e confronta gli hash se le partite si ottengono ...

è l'unico modo, senza entrare nella crittanalisi.

2
berkay

No, non può essere fatto. Puoi utilizzare un dizionario oppure provare a eseguire l'hashing di valori diversi fino a ottenere l'hash che stai cercando. Ma non può essere "decodificato".

1
Vilx-

MD5 ha i suoi punti deboli (vedi Wikipedia ), quindi ci sono alcuni progetti, che cercano di precalcolare gli hash. Wikipedia suggerisce anche alcuni di questi progetti. Uno che conosco (e rispetto) è ophrack. Non puoi dire all'utente la propria password, ma potresti essere in grado di dirgli una password che funziona. Ma penso: basta inviare una nuova password in caso dimenticassero.

1
dz.

No, non è possibile invertire una funzione di hash come MD5: dato il valore di hash dell'output è impossibile trovare il messaggio di input a meno che non siano note sufficienti informazioni sul messaggio di input.

La decrittografia non è una funzione definita per una funzione hash; crittografia e decrittografia sono funzioni di un cifrario come AES in modalità CBC; le funzioni di hash non encrypt decripta . Le funzioni di hash sono usate per digestun messaggio di input. Come suggerisce il nome, non c'è un algoritmo inverso possibile per progetto .


MD5 è stato progettato come funzione crittograficamente sicura, a senso unicohash. Ora è facile generare collisioni per MD5, anche se gran parte del messaggio di input è predeterminata. Quindi MD5 è ufficialmente guasto e MD5 non dovrebbe più essere considerato un hash crittograficamente sicuro. Tuttavia è ancora impossibile trovare un messaggio di input che porti ad un valore hash: trova X quando è noto solo H(X) (e X non ha una struttura pre-calcolata con almeno un 128 blocco di byte di dati precalcolati). Ci sono nessun attacco pre-immagine notocontro MD5.

In genere, è anche possibile indovinare le password utilizzando attacchi di tipo brute force o (augmented) del dizionario, per confrontare i database o cercare di trovare gli hash delle password nelle cosiddette tabelle Rainbow. Se viene trovata una corrispondenza, è certo che l'input è stato trovato. Le funzioni di hash sono anche sicure contro gli attacchi di collisione: trovare X' in modo che H(X') = H(X) dati H(X). Quindi, se viene trovato un X, è computazionalmente certo che si trattasse effettivamente del messaggio di input. Altrimenti avresti eseguito un attacco di collisione dopo tutto. Le tabelle arcobaleno possono essere utilizzate per accelerare gli attacchi e ci sono risorse internet specializzate là fuori che ti aiuteranno a trovare una password data un hash specifico.

È ovviamente possibile riutilizzare il valore hash H(X) per verificare le password generate su altri sistemi. L'unica cosa che il sistema ricevente deve fare è memorizzare il risultato di una funzione deterministica F che accetta H(X) come input. Quando X è dato al sistema allora H(X) e quindi F possono essere ricalcolati e i risultati possono essere confrontati. In altre parole, è non richiesto per decrittografare il valore hash a solo verificare che una password sia corretta, e si può ancora memorizzare l'hash come un valore diverso.


Invece di MD5 è importante usare un password hasho PBKDF (funzione di derivazione della chiave basata su password). Tale funzione specifica come usare saltinsieme a un hash. In questo modo gli hash identici non verranno generati per password identiche (da altri utenti o all'interno di altri database). Anche gli hash delle password per questo motivo non consentono l'uso delle tabelle Rainbow purché il sale sia sufficientemente grande e opportunamente randomizzato.

Gli hash delle password contengono anche un fattore di lavoro (a ​​volte configurato usando un conteggio di iterazione che può rallentare in modo significativo gli attacchi che cercano di trovare la password data la valore di sale e hash. Questo è importante in quanto il database con sali e valori hash potrebbe essere rubato. Infine, l'hash della password potrebbe anche essere memory-hardin modo che sia necessaria una quantità significativa di memoria per calcolare l'hash. Ciò rende impossibile l'uso di hardware speciale (GPU, ASIC, FPGA ecc.) Per consentire a un utente malintenzionato di velocizzare la ricerca. Altri input o opzioni di configurazione come un pepe o la quantità di parallelizzazione possono anche essere disponibili per un hash della password.

Permetterà comunque a chiunque di verificare una password data H(X) anche se H(X) è un hash della password. Gli hash delle password sono ancora deterministici, quindi se qualcuno conosce tutti gli input e l'algoritmo hash stesso allora X può essere usato per calcolare H(X) e - ancora - i risultati possono essere confrontati.

Gli hash delle password comunemente usati sono bcrypt, scrypte PBKDF2. C'è anche Argon2in varie forme che è il vincitore della concorrenza di hashing delle password ragionevolmente recente. Qui su CrackStation è un buon post sul blog per fare la sicurezza delle password giusto.


È possibile impedire agli avversari di eseguire il calcolo dell'hash verificare che la password sia corretta. Per questo un peperone può essere utilizzato come input per l'hash della password. In alternativa, il valore hash può ovviamente essere crittografato utilizzando un codice come AES e una modalità di operazione come CBC o GCM. Ciò tuttavia richiede l'archiviazione di un segreto/chiave in modo indipendente e con requisiti di accesso più elevati rispetto all'hash della password.

1
Maarten Bodewes

L'algoritmo MD5 hash non è reversibile, quindi la decodifica MD5 non è possibile, ma alcuni siti web hanno un grosso insieme di password match, quindi puoi provare online per decodificare l'hash MD5.

Prova online:

MD5 Decrypt

md5online

md5decrypter

1
Girish Patidar

In teoria non è possibile decrittografare un valore hash ma si hanno alcune tecniche sporche per riportare il testo in chiaro originale.

  1. Bruteforcing : tutti gli algoritmi di sicurezza del computer soffrono bruteforcing . Basandosi su questa idea, la GPU di oggi utilizza l'idea della programmazione parallela, con la quale è possibile riprendere il testo in chiaro massaggiandolo in modo massivo usando qualsiasi processore grafico. Questo strumento hashcat fa questo lavoro. L'ultima volta che ho controllato la versione cuda di esso, sono stato in grado di forzare un personaggio di 7 lettere lungo entro sei minuti.
  2. Ricerca su Internet : basta copiare e incollare l'hash su Google e vedere Se è possibile trovare il testo in chiaro corrispondente lì. Questa non è una soluzione quando stai pentestando qualcosa, ma vale sicuramente la pena di provarci. Alcuni siti web mantengono l'hash per quasi tutte le parole nel dizionario.
1
vikkyhacks

MD5 è una funzione di hash crittografica (unidirezionale), quindi non esiste un modo diretto per decodificarlo. L'intero scopo di una funzione di hash crittografica è che non è possibile annullarlo.

Una cosa che puoi fare è una strategia a forza bruta, in cui indovini cosa è stato sottoposto all'hash, poi lo hash con la stessa funzione e vedi se corrisponde. A meno che i dati dell'hash non siano facili da indovinare, potrebbe essere necessario molto tempo.

0
Ajanyan Pradeep