Diciamo che vuoi crackare le password che sono memorizzate come hash MD5 (questa è una tecnologia molto vecchia). Poiché la forza bruta richiede molto tempo e questa funzione è "non reversibile", l'attacco è la tabella di ricerca inversa.
L'idea è di creare una tabella che memorizzi ciò che inserisci come input e l'hash che genera. Dopo aver eseguito la tua routine con tutti gli input che ritieni siano validi, puoi attaccare il file della password con una tabella di ricerca inversa: navighi nel database sfogliando non con la password ma con quello che corrisponde a Hash.
Ricerca inversa quindi, semplicemente non sta guardando lo stesso input, ma per gli input che generano lo stesso output. Ad esempio:
input | Hash generated
admin | 21232f297a57a5a743894a0e4a801fc3
Invece di cercare la stringa admin
, nella tua tabella cercherai la stringa che corrisponde all'hash 21232f297a57a5a743894a0e4a801fc3
.
Per ulteriori dettagli, cerca le tabelle di Raibow nella wikipedia , penso che noterai che non sono esattamente il lo stesso, ma nell'articolo puoi trovare la differenza tra entrambi.
Quanto sacrifica il tempo di archiviazione?
L'idea è che avresti bisogno di un database completo con i dati come simile a quello sopra, e questo è l'archiviazione. Il tempo per query , è solo una ricerca B-tree (O (log n)) sul database, poiché la chiave potrebbe essere l'hash. Questo non significa che per generare il tavolo non passi il tempo. Significa solo che una volta che hai il database, puoi interrogarlo in un tempo molto breve.