I know that MD5 is the most vulnerable hashing algorithm
Bene tecnicamente (siamo tecnici qui intorno) ci sono algoritmi peggiori di MD5.
and particularly vulnerable to Collisions
Sì, la gente può creare un hash desiderato con un testo in chiaro diverso. È improbabile che ciò avvenga in modo casuale, ma potrebbe verificarsi maliziosamente.
But the collision vulnerability is not very risky and somebody might use that as an advantage, but that's with sheer luck.
Non pura fortuna. Esistono tecniche per trovare un testo in chiaro che produce un MD5 desiderato. È un buon argomento per una domanda diversa.
OK, let's say I store passwords using MD5.
Ouch. Il motivo principale per cui non devi utilizzare MD5 è perché è un hash Scopo generale (veloce) .
Dovresti utilizzare un hash della password (lento) come
-
BCrypt è comunemente raccomandato , ma assicurati di eseguire un rapido hash SHA-2 sui dati di input, in modo che le password super-lunghe non vengano troncate da BCrypt
- PBKDF2 ma è meno resistente alla GPU perché ha requisiti di memoria inferiori.
- SCrypt è migliore di BCrypt se hai un fattore di lavoro abbastanza alto. Altrimenti è peggio contro le GPU. (ancora, a causa di requisiti di memoria più alti o più bassi)
- Il vincitore del Concorso di hashing password potrebbe essere persino migliore di quanto sopra, ma non ha ancora superato la prova del tempo, quindi non usarlo ancora. Si chiama Argon2 e ha impostazioni del fattore di lavoro separate per il tempo della CPU e il carico della memoria. (Bello!)
- È possibile utilizzare SHA-2 ripetitivo al posto di PBKDF2 (non ancora resistente alla GPU), ma è più difficile implementare la ripetizione in modo efficiente (ovvero essere resistente alla forza bruta) poiché SHA-2 è in realtà uno Scopo generale (Veloce ) Hash.
La maggior parte di queste opzioni genera Salt casuale per impostazione predefinita, ma è necessario verificare se questo è il caso!
È meglio includere un po 'di pepe (~ 72 bit di entropia) prima della password prima dell'hashing. Il Pepper può essere uguale per tutti gli utenti, ma deve essere memorizzato in un file al di fuori del database, in modo che il componente non possa essere trovato tramite SQL Injection.
Assicurati che il tuo fattore di lavoro richieda circa 100 ms (con protezione DoS appropriata) sull'hardware di destinazione (sapendo che gli hacker useranno hardware più veloce per la forza bruta)
Ovviamente nessuna quantità di hashing proteggerà il% debole dipassword
s, quindi includi i requisiti di forza della password.
collision vulnerability ... is there any way that the attacker can use this as an advantage?
Nel contesto della memorizzazione delle hash delle password questo probabilmente non aiuterà l'aggressore.