Per qualsiasi funzione di hash decente a metà, anche hash che sono completamente inadatti per la crittografia, se cerchi le collisioni con la forza bruta, non importa come esplori lo spazio di ricerca. Mantenere un prefisso fisso e cambiare il suffisso, o mantenere un suffisso fisso e cambiare il prefisso, sono buoni come qualsiasi altro metodo. Questo perché tutte le funzioni di hash sono progettate per produrre risultati distinti per input simili.
Se ci sono N possibili valori di hash, devi calcolare e memorizzare circa √ N hash finché non hai una buona possibilità di trovare una collisione (il compleanno limitato ). Per un hash a 32 bit come usato nelle tabelle hash, N = 2 32 così √N = 2 16 che viene raggiunto molto rapidamente. Per un hash a 128 bit come gli hash crittografici più vecchi, √N = 2 64 . Una GPU in questi giorni può calcolare qualcosa come 2 34 (16 miliardi) hash MD5 al secondo, il che significa che calcola 2 hash 64 in circa 2 30 secondi ≈ 34 anni).
Ma non è tutto: per trovare una collisione, è necessario memorizzare il risultato di tutti questi calcoli, quindi il fattore limitante sarà la larghezza di banda della memoria. E una volta che la RAM si riempie, questa sarà la larghezza di banda della memoria. Non troverai una collisione in un hash a 128 bit nella tua vita.
Hashcat è progettato per trovare le pre-immagini di hash, non per cercare le collisioni. Hashcat è progettato per invertire gli hash delle password (e gli hash ordinari che vengono utilizzati in modo improprio per le password) e le collisioni non sono rilevanti per questo. Ma anche con uno strumento ottimizzato, quello che stai cercando di fare non è fattibile per qualsiasi hash di crittografia.
Se vuoi trovare una collisione per un hash a 128 bit, devi capirne la struttura. Esistono metodi noti per trovare le collisioni per MD4 e MD5 , ad esempio. Questi metodi sono pratici perché non usano la forza bruta su tutto lo spazio di ricerca.
A proposito, stai chiamando gli hash input "password", ma password gli hash sono diversi dagli hash crittografici "ordinari" . Sono più lenti e salati. L'uso di un salt casuale significa che con un hash della password, non si ottiene lo stesso output due volte, nemmeno se si utilizza la stessa password due volte.