Un salt è un valore che viene aggiunto a una password (o altro segreto) di cui si desidera eseguire l'hashing in un modo. Ciò significa che potrebbe trovarsi prima, dopo o da qualche parte all'interno della password, purché la sua posizione e il suo valore siano coerenti per una determinata password fornita.
Ciò che fa è mitigare gli attacchi del dizionario - fondamentalmente dizionari di password comuni pre-hashing senza sale - dall'essere usati per "indovinare" una password unidirezionale fintanto che l'attaccante non conosce l'hash. Se ogni password ha un hash diverso, allora è molto difficile per un utente malintenzionato creare un dizionario ottimizzato per decifrare le tue password (avrebbero bisogno di un dizionario per ogni salt separato e avrebbero anche bisogno di sapere dove è stato inserito il salt in ogni password ).
Ovviamente, affinché tutto ciò sia applicabile, un utente malintenzionato deve avere in primo luogo gli hash delle tue password. Questo non ha nulla a che fare con l'attacco alle password indovinandole tramite qualche prompt di input.
Per quanto riguarda MySQL in particolare, se fornisci un salt durante l'hashing di una password, assicurati di registrare quale fosse quel salt da qualche parte. Quindi, quando un utente tenta l'autenticazione, combini quel valore salt registrato con la password (durante la chiamata a crypt
per esempio) e se l'hash risultante corrisponde, allora hanno inserito la password corretta. (Si noti che in nessun momento l'hashing di una password viene annullato; quindi in un modo.)