MD5 è una funzione molto usata per calcolare gli hash.
I principianti spesso lo usano per password hashing, che non è una buona idea perché ci sono molti modi per recuperare la password originale.
Questo articolo descrive metodi specifici per farlo.
Tutta la sicurezza è costruita sul fatto che ci vuole un tempo sproporzionatamente lungo per provare tutte le password. Beh, dovrebbe. Il problema con l'algoritmo md5()
in particolare è che è una funzione molto veloce. Su un computer normale, non è un problema calcolare più di un milione di hash al secondo.
Se rompiamo la password provando le combinazioni una per una, si tratta di un attacco di forza bruta.
Ci sono diverse strategie:
Ci sono molti altri metodi, questo articolo descrive solo i più comuni.
Tutte le combinazioni di lettere, numeri e altri caratteri vengono provate una alla volta.
I tentativi generati sono sottoposti a un hash uno per uno e confrontati con l'hash originale.
Così, per esempio:
aaaaaaabaaacaaadaaaeaaaf...
Il problema con questo attacco è nell'algoritmo md5()
stesso, se dovessimo provare solo le lettere minuscole dell'alfabeto inglese e i numeri, ci vorrebbero al massimo decine di minuti per provare tutte le combinazioni su un computer comunemente disponibile.
È quindi importante scegliere password lunghe, preferibilmente casuali e con caratteri speciali.
La gente di solito sceglie password deboli che esistono nel dizionario.
Se approfittiamo di questo fatto, possiamo scartare rapidamente varianti improbabili come 6w1SCq5cs
e indovinare invece le parole esistenti.
Inoltre, sappiamo da precedenti fughe di password di grandi aziende che gli utenti scelgono una lettera maiuscola all'inizio della password e un numero alla fine. Vediamo - la tua password ha anche questo? :)
Poiché una password corrisponde sempre allo stesso hash, si può facilmente ricalcolare un enorme database in cui le password saranno cercate per prime.
Infatti, la ricerca è sempre ordini di grandezza più veloce della ricerca di hash più e più volte.
Inoltre, per fughe di dati più grandi, le password possono essere hashate in parallelo in questo modo e, per esempio, il 10% di tutte le password degli utenti può essere recuperato rapidamente.
Un buon database di password è per esempio Crack Station.
Molte password semplici sono conosciute direttamente da Google perché indicizza le pagine che contengono hash.
Uso sempre Google come prima opzione. :)
Il principio di Dirichlet descrive che se abbiamo un insieme di hash che sono sempre lunghi 32 caratteri, allora ci sono almeno 2 password diverse di 33 caratteri (una più lunga) che generano lo stesso hash.
In pratica, non ha senso cercare le collisioni, ma a volte l'autore stesso dell'applicazione facilita l'indovinello ricalcolando le collisioni.
Per esempio:
$password = 'password';for ($i = 0; $i <= 1000; $i++) {$password = md5($password);}echo $password; // 1000x hash tramite md5()
In questo caso, ha senso indovinare la collisione piuttosto che l'hash originale.
Salute all'imbastitura!
Jan Barášek Více o autorovi
Autor článku pracuje jako seniorní vývojář a software architekt v Praze. Navrhuje a spravuje velké webové aplikace, které znáte a používáte. Od roku 2009 nabral bohaté zkušenosti, které tímto webem předává dál.
Rád vám pomůžu:
Články píše Jan Barášek © 2009-2024 | Kontakt | Mapa webu
Status | Aktualizováno: ... | it