(Il riepilogo è nell'ultimo paragrafo.)
How long will it take to crack 1 password? Is the time to crack 1 billion, just 1e9 * t
?
Immagina di avere questo algoritmo di hashing:
function hash(password):
hash = 0
foreach character in password:
hash = hash + toNumber(character)
return hash
Se chiami hash("ab")
potrebbe restituire 3, poiché il valore numerico del primo carattere potrebbe essere 1 e il secondo potrebbe essere 2, e li aggiunge, risultando in 3.
Ora, se disponi di un database pieno di numeri, come 583, 140, 8582, ecc., quanto tempo impiegherebbe a craccare?
In questo esempio, hash("ab")
risulterebbe in 3 e hash("ba")
, che è chiamata collisione (due input che associano allo stesso output). In MD5 questo non accade così facilmente. L'ordine conta e non è possibile ricavare alcuna informazione sull'input dato l'output. Neanche la lunghezza.
Quindi devi ricorrere a provare tutte le possibilità finché non ne trovi una che ti dia l'output giusto. Se qualcuno ha una password strong e casuale di 20 caratteri, potrebbero volerci secoli. Ma la maggior parte delle persone usa password come "horselover49", "letmein" o "penis" (anche se quest'ultimo potrebbe essere troppo corto), che sono molto più facili da decifrare.
Il motivo per cui tutti si lamentano dell'utilizzo di md5 è perché è veloce. Ma gli algoritmi di hashing sono fatti per essere veloci . MD5 potrebbe essere danneggiato per altri scopi, ma non per l'hashing della password. Non dovresti usare un singolo passaggio di qualsiasi algoritmo di hashing, sia esso md5 o sha1 o sha512.
Migliori algoritmi, come bcrypt / scrypt / pbkdf2 / etc. usa un algoritmo di hashing un milione di volte (tra le altre cose). Ora invece di essere in grado di eseguire l'algoritmo una volta per ogni ipotesi, è necessario eseguirlo un milione di volte per ogni ipotesi. Ciò richiede molto più tempo, permettendoti di provare meno password, che protegge meglio le password deboli.
Quindi sì, lo stesso succederà come con altre violazioni che hanno usato MD5: molte password saranno incrinate. Ma non faranno tutti crackizzati e sicuramente non in tempo lineare. I più forti impiegheranno in modo esponenziale più tempo.