A seconda degli algoritmi utilizzati potrebbe essere possibile calcolare quanto è vicina la password e questo porta ad attacchi di collisione che permettono di decifrare la password molto più velocemente della forza bruta.
Come ho capito è il caso di MD4 che può essere rotto in pochi millisecondi a causa di difetti del genere. Non ho analizzato l'exploit MD4, ma scommetto che c'è un'equazione di prossimità incorporata in esso.
Facciamo un esempio idiota: una funzione hash che è la somma dei codici ASCII della password. La password AB e BA avranno lo stesso hash 131. Se la vera password è AB, il sistema accetterà BA come vera password. Un po 'di reverse engineering mostrerà una relazione: a) cambiando una qualsiasi lettera a quella successiva ne aggiungerai una nell'hash; b) aggiungendo una nuova A alla password aggiunge 65 all'hash. E poi il crack è pronto. La password restituita dal crack potrebbe non essere la stessa utilizzata dall'utente, ma il sistema non conoscerà la differenza.
Sì, l'obiettivo di un algoritmo di hash crittografico è di impedirlo. Dovrebbe essere imprevedibile e quindi richiedere la forza bruta. Ma non sempre funziona come previsto. La matematica è imperdonabile.
EDIT: MD4, MD5 e SHA1 sono ormai obsoleti a causa di questi tipi di attacchi. Sono nati nuovi algoritmi per evitare tali vulnerabilità. E il controllo della password fa un po 'più di un semplice hashing. L'adozione di nuovi algoritmi non è veloce come vogliamo. Per Linux costantemente aggiornato, le password di base dovrebbero utilizzare algoritmi moderni. Ma scommetto che ci sono molti sistemi in tutto il mondo che eseguono software di più di 10 anni perché la nuova versione del sistema operativo potrebbe non essere compatibile con le vecchie applicazioni o semplice dai costi della licenza se viene utilizzato un software a pagamento. Scommetto che molti software che hanno il proprio database delle password separato dal sistema hanno una sicurezza debole.