Mi sono imbattuto in una discussione in cui ho appreso che quello che stavo facendo non era in realtà salare le password ma scrutarle, e da allora ho iniziato a fare entrambe le cose con una funzione come:
hash_function($salt.hash_function($pepper.$password)) [multiple iterations]
Ignorando l'algoritmo hash scelto (voglio che sia una discussione su sali e peperoni e non algoritmi specifici ma ne sto usando uno sicuro), è un'opzione sicura o dovrei fare qualcosa di diverso? Per coloro che non hanno familiarità con i termini:
Un salt è un valore generato casualmente di solito memorizzato con la stringa nel database progettato per rendere impossibile l'uso delle tabelle hash per decifrare le password. Poiché ogni password ha il suo sale, devono essere tutte forzate individualmente per decifrarle; tuttavia, poiché il salt è archiviato nel database con l'hash della password, un compromesso del database significa perdere entrambi.
Un pepe è un valore statico a livello di sito memorizzato separatamente dal database (di solito codificato nel codice sorgente dell'applicazione) che deve essere segreto. Viene utilizzato in modo tale che un compromesso del database non provochi la forzatura forzata dell'intera tabella delle password dell'applicazione.
C'è qualcosa che mi manca ed è la salatura e il peppering delle mie password l'opzione migliore per proteggere la sicurezza del mio utente? C'è qualche potenziale difetto di sicurezza nel farlo in questo modo?
Nota: ipotizzare ai fini della discussione che l'applicazione e il database siano archiviati su macchine separate, non condividano password ecc., Pertanto una violazione del server del database non implica automaticamente una violazione del server delle applicazioni.