È possibile decrittografare gli hash MD5?


260

Qualcuno mi ha detto di aver visto sistemi software che:

  1. recuperare password crittografate MD5 da altri sistemi;
  2. decifrare le password crittografate e
  3. memorizzare le password nel database del sistema usando l'algoritmo proprio del sistema.

È possibile? Ho pensato che non era possibile / fattibile decrittografare gli hash MD5.

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


7
Il ripristino di MD5 produrrebbe anche più password.
Carles Company,

231
MD5 è un algoritmo digest. Pensa a come convertire una mucca in una bistecca. Ora prova a invertire ciò.
Lumaca meccanica

5
@Arst da quello che ho capito, sì, ma solo se ne avessi MOLTO. E anche se lo facessi, non saresti in grado di andare al contrario, perché l'algoritmo perde intenzionalmente informazioni.
Giordania,

8
@mechanicalsnail data questa analogia, si potrebbe fare un clone perfettamente perfetto dal DNA sulla bistecca. :))
Trimikha Valentius,

8
@TrimikhaValentius MD5 è un algoritmo digestivo. Pensa a come mangiare bistecca> digestione> output. Ora prova a invertire ciò.
user4157124

Risposte:


424

No. MD5 non è la crittografia (sebbene possa essere utilizzata come parte di alcuni algoritmi di crittografia), è una funzione hash unidirezionale . Gran parte dei dati originali vengono effettivamente "persi" come parte della trasformazione.

Pensaci: un MD5 è sempre lungo 128 bit. Ciò significa che ci sono 2 128 possibili hash MD5. Questo è un numero ragionevolmente grande, eppure è decisamente finito. Eppure, esiste un numero infinito di possibili input per una data 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 avrebbero lo stesso valore. La cosa che rende interessanti gli hash è che è incredibilmente difficile trovare due pezzi di dati che hanno lo stesso valore e che le probabilità che ciò accada per caso sono quasi 0.

Un semplice esempio per una funzione hash (molto insicura) (e questo illustra l'idea generale di essere unidirezionale) sarebbe prendere tutti i bit di un pezzo di dati e trattarlo come un numero elevato. Quindi, esegui la divisione intera usando un numero grande (probabilmente primo) n e prendi il resto (vedi: Modulo ). Ti verrà lasciato 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 stringa esatta, verrà visualizzato lo stesso valore. Eppure, non c'è modo di scoprire quale fosse il valore originale, poiché esiste un numero infinito di numeri che hanno quel resto esatto, quando diviso per n .

Detto questo, è stato riscontrato che MD5 presenta alcuni punti deboli, tali che con una matematica complessa potrebbe essere possibile trovare una collisione senza provare 2 128 possibili stringhe di input. E il fatto che la maggior parte delle password siano brevi e le persone spesso usano valori comuni (come "password" o "segreto") significa che in alcuni casi, puoi fare una supposizione abbastanza ragionevole della password di qualcuno cercando su Google l'hash o usando un arcobaleno tavolo . Questo è uno dei motivi per cui dovresti sempre " salare " le password con hash, in modo che due valori identici, quando sottoposti a hash, non abbiano lo stesso valore.

Una volta che un dato è stato eseguito attraverso una funzione hash, non è più possibile tornare indietro.


22
tuttavia, ci sono più collisioni di quanto si pensasse originariamente nello spazio hash MD5. Non è più considerato ottimale come il miglior hash per le password.
Cheeso,

12
Poiché la maggior parte delle password sono più brevi dell'hash MD5, di solito esiste una sola password per ogni hash. (E trovarne uno, anche se non è quello originale, è sufficiente per accedere all'account.) Il punto di essere una funzione a senso unico non è che ci sono più preimmagini diverse, quindi non possiamo sapere quale fosse l'originale , ma è davvero difficile trovare anche un valore originale .
Paŭlo Ebermann,

2
@Nick: In realtà, RFC1321 dice esplicitamente: "L'algoritmo accetta come input un messaggio di lunghezza arbitraria"
Adam Batkin,

6
@Olathe - Non sono sicuro di essere d'accordo. Dato un hash, è generalmente impossibile determinare (con certezza al 100%) l'input originale. Esistono (di solito) un numero infinito di input che producono ogni possibile output (con hash). Ho detto generalmente perché, se sai (per esempio) che stai cercando una stringa di caratteri ASCII, ed è inferiore a, diciamo, 12 byte, è probabile che ci sia un solo input che produce un determinato output. Ma ci saranno sempre collisioni (infinite), e a meno che tu non abbia qualche vincolo esterno (come nel mio esempio) non saprai mai quale sia la ragione giusta
Adam Batkin,

2
@Adam Batkin, hai ragione, ma non intendo la certezza al 100%. La cifratura non può essere eseguita con certezza al 100%. Il mittente avrebbe potuto significare incomprensibili casuali anziché in chiaro inglese usando la stessa chiave che decodifica altri testi in inglese, ma la probabilità dell'inglese è molto vicina al 100%. Allo stesso modo, quando si sceglie tra una lunga password di poesia giapponese UTF-8 e stringhe incomprensibili, la probabilità della poesia è vicina al 100%. Questo può essere fatto usando le probabilità del fatto reale piuttosto che i vincoli prescelti. Ovviamente non può essere fatto in generale, ma è ancora abbastanza utile.
Olathe,

154

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 può ancora ottenere la tua password. Inoltre significa che anche se qualcuno utilizza 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 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 impossibile dal punto di vista computazionale trovarli oltre una lunghezza massima piuttosto banale, ma significa che non c'è garanzia che se trovi una password che ha l'hash di destinazione, è sicuramente la password originale. È astronomicamente improbabile che vedresti due password ASCII di lunghezza ragionevole che abbiano lo stesso hash MD5, ma non è impossibile.

MD5 è un brutto hash da utilizzare per le password:

  • È veloce, il che significa che se hai un hash "target", è economico provare molte password e vedere se riesci a trovarne uno che ha hash su quel target. Salare non aiuta in quello scenario, ma aiuta a rendere più costoso cercare di trovare una password che corrisponda a uno degli hash multipli usando sali diversi.
  • Credo che abbia conosciuto difetti che rendono più facile trovare le collisioni, sebbene trovare collisioni all'interno di un testo stampabile (piuttosto che dati binari arbitrari) sarebbe almeno più difficile.

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


2
Sì, ci sono altri metodi, ma devi capire cosa Jon ha detto sopra - "non dovresti inviare loro la loro password via email - sono informazioni sensibili che potrebbero rimanere sensibili". - al livello più basso, le e-mail possono essere intercettate e le informazioni sensibili possono essere recuperate. Una password dovrebbe essere il più sicura possibile, di solito mantenendola come hash solo in un database.
Daniel,

3
E anche il fatto che se la password può essere invertita, ciò significa che chiunque abbia accesso al database può ottenere le password degli utenti. Non è una buona idea. Le password a senso unico dovrebbero essere la norma; conservare la vera password (anche crittografata) solo se è assolutamente necessario (ad es. per autenticarsi con un altro sistema che non ha alcun token).
Jon Skeet,

1
Ho visto misure antispam in cui il server web dei ricevitori nega una posta in arrivo solo per attendere che il server di posta del mittente riprovi (gli spambots di solito provano solo una volta). Ciò potrebbe facilmente superare il timeout di 10 minuti.
sisve,

1
@ravisoni: sta trovando un valore che ha lo stesso hash, presumibilmente tramite forza bruta o tabelle di ricerca. Non c'è garanzia che sia il valore in testo originale.
Jon Skeet,

5
@ravisoni: cosa intendi con "giusto" qui? Se la password è sconosciuta, non puoi sapere se quella rivelata è quella originale oppure no. Ma il punto è che un hash come MD5 per definizione perde informazioni. Il fatto che siti come questo possano presentare una password corrispondente è solo una buona prova del fatto che MD5 è un cattivo algoritmo da utilizzare per motivi di sicurezza.
Jon Skeet,

52

Tecnicamente, è "possibile" , ma in condizioni molto rigide ( tabelle arcobaleno , forzature brutali basate sulla minima possibilità che la password di un utente si trovi in ​​quel database di hash).

Ma ciò non significa che lo sia

  • Vitale
    o
  • Sicuro

Non vuoi "invertire" un hash MD5 . Utilizzando i metodi descritti di seguito, non sarà mai necessario. L'MD5 "invertito" è in realtà considerato dannoso - alcuni siti Web offrono la possibilità di "rompere" e hash MD5 bruteforce - ma sono tutti enormi database contenenti parole del dizionario, password precedentemente inviate e altre parole. C'è una possibilità molto piccola che abbia l'hash MD5 di cui hai bisogno invertito. E se hai salato l'hash MD5, neanche questo funzionerà! :)


Il modo in cui gli accessi con hashing MD5 dovrebbero funzionare è:

Durante la registrazione: l'
utente crea la password -> La password viene hash usando MD5 -> Hash memorizzato nel database

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

Quando è necessaria "Password dimenticata":

2 opzioni:

  • L'utente ha inviato una password casuale per accedere, quindi viene modificato per cambiarlo al primo accesso.

o

  • All'utente viene inviato un collegamento per modificare la propria password (con ulteriore controllo in caso di domande di sicurezza / ecc.), Quindi la nuova password viene cancellata e sostituita con la vecchia password nel database

1
Ho qualche pignolo. I tavoli arcobaleno non sono forzature brutali. In realtà ci sono programmi e siti che usano password a forza bruta (molto semplici) di pochi caratteri (in genere si ripetono in poche ore o giorni, e puoi riempire un hash e sperare che arrivi nel ciclo). E purtroppo, data la mancanza di qualità di molte password, la possibilità che si apra non è "una possibilità molto piccola".
Maarten Bodewes,

32

Non direttamente A causa del principio del buco del piccione , esiste (probabilmente) più di un valore che esegue l'hashing su ogni dato output MD5. Come tale, non puoi invertirlo con certezza. Inoltre, MD5 è stato creato per rendere difficile trovare un tale hash invertito (tuttavia ci sono stati attacchi che producono collisioni - ovvero, producono due valori che hanno hash con lo stesso risultato, ma non puoi controllare quale sarà il valore MD5 risultante essere).

Tuttavia, se si limita lo spazio di ricerca, ad esempio, a password comuni con lunghezza inferiore a N, è possibile che non si abbia più la proprietà 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.


1
Vorrei aggiungere che trovare un altro valore che abbia hash sullo stesso output è chiamato "collisione". Questo è il metodo più comune per rompere i sistemi con hash MD5.
Nicole,

5
@Renesis, trovare dati che eseguono l'hash su un valore precedentemente noto è chiamato "preimage", in realtà, ed è molto, molto più difficile di una semplice collisione. Non è stato ancora dimostrato alcun attacco pre-immagine contro MD5, ma sono stati utilizzati attacchi di collisione.
bdonlan,

Il punto delle funzioni hash (quando usato per l'archiviazione delle password) non è che ci sono molte possibili password che danno lo stesso hash (ce ne sono, ma la maggior parte sono più lunghe dell'hash stesso), ma che è difficile trovare anche uno di questi (che sarebbe sufficiente per accedere al sistema). E sì, a causa dei tavoli arcobaleno non usi hash non salati. E a causa del piccolo spazio per le password, utilizzerai un hash lento (come bcrypt o scrypt) anziché uno veloce (come MD5 / SHA - * / ....)
Paŭlo Ebermann

1
Per essere tecnici, non è possibile eseguire MD5 con certezza, poiché l'hardware potrebbe non funzionare correttamente. Allo stesso modo, potresti non essere sicuro che la password fosse passwordpiuttosto che tutti gli altri input infiniti che producono lo stesso hash ma che sembrano tutti abbastanza casuali, ma puoi essere abbastanza vicino.
Olathe,

Il principio del buco del piccione si applica ovviamente, ma è ancora impossibile dal punto di vista computazionale trovare un secondo input che abbia un hash su un certo valore, ad esempio un hash su una normale password. Se trovi una X che esegue l'hashing su una data H (X), puoi essere certo che X è l'input corretto. Questo rende l'intera prima sezione di questa risposta e la maggior parte del resto errata.
Maarten Bodewes,

13

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

Il modo in cui questo viene spesso gestito è una "reimpostazione" della password. Cioè, dai loro una nuova password (casuale) e la invii tramite e-mail.


5
Se l'hash non è stato salato, rimarrai sorpreso di quanto spesso ci vuole una ricerca su google per il valore di hash ...
Michael Borgwardt,

1
Non molto pratico per un sistema di recupero password, anche se non salato :)
Matthew Groves,

12

Non è possibile ripristinare una password md5. (In qualsiasi lingua)

Ma tu puoi:

dare all'utente uno nuovo.

controlla qualche tavolo arcobaleno per recuperare forse quello vecchio.


1
Nix l'idea della tavola arcobaleno. Se stai salando - e dovresti esserlo - allora non funzionerebbe, comunque.
Steven Sudit,

1
@StevenSudit Se stanno ancora utilizzando MD5 per eseguire l'hashing delle password anziché utilizzare un hash con password complesse, non si può presumere che stiano utilizzando un salt. Forse lo fanno, probabilmente no.
Maarten Bodewes,

10

No, deve essere stato confuso sui dizionari MD5.

Gli hash crittografici (MD5, ecc ...) sono un modo e non puoi tornare al messaggio originale solo con il digest se non hai altre informazioni sul messaggio originale, ecc. Che non dovresti.


8

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

Esistono, tuttavia, metodi che utilizzano la cosiddetta tabella arcobaleno . È abbastanza fattibile se le tue password sono tratteggiate senza sale.


7

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

È necessario aggiungere la funzione "modifica password", in cui l'utente fornisce un'altra password, calcola l'hash e lo memorizza come nuova password.


7

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

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

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


6

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

Per completezza, tuttavia, ci sono tavoli arcobaleno su cui è possibile cercare possibili corrispondenze. Non vi è alcuna garanzia che la risposta nella tabella arcobaleno sarà la password originale scelta dall'utente in modo da confonderli notevolmente.

Inoltre, questo non funzionerà con gli hash salati. La salatura è raccomandata da molti esperti di sicurezza.


Non corretto . Se viene trovata una corrispondenza, è certo che sarà la password originale. Se così non fosse, allora sarebbe possibile generare collisioni dato qualsiasi H (X) in cui X è un messaggio senza una struttura predefinita determinata dall'avversario. È computazionalmente impossibile trovare una tale collisione per una funzione hash crittograficamente sicura, anche se si tratta di una funzione hash rotta come MD5.
Maarten Bodewes,

@MaartenBodewes: "Se viene trovata una corrispondenza, è certo che sarà la password originale." Non riesco a capire come sia il caso, se assumiamo un numero illimitato di password. Direi che è estremamente probabile che sia la password originale, ma non deve esserlo. Il fatto che ci siano più password possibili rispetto agli hash MD5 significa che deve essere possibile che ci siano due password con lo stesso hash. Solo perché è computazionalmente impossibile trovare tali collisioni non significa che non esistano. O ti ho frainteso?
Jon Skeet,

@JonSkeet Se è computazionalmente impossibile trovare una collisione di proposito, trovarne una per caso è altrettanto improbabile o peggiore. A causa dello spazio di output limitato di MD5 e del problema del compleanno, la possibilità di trovare una collisione è di circa 1 su 2 ^ 64 (ovvero circa la metà dello spazio di output) - e ciò dopo aver associato circa 2 ^ 64 hash. E questo non considera nemmeno che il messaggio probabilmente deve essere piccolo e avere un formato specifico per essere considerato una password. La maggior parte delle password ha un'entropia considerevolmente inferiore a 2 ^ 64 bit.
Maarten Bodewes,

1
@MaartenBodewes: Ma c'è una grande differenza tra "astronomicamente improbabile" e "impossibile". La tua dichiarazione in merito alla certezza che è la password giusta è troppo forte, IMO. Ciò suggerisce una certezza matematica che non è presente.
Jon Skeet,

Puoi anche indovinare una chiave AES 2 ^ 128 bit in una volta sola. È "solo" estremamente improbabile. La crittografia si basa su questo tipo di probabilità. Per tutti gli scopi pratici, se trovi un messaggio / password di input, sarà quello che stavi cercando. È teoricamente possibile trovare un altro messaggio di input, ma per questa domanda su StackOverflow non è necessario considerarlo. E le tabelle arcobaleno sono piene solo di possibili password. Non conterranno abbastanza dati per esserci la possibilità di una collisione (o sovrascriverebbero inconsapevolmente la mappatura o diventerebbero famosi).
Maarten Bodewes,

4

Non c'è modo di "ripristinare" una funzione hash in termini di ricerca della funzione inversa per essa. Come accennato in precedenza, questo è il punto centrale di avere una funzione 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 dato valore di hash è provare tutte le possibili combinazioni. Questo si chiama attacco di forza bruta per questo motivo.

Cercare tutte le combinazioni possibili richiede molto tempo e questo è anche il motivo per cui i valori hash vengono utilizzati per archiviare le password in modo relativamente sicuro. Se un utente malintenzionato è in grado di accedere al tuo database con tutte le password dell'utente all'interno, perdi comunque. Se hai valori di hash e (forte idealisticamente) di password complesse, sarà molto più difficile ottenere le password dai valori di hash per l'attaccante.

Anche la memorizzazione dei valori di hash non è un problema di prestazioni perché il calcolo del valore di hash è relativamente veloce. Quindi, ciò che la maggior parte dei sistemi fa è calcolare il valore hash della password digitata dall'utente (che è veloce) e quindi confrontarla con il valore hash memorizzato nel loro database utente.


Non c'è nulla di molto sbagliato in questa risposta, tranne per il fatto che la velocità della funzione hash è un problema perché la maggior parte delle password non è abbastanza sicura e consente a un avversario di eseguire un attacco da dizionario. Per questo motivo vengono utilizzate le funzioni di hash delle password lente invece delle funzioni di hash crittograficamente sicure.
Maarten Bodewes,

3

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

Non è possibile annullare la hash di un hash MD5.


3
In base alla progettazione, tutti gli hash della stessa lunghezza subiscono collisioni. È inevitabile quando si trattengono dati di lunghezza variabile. MD5 è considerato obsoleto per il suo tasso di collisioni, non per il fatto di scontrarsi.
Jonathan Lonowski il

MD5 è considerato rotto a causa della comprovata possibilità di costruire input che si scontrano.
Ned Batchelder il

3

È possibile trovare strumenti online che utilizzano un dizionario per recuperare il messaggio originale.

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

  • se il messaggio è sottoposto a hash usando un messaggio SALT
  • se il messaggio è hash più di una volta

Ad esempio, ecco uno strumento online per decriptare MD5 .


Le tabelle arcobaleno , non gli attacchi del dizionario, sono inutili se si usa un sale. L'hashing più di una volta - senza sale - consente comunque i tavoli arcobaleno, anche se trovarne uno preesistente online è sicuramente meno probabile.
Maarten Bodewes,

2

L'unica cosa che può funzionare è (se menzioniamo che le password sono solo sottoposte a hash, senza aggiungere alcun tipo di salt per prevenire gli attacchi di replay, se è così devi conoscere il salt) a proposito, ottieni uno strumento di attacco del dizionario , i file di molte parole, numeri ecc., quindi creano due righe, una riga è word, number (nel dizionario) l'altra è hash della parola e confronta gli hash se le corrispondenze vengono visualizzate ...

è l'unico modo, senza entrare nella crittoanalisi.


2

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

Quello che fai è far sì che i tuoi utenti possano accedere al tuo nuovo sistema usando la vecchia password MD5. Al punto che essi login hanno dato il programma di login un unhashed versione della password che si dimostra partite l'hash MD5 che avete. È quindi possibile convertire questa password non cancellata 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, vabbè qualcuno lo troverà utile)


Grazie per la risposta. Comunque vado a "1" tu :) Non ricordo se l'ho fatto davvero, ma in teoria dovrebbe funzionare. Invece di attendere che ogni singolo utente acceda per poter crittografare nuovamente la propria password, è possibile crittografare semplicemente la versione con hash della propria password. Pertanto, ogni password sarà hash MD5 e quindi crittografata. Ho appena aggiornato il controllo della password per fare lo stesso e i dati dell'utente dovrebbero essere sicuri senza richiedere l'intervento dell'utente.
John Bubriski

Un altro avvertimento al mio commento sopra. Non sono un esperto di crittografia, quindi non sono sicuro che ci siano ulteriori implicazioni sulla sicurezza di questo. Ad esempio, la crittografia di password deboli con hash debole prima di essere crittografate potrebbe potenzialmente compromettere la sicurezza della crittografia (forse usare anche un altro sale?). Inoltre, potresti avere dei backup fluttuanti con quelle password con hash MD5. Probabilmente è meglio fare una invalidazione completa di tutte le password esistenti quando si esegue questo tipo di aggiornamento.
John Bubriski

I crittografi si preoccupano della doppia crittografia, ma penso che abbiano trovato solo casi banali in cui è un problema. Ma non penso che sia utile in questo caso perché MD5 è ancora sicuro per le password (non troppo lunghe, di testo). Tuttavia, il doppio hashing potrebbe essere utile se lo sviluppatore precedente avesse dimenticato di aggiungere sale, altrimenti non riesco a pensare a un caso in cui non dovresti dire a tutti che le password dovrebbero essere considerate false. Si spera che i backup non vengano persi e vengano comunque crittografati.
user3710044

1

No, non si può fare. O puoi usare un dizionario, oppure puoi provare a eseguire l'hashing di valori diversi fino a quando non ottieni l'hash che stai cercando. Ma non può essere "decifrato".


ho visto questo sito Web che inverte md5 nel testo originale: md5.gromweb.com . Com'è possibile allora?
Samach,

2
@ samach321 - Facile: hanno un DB di stringhe con hash. Qualunque cosa tu inserisca nella loro casella "Converti una stringa in un hash MD5" viene aggiunta al DB. Prova a ottenere un hash MD5 da un'altra fonte e inseriscilo. A meno che non sia qualcosa che si trova nel loro DB, non otterrai un risultato.
Vilx-

1

MD5 ha i suoi punti deboli (vedi Wikipedia ), quindi ci sono alcuni progetti che provano a pre-calcolare 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 dire loro una password che funziona. Ma penso: basta inviare una nuova password per posta elettronica nel caso in cui si fossero dimenticati.


Il fatto che MD5 sia rotto (per usi specifici ma importanti della funzione) non ha assolutamente nulla a che fare con le tabelle arcobaleno (che è ciò a cui accenni quando si parla di precomputazione degli hash).
Maarten Bodewes,

1

L'algoritmo MD5 Hash non è reversibile, quindi la decodifica MD5 non è possibile, ma alcuni siti Web hanno una serie di corrispondenze di password di massa, quindi puoi provare online per decodificare l'hash MD5.

Prova online:

MD5 Decrypt

md5online

md5decrypter


Sì, ma questo è già coperto dalla domanda come nella frase "So che ci sono dizionari". Il solo fatto di indicare i dizionari non conta quindi come una risposta.
Maarten Bodewes,

1

In teoria non è possibile decrittografare un valore di hash ma ci sono alcune tecniche sporche per recuperare il testo normale originale.

  1. Bruteforcing : tutti gli algoritmi di sicurezza informatica subiscono il bruteforcing . Sulla base di questa idea, la GPU di oggi utilizza l'idea della programmazione parallela con la quale può recuperare il testo in chiaro aumentando in modo massiccio la forza usando qualsiasi processore grafico. Questo strumento hashcat fa questo lavoro. L'ultima volta che ho controllato la versione di Cuda , sono stato in grado di rinforzare un personaggio di 7 lettere in sei minuti.
  2. Ricerca su Internet : basta copiare e incollare l'hash su Google e vedere Se riesci a trovare il testo in chiaro corrispondente lì. Questa non è una soluzione quando stai pentendo qualcosa, ma sicuramente vale la pena provare. Alcuni siti Web mantengono l'hash per quasi tutte le parole del dizionario.

2
Gli attacchi del dizionario sono un altro modo, o il confronto con altri database per i quali si conoscono le password di input.
Maarten Bodewes,

1

No, non è possibile invertire una funzione di hash come MD5: dato il valore di hash di output è impossibile trovare il messaggio di input se non si conoscono abbastanza informazioni sul messaggio di input.

La decrittografia non è una funzione definita per una funzione hash; la crittografia e la decrittografia sono funzioni di un codice come AES in modalità CBC; le funzioni hash non crittografanodecodificano . Le funzioni hash sono utilizzate per digerire un messaggio di input. Come suggerisce il nome, non esiste un algoritmo inverso possibile in base alla progettazione .


MD5 è stato progettato come una funzione di hash unidirezionale crittograficamente sicura . Ora è facile generare collisioni per MD5, anche se gran parte del messaggio di input è predeterminato. Quindi MD5 è ufficialmente rotto e MD5 non dovrebbe più essere considerato un hash crittograficamente sicuro. È comunque ancora impossibile trovare un messaggio di input che porti a un valore di hash: trova X quando è noto solo H (X) (e X non ha una struttura pre-calcolata con almeno un blocco di 128 byte di dati precalcolati) . Non sono noti attacchi pre-immagine contro MD5.

In genere è anche possibile indovinare le password usando la forza bruta o gli attacchi (aumentati) del dizionario, confrontare i database o cercare gli hash delle password nelle cosiddette tabelle arcobaleno. Se viene trovata una corrispondenza, è computazionalmente certo che l'input è stato trovato. Le funzioni hash sono anche sicure contro gli attacchi di collisione: trovando X'così quello H(X') = H(X)dato H(X). Quindi, se Xviene trovato, è computazionalmente sicuro che fosse effettivamente il messaggio di input. Altrimenti dopo tutto avresti eseguito un attacco di collisione. Le tabelle Rainbow possono essere utilizzate per accelerare gli attacchi e ci sono risorse Internet specializzate che ti aiuteranno a trovare una password con un hash specifico.

È ovviamente possibile riutilizzare il valore hashH(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 Fche accetta H(X)come input. Quando Xviene dato al sistema, quindi H(X)e quindi Fpuò essere ricalcolato e i risultati possono essere confrontati. In altre parole, non è necessario decrittografare il valore hash per verificare solo che una password sia corretta e puoi comunque memorizzare l'hash come valore diverso.


Invece di MD5 è importante utilizzare un hash password o PBKDF (funzione di derivazione della chiave basata su password). Tale funzione specifica come utilizzare un sale insieme a un hash. In questo modo non verranno generati hash identici per password identiche (da altri utenti o all'interno di altri database). Gli hash delle password per questo motivo, inoltre, non consentono l'utilizzo di tabelle arcobaleno purché il sale sia abbastanza grande e opportunamente randomizzato.

Gli hash delle password contengono anche un fattore di lavoro (a volte configurato utilizzando un conteggio delle iterazioni ) che può rallentare in modo significativo gli attacchi che tentano di trovare la password in base al valore salt e hash. Questo è importante poiché il database con sali e valori di hash potrebbe essere rubato. Infine, l'hash della password può anche essere difficile da memoria, quindi è necessaria una quantità significativa di memoria per calcolare l'hash. Ciò rende impossibile utilizzare hardware speciale (GPU, ASIC, FPGA ecc.) Per consentire a un utente malintenzionato di accelerare la ricerca. Altri input o opzioni di configurazione come un peperone o la quantità di parallelizzazione possono anche essere disponibili per un hash della password.

Permetterà comunque a chiunque di verificare una password fornita 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 di hash stesso, allora Xpuò essere usato per calcolare H(X)e - ancora - i risultati possono essere confrontati.

Gli hash delle password comunemente usati sono bcrypt , scrypt e PBKDF2 . C'è anche Argon2 in varie forme, che è il vincitore della recente competizione di hashing password. Qui su CrackStation c'è un buon post sul blog sulla sicurezza delle password.


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


0

MD5 è una funzione hash crittografica (unidirezionale), quindi non esiste un modo diretto per decodificarla. L'intero scopo di una funzione hash crittografica è di non poterlo annullare.

Una cosa che puoi fare è una strategia di forza bruta, in cui indovina cosa è stato hash, quindi l'hash con la stessa funzione e vedi se corrisponde. A meno che i dati con hash non siano molto facili da indovinare, potrebbe richiedere molto tempo.


-1

Non è ancora possibile inserire un hash di una password in un algoritmo e riavere la password in testo semplice perché l'hash è una cosa a senso unico. Ma ciò che la gente ha fatto è generare hash e archiviarlo in una grande tabella in modo che quando si inserisce un hash particolare, controlla la tabella per la password che corrisponde all'hash e ti restituisce quella password. Un esempio di un sito che lo fa è http://www.md5online.org/ . Il moderno sistema di archiviazione password contrasta questo utilizzando un algoritmo di salting in modo tale che quando si immette la stessa password in una casella password durante la registrazione vengono generati hash diversi.


-1

No, non è possibile decrittografare / invertire md5 in quanto è una funzione hash unidirezionale fino a quando non è possibile trovare vulnerabilità estese in MD5. Un altro modo è che alcuni siti Web hanno una grande quantità di database di password, quindi puoi provare online a decodificare la tua stringa hash MD5 o SHA1. Ho provato un sito web come http://www.mycodemyway.com/encrypt-and-decrypt/md5 e funziona bene per me, ma questo dipende totalmente dal tuo hash se quell'hash è archiviato in quel database quindi puoi ottenere la stringa effettiva .


1
No, MD5 non è la crittografia, nemmeno la crittografia unidirezionale (che non ha senso in primo luogo).
Maarten Bodewes,

@MaartenBodewes Questo è il mio errore, non è una funzione di crittografia, è una funzione hash Grazie.
Rafi Ahmad,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.