La mia comprensione dell'hash è al massimo concettuale e sto assumendo cose di cui non sono sicuro e mi porta a una domanda che non so nemmeno se sia stata fondata o meno. Quindi, per favore correggi le mie affermazioni qui sotto se qualcosa non va.
L'hash per una data stringa ha una lunghezza definita e c'è un numero infinito di stringa originale che può dare lo stesso hash. Un esempio di funzione di hashing che ho sentito sarebbe il modulo 5. Quindi se un utente ha una password che è 6, allora 11, 16, 21 e così via registrerà anche l'utente.
Sono supponendo (probabilmente sbagliato però) che praticamente le stringhe che danno lo stesso hash saranno davvero molto distanti. Dì che la password originale è:
hunter2
La "seconda" stringa che cadrebbe in questo bucket sarebbe un po 'più lunga dell'entropia dell'hash stesso. Qualcosa come:
LKjsd!sqdJhjsd44qsd5qd5823!é"jsdfhd=qksjdkqsjdkqsjdkquy!erqsdqsdqq
Quindi è poco pratico che le collisioni non contino davvero, dal momento che nessuno userebbe una password come la seconda e non parliamo nemmeno delle terze collisioni.
Quindi la mia domanda è:
Se l'hash può essere visto come modulo 5, cosa impedisce a qualcuno di dire che se il valore in DB è 1 allora il valore più probabile è 6 poiché 11, 16, ecc. sono poco pratici?