Ciò che è ricercato prima di tutto è un algoritmo di hashing che è lento. I cracker incrinano gli hash delle password eseguendo dizionari di password e altre combinazioni di caratteri attraverso l'algoritmo hash per vedere se l'hash calcolato corrisponde a quello rubato da un database. Più è lento il processo, più sarà difficile "invertire" gli hash se vengono rubati.
Successivamente, ogni password richiede un "salt" casuale diverso concatenato con esso prima di calcolare l'hash. Il cracker che ottiene gli hash delle password sarà in grado di ottenere anche i sali, ma la presenza degli attacchi di precomputazione dei fogli di sale. Ogni hash deve essere attaccato separatamente.
Infine, dovresti prendere in considerazione l'utilizzo di una chiave segreta non archiviata in un database come componente dell'hash. Questo è talvolta chiamato "pepe" e il risultato è un hash con chiave. L'hacker che ottiene hash attraverso qualcosa come SQL injection non sarà in grado di craccarli perché è necessaria quella chiave segreta. (Naturalmente, l'attaccante che compromette il sistema operativo può ottenere tutto, ma è molto più difficile che compromettere un database.)
La domanda (e la risposta) annotate da Xander hanno una copertura completa: Come hash sicuro password? C'è un buon testo qui: link e qualche altro consiglio qui: link