John the Ripper funziona provando le password possibili, molto rapidamente. Non sempre interrompe una cripta basata su DES, o almeno non facilmente.
Con la funzione di hashing basata su DES, le password possono contenere fino a 8 caratteri e solo 7 bit vengono utilizzati per ogni carattere (il bit superiore viene ignorato). Considerando che la password è stata digitata ad un certo punto da un utente su una tastiera, si può supporre che ci siano 95 valori possibili per ogni carattere (caratteri ASCII dallo spazio [32] a tilde [127]), quindi 6704780954517121 potenziali password (che è 1 + 95 + 95 2 + 95 3 + ... + 95 8 ). È abbastanza; l'enumerazione di tutte le possibilità su un PC richiederà almeno alcune settimane. Ma è ancora tecnologicamente fattibile.
DES è una funzione di crittografia, ma la crypt basata su DES è non DES; la funzione interna è alterata (dal sale, cioè), eseguita 25 volte e, cosa più importante, i ruoli della chiave e il messaggio vengono scambiati. Il risultato finale è che il nome "crypt" è improprio (anche se tradizionale): questa non è più una funzione di crittografia ; dovrebbe essere chiamato "hash basato su DES ". Ciò significa che potrebbero esserci (e infatti ci sono) due password distinte che hanno lo stesso valore (anche se usano lo stesso sale). Ad esempio, questo post del blog mostra che con il sale " hi
", entrambi " cqjmide
" e " ifpqgio
" hash allo stesso valore " hiH9IOyyrrl4k
" (il post del blog afferma che questa è la prima collisione pubblicamente conosciuta, che mostra quanto il problema sia interessante poiché non è difficile: questi sono valori a 64-bit, quindi il costo di trovare una collisione è di circa 2 32 invocazioni di crypt()
; che la prima collisione pubblicata è comparsa solo alla fine del 2010 prova che nessuno ha mai provato prima) .
(Nota: contrariamente a quanto afferma il post del blog, la possibilità di trovare collisioni non ha alcuna influenza sulla sicurezza del sistema di hashing delle password. L'hash basato su DES non dovrebbe più essere utilizzato più a causa della facilità di produzione tali collisioni, ma perché ha spazi di input e output troppo piccoli ed è troppo veloce.)
Di conseguenza, dal solo sale e hash, non c'è modo di individuare la "password", perché le informazioni non sono lì. Tramite l'enumerazione di tutte le password possibili, è possibile creare l'elenco delle password corrispondenti, ma non è possibile stabilire quale sia l'utente a cui si è pensato. Tuttavia, e questo è il punto importante qui, la macchina che usa il risultato dell'hash basato su DES in un sistema di verifica della password non può dire: qualsiasi password che corrisponde al valore di hash e di sale è una buona password , reale come qualsiasi altro. Se il sale e l'hash sono " hiH9IOyyrrl4k
", sono accettati sia " cqjmide
" sia " ifpqgio
": anche se pensavi che la tua password fosse "cqjmide", posso ancora accedere sotto il tuo nome usando " ifpqgio "come password.
Nota, tuttavia, che la stragrande maggioranza dei possibili valori hash hanno una sola password corrispondente, quindi la ricerca esauriente troverà quella password e nessun altra.
Su una nota simile, poiché vengono utilizzati solo i primi otto caratteri, è possibile avere una password lunga 40 caratteri, dalla quale gli ultimi 32 caratteri saranno totalmente ignorati dall'hash basato su DES. Non c'è modo di recuperarli dal valore hash poiché vengono semplicemente eliminati e non hanno alcuna influenza sull'hash calcolato.