Ciò di cui stai parlando è noto come principio del pigeonhole - se hai n possibili password e una funzione di hash con m possibili output, dove n > m , ci saranno sempre alcuni valori di input che producono gli stessi hash di output.
La domanda diventa quindi: importa? Con uno spazio di output hash di 2 160 valori possibili, una collisione accidentale ha una probabilità di circa 6.842 × 10 -49 . Non molto Ciò diventa più interessante quando si esaminano gli attacchi di compleanno , perché le probabilità diventano molto più elevate, ma è ancora generalmente considerata impossibile da trovare Collisioni a 160 bit che utilizzano metodi naive come brute-force.
In realtà, è più probabile che un attaccante intelligente si concentri sulle vulnerabilità all'interno della funzione hash che riducono il calcolo necessario per trovare una collisione. Ma, nell'arena della memorizzazione delle password, questo dovrebbe essere per lo più discutibile - le password sono facili da decifrare se le si esegue solo con SHA1, perché le GPU possono eseguire la forza bruta ad una velocità di miliardi di hash al secondo a causa della loro natura massicciamente parallela.
Se si desidera memorizzare le password in modo sicuro, non utilizzare un hash. Utilizza un algoritmo di derivazione chiave progettato per l'archiviazione di password, come PBKDF2 o bcrypt . Dovresti anche dare un'occhiata a una risposta correlata Ho scritto sugli hash salati, che va nella storia di come siamo passati dagli hash, agli hash salati, ai moderni KDF e alle motivazioni dietro ogni passo di difesa e attacco.