La mia risposta sarà diversa da chiunque altro. Tom Leek e Xander hanno fornito una buona intuizione, quindi ecco la mia risposta alla tua domanda iniziale, espandendo da questo tuo commento:
"I don't want to store the salt in a database that could be
compromised - that defeats the purpose of salting, doesn't it?"
Sì e no. Se qualcuno ha compromesso il tuo database, hai cose più grandi di cui preoccuparti. Il solo fatto che siano arrivati così lontano apre il potenziale per lo sniffing sul filo, dove se non viene utilizzata la crittografia, i dati sono visibili prima di essere crittografati e inseriti in un database.
I sali proteggono perché aggiungono uno strato per contrastare le fessurazioni. Un cracker ha bisogno di hash una password E un sale per produrre qualcosa da confrontare con un hash noto per trovare la password giusta. La maggior parte dei cambiamenti salanti, altrimenti se ciò accadesse, la salatura sarebbe inutile:
User1 (password) [ kitten + your_static_salt = thundercat ]
User2 (password) [ kitten + your_static_salt = thundercat ]
Nelle precedenti fasi teatrali, due utenti hanno scelto la parola "gattino" come password che viene salata per produrre il risultato di "thundercat". Se ciò è vero, la porzione salata è in qualche modo inutile. Se stai usando password_hash da PHP, il sale viene generato casualmente per te, il risultato sarebbe il seguente (ovviamente ridotto a icona per chiarezza):
User1 (password) [ kitten + password_hash = thundercat ]
User2 (password) [ kitten + password_hash = uppercut ]
In quanto sopra, vediamo la stessa password, PHP's password_hash cambia il salt ogni volta. Non c'è bisogno di reinventare nessuna ruota qui, perché è necessario fare alcune immersioni profonde in crypt () per capirlo. Se sei veramente che riguarda la salatura e la sicurezza della password, dai un'occhiata a Phpass di Solar Designer Tuttavia, quando dichiari di essere preoccupato per qualcuno che comprometta il db stesso, questo cambia la portata di ciò che un utente malintenzionato potrebbe fare senza nemmeno dover decifrare le password per cominciare.