Ci sono molti difetti di crittografia noti in MD5 che lo rendono inutilizzabile come algoritmo di digest del messaggio, ma non tutti si applicano anche nel contesto dell'hash della password. Ma anche quando supponiamo che questi non esistano, MD5 è ancora un algoritmo di hashing delle password errate per un semplice motivo: È troppo veloce .
In ogni scenario in cui un utente malintenzionato ha ottenuto le password con hash, devi presumere che abbiano ottenuto anche il sale di ciascuna password e il pepe.
L'unica ragione per usare un pepe è che non puoi usare una tabella arcobaleno precalcolata prima dell'attacco, perché ne hai bisogno di una diversa per ogni database. L'unica ragione per utilizzare un salt è quindi non è possibile utilizzare la stessa tabella arcobaleno per l'intero database delle password, perché la stessa password per due account diversi avrà un hash diverso.
La lunghezza di pepe e sale non ha importanza. Il loro unico scopo è assicurarsi che ogni valore sia unico. Più lunghezza non rende l'attacco notevolmente più difficile (ci sono più dati per l'hash, ma al massimo è un aumento lineare).
La linea di fondo è che un breve spazio è tutto ciò che è necessario per assicurarsi che l'attaccante abbia la forza bruta di forzare tutte le password possibili per trovare l'hash corretto per ogni singolo account.
Ed è qui che entra in gioco la debolezza di MD5: è un algoritmo veloce e che conserva la memoria. Ciò significa che un utente malintenzionato può calcolare l'hash di un numero elevato di password al secondo. Usando hardware specializzato (come gli array FPGA o ASIC) del valore di qualche migliaio di dollari, puoi calcolare gli hash di tutte le possibili password di 8 caratteri per un dato sale in poche ore.
Per maggiore sicurezza, usa un algoritmo lento come bcrypt. Significa che il tuo sistema ha bisogno di più cicli di CPU per autenticare gli utenti, ma il guadagno di solito vale la pena perché un hacker avrà anche bisogno di molto più potenza di elaborazione per forzare il tuo database delle password in caso di ottenerlo.